@sigmela/router 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/pageScrollLock.ts","../src/components/sheetDragEngine.ts","../src/components/SheetSurface.tsx","../src/components/RouterCloseButton.tsx","../src/components/OverlayContentScope.tsx","../src/components/Modal.tsx","../src/components/Sheet.tsx","../src/navigationHistory.ts","../src/utils/id.ts","../src/Router.tsx"],"names":["useEffect","jsx","jsxs","createContext","useContext","useCallback","swipeTarget","options","useMemo","useState","scrollElement","useLayoutEffect","Fragment","browserNavigate","compiledChildren","useRef","WouterRouter","FrozenStackEntry","FrozenModalRouteEntry","FrozenModalCompiledRouteEntry","RouterModalEntryHost","useWouterSearch","useBrowserHistoryState","useWouterRouter","match","flowScreens","replace"],"mappings":"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","file":"index.js","sourcesContent":["import { useEffect } from 'react';\nimport { disableScroll, enableScroll } from '@fluejs/noscroll';\n\nlet pageScrollLockCount = 0;\n\nexport function getPageScrollElement(): HTMLElement | null {\n return (\n document.querySelector<HTMLElement>(\n '.screen-stack > .screen-stack-item.phase-active > .stack-screen-container',\n ) ?? document.getElementById('root')\n );\n}\n\nexport function usePageScrollLock(active: boolean) {\n useEffect(() => {\n if (!active) return;\n\n const scrollEl = getPageScrollElement();\n if (!scrollEl) return;\n\n pageScrollLockCount += 1;\n if (pageScrollLockCount === 1) {\n disableScroll(scrollEl);\n }\n\n return () => {\n pageScrollLockCount = Math.max(0, pageScrollLockCount - 1);\n if (pageScrollLockCount === 0) {\n enableScroll(scrollEl);\n }\n };\n }, [active]);\n}\n","import { useEffect, type RefObject } from 'react';\n\nexport const SHEET_DRAG_EPS = 0.5;\nexport const SHEET_DRAG_START_DISTANCE = 2;\n\nexport interface SheetDragUpdate {\n clientY: number;\n deltaY: number;\n totalY: number;\n velocityY: number;\n event: TouchEvent | PointerEvent;\n}\n\ninterface SheetDragEngineOptions<T extends HTMLElement> {\n targetRef: RefObject<T | null>;\n enabled: boolean;\n minDragDistance?: number;\n ignoreStartTarget?: (target: EventTarget | null) => boolean;\n shouldStart: (update: SheetDragUpdate) => boolean;\n onStart: (update: SheetDragUpdate) => void;\n onMove: (update: SheetDragUpdate) => void;\n onEnd: (update: SheetDragUpdate) => void;\n suppressClickOnDrag?: boolean;\n}\n\nexport function sheetScrollAtTop(el: HTMLElement | null): boolean {\n return !el || el.scrollTop <= SHEET_DRAG_EPS;\n}\n\nexport function sheetDragStartsInInteractiveControl(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n return Boolean(\n target.closest(\n 'button,a,input,textarea,select,[role=\"button\"],[data-sheet-drag-ignore=\"true\"]',\n ),\n );\n}\n\nexport function sheetDragStartsInTextInput(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n return Boolean(\n target.closest(\n 'input,textarea,select,[contenteditable=\"true\"],[data-sheet-drag-ignore=\"true\"]',\n ),\n );\n}\n\nexport function useSheetDragEngine<T extends HTMLElement = HTMLElement>({\n targetRef,\n enabled,\n minDragDistance = SHEET_DRAG_START_DISTANCE,\n ignoreStartTarget,\n shouldStart,\n onStart,\n onMove,\n onEnd,\n suppressClickOnDrag = false,\n}: SheetDragEngineOptions<T>) {\n useEffect(() => {\n if (!enabled) return;\n const target = targetRef.current;\n if (!target) return;\n\n const drag = {\n active: false,\n tracking: false,\n pointerId: -1,\n startY: 0,\n lastY: 0,\n lastT: 0,\n velocityY: 0,\n lastClientY: 0,\n lastTotalY: 0,\n };\n let suppressNextClick = false;\n let clearSuppressClickTimer = 0;\n\n const clearSuppressNextClick = () => {\n suppressNextClick = false;\n if (clearSuppressClickTimer) {\n window.clearTimeout(clearSuppressClickTimer);\n clearSuppressClickTimer = 0;\n }\n };\n\n const scheduleSuppressClickClear = () => {\n if (!suppressClickOnDrag) return;\n if (clearSuppressClickTimer) window.clearTimeout(clearSuppressClickTimer);\n clearSuppressClickTimer = window.setTimeout(() => {\n suppressNextClick = false;\n clearSuppressClickTimer = 0;\n }, 350);\n };\n\n const beginTracking = (clientY: number) => {\n drag.active = false;\n drag.tracking = true;\n drag.pointerId = -1;\n drag.startY = clientY;\n drag.lastY = clientY;\n drag.lastT = performance.now();\n drag.velocityY = 0;\n drag.lastClientY = clientY;\n drag.lastTotalY = 0;\n };\n\n const resetTracking = () => {\n drag.active = false;\n drag.tracking = false;\n drag.pointerId = -1;\n drag.velocityY = 0;\n drag.lastTotalY = 0;\n };\n\n const makeUpdate = (\n clientY: number,\n event: TouchEvent | PointerEvent,\n now: number,\n ): SheetDragUpdate => {\n const deltaY = clientY - drag.lastY;\n const totalY = clientY - drag.startY;\n const dt = Math.max(1, now - drag.lastT);\n const velocityY = (deltaY / dt) * 1000;\n return { clientY, deltaY, totalY, velocityY, event };\n };\n\n const updateTracking = (clientY: number, event: TouchEvent | PointerEvent) => {\n if (!drag.tracking) return;\n const now = performance.now();\n const update = makeUpdate(clientY, event, now);\n drag.lastClientY = clientY;\n drag.lastTotalY = update.totalY;\n\n if (!drag.active) {\n if (Math.abs(update.totalY) <= minDragDistance) {\n drag.lastY = clientY;\n drag.lastT = now;\n return;\n }\n if (!shouldStart(update)) {\n drag.lastY = clientY;\n drag.lastT = now;\n return;\n }\n\n drag.active = true;\n if (suppressClickOnDrag) suppressNextClick = true;\n if (event instanceof PointerEvent) {\n try {\n target.setPointerCapture(event.pointerId);\n } catch {\n // Pointer capture is best-effort; movement still works while the pointer stays over target.\n }\n }\n onStart(update);\n }\n\n if (event.cancelable) event.preventDefault();\n drag.velocityY = update.velocityY;\n onMove(update);\n drag.lastY = clientY;\n drag.lastT = now;\n };\n\n const finishTracking = (event: TouchEvent | PointerEvent) => {\n if (!drag.tracking) return;\n const now = performance.now();\n const update = makeUpdate(drag.lastClientY, event, now);\n const wasActive = drag.active;\n if (event instanceof PointerEvent) {\n try {\n target.releasePointerCapture(event.pointerId);\n } catch {\n // See setPointerCapture fallback above.\n }\n }\n const velocityY = drag.velocityY || update.velocityY;\n resetTracking();\n if (!wasActive) return;\n if (event.cancelable) event.preventDefault();\n scheduleSuppressClickClear();\n onEnd({ ...update, velocityY });\n };\n\n const onTouchStart = (event: TouchEvent) => {\n if (event.touches.length !== 1 || ignoreStartTarget?.(event.target)) {\n resetTracking();\n return;\n }\n beginTracking(event.touches[0]?.clientY ?? 0);\n };\n\n const onTouchMove = (event: TouchEvent) => {\n if (event.touches.length !== 1) return;\n updateTracking(event.touches[0]?.clientY ?? drag.lastY, event);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (\n event.pointerType === 'touch' ||\n !event.isPrimary ||\n event.button !== 0 ||\n ignoreStartTarget?.(event.target)\n ) {\n resetTracking();\n return;\n }\n beginTracking(event.clientY);\n drag.pointerId = event.pointerId;\n };\n\n const onPointerMove = (event: PointerEvent) => {\n if (!drag.tracking || drag.pointerId !== event.pointerId) return;\n updateTracking(event.clientY, event);\n };\n\n const onPointerEnd = (event: PointerEvent) => {\n if (!drag.tracking || drag.pointerId !== event.pointerId) return;\n finishTracking(event);\n };\n\n const onClickCapture = (event: MouseEvent) => {\n if (!suppressNextClick) return;\n clearSuppressNextClick();\n event.preventDefault();\n event.stopPropagation();\n };\n\n target.addEventListener('touchstart', onTouchStart, { passive: true });\n target.addEventListener('touchmove', onTouchMove, { passive: false });\n target.addEventListener('touchend', finishTracking, { passive: false });\n target.addEventListener('touchcancel', finishTracking, { passive: false });\n target.addEventListener('pointerdown', onPointerDown);\n target.addEventListener('pointermove', onPointerMove, { passive: false });\n target.addEventListener('pointerup', onPointerEnd);\n target.addEventListener('pointercancel', onPointerEnd);\n if (suppressClickOnDrag) target.addEventListener('click', onClickCapture, true);\n\n return () => {\n target.removeEventListener('touchstart', onTouchStart);\n target.removeEventListener('touchmove', onTouchMove);\n target.removeEventListener('touchend', finishTracking);\n target.removeEventListener('touchcancel', finishTracking);\n target.removeEventListener('pointerdown', onPointerDown);\n target.removeEventListener('pointermove', onPointerMove);\n target.removeEventListener('pointerup', onPointerEnd);\n target.removeEventListener('pointercancel', onPointerEnd);\n if (suppressClickOnDrag) target.removeEventListener('click', onClickCapture, true);\n if (clearSuppressClickTimer) window.clearTimeout(clearSuppressClickTimer);\n };\n }, [\n enabled,\n ignoreStartTarget,\n minDragDistance,\n onEnd,\n onMove,\n onStart,\n shouldStart,\n suppressClickOnDrag,\n targetRef,\n ]);\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { animate, motion, useMotionValue } from 'motion/react';\nimport { usePageScrollLock } from './pageScrollLock';\nimport {\n sheetDragStartsInTextInput,\n sheetScrollAtTop,\n useSheetDragEngine,\n type SheetDragUpdate,\n} from './sheetDragEngine';\nimport type { RouterShellMode } from '../types';\n\nconst SHEET_SPRING = { type: 'spring', bounce: 0, duration: 0.38 } as const;\nconst CLOSE_DISTANCE = 112;\nconst CLOSE_VELOCITY = 850;\nconst DRAG_START_DISTANCE = 6;\nconst PROJECT_VELOCITY_FACTOR = 0.18;\n\nexport type SheetSurfaceMode = 'content' | 'fullscreen';\nexport type SheetSurfaceCloseTarget = 'surface' | 'viewport';\n\ninterface SheetSurfaceProps {\n children: ReactNode;\n open: boolean;\n onRequestClose: () => void;\n onExitComplete: () => void;\n zIndex: number;\n mode: SheetSurfaceMode;\n canDismiss?: boolean;\n swipeToClose?: boolean;\n backdrop?: boolean;\n backdropClassName?: string;\n backdropStyle?: CSSProperties;\n shellClassName?: string;\n surfaceClassName: string;\n surfaceStyle?: CSSProperties;\n scrollElement?: HTMLElement | null;\n ariaLabel?: string;\n shell?: RouterShellMode;\n closeTarget?: SheetSurfaceCloseTarget;\n}\n\nfunction closeTargetY(surface: HTMLElement | null, target: SheetSurfaceCloseTarget): number {\n if (target === 'viewport') return window.innerHeight + 32;\n return (surface?.getBoundingClientRect().height || window.innerHeight) + 32;\n}\n\nexport function SheetSurface({\n children,\n open,\n onRequestClose,\n onExitComplete,\n zIndex,\n mode,\n canDismiss = true,\n swipeToClose = true,\n backdrop = false,\n backdropClassName,\n backdropStyle,\n shellClassName,\n surfaceClassName,\n surfaceStyle,\n scrollElement,\n ariaLabel,\n shell = 'mobile-contained',\n closeTarget = 'surface',\n}: SheetSurfaceProps) {\n const surfaceRef = useRef<HTMLDivElement | null>(null);\n const removeRef = useRef(onExitComplete);\n const requestCloseRef = useRef(onRequestClose);\n const closingOffsetRef = useRef(0);\n const closingRef = useRef(false);\n const y = useMotionValue(window.innerHeight);\n\n removeRef.current = onExitComplete;\n requestCloseRef.current = onRequestClose;\n\n usePageScrollLock(true);\n\n const requestClose = useCallback(\n (offset = 0) => {\n if (!canDismiss || closingRef.current) return;\n closingOffsetRef.current = offset;\n requestCloseRef.current();\n },\n [canDismiss],\n );\n\n const closeWithAnimation = useCallback(\n (offset = 0) => {\n if (closingRef.current) return;\n closingRef.current = true;\n const target = closeTargetY(surfaceRef.current, closeTarget);\n y.stop();\n y.set(Math.max(0, offset));\n const controls = animate(y, target, SHEET_SPRING);\n void controls.finished.then(\n () => {\n removeRef.current();\n },\n () => {\n closingRef.current = false;\n },\n );\n },\n [closeTarget, y],\n );\n\n useEffect(() => {\n if (!open) {\n closeWithAnimation(closingOffsetRef.current);\n return;\n }\n y.set(window.innerHeight);\n const controls = animate(y, 0, SHEET_SPRING);\n return () => controls.stop();\n }, [closeWithAnimation, open, y]);\n\n useEffect(() => {\n if (!canDismiss) return;\n const handler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') requestClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [canDismiss, requestClose]);\n\n const shouldStartDrag = useCallback(\n (update: SheetDragUpdate) => update.totalY > 0 && sheetScrollAtTop(scrollElement ?? null),\n [scrollElement],\n );\n\n const handleDragStart = useCallback(() => {\n y.stop();\n }, [y]);\n\n const handleDragMove = useCallback(\n (update: SheetDragUpdate) => {\n y.set(Math.max(0, y.get() + update.deltaY));\n },\n [y],\n );\n\n const handleDragEnd = useCallback(\n (update: SheetDragUpdate) => {\n const offset = y.get();\n const projected = offset + update.velocityY * PROJECT_VELOCITY_FACTOR;\n if (projected > CLOSE_DISTANCE || update.velocityY > CLOSE_VELOCITY) {\n requestClose(offset);\n return;\n }\n y.stop();\n void animate(y, 0, SHEET_SPRING).finished.catch(() => {});\n },\n [requestClose, y],\n );\n\n useSheetDragEngine({\n targetRef: surfaceRef,\n enabled: swipeToClose && canDismiss,\n minDragDistance: DRAG_START_DISTANCE,\n ignoreStartTarget: sheetDragStartsInTextInput,\n shouldStart: shouldStartDrag,\n onStart: handleDragStart,\n onMove: handleDragMove,\n onEnd: handleDragEnd,\n suppressClickOnDrag: true,\n });\n\n const baseShellClassName =\n mode === 'fullscreen'\n ? 'router-overlay-shell router-overlay-shell--fullscreen'\n : 'router-overlay-shell router-overlay-shell--content';\n const overlayShellClassName = shellClassName\n ? `${baseShellClassName} ${shellClassName}`\n : baseShellClassName;\n\n const shellStyle = useMemo<CSSProperties>(\n () => ({\n zIndex,\n }),\n [zIndex],\n );\n\n const node = (\n <div className={overlayShellClassName} data-router-shell={shell} style={shellStyle}>\n {backdrop ? (\n <motion.button\n type=\"button\"\n aria-label=\"Close\"\n className={`pointer-events-auto absolute inset-0 border-0 p-0 ${backdropClassName ?? ''}`}\n style={backdropStyle}\n initial={{ opacity: 0 }}\n animate={{ opacity: open ? 1 : 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={() => requestClose()}\n />\n ) : null}\n <motion.div\n ref={surfaceRef}\n className={surfaceClassName}\n style={{ ...surfaceStyle, y }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n >\n {children}\n </motion.div>\n </div>\n );\n\n return node;\n}\n","interface RouterCloseButtonProps {\n onPress: () => void;\n disabled?: boolean;\n tone?: 'default' | 'light';\n ariaLabel?: string;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4.75 4.75L13.25 13.25M13.25 4.75L4.75 13.25\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth=\"2.2\"\n />\n </svg>\n );\n}\n\nexport function RouterCloseButton({\n onPress,\n disabled,\n tone = 'default',\n ariaLabel = 'Close',\n}: RouterCloseButtonProps) {\n const toneClass = tone === 'light' ? ' router-close-button--light' : '';\n return (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={`router-close-button router-close-button-circle${toneClass}`}\n disabled={disabled}\n onClick={onPress}\n >\n <div className={`router-close-button-inner router-close-button-circle${toneClass}`}>\n <CloseIcon />\n </div>\n <div className=\"router-close-button-blur router-close-button-circle\">\n <div className=\"router-close-mask-1\" aria-hidden=\"true\" />\n <div className=\"router-close-mask-2\" aria-hidden=\"true\" />\n <div className=\"router-close-mask-3\" aria-hidden=\"true\" />\n </div>\n </button>\n );\n}\n","import { createContext, useContext, type ReactNode } from 'react';\n\nexport const DEFAULT_OVERLAY_CONTENT_KEY = 'router-overlay-content:default';\n\nconst OverlayContentKeyContext = createContext(DEFAULT_OVERLAY_CONTENT_KEY);\n\nexport function OverlayContentScope({\n contentKey,\n children,\n}: {\n contentKey: string;\n children: ReactNode;\n}) {\n return (\n <OverlayContentKeyContext.Provider value={contentKey}>\n {children}\n </OverlayContentKeyContext.Provider>\n );\n}\n\nexport function useOverlayContentKey(): string {\n return useContext(OverlayContentKeyContext);\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { SheetSurface } from './SheetSurface';\nimport { RouterCloseButton } from './RouterCloseButton';\nimport {\n DEFAULT_OVERLAY_CONTENT_KEY,\n useOverlayContentKey,\n} from './OverlayContentScope';\nimport type { RouterShellMode } from '../types';\n\ninterface ModalContextValue {\n setSwipeTarget: (contentKey: string, el: HTMLElement | null) => void;\n requestClose: () => void;\n setOptions: (contentKey: string, options: ModalOptions | null) => void;\n}\n\nconst ModalContext = createContext<ModalContextValue | null>(null);\n\nfunction useModalContext(): ModalContextValue {\n const ctx = useContext(ModalContext);\n if (!ctx) {\n throw new Error('Modal sub-components must be rendered inside <Modal>');\n }\n return ctx;\n}\n\nexport function useModalSwipeTarget(): (el: HTMLElement | null) => void {\n const { setSwipeTarget } = useModalContext();\n const contentKey = useOverlayContentKey();\n return useCallback(\n (el: HTMLElement | null) => setSwipeTarget(contentKey, el),\n [contentKey, setSwipeTarget],\n );\n}\n\ntype ModalPresentation = 'fullscreen' | 'content';\n\ninterface ModalProps {\n children: ReactNode;\n swipeToClose?: boolean;\n ariaLabel?: string;\n size?: 'regular' | 'wide';\n /** 'content' sizes the surface to its content, floored at half the viewport. */\n presentation?: ModalPresentation;\n}\n\ninterface ModalOptions {\n swipeToClose?: boolean;\n ariaLabel?: string;\n size?: 'regular' | 'wide';\n presentation?: ModalPresentation;\n}\n\ninterface ModalContentRegistration {\n options?: ModalOptions;\n swipeTarget?: HTMLElement | null;\n}\n\ninterface ModalFrameProps {\n children: ReactNode;\n open: boolean;\n onRequestClose: () => void;\n onExitComplete: () => void;\n zIndex: number;\n shell?: RouterShellMode;\n contentSized?: boolean;\n activeContentKey?: string;\n}\n\nexport function ModalFrame({\n children,\n open,\n onRequestClose,\n onExitComplete,\n zIndex,\n shell = 'mobile-contained',\n contentSized = false,\n activeContentKey = DEFAULT_OVERLAY_CONTENT_KEY,\n}: ModalFrameProps) {\n const [registrations, setRegistrations] = useState<\n ReadonlyMap<string, ModalContentRegistration>\n >(() => new Map());\n const setSwipeTarget = useCallback(\n (contentKey: string, swipeTarget: HTMLElement | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if ((registration?.swipeTarget ?? null) === swipeTarget) return current;\n\n const next = new Map(current);\n if (!swipeTarget && !registration?.options) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, { ...registration, swipeTarget });\n }\n return next;\n });\n },\n [],\n );\n const setOptions = useCallback((contentKey: string, options: ModalOptions | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if (registration?.options === options) return current;\n\n const next = new Map(current);\n if (!options && !registration?.swipeTarget) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, {\n ...registration,\n options: options ?? undefined,\n });\n }\n return next;\n });\n }, []);\n const activeRegistration = registrations.get(activeContentKey);\n const swipeTarget = activeRegistration?.swipeTarget ?? null;\n const options = activeRegistration?.options;\n const swipeToClose = options?.swipeToClose ?? true;\n const ariaLabel = options?.ariaLabel;\n // The frame prop stays for callers that size the surface from the outside;\n // content can also declare it itself through the options channel.\n const isContentSized = contentSized || options?.presentation === 'content';\n\n // ESC and ModalHeader's X button route through this — same exit path.\n const requestClose = useCallback(() => {\n onRequestClose();\n }, [onRequestClose]);\n\n const contextValue = useMemo<ModalContextValue>(\n () => ({ setSwipeTarget, requestClose, setOptions }),\n [requestClose, setOptions, setSwipeTarget],\n );\n\n return (\n <ModalContext.Provider value={contextValue}>\n <SheetSurface\n open={open}\n onRequestClose={requestClose}\n onExitComplete={onExitComplete}\n zIndex={zIndex}\n mode=\"fullscreen\"\n swipeToClose={swipeToClose}\n shell={shell}\n backdrop\n backdropClassName={`router-modal-backdrop${isContentSized ? ' router-modal-backdrop--transparent' : ''}`}\n shellClassName=\"router-modal-shell\"\n surfaceClassName={`router-modal-surface${isContentSized ? ' router-modal-surface--content-sized' : ''}${options?.size === 'wide' ? ' router-modal-surface--wide' : ''}`}\n scrollElement={swipeTarget}\n ariaLabel={ariaLabel}\n closeTarget={isContentSized ? 'surface' : 'viewport'}\n >\n {children}\n </SheetSurface>\n </ModalContext.Provider>\n );\n}\n\nfunction ModalRoot({\n children,\n swipeToClose = true,\n ariaLabel,\n size = 'regular',\n presentation = 'fullscreen',\n}: ModalProps) {\n const { setOptions } = useModalContext();\n const contentKey = useOverlayContentKey();\n\n useLayoutEffect(() => {\n setOptions(contentKey, { swipeToClose, ariaLabel, size, presentation });\n return () => setOptions(contentKey, null);\n }, [ariaLabel, contentKey, presentation, setOptions, size, swipeToClose]);\n\n return <>{children}</>;\n}\n\ninterface ModalHeaderProps {\n title?: string;\n leftAction?: ReactNode;\n rightAction?: ReactNode;\n hideCloseButton?: boolean;\n sticky?: boolean;\n}\n\nfunction ModalHeader({\n title,\n leftAction,\n rightAction,\n hideCloseButton,\n sticky = true,\n}: ModalHeaderProps) {\n const { requestClose } = useModalContext();\n const headerClassName = `router-modal-header${sticky ? ' router-modal-header--sticky' : ''}`;\n return (\n <div className={headerClassName}>\n <div className=\"router-modal-header-side\">{leftAction}</div>\n <h2 className=\"router-modal-title\">\n {title}\n </h2>\n <div className=\"router-modal-header-side router-modal-header-side--trailing\">\n {rightAction ??\n (hideCloseButton ? null : <RouterCloseButton onPress={requestClose} />)}\n </div>\n </div>\n );\n}\n\ninterface ModalContentProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction ModalContent({ children, className }: ModalContentProps) {\n return (\n <div className={`router-modal-content ${className ?? ''}`}>{children}</div>\n );\n}\n\ninterface ModalScrollViewProps {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction ModalScrollView({ children, className, style }: ModalScrollViewProps) {\n const setSwipeTarget = useModalSwipeTarget();\n return (\n <div\n ref={setSwipeTarget}\n className={`router-scroll router-modal-scroll-view ${className ?? ''}`}\n style={style}\n >\n {children}\n </div>\n );\n}\n\ninterface ModalFooterProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction ModalFooter({ children, className }: ModalFooterProps) {\n return (\n <div\n className={`router-modal-footer ${className ?? ''}`}\n >\n <div className=\"router-modal-footer-content\">{children}</div>\n </div>\n );\n}\n\nexport const Modal = Object.assign(ModalRoot, {\n Header: ModalHeader,\n Content: ModalContent,\n ScrollView: ModalScrollView,\n Footer: ModalFooter,\n});\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { SheetSurface } from './SheetSurface';\nimport { RouterCloseButton } from './RouterCloseButton';\nimport {\n DEFAULT_OVERLAY_CONTENT_KEY,\n useOverlayContentKey,\n} from './OverlayContentScope';\nimport type { RouterShellMode } from '../types';\n\ntype SheetVariant = 'attached' | 'detached';\ntype SheetPresentation = 'content' | 'fullscreen';\n\ninterface SheetOptions {\n disableDismiss?: boolean;\n onRequestClose?: () => void;\n variant?: SheetVariant;\n presentation?: SheetPresentation;\n}\n\ninterface SheetContextValue {\n setScrollElement: (contentKey: string, el: HTMLDivElement | null) => void;\n close: () => void;\n canClose: boolean;\n variant: SheetVariant;\n presentation: SheetPresentation;\n setOptions: (contentKey: string, options: SheetOptions | null) => void;\n}\n\nconst SheetContext = createContext<SheetContextValue | null>(null);\n\nfunction useSheetContext(): SheetContextValue {\n const ctx = useContext(SheetContext);\n if (!ctx) {\n throw new Error('Sheet sub-components must be rendered inside <Sheet>');\n }\n return ctx;\n}\n\ninterface SheetProps {\n children: ReactNode;\n disableDismiss?: boolean;\n onRequestClose?: () => void;\n variant?: SheetVariant;\n /** 'fullscreen' turns the sheet into a full-height surface. */\n presentation?: SheetPresentation;\n}\n\ninterface SheetContentRegistration {\n options?: SheetOptions;\n scrollElement?: HTMLDivElement | null;\n}\n\ninterface SheetFrameProps {\n children: ReactNode;\n open: boolean;\n onRequestClose: () => void;\n onExitComplete: () => void;\n zIndex: number;\n shell?: RouterShellMode;\n activeContentKey?: string;\n}\n\nexport function SheetFrame({\n children,\n open,\n onRequestClose,\n onExitComplete,\n zIndex,\n shell = 'mobile-contained',\n activeContentKey = DEFAULT_OVERLAY_CONTENT_KEY,\n}: SheetFrameProps) {\n const [frameScrollElement, setFrameScrollElement] =\n useState<HTMLDivElement | null>(null);\n const [registrations, setRegistrations] = useState<\n ReadonlyMap<string, SheetContentRegistration>\n >(() => new Map());\n const setScrollElement = useCallback(\n (contentKey: string, scrollElement: HTMLDivElement | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if ((registration?.scrollElement ?? null) === scrollElement) return current;\n\n const next = new Map(current);\n if (!scrollElement && !registration?.options) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, { ...registration, scrollElement });\n }\n return next;\n });\n },\n [],\n );\n const setOptions = useCallback((contentKey: string, options: SheetOptions | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if (registration?.options === options) return current;\n\n const next = new Map(current);\n if (!options && !registration?.scrollElement) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, {\n ...registration,\n options: options ?? undefined,\n });\n }\n return next;\n });\n }, []);\n const activeRegistration = registrations.get(activeContentKey);\n const scrollElement = activeRegistration?.scrollElement ?? frameScrollElement;\n const options = activeRegistration?.options;\n const disableDismiss = options?.disableDismiss ?? false;\n const customRequestClose = options?.onRequestClose;\n const variant = options?.variant ?? 'detached';\n const presentation = options?.presentation ?? 'content';\n const fullscreen = presentation === 'fullscreen';\n\n const requestClose = useCallback(() => {\n if (disableDismiss) return;\n if (customRequestClose) {\n customRequestClose();\n return;\n }\n onRequestClose();\n }, [customRequestClose, disableDismiss, onRequestClose]);\n\n const contextValue = useMemo<SheetContextValue>(\n () => ({\n setScrollElement,\n close: requestClose,\n canClose: !disableDismiss,\n variant,\n presentation,\n setOptions,\n }),\n [\n requestClose,\n disableDismiss,\n presentation,\n setScrollElement,\n setOptions,\n variant,\n ],\n );\n\n const surfaceStyle = useMemo<CSSProperties>(\n () =>\n fullscreen\n ? {\n backgroundColor: 'var(--router-bg)',\n borderRadius: '33px 33px 0 0',\n boxShadow: 'var(--router-card-shadow)',\n color: 'var(--router-text)',\n overflow: 'hidden',\n bottom: 0,\n left: 0,\n right: 0,\n width: '100%',\n maxWidth: 'var(--router-container)',\n height: 'calc(100dvh - env(safe-area-inset-top, 0px))',\n maxHeight: 'none',\n marginInline: 'auto',\n }\n : variant === 'detached'\n ? {\n backgroundColor: 'var(--router-bg)',\n borderRadius: '28px 28px 32px 32px',\n boxShadow: 'var(--router-card-shadow)',\n color: 'var(--router-text)',\n overflow: 'hidden',\n // Centered onto the app column with the same 8px gutter on every detached edge.\n bottom: 8,\n left: 8,\n right: 8,\n width: 'auto',\n maxWidth: 'calc(var(--router-container) - 16px)',\n marginInline: 'auto',\n maxHeight:\n 'calc(100dvh - 32px - env(safe-area-inset-top, 0px))',\n }\n : {\n backgroundColor: 'var(--router-bg)',\n borderTop: '1px solid var(--router-line)',\n borderRadius: '28px 28px 0 0',\n boxShadow: 'var(--router-card-shadow)',\n color: 'var(--router-text)',\n // Centered onto the app column, full column width.\n left: 0,\n right: 0,\n maxWidth: 'var(--router-container)',\n marginInline: 'auto',\n bottom: 0,\n maxHeight: 'calc(100dvh - env(safe-area-inset-top, 0px))',\n },\n [fullscreen, variant],\n );\n // Scrim confined to the app column — the desktop surround stays the backdrop.\n const backdropStyle = useMemo<CSSProperties>(\n () =>\n shell === 'desktop-fullscreen'\n ? {\n background: 'var(--router-scrim)',\n left: 0,\n right: 0,\n }\n : {\n background: 'var(--router-scrim)',\n left: 0,\n right: 0,\n maxWidth: 'var(--router-container)',\n marginInline: 'auto',\n },\n [shell],\n );\n\n return (\n <SheetContext.Provider value={contextValue}>\n <SheetSurface\n open={open}\n onRequestClose={requestClose}\n onExitComplete={onExitComplete}\n zIndex={zIndex}\n mode=\"content\"\n canDismiss={!disableDismiss}\n shell={shell}\n backdrop\n backdropStyle={backdropStyle}\n surfaceClassName=\"router-sheet-surface\"\n surfaceStyle={surfaceStyle}\n scrollElement={scrollElement}\n closeTarget={fullscreen ? 'viewport' : 'surface'}\n >\n <div\n ref={setFrameScrollElement}\n className={`router-scroll router-sheet-frame-scroll${\n fullscreen ? ' router-sheet-frame-scroll--fullscreen' : ''\n }`}\n >\n {children}\n </div>\n </SheetSurface>\n </SheetContext.Provider>\n );\n}\n\nfunction SheetRoot({\n children,\n disableDismiss,\n onRequestClose,\n variant = 'detached',\n presentation = 'content',\n}: SheetProps) {\n const { setOptions } = useSheetContext();\n const contentKey = useOverlayContentKey();\n\n useLayoutEffect(() => {\n setOptions(contentKey, {\n disableDismiss,\n onRequestClose,\n variant,\n presentation,\n });\n return () => setOptions(contentKey, null);\n }, [\n contentKey,\n disableDismiss,\n onRequestClose,\n presentation,\n setOptions,\n variant,\n ]);\n\n return <>{children}</>;\n}\n\ninterface SheetHeaderProps {\n title?: string;\n leftAction?: ReactNode;\n rightAction?: ReactNode;\n hideCloseButton?: boolean;\n sticky?: boolean;\n align?: 'start' | 'center';\n}\n\nfunction SheetHeader({\n title,\n leftAction,\n rightAction,\n hideCloseButton,\n sticky = true,\n align = 'start',\n}: SheetHeaderProps) {\n const { close, canClose, presentation } = useSheetContext();\n const headerBaseClassName =\n presentation === 'fullscreen' ? 'router-modal-header' : 'router-sheet-header';\n const headerClassName = `${headerBaseClassName}${\n sticky ? ` ${headerBaseClassName}--sticky` : ''\n }`;\n const titleClassName = `router-sheet-title${align === 'center' ? ' router-sheet-title--center' : ''}`;\n return (\n <div className={headerClassName}>\n {leftAction != null && (\n <div className=\"router-sheet-header-side\">{leftAction}</div>\n )}\n {title && (\n <h2 className={titleClassName}>\n {title}\n </h2>\n )}\n {!title && <div className=\"router-sheet-header-spacer\" />}\n <div className=\"router-sheet-header-side router-sheet-header-side--trailing\">\n {rightAction ??\n (hideCloseButton ? null : (\n <RouterCloseButton onPress={close} disabled={!canClose} />\n ))}\n </div>\n </div>\n );\n}\n\ninterface SheetContentProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction SheetContent({ children, className }: SheetContentProps) {\n return <div className={`router-sheet-content ${className ?? ''}`}>{children}</div>;\n}\n\ninterface SheetScrollViewProps {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction SheetScrollView({ children, className, style }: SheetScrollViewProps) {\n const { setScrollElement } = useSheetContext();\n const contentKey = useOverlayContentKey();\n const setScopedScrollElement = useCallback(\n (el: HTMLDivElement | null) => setScrollElement(contentKey, el),\n [contentKey, setScrollElement],\n );\n return (\n <div\n ref={setScopedScrollElement}\n className={`router-scroll router-sheet-scroll-view ${className ?? ''}`}\n style={style}\n >\n {children}\n </div>\n );\n}\n\ninterface SheetFooterProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction SheetFooter({ children, className }: SheetFooterProps) {\n const { variant } = useSheetContext();\n const variantClassName =\n variant === 'detached'\n ? 'router-sheet-footer--detached'\n : 'router-sheet-footer--attached';\n return (\n <div\n className={`router-sheet-footer ${variantClassName} ${className ?? ''}`}\n >\n {children}\n </div>\n );\n}\n\nexport const Sheet = Object.assign(SheetRoot, {\n Header: SheetHeader,\n Content: SheetContent,\n ScrollView: SheetScrollView,\n Footer: SheetFooter,\n});\n","export interface NavigationHistorySnapshot {\n stackKey: string;\n pathname: string;\n search: string;\n historyIndex: number;\n historyCommit?: string;\n presentation: string;\n splitNavigation?: {\n operation: 'selection' | 'push' | 'replace';\n };\n route: {\n id: string;\n };\n}\n\nconst MAX_HISTORY_LENGTH = 64;\n\nfunction sameLocation(\n left: NavigationHistorySnapshot,\n right: NavigationHistorySnapshot,\n): boolean {\n return left.stackKey === right.stackKey && left.pathname === right.pathname;\n}\n\nfunction sameScreenRoute(\n left: NavigationHistorySnapshot,\n right: NavigationHistorySnapshot,\n): boolean {\n return (\n left.stackKey === right.stackKey &&\n left.route.id === right.route.id &&\n left.presentation === right.presentation\n );\n}\n\nfunction latestSnapshots<TSnapshot>(history: TSnapshot[]): TSnapshot[] {\n return history.length > MAX_HISTORY_LENGTH\n ? history.slice(history.length - MAX_HISTORY_LENGTH)\n : history;\n}\n\nexport function updateSnapshotHistory<TSnapshot extends NavigationHistorySnapshot>(\n history: TSnapshot[],\n snapshot: TSnapshot,\n): TSnapshot[] {\n const browserIndex = history.findIndex(\n (entry) => entry.historyIndex === snapshot.historyIndex,\n );\n const locationIndex = history.findIndex((entry) => sameLocation(entry, snapshot));\n\n // replace(path) changes only the current logical item, even when the target\n // pathname already exists lower in the stack.\n if (snapshot.historyCommit === 'replace' && browserIndex !== -1) {\n return latestSnapshots([...history.slice(0, browserIndex), snapshot]);\n }\n\n // Internal back keeps the current browser index and replaces its URL. If the\n // target already exists lower in the logical stack, this is a pop-to, not a\n // second instance of the target screen.\n if (locationIndex !== -1 && locationIndex !== browserIndex) {\n return latestSnapshots([...history.slice(0, locationIndex), snapshot]);\n }\n\n // A browser back/forward event revisits a known browser index. Drop logical\n // entries that were above it, mirroring the browser's history cursor.\n if (browserIndex !== -1) {\n return latestSnapshots([...history.slice(0, browserIndex), snapshot]);\n }\n\n const active = history[history.length - 1];\n if (\n active &&\n sameScreenRoute(active, snapshot) &&\n snapshot.splitNavigation?.operation !== 'push'\n ) {\n return latestSnapshots([...history.slice(0, -1), snapshot]);\n }\n\n const insertIndex = history.findIndex(\n (entry) => entry.historyIndex > snapshot.historyIndex,\n );\n const next =\n insertIndex === -1\n ? [...history, snapshot]\n : [...history.slice(0, insertIndex), snapshot];\n\n return latestSnapshots(next);\n}\n\nexport function previousSnapshotFromHistory<TSnapshot extends NavigationHistorySnapshot>(\n history: TSnapshot[],\n snapshot: TSnapshot | undefined,\n): TSnapshot | undefined {\n if (!snapshot) return undefined;\n\n const currentIndex = history.findIndex(\n (entry) => entry.historyIndex === snapshot.historyIndex,\n );\n if (currentIndex <= 0) return undefined;\n return history[currentIndex - 1];\n}\n","export function createRouterId(): string {\n if (\n typeof globalThis.crypto !== 'undefined' &&\n typeof globalThis.crypto.randomUUID === 'function'\n ) {\n return globalThis.crypto.randomUUID();\n }\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {\n const value = Math.floor(Math.random() * 16);\n const nibble = char === 'x' ? value : (value & 0x3) | 0x8;\n return nibble.toString(16);\n });\n}\n","import {\n Children,\n Fragment,\n Suspense,\n createContext,\n createElement,\n isValidElement,\n memo,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type CSSProperties,\n type ElementType,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { useTransitionMap, type TransitionStatus } from 'react-transition-state';\nimport {\n Router as WouterRouter,\n matchRoute,\n useLocation,\n useRouter as useWouterRouter,\n useSearch as useWouterSearch,\n type BaseLocationHook,\n type DefaultParams,\n type NavigateOptions as WouterNavigateOptions,\n} from 'wouter';\nimport {\n navigate as browserNavigate,\n useHistoryState as useBrowserHistoryState,\n} from 'wouter/use-browser-location';\nimport { ModalFrame, SheetFrame } from './components';\nimport { OverlayContentScope } from './components/OverlayContentScope';\nimport { previousSnapshotFromHistory, updateSnapshotHistory } from './navigationHistory';\nimport { createRouterId } from './utils/id';\nimport type { RouterOverlayLayout, RouterShellMode } from './types';\nimport './router.css';\n\ntype StackDirection = 'forward' | 'back';\nexport type StackPresentation = 'push' | 'modal' | 'sheet';\nexport type RouterScreenAnimation = 'push' | 'slide_from_bottom';\ntype StackRouteContainer =\n | 'tabbar'\n | 'tabbar-item'\n | 'drawer'\n | 'drawer-group'\n | 'drawer-section'\n | 'drawer-item'\n | 'splitview'\n | 'split-primary'\n | 'split-secondary'\n | 'protected'\n | 'redirect';\ntype StackPhase = 'active' | 'inactive' | 'exiting';\ntype StackTransitionStatus = TransitionStatus;\ntype ModalKind = 'modal' | 'sheet';\nexport interface RouterNavigateOptions {\n state?: unknown;\n}\n\ntype HistoryCommit = 'push' | 'sync' | 'replace';\n\ntype RouterInternalNavigateOptions = Omit<WouterNavigateOptions, 'replace' | 'state'> & {\n commit?: HistoryCommit;\n state?: unknown;\n};\n\nexport type RouterNavigateFunction = (\n to: string | number,\n options?: RouterNavigateOptions,\n) => void;\nexport type RouterReplaceFunction = (to: string, options?: RouterNavigateOptions) => void;\ntype RouterGuardValue<T> = T | ((props: RouterRouteRenderProps) => T);\n/**\n * A guard answers one of three things: allowed, denied, or not decided yet.\n * `'pending'` (and `undefined`, so `when={user?.isAdmin}` works before the user\n * loads) holds the URL and renders the guard's `pending` node — it must not\n * redirect, or every deep link would be lost while the app boots.\n */\nexport type RouterGuardState = boolean | 'pending';\nexport type RouterSplitPane = 'primary' | 'secondary';\ntype SplitNavigationOperation = 'selection' | 'push' | 'replace';\n\ninterface SplitNavigationMetadata {\n splitViewId: string;\n /** Primary selection creates a new path; secondary navigation preserves it. */\n detailPathId: string;\n detailDepth: number;\n operation: SplitNavigationOperation;\n}\n\ninterface SplitPaneNavigationOrigin {\n splitViewId: string;\n pane: RouterSplitPane;\n detailPathId: string;\n detailDepth: number;\n}\n\ntype StackAnimationType =\n | 'none'\n | 'push-enter'\n | 'push-exit'\n | 'push-background'\n | 'pop-enter'\n | 'pop-exit'\n | 'pop-background'\n | 'slide-from-bottom-enter'\n | 'slide-from-bottom-exit';\n\nexport interface RouterRouteRenderProps {\n params: DefaultParams;\n pathname: string;\n search: string;\n historyState: unknown;\n presentation: StackPresentation;\n splitPane?: RouterSplitPane;\n}\n\nexport interface RouterRouteContextValue extends RouterRouteRenderProps {\n searchParams: URLSearchParams;\n}\n\nexport interface RouterTabBarTab {\n id: string;\n path: string;\n label: string;\n icon: ReactNode;\n}\n\nexport interface RouterDrawerItem {\n type: 'item';\n id: string;\n path: string;\n label: string;\n icon?: ReactNode;\n badge?: ReactNode;\n hidden?: boolean;\n}\n\nexport interface RouterDrawerGroup {\n type: 'group';\n id: string;\n label: string;\n icon?: ReactNode;\n chevron?: ReactNode;\n hidden?: boolean;\n items: RouterDrawerItem[];\n}\n\nexport interface RouterDrawerSection {\n type: 'section';\n id: string;\n title: string;\n hidden?: boolean;\n}\n\nexport type RouterDrawerNode =\n | RouterDrawerItem\n | RouterDrawerGroup\n | RouterDrawerSection;\n\nexport interface RouterRouteLayoutProps {\n children: ReactNode;\n aside?: ReactNode;\n footer?: ReactNode;\n portal?: boolean;\n tabs?: RouterTabBarTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n items?: RouterDrawerNode[];\n activeItem?: string;\n onItemChange?: (id: string) => void;\n drawer?: RouterDrawerApi;\n primary?: ReactNode;\n secondary?: ReactNode;\n isWide?: boolean;\n hasSecondary?: boolean;\n minWidth?: number;\n primaryMaxWidth?: number;\n secondaryMinWidth?: number;\n splitViewRef?: Ref<HTMLDivElement>;\n splitViewLayoutId?: string;\n}\n\ntype RouterRouteChildren = ReactNode | ((props: RouterRouteRenderProps) => ReactNode);\n\ntype RouterRouteElement = ReactNode | ElementType;\n\nexport interface RouterRouteProps {\n id?: string;\n path?: string;\n /**\n * Route id that must sit immediately below this screen when a modal flow is\n * entered straight at a deeper step. This restores the same spatial history\n * a visitor would have built by walking the flow normally.\n */\n flowParent?: string;\n stackKey?: string | ((props: RouterRouteRenderProps) => string);\n fallback?: ReactNode;\n animation?: RouterScreenAnimation;\n overlayLayout?: RouterOverlayLayout;\n element?: RouterRouteElement;\n component?: ElementType;\n layout?: ElementType<RouterRouteLayoutProps>;\n children?: RouterRouteChildren;\n}\n\nexport interface RouterTabBarItemProps extends RouterRouteProps {\n path: string;\n label: string;\n icon: ReactNode;\n}\n\nexport interface RouterDrawerItemProps extends RouterRouteProps {\n path: string;\n label: string;\n icon?: ReactNode;\n badge?: ReactNode;\n hidden?: boolean;\n}\n\nexport interface RouterDrawerProps extends RouterRouteProps {\n /** Persistent content rendered to the right of the active Drawer route. */\n aside?: ReactNode;\n /** Persistent content anchored below the navigation items in the Drawer. */\n footer?: ReactNode;\n}\n\nexport interface RouterDrawerGroupProps extends RouterRouteProps {\n label: string;\n icon?: ReactNode;\n chevron?: ReactNode;\n hidden?: boolean;\n}\n\nexport interface RouterDrawerSectionProps extends RouterRouteProps {\n title: string;\n hidden?: boolean;\n}\n\nexport interface RouterSplitViewProps extends RouterRouteProps {\n minWidth?: number;\n primaryMaxWidth?: number;\n secondaryMinWidth?: number;\n}\n\nexport type RouterSplitViewSlotProps = RouterRouteProps;\n\nexport interface RouterProtectedProps extends RouterRouteProps {\n when: RouterGuardValue<RouterGuardState | undefined>;\n redirectTo: RouterGuardValue<string>;\n /** Rendered instead of the subtree while `when` is undecided. */\n pending?: ReactNode;\n}\n\nexport interface RouterRedirectProps extends RouterRouteProps {\n to: RouterGuardValue<string>;\n}\n\nexport interface RouterApi {\n navigate: RouterNavigateFunction;\n /** Replaces the active screen without adding a browser or router history entry. */\n replace: RouterReplaceFunction;\n close: (id: string) => void;\n closeAll: () => void;\n /** Closes the top overlay with animation or pops the active router stack. */\n goBack: () => boolean;\n}\n\nexport interface RouterDrawerApi {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\ninterface CurrentModalContextValue {\n id: string;\n index: number;\n exiting: boolean;\n close: () => void;\n remove: () => void;\n}\n\ninterface RouterRootProps {\n children: ReactNode;\n fallback?: ReactNode;\n shell?: RouterShellMode;\n}\n\ninterface CompiledStackRoute {\n id: string;\n path?: string;\n flowParent?: string;\n presentation: StackPresentation;\n animation: RouterScreenAnimation;\n overlayLayout?: RouterOverlayLayout;\n redirectTo?: RouterGuardValue<string>;\n guards: CompiledRouteGuard[];\n stackKey?: RouterRouteProps['stackKey'];\n fallback?: ReactNode;\n element?: ReactNode;\n elementType?: ElementType;\n component?: ElementType;\n layout?: ElementType<RouterRouteLayoutProps>;\n render?: (props: RouterRouteRenderProps) => ReactNode;\n childrenNode?: ReactNode;\n container?: StackRouteContainer;\n childRoute?: CompiledStackRoute;\n overlayFlow?: CompiledOverlayFlow;\n tabBar?: {\n tabs: RouterTabBarTab[];\n activeTab: string;\n };\n drawer?: {\n items: RouterDrawerNode[];\n activeItem: string;\n };\n drawerAside?: ReactNode;\n drawerFooter?: ReactNode;\n splitView?: {\n primaryRoute: CompiledStackRoute;\n secondaryRoute?: CompiledStackRoute;\n secondaryRoutes?: CompiledStackRoute[];\n activePane: 'primary' | 'secondary';\n minWidth: number;\n primaryMaxWidth: number;\n secondaryMinWidth: number;\n wideMinWidth: number;\n layoutId: string;\n };\n}\n\ninterface CompiledOverlayFlow {\n id: string;\n kind: ModalKind;\n routes: CompiledStackRoute[];\n /** Wrapper routes, index-aligned with [routes]. entries[0] is the flow root. */\n entries: CompiledStackRoute[];\n}\n\ninterface CompiledRouteGuard {\n id: string;\n when: RouterGuardValue<RouterGuardState | undefined>;\n redirectTo: RouterGuardValue<string>;\n pending?: ReactNode;\n}\n\ninterface RouterRouteMatch {\n route: CompiledStackRoute;\n params: DefaultParams;\n}\n\ninterface StackSnapshot extends RouterRouteMatch {\n stackKey: string;\n locationKey: string;\n historyNavigationKey: string;\n pathname: string;\n search: string;\n historyState: unknown;\n historyIndex: number;\n historyCommit: HistoryCommit;\n depth: number;\n presentation: StackPresentation;\n forcePushRouteChanges?: boolean;\n splitPane?: RouterSplitPane;\n splitNavigation?: SplitNavigationMetadata;\n}\n\ninterface StackEntry extends StackSnapshot {\n id: string;\n transitionKey: string;\n enterDirection: StackDirection;\n exitDirection: StackDirection;\n animateEnter: boolean;\n}\n\ninterface RouterModalEntry {\n id: string;\n kind: ModalKind;\n route: CompiledStackRoute;\n params: DefaultParams;\n pathname: string;\n search: string;\n historyState: unknown;\n flowScreens?: RouterModalFlowScreenEntry[];\n exiting: boolean;\n}\n\ninterface RouterModalFlowScreenEntry {\n overlayRoute: CompiledStackRoute;\n route: CompiledStackRoute;\n params: DefaultParams;\n pathname: string;\n search: string;\n historyState: unknown;\n}\n\nconst STACK_ROUTE_KIND = Symbol.for('sigmela.stack.route.kind');\nconst HISTORY_INDEX_KEY = '__sigmela_idx';\nconst SPLIT_NAVIGATION_KEY = '__sigmela_split_navigation';\nconst SPLIT_NAVIGATION_ORIGIN_KEY = '__sigmela_split_navigation_origin';\nconst ROUTE_TRANSITION_MS = 300;\nconst OVERLAY_STACK_BASE_Z = 60;\nconst DEFAULT_SPLIT_MIN_WIDTH = 640;\nconst DEFAULT_SPLIT_PRIMARY_MAX_WIDTH = 390;\nconst DEFAULT_SPLIT_SECONDARY_MIN_WIDTH = 360;\nconst RouterRouteContext = createContext<RouterRouteContextValue | null>(null);\nconst RouterActionsContext = createContext<RouterApi | null>(null);\nconst SplitPaneNavigationContext = createContext<SplitPaneNavigationOrigin | null>(null);\nconst RouterDrawerContext = createContext<RouterDrawerApi | null>(null);\nconst CurrentModalContext = createContext<CurrentModalContextValue | null>(null);\nconst REACT_COMPONENT_TYPE_SYMBOLS = new Set([\n Symbol.for('react.forward_ref'),\n Symbol.for('react.lazy'),\n Symbol.for('react.memo'),\n]);\nconst HISTORY_NAVIGATION_KEY = '__sigmela_nav';\nconst HISTORY_COMMIT_KEY = '__sigmela_commit';\nconst DEFAULT_SHEET_FALLBACK = <div className=\"min-h-[160px]\" />;\n\nfunction splitViewWideMinWidth(\n minWidth: number,\n primaryMaxWidth: number,\n secondaryMinWidth = DEFAULT_SPLIT_SECONDARY_MIN_WIDTH,\n): number {\n return Math.max(minWidth, primaryMaxWidth + secondaryMinWidth);\n}\n\ninterface StackRouteDescriptor {\n presentation: StackPresentation;\n container?: StackRouteContainer;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mutableHistoryState(state: unknown): Record<string, unknown> {\n if (isRecord(state)) return { ...state };\n if (state == null) return {};\n return { value: state };\n}\n\nfunction splitNavigationFromState(state: unknown): SplitNavigationMetadata | undefined {\n if (!isRecord(state)) return undefined;\n const value = state[SPLIT_NAVIGATION_KEY];\n if (!isRecord(value)) return undefined;\n if (\n typeof value.splitViewId !== 'string' ||\n typeof value.detailPathId !== 'string' ||\n typeof value.detailDepth !== 'number' ||\n (value.operation !== 'selection' &&\n value.operation !== 'push' &&\n value.operation !== 'replace')\n ) {\n return undefined;\n }\n\n return {\n splitViewId: value.splitViewId,\n detailPathId: value.detailPathId,\n detailDepth: value.detailDepth,\n operation: value.operation,\n };\n}\n\nfunction splitNavigationOriginFromState(\n state: unknown,\n): SplitPaneNavigationOrigin | undefined {\n if (!isRecord(state)) return undefined;\n const value = state[SPLIT_NAVIGATION_ORIGIN_KEY];\n if (!isRecord(value)) return undefined;\n if (\n typeof value.splitViewId !== 'string' ||\n (value.pane !== 'primary' && value.pane !== 'secondary') ||\n typeof value.detailPathId !== 'string' ||\n typeof value.detailDepth !== 'number'\n ) {\n return undefined;\n }\n\n return {\n splitViewId: value.splitViewId,\n pane: value.pane,\n detailPathId: value.detailPathId,\n detailDepth: value.detailDepth,\n };\n}\n\nfunction stateWithSplitNavigationOrigin(\n state: unknown,\n origin: SplitPaneNavigationOrigin,\n): Record<string, unknown> {\n const next = mutableHistoryState(state);\n next[SPLIT_NAVIGATION_ORIGIN_KEY] = origin;\n return next;\n}\n\nfunction stateWithoutSplitNavigation(state: unknown): Record<string, unknown> {\n const next = mutableHistoryState(state);\n delete next[SPLIT_NAVIGATION_KEY];\n delete next[SPLIT_NAVIGATION_ORIGIN_KEY];\n return next;\n}\n\nfunction historyIndexFromState(state: unknown): number {\n if (isRecord(state) && typeof state[HISTORY_INDEX_KEY] === 'number') {\n return state[HISTORY_INDEX_KEY];\n }\n if (isRecord(state) && typeof state.idx === 'number') {\n return state.idx;\n }\n return 0;\n}\n\nfunction historyNavigationKeyFromState(state: unknown): string | null {\n if (isRecord(state) && typeof state[HISTORY_NAVIGATION_KEY] === 'string') {\n return state[HISTORY_NAVIGATION_KEY];\n }\n return null;\n}\n\nfunction historyCommitFromState(state: unknown): HistoryCommit {\n if (isRecord(state)) {\n const commit = state[HISTORY_COMMIT_KEY];\n if (commit === 'sync' || commit === 'replace') return commit;\n }\n return 'push';\n}\n\nfunction stateWithHistoryIndex(\n state: unknown,\n index: number,\n navigationKey = createRouterId(),\n commit: HistoryCommit = 'push',\n): Record<string, unknown> {\n const next: Record<string, unknown> = isRecord(state)\n ? { ...state }\n : state == null\n ? {}\n : { value: state };\n next[HISTORY_INDEX_KEY] = index;\n next[HISTORY_NAVIGATION_KEY] = navigationKey;\n next[HISTORY_COMMIT_KEY] = commit;\n return next;\n}\n\nfunction navigateWithHistoryIndex(\n to: string,\n options: RouterInternalNavigateOptions = {},\n) {\n const { commit = 'push', ...navigationOptions } = options;\n const currentState = window.history.state;\n const currentIndex = historyIndexFromState(currentState);\n const isSyncCommit = commit === 'sync';\n const replacesBrowserEntry = commit !== 'push';\n const nextIndex = replacesBrowserEntry ? currentIndex : currentIndex + 1;\n const currentNavigationKey = historyNavigationKeyFromState(currentState);\n const nextNavigationKey = isSyncCommit\n ? (historyNavigationKeyFromState(options.state) ??\n currentNavigationKey ??\n createRouterId())\n : replacesBrowserEntry\n ? (currentNavigationKey ?? createRouterId())\n : createRouterId();\n browserNavigate(to, {\n ...navigationOptions,\n replace: replacesBrowserEntry,\n state: stateWithHistoryIndex(options.state, nextIndex, nextNavigationKey, commit),\n });\n}\n\nfunction ensureInitialHistoryIndex() {\n const currentState = window.history.state;\n const hasIndex =\n isRecord(currentState) && typeof currentState[HISTORY_INDEX_KEY] === 'number';\n const currentNavigationKey = historyNavigationKeyFromState(currentState);\n if (hasIndex && currentNavigationKey) return;\n\n window.history.replaceState(\n stateWithHistoryIndex(\n currentState,\n historyIndexFromState(currentState),\n currentNavigationKey ?? createRouterId(),\n ),\n '',\n window.location.href,\n );\n}\n\nfunction normalizedPath(pathname: string): string {\n if (pathname === '/') return '/';\n return pathname.replace(/\\/+$/, '') || '/';\n}\n\nfunction routeDepth(pathname: string): number {\n const path = normalizedPath(pathname);\n if (path === '/') return 0;\n return path.split('/').filter(Boolean).length;\n}\n\nfunction joinRoutePath(\n parentPath: string | undefined,\n childPath: string | undefined,\n): string | undefined {\n if (childPath == null || childPath === '') return parentPath;\n if (childPath === '*') return '*';\n if (childPath.startsWith('/')) return normalizedPath(childPath);\n if (!parentPath || parentPath === '/') return normalizedPath(`/${childPath}`);\n return normalizedPath(`${parentPath}/${childPath}`);\n}\n\nfunction routeComponent<TProps extends RouterRouteProps = RouterRouteProps>(\n presentation: StackPresentation,\n container?: StackRouteContainer,\n): ComponentType<TProps> {\n return Object.assign(\n function RouterRouteComponent(_props: TProps) {\n return null;\n },\n { [STACK_ROUTE_KIND]: { presentation, container } satisfies StackRouteDescriptor },\n );\n}\n\nfunction routeDescriptorFromElement(element: ReactElement): StackRouteDescriptor | null {\n const type = element.type as {\n [STACK_ROUTE_KIND]?: StackPresentation | StackRouteDescriptor;\n };\n const descriptor = type[STACK_ROUTE_KIND];\n if (!descriptor) return null;\n if (typeof descriptor === 'string') return { presentation: descriptor };\n return descriptor;\n}\n\nfunction isStackRouteElement(node: ReactNode): node is ReactElement<RouterRouteProps> {\n return isValidElement(node) && routeDescriptorFromElement(node) != null;\n}\n\nfunction isTabBarItemElement(\n node: ReactNode,\n): node is ReactElement<RouterTabBarItemProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'tabbar-item'\n );\n}\n\nfunction isDrawerItemElement(\n node: ReactNode,\n): node is ReactElement<RouterDrawerItemProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'drawer-item'\n );\n}\n\nfunction isDrawerGroupElement(\n node: ReactNode,\n): node is ReactElement<RouterDrawerGroupProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'drawer-group'\n );\n}\n\nfunction isDrawerSectionElement(\n node: ReactNode,\n): node is ReactElement<RouterDrawerSectionProps> {\n return (\n isValidElement(node) &&\n routeDescriptorFromElement(node)?.container === 'drawer-section'\n );\n}\n\nfunction isSplitPrimaryElement(\n node: ReactNode,\n): node is ReactElement<RouterSplitViewSlotProps> {\n return (\n isValidElement(node) &&\n routeDescriptorFromElement(node)?.container === 'split-primary'\n );\n}\n\nfunction isSplitSecondaryElement(\n node: ReactNode,\n): node is ReactElement<RouterSplitViewSlotProps> {\n return (\n isValidElement(node) &&\n routeDescriptorFromElement(node)?.container === 'split-secondary'\n );\n}\n\nfunction isProtectedElement(node: ReactNode): node is ReactElement<RouterProtectedProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'protected'\n );\n}\n\nfunction isRedirectElement(node: ReactNode): node is ReactElement<RouterRedirectProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'redirect'\n );\n}\n\nfunction isElementType(value: RouterRouteElement): value is ElementType {\n if (isValidElement(value)) return false;\n if (typeof value === 'function') return true;\n if (typeof value !== 'object' || value === null) return false;\n const reactType = (value as { $$typeof?: symbol }).$$typeof;\n return reactType ? REACT_COMPONENT_TYPE_SYMBOLS.has(reactType) : false;\n}\n\nfunction flattenRouteNodes(children: ReactNode): ReactNode[] {\n const result: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment) {\n result.push(...flattenRouteNodes(child.props.children));\n return;\n }\n result.push(child);\n });\n\n return result;\n}\n\nfunction splitRouteChildren(children: RouterRouteChildren | undefined): {\n routeChildren: ReactElement<RouterRouteProps>[];\n renderChildren: RouterRouteChildren | undefined;\n} {\n if (typeof children === 'function') {\n return { routeChildren: [], renderChildren: children };\n }\n\n const childArray = flattenRouteNodes(children);\n const routeChildren: ReactElement<RouterRouteProps>[] = [];\n const nonRouteChildren: ReactNode[] = [];\n\n for (const child of childArray) {\n if (isStackRouteElement(child)) {\n routeChildren.push(child);\n } else {\n nonRouteChildren.push(child);\n }\n }\n\n if (routeChildren.length === 0) {\n return { routeChildren, renderChildren: children };\n }\n\n return {\n routeChildren,\n renderChildren: nonRouteChildren.length > 0 ? nonRouteChildren : undefined,\n };\n}\n\ninterface DrawerNavigationEntry {\n element: ReactElement<RouterDrawerItemProps>;\n item: RouterDrawerItem;\n}\n\ninterface DrawerNavigationCollection {\n nodes: RouterDrawerNode[];\n entries: DrawerNavigationEntry[];\n}\n\nfunction drawerItemFromElement(\n element: ReactElement<RouterDrawerItemProps>,\n parentPath: string | undefined,\n): RouterDrawerItem {\n const itemPath = joinRoutePath(parentPath, element.props.path) ?? '/';\n return {\n type: 'item',\n id: element.props.id ?? normalizedPath(itemPath),\n path: itemPath,\n label: element.props.label,\n icon: element.props.icon,\n badge: element.props.badge,\n hidden: element.props.hidden,\n };\n}\n\nfunction collectDrawerNavigation(\n routeChildren: ReactElement<RouterRouteProps>[],\n parentPath: string | undefined,\n parentId: string,\n): DrawerNavigationCollection {\n const nodes: RouterDrawerNode[] = [];\n const entries: DrawerNavigationEntry[] = [];\n\n routeChildren.forEach((child, index) => {\n if (isDrawerSectionElement(child)) {\n nodes.push({\n type: 'section',\n id: child.props.id ?? `${parentId}/drawer-section-${index}`,\n title: child.props.title,\n hidden: child.props.hidden,\n });\n return;\n }\n\n if (isDrawerItemElement(child)) {\n const item = drawerItemFromElement(child, parentPath);\n nodes.push(item);\n entries.push({ element: child, item });\n return;\n }\n\n if (!isDrawerGroupElement(child)) return;\n\n const groupChildren = splitRouteChildren(child.props.children).routeChildren;\n const groupEntries = groupChildren.filter(isDrawerItemElement).map((element) => {\n const item = drawerItemFromElement(element, parentPath);\n return { element, item };\n });\n\n if (groupEntries.length === 0) return;\n\n nodes.push({\n type: 'group',\n id: child.props.id ?? `${parentId}/drawer-group-${index}`,\n label: child.props.label,\n icon: child.props.icon,\n chevron: child.props.chevron,\n hidden: child.props.hidden,\n items: groupEntries.map((entry) => entry.item),\n });\n entries.push(...groupEntries);\n });\n\n return { nodes, entries };\n}\n\nfunction compiledRouteFromProps(\n props: RouterRouteProps,\n path: string | undefined,\n routeId: string,\n presentation: StackPresentation,\n animation: RouterScreenAnimation,\n renderChildren: RouterRouteChildren | undefined,\n inheritedGuards: CompiledRouteGuard[],\n): CompiledStackRoute | null {\n const elementType =\n props.element !== undefined && isElementType(props.element)\n ? props.element\n : undefined;\n const elementNode: ReactNode | undefined =\n props.element !== undefined && !elementType\n ? (props.element as ReactNode)\n : undefined;\n const hasRenderable =\n props.element !== undefined ||\n props.component !== undefined ||\n renderChildren !== undefined;\n\n if (!hasRenderable) return null;\n\n return {\n id: routeId,\n path,\n flowParent: props.flowParent,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n guards: inheritedGuards,\n stackKey: props.stackKey,\n fallback: props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n };\n}\n\nfunction compileStackRoutes(\n children: ReactNode,\n parentPath?: string,\n parentId = 'root',\n inheritedGuards: CompiledRouteGuard[] = [],\n): CompiledStackRoute[] {\n const routes: CompiledStackRoute[] = [];\n\n flattenRouteNodes(children).forEach((child, index) => {\n if (!isStackRouteElement(child)) return;\n\n const descriptor = routeDescriptorFromElement(child) ?? { presentation: 'push' };\n const presentation = descriptor.presentation;\n const props = child.props;\n const animation = props.animation ?? 'push';\n const path = joinRoutePath(parentPath, props.path);\n const { routeChildren, renderChildren } = splitRouteChildren(props.children);\n const routeId = props.id ?? `${parentId}/${index}:${path ?? '*'}:${presentation}`;\n\n if (isRedirectElement(child)) {\n routes.push({\n id: routeId,\n path,\n flowParent: props.flowParent,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n redirectTo: child.props.to,\n guards: inheritedGuards,\n stackKey: props.stackKey,\n fallback: props.fallback,\n });\n return;\n }\n\n if (isProtectedElement(child)) {\n const guard: CompiledRouteGuard = {\n id: props.id ?? routeId,\n when: child.props.when,\n redirectTo: child.props.redirectTo,\n pending: child.props.pending,\n };\n if (routeChildren.length > 0) {\n routes.push(\n ...compileStackRoutes(routeChildren, path, routeId, [\n ...inheritedGuards,\n guard,\n ]),\n );\n }\n return;\n }\n\n const elementType =\n props.element !== undefined && isElementType(props.element)\n ? props.element\n : undefined;\n const elementNode: ReactNode | undefined =\n props.element !== undefined && !elementType\n ? (props.element as ReactNode)\n : undefined;\n const hasRenderable =\n props.element !== undefined ||\n props.component !== undefined ||\n renderChildren !== undefined;\n\n if (isModalLikePresentation(presentation) && routeChildren.length > 0) {\n const compiledChildren = compileStackRoutes(\n routeChildren,\n path,\n routeId,\n inheritedGuards,\n );\n const nestedOverlays = compiledChildren.filter(\n (route) => route.presentation !== 'push',\n );\n const flowRoutes: CompiledStackRoute[] = [];\n const rootRoute = compiledRouteFromProps(\n props,\n path,\n `${routeId}/overlay-root`,\n 'push',\n animation,\n renderChildren,\n inheritedGuards,\n );\n\n if (rootRoute) flowRoutes.push(rootRoute);\n flowRoutes.push(\n ...compiledChildren.filter((route) => route.presentation === 'push'),\n );\n routes.push(...nestedOverlays);\n\n if (flowRoutes.length === 0) return;\n\n const overlayFlow: CompiledOverlayFlow = {\n id: `${routeId}/overlay-flow`,\n kind: presentation,\n routes: flowRoutes,\n entries: [],\n };\n\n for (const flowRoute of flowRoutes) {\n const entryRoute: CompiledStackRoute = {\n id: `${overlayFlow.id}:${flowRoute.id}`,\n path: flowRoute.path,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n redirectTo: flowRoute.redirectTo,\n guards: flowRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: flowRoute.fallback ?? props.fallback,\n childRoute: flowRoute,\n overlayFlow,\n };\n overlayFlow.entries.push(entryRoute);\n routes.push(entryRoute);\n }\n return;\n }\n\n if (descriptor.container === 'splitview') {\n const primarySlot = routeChildren.find(isSplitPrimaryElement);\n const secondarySlot = routeChildren.find(isSplitSecondaryElement);\n\n const compileSplitSlot = (\n slot: ReactElement<RouterSplitViewSlotProps> | undefined,\n slotName: 'primary' | 'secondary',\n ): CompiledStackRoute[] => {\n if (!slot) return [];\n\n const slotProps = slot.props;\n const slotPath = joinRoutePath(path, slotProps.path);\n const { routeChildren: slotRouteChildren, renderChildren: slotRenderChildren } =\n splitRouteChildren(slotProps.children);\n const slotRouteId = slotProps.id ?? `${routeId}/${slotName}`;\n const slotAnimation = slotProps.animation ?? 'push';\n const slotRoutes: CompiledStackRoute[] = [];\n const slotOwnRoute = compiledRouteFromProps(\n slotProps,\n slotPath,\n slotRouteId,\n presentation,\n slotAnimation,\n slotRenderChildren,\n inheritedGuards,\n );\n\n if (slotOwnRoute) {\n slotRoutes.push(slotOwnRoute);\n }\n\n if (slotRouteChildren.length > 0) {\n slotRoutes.push(\n ...compileStackRoutes(\n slotRouteChildren,\n slotPath,\n slotRouteId,\n inheritedGuards,\n ),\n );\n }\n\n return slotRoutes;\n };\n\n const primaryRoutes = compileSplitSlot(primarySlot, 'primary');\n const secondaryRoutes = compileSplitSlot(secondarySlot, 'secondary');\n\n for (const splitChildRoute of [...primaryRoutes, ...secondaryRoutes]) {\n if (splitChildRoute.presentation !== 'push') {\n routes.push(splitChildRoute);\n }\n }\n\n const primaryPushRoutes = primaryRoutes.filter(\n (route) => route.presentation === 'push',\n );\n const secondaryPushRoutes = secondaryRoutes.filter(\n (route) => route.presentation === 'push',\n );\n const defaultPrimaryRoute = primaryPushRoutes[0];\n\n if (!defaultPrimaryRoute) {\n return;\n }\n\n const minWidth =\n (props as RouterSplitViewProps).minWidth ?? DEFAULT_SPLIT_MIN_WIDTH;\n const primaryMaxWidth =\n (props as RouterSplitViewProps).primaryMaxWidth ??\n DEFAULT_SPLIT_PRIMARY_MAX_WIDTH;\n const secondaryMinWidth =\n (props as RouterSplitViewProps).secondaryMinWidth ??\n DEFAULT_SPLIT_SECONDARY_MIN_WIDTH;\n const wideMinWidth = splitViewWideMinWidth(\n minWidth,\n primaryMaxWidth,\n secondaryMinWidth,\n );\n const splitViewLayoutId = `${routeId}/splitview`;\n\n for (const primaryRoute of primaryPushRoutes) {\n routes.push({\n id: `${routeId}/splitview:primary:${primaryRoute.id}`,\n path: primaryRoute.path,\n presentation: primaryRoute.presentation,\n animation: primaryRoute.animation,\n overlayLayout: primaryRoute.overlayLayout,\n guards: primaryRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: primaryRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute: primaryRoute,\n splitView: {\n primaryRoute,\n secondaryRoutes: secondaryPushRoutes,\n activePane: 'primary',\n minWidth,\n primaryMaxWidth,\n secondaryMinWidth,\n wideMinWidth,\n layoutId: splitViewLayoutId,\n },\n });\n }\n\n for (const secondaryRoute of secondaryPushRoutes) {\n routes.push({\n id: `${routeId}/splitview:secondary:${secondaryRoute.id}`,\n path: secondaryRoute.path,\n presentation: secondaryRoute.presentation,\n animation: secondaryRoute.animation,\n overlayLayout: secondaryRoute.overlayLayout,\n guards: secondaryRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: secondaryRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute: secondaryRoute,\n splitView: {\n primaryRoute: defaultPrimaryRoute,\n secondaryRoute,\n secondaryRoutes: secondaryPushRoutes,\n activePane: 'secondary',\n minWidth,\n primaryMaxWidth,\n secondaryMinWidth,\n wideMinWidth,\n layoutId: splitViewLayoutId,\n },\n });\n }\n return;\n }\n\n if (descriptor.container === 'tabbar' || descriptor.container === 'drawer') {\n const isTabBar = descriptor.container === 'tabbar';\n const drawerNavigation = isTabBar\n ? null\n : collectDrawerNavigation(routeChildren, path, routeId);\n const navigationItems = isTabBar\n ? routeChildren.filter(isTabBarItemElement)\n : drawerNavigation!.entries.map((entry) => entry.element);\n\n if (navigationItems.length > 0) {\n const tabs: RouterTabBarTab[] | undefined = isTabBar\n ? (navigationItems as ReactElement<RouterTabBarItemProps>[]).map((item) => {\n const itemPath = joinRoutePath(path, item.props.path) ?? '/';\n return {\n id: item.props.id ?? normalizedPath(itemPath),\n path: itemPath,\n label: item.props.label,\n icon: item.props.icon,\n };\n })\n : undefined;\n const drawerItems = drawerNavigation?.nodes;\n\n navigationItems.forEach((item, itemIndex) => {\n const itemProps = item.props as RouterTabBarItemProps | RouterDrawerItemProps;\n const itemPath = joinRoutePath(path, itemProps.path);\n const navigationItem = isTabBar\n ? tabs?.[itemIndex]\n : drawerNavigation?.entries[itemIndex]?.item;\n if (!navigationItem) return;\n\n const { routeChildren: itemRouteChildren, renderChildren: itemRenderChildren } =\n splitRouteChildren(itemProps.children);\n const itemRouteId =\n itemProps.id ??\n `${routeId}/${descriptor.container}-${itemIndex}:${itemPath ?? '*'}:push`;\n const itemAnimation = itemProps.animation ?? 'push';\n const itemElementType =\n itemProps.element !== undefined && isElementType(itemProps.element)\n ? itemProps.element\n : undefined;\n const itemElementNode: ReactNode | undefined =\n itemProps.element !== undefined && !itemElementType\n ? (itemProps.element as ReactNode)\n : undefined;\n const itemHasRenderable =\n itemProps.element !== undefined ||\n itemProps.component !== undefined ||\n itemRenderChildren !== undefined;\n const itemChildRoutes: CompiledStackRoute[] = [];\n\n if (itemHasRenderable) {\n itemChildRoutes.push({\n id: itemRouteId,\n path: itemPath,\n presentation,\n animation: itemAnimation,\n overlayLayout: itemProps.overlayLayout,\n guards: inheritedGuards,\n stackKey: itemProps.stackKey,\n fallback: itemProps.fallback,\n element: itemElementNode,\n elementType: itemElementType,\n component: itemProps.component,\n layout: itemProps.layout,\n render:\n typeof itemRenderChildren === 'function' ? itemRenderChildren : undefined,\n childrenNode:\n typeof itemRenderChildren === 'function' ? undefined : itemRenderChildren,\n });\n }\n\n if (itemRouteChildren.length > 0) {\n itemChildRoutes.push(\n ...compileStackRoutes(\n itemRouteChildren,\n itemPath,\n itemRouteId,\n inheritedGuards,\n ),\n );\n }\n\n for (const childRoute of itemChildRoutes) {\n if (childRoute.presentation !== 'push') {\n routes.push(childRoute);\n continue;\n }\n\n const containerRoute: CompiledStackRoute = {\n id: `${routeId}/${descriptor.container}:${navigationItem.id}:${childRoute.id}`,\n path: childRoute.path,\n presentation: childRoute.presentation,\n animation: childRoute.animation,\n overlayLayout: childRoute.overlayLayout,\n guards: childRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: childRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode:\n typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute,\n drawerAside: isTabBar ? undefined : (props as RouterDrawerProps).aside,\n drawerFooter: isTabBar ? undefined : (props as RouterDrawerProps).footer,\n };\n\n if (isTabBar && tabs) {\n containerRoute.tabBar = {\n tabs,\n activeTab: navigationItem.id,\n };\n } else if (!isTabBar && drawerItems) {\n containerRoute.drawer = {\n items: drawerItems,\n activeItem: navigationItem.id,\n };\n }\n\n routes.push(containerRoute);\n }\n });\n return;\n }\n\n const compiledChildren =\n routeChildren.length > 0\n ? compileStackRoutes(routeChildren, path, routeId, inheritedGuards)\n : [];\n\n for (const childRoute of compiledChildren) {\n if (childRoute.presentation !== 'push') {\n routes.push(childRoute);\n continue;\n }\n\n routes.push({\n id: routeId,\n path: childRoute.path,\n presentation,\n animation: childRoute.animation,\n overlayLayout: childRoute.overlayLayout,\n guards: childRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: childRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute,\n });\n }\n return;\n }\n\n if (\n descriptor.container === 'tabbar-item' ||\n descriptor.container === 'drawer-group' ||\n descriptor.container === 'drawer-section' ||\n descriptor.container === 'drawer-item' ||\n descriptor.container === 'split-primary' ||\n descriptor.container === 'split-secondary'\n ) {\n return;\n }\n\n const compiledChildren =\n routeChildren.length > 0\n ? compileStackRoutes(routeChildren, path, routeId, inheritedGuards)\n : [];\n\n if (hasRenderable) {\n routes.push({\n id: routeId,\n path,\n flowParent: props.flowParent,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n guards: inheritedGuards,\n stackKey: props.stackKey,\n fallback: props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n });\n }\n\n if (compiledChildren.length > 0) {\n routes.push(...compiledChildren);\n }\n });\n\n return routes;\n}\n\nfunction matchStackRouteByPresentation(\n routes: CompiledStackRoute[],\n parser: ReturnType<typeof useWouterRouter>['parser'],\n pathname: string,\n presentations: ReadonlySet<StackPresentation>,\n): RouterRouteMatch | null {\n for (const route of routes) {\n if (!presentations.has(route.presentation)) continue;\n const [matches, params] = matchRoute(parser, route.path ?? '*', pathname);\n if (matches) {\n return {\n route,\n params: { ...params },\n };\n }\n }\n\n return null;\n}\n\nfunction splitViewRouteForCompiledRoute(\n route: CompiledStackRoute | undefined,\n): CompiledStackRoute | undefined {\n if (route?.container === 'splitview' && route.splitView) return route;\n if (route?.childRoute?.container === 'splitview' && route.childRoute.splitView) {\n return route.childRoute;\n }\n return undefined;\n}\n\nfunction stateForSplitNavigationTarget(\n state: unknown,\n targetMatch: RouterRouteMatch | null,\n action: 'navigate' | 'replace',\n): unknown {\n const origin = splitNavigationOriginFromState(state);\n if (!origin) return state;\n\n const next = mutableHistoryState(state);\n delete next[SPLIT_NAVIGATION_ORIGIN_KEY];\n\n const targetSplitRoute = splitViewRouteForCompiledRoute(targetMatch?.route);\n const targetSplit = targetSplitRoute?.splitView;\n if (\n !targetSplit ||\n targetSplit.layoutId !== origin.splitViewId ||\n targetSplit.activePane !== 'secondary'\n ) {\n delete next[SPLIT_NAVIGATION_KEY];\n return next;\n }\n\n const metadata: SplitNavigationMetadata =\n // A primary selection establishes a new detail root. Navigation initiated\n // inside secondary continues (or explicitly replaces) that detail path.\n origin.pane === 'primary'\n ? {\n splitViewId: origin.splitViewId,\n detailPathId: createRouterId(),\n detailDepth: 0,\n operation: 'selection',\n }\n : {\n splitViewId: origin.splitViewId,\n detailPathId: origin.detailPathId,\n detailDepth:\n action === 'navigate' ? origin.detailDepth + 1 : origin.detailDepth,\n operation: action === 'navigate' ? 'push' : 'replace',\n };\n\n next[SPLIT_NAVIGATION_KEY] = metadata;\n return next;\n}\n\nfunction routeRenderPropsForMatch(\n pathname: string,\n search: string,\n historyState: unknown,\n match: RouterRouteMatch,\n): RouterRouteRenderProps {\n return {\n params: match.params,\n pathname: normalizedPath(pathname),\n search,\n historyState,\n presentation: match.route.presentation,\n };\n}\n\nfunction resolveGuardValue<T>(\n value: RouterGuardValue<T>,\n props: RouterRouteRenderProps,\n): T {\n return typeof value === 'function'\n ? (value as (props: RouterRouteRenderProps) => T)(props)\n : value;\n}\n\ntype RouteGuardOutcome =\n | { status: 'allow' }\n | { status: 'redirect'; to: string }\n | { status: 'pending'; element: ReactNode };\n\nconst GUARD_ALLOW: RouteGuardOutcome = { status: 'allow' };\n\n/**\n * Guards resolve outside-in: the first one that is not `true` decides. An\n * undecided guard wins over a later denial — until it answers we cannot know\n * whether the later one would even be reached.\n */\nfunction resolveRouteGuard(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n historyState: unknown,\n): RouteGuardOutcome {\n const props = routeRenderPropsForMatch(pathname, search, historyState, match);\n\n for (const guard of match.route.guards) {\n const value = resolveGuardValue(guard.when, props);\n if (value === true) continue;\n if (value === false) {\n return { status: 'redirect', to: resolveGuardValue(guard.redirectTo, props) };\n }\n return { status: 'pending', element: guard.pending ?? null };\n }\n\n if (match.route.redirectTo) {\n return { status: 'redirect', to: resolveGuardValue(match.route.redirectTo, props) };\n }\n\n return GUARD_ALLOW;\n}\n\nfunction guardRedirectForMatch(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n historyState: unknown,\n): string | null {\n const outcome = resolveRouteGuard(match, pathname, search, historyState);\n return outcome.status === 'redirect' ? outcome.to : null;\n}\n\nconst PUSH_PRESENTATIONS = new Set<StackPresentation>(['push']);\nconst OVERLAY_PRESENTATIONS = new Set<StackPresentation>(['modal', 'sheet']);\n\nfunction parseNavigationTarget(\n to: string,\n currentPathname: string,\n): { pathname: string; search: string } {\n const base = `${window.location.origin}${currentPathname.startsWith('/') ? currentPathname : `/${currentPathname}`}`;\n const url = new URL(to, base);\n return {\n pathname: normalizedPath(url.pathname),\n search: url.search,\n };\n}\n\nfunction pathForRoutePattern(\n pattern: string | undefined,\n params: DefaultParams,\n): string | null {\n if (!pattern || pattern === '*') return null;\n\n let missingParam = false;\n const pathname = pattern.replace(/:([A-Za-z0-9_]+)/g, (_match, key: string) => {\n const value = params[key];\n if (value == null) {\n missingParam = true;\n return '';\n }\n return encodeURIComponent(String(value));\n });\n\n if (missingParam || pathname.includes('*')) return null;\n return normalizedPath(pathname);\n}\n\nfunction resolveStackKey(match: RouterRouteMatch, props: RouterRouteRenderProps): string {\n const { route } = match;\n if (typeof route.stackKey === 'function') return route.stackKey(props);\n if (typeof route.stackKey === 'string') return route.stackKey;\n return normalizedPath(props.pathname);\n}\n\nfunction stackSnapshot(\n pathname: string,\n search: string,\n historyState: unknown,\n match: RouterRouteMatch,\n): StackSnapshot {\n const normalized = normalizedPath(pathname);\n const historyIndex = historyIndexFromState(historyState);\n const historyNavigationKey =\n historyNavigationKeyFromState(historyState) ?? `navigation-${historyIndex}`;\n const props = routeRenderPropsForMatch(normalized, search, historyState, match);\n const stackKey = resolveStackKey(match, props);\n const splitNavigation = splitNavigationFromState(historyState);\n\n return {\n ...match,\n stackKey,\n locationKey: `${normalized}${search}:${historyIndex}:${historyNavigationKey}`,\n historyNavigationKey,\n pathname: normalized,\n search,\n historyState,\n historyIndex,\n historyCommit: historyCommitFromState(historyState),\n depth: routeDepth(normalized),\n presentation: match.route.presentation,\n splitNavigation,\n };\n}\n\nfunction resolveDirection(\n previous: StackSnapshot | undefined,\n current: StackSnapshot,\n): StackDirection {\n if (!previous) return 'forward';\n if (current.historyIndex < previous.historyIndex) return 'back';\n if (current.historyIndex > previous.historyIndex) return 'forward';\n if (current.depth < previous.depth) return 'back';\n return 'forward';\n}\n\nfunction createEntry(\n snapshot: StackSnapshot,\n enterDirection: StackDirection,\n animateEnter: boolean,\n): StackEntry {\n const transitionKey = animateEnter\n ? `${snapshot.stackKey}:${snapshot.locationKey}:${createRouterId()}`\n : `${snapshot.stackKey}:${snapshot.locationKey}`;\n\n return {\n ...snapshot,\n id: transitionKey,\n transitionKey,\n enterDirection,\n exitDirection: 'back',\n animateEnter,\n };\n}\n\nfunction markCommitted(entry: StackEntry): StackEntry {\n return entry.animateEnter ? { ...entry, animateEnter: false } : entry;\n}\n\nfunction mergeEntrySnapshot(entry: StackEntry, snapshot: StackSnapshot): StackEntry {\n return {\n ...entry,\n ...snapshot,\n id: entry.id,\n transitionKey: entry.transitionKey,\n animateEnter: entry.animateEnter,\n };\n}\n\nfunction isModalLikePresentation(\n presentation: StackPresentation,\n): presentation is ModalKind {\n return presentation === 'modal' || presentation === 'sheet';\n}\n\nfunction isTabBarStackEntry(entry: StackSnapshot): boolean {\n return entry.route.container === 'tabbar';\n}\n\nfunction isDrawerContainerUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n previous.stackKey === current.stackKey &&\n previous.route.container === 'drawer' &&\n current.route.container === 'drawer'\n );\n}\n\nfunction canNavigateBackWithinDrawer(\n previous: StackSnapshot | undefined,\n current: StackSnapshot | undefined,\n): boolean {\n if (!previous || !current) return false;\n\n return (\n previous.stackKey === current.stackKey &&\n previous.route.container === 'drawer' &&\n current.route.container === 'drawer' &&\n previous.route.drawer?.activeItem === current.route.drawer?.activeItem &&\n previous.pathname !== current.pathname\n );\n}\n\nfunction isTabBarContainerUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n previous.stackKey === current.stackKey &&\n (isTabBarStackEntry(previous) || isTabBarStackEntry(current))\n );\n}\n\nfunction stackEntryContentContainer(\n entry: StackSnapshot,\n): StackRouteContainer | undefined {\n return entry.route.childRoute?.container ?? entry.route.container;\n}\n\nfunction splitViewRouteForSnapshot(\n snapshot: StackSnapshot,\n): CompiledStackRoute | undefined {\n return splitViewRouteForCompiledRoute(snapshot.route);\n}\n\nfunction activeSplitViewLayout(layoutId: string): boolean | null {\n if (typeof document === 'undefined') return null;\n\n const splitViews = document.querySelectorAll<HTMLElement>(\n '.sigmela-split-view[data-router-split-view-id]',\n );\n\n for (const splitView of splitViews) {\n if (splitView.dataset.routerSplitViewId !== layoutId) continue;\n\n const stackScreen = splitView.closest<HTMLElement>(\n '[data-route-stack-screen=\"true\"]',\n );\n if (stackScreen?.dataset.routeStackPhase !== 'active') continue;\n\n const layout = splitView.dataset.layout;\n if (layout === 'wide') return true;\n if (layout === 'narrow') return false;\n }\n\n return null;\n}\n\nfunction isWideSplitViewRoute(route: CompiledStackRoute | undefined): boolean {\n const splitView = route?.splitView;\n if (\n !splitView ||\n typeof window === 'undefined' ||\n typeof window.matchMedia !== 'function'\n ) {\n return false;\n }\n\n const activeLayout = activeSplitViewLayout(splitView.layoutId);\n if (activeLayout !== null) return activeLayout;\n\n return window.matchMedia(`(min-width: ${splitView.wideMinWidth}px)`).matches;\n}\n\nfunction secondarySplitBackTarget(snapshot: StackSnapshot | undefined): string | null {\n if (!snapshot) return null;\n\n const splitRoute = splitViewRouteForSnapshot(snapshot);\n const splitView = splitRoute?.splitView;\n\n if (!splitView || splitView.activePane !== 'secondary') return null;\n if (!isWideSplitViewRoute(splitRoute)) return null;\n\n const currentPath = normalizedPath(snapshot.pathname);\n const parentSecondaryRoute = (splitView.secondaryRoutes ?? [])\n .map((route) => pathForRoutePattern(route.path, snapshot.params))\n .filter((path): path is string =>\n Boolean(path && path !== currentPath && currentPath.startsWith(`${path}/`)),\n )\n .sort((a, b) => routeDepth(b) - routeDepth(a))[0];\n\n if (parentSecondaryRoute) return parentSecondaryRoute;\n\n const target = pathForRoutePattern(splitView.primaryRoute.path, snapshot.params);\n if (!target || target === snapshot.pathname) return null;\n\n return target;\n}\n\nfunction canNavigateBackWithinSplit(\n previous: StackSnapshot | undefined,\n current: StackSnapshot | undefined,\n): boolean {\n if (!previous || !current) return false;\n\n const currentRoute = splitViewRouteForSnapshot(current);\n const previousRoute = splitViewRouteForSnapshot(previous);\n const currentSplit = currentRoute?.splitView;\n const previousSplit = previousRoute?.splitView;\n\n if (!currentSplit || currentSplit.activePane !== 'secondary') return false;\n if (!previousSplit) return false;\n if (!isWideSplitViewRoute(currentRoute)) return false;\n\n return (\n previous.stackKey === current.stackKey &&\n previousSplit.primaryRoute.id === currentSplit.primaryRoute.id\n );\n}\n\nfunction existingStackEntryIndexForSnapshot(\n entries: StackEntry[],\n snapshot: StackSnapshot,\n): number {\n const locationIndex = entries.findIndex(\n (entry) => entry.locationKey === snapshot.locationKey,\n );\n if (locationIndex !== -1) return locationIndex;\n\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (\n entry.stackKey === snapshot.stackKey &&\n entry.pathname === snapshot.pathname &&\n entry.search === snapshot.search\n ) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction syncTargetEntryIndex(entries: StackEntry[], snapshot: StackSnapshot): number {\n if (snapshot.historyCommit !== 'sync') return -1;\n return entries.findIndex(\n (entry) => entry.historyNavigationKey === snapshot.historyNavigationKey,\n );\n}\n\nfunction entriesRevealingSnapshot(\n entries: StackEntry[],\n existingIndex: number,\n snapshot: StackSnapshot,\n): StackEntry[] {\n const revealed = entries[existingIndex];\n const base = entries.slice(0, existingIndex).map(markCommitted);\n\n return [\n ...base,\n {\n ...revealed,\n ...snapshot,\n id: revealed.id,\n animateEnter: false,\n enterDirection: 'back',\n },\n ];\n}\n\nfunction previousStackEntry(\n entries: StackEntry[],\n active: StackEntry | undefined,\n): StackEntry | undefined {\n if (!active) return undefined;\n const activeIndex = entries.findIndex((entry) => entry.id === active.id);\n if (activeIndex <= 0) return undefined;\n return entries[activeIndex - 1];\n}\n\nfunction previousSnapshotInDetailPath(\n history: StackSnapshot[],\n current: StackSnapshot,\n): StackSnapshot | undefined {\n const navigation = current.splitNavigation;\n if (!navigation || navigation.detailDepth <= 0) return undefined;\n\n const currentIndex = history.findIndex(\n (entry) => entry.historyIndex === current.historyIndex,\n );\n if (currentIndex <= 0) return undefined;\n\n for (let index = currentIndex - 1; index >= 0; index -= 1) {\n const candidate = history[index];\n const candidateNavigation = candidate.splitNavigation;\n if (\n candidateNavigation?.splitViewId === navigation.splitViewId &&\n candidateNavigation.detailPathId === navigation.detailPathId &&\n candidateNavigation.detailDepth === navigation.detailDepth - 1\n ) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nfunction navigateToSnapshot(snapshot: StackSnapshot | undefined): boolean {\n if (!snapshot) return false;\n navigateWithHistoryIndex(`${snapshot.pathname}${snapshot.search}`, {\n commit: 'sync',\n state: snapshot.historyState,\n });\n return true;\n}\n\nfunction isWideSplitInternalUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n const previousRoute = splitViewRouteForSnapshot(previous);\n const currentRoute = splitViewRouteForSnapshot(current);\n const previousSplit = previousRoute?.splitView;\n const currentSplit = currentRoute?.splitView;\n\n if (!previousSplit || !currentSplit) return false;\n\n return (\n previous.stackKey === current.stackKey &&\n (previousSplit.activePane === 'secondary' ||\n currentSplit.activePane === 'secondary') &&\n previousSplit.primaryRoute.id === currentSplit.primaryRoute.id &&\n isWideSplitViewRoute(currentRoute)\n );\n}\n\nfunction isSameScreenRouteUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n previous.stackKey === current.stackKey &&\n previous.route.id === current.route.id &&\n previous.presentation === current.presentation\n );\n}\n\nfunction shouldReplaceActiveStackEntry(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n const isSecondaryPush =\n current.splitPane === 'secondary' && current.splitNavigation?.operation === 'push';\n\n return (\n (!current.forcePushRouteChanges &&\n !isSecondaryPush &&\n isSameScreenRouteUpdate(previous, current)) ||\n isWideSplitInternalUpdate(previous, current) ||\n isDrawerContainerUpdate(previous, current) ||\n isTabBarContainerUpdate(previous, current)\n );\n}\n\nfunction isExplicitStackReplace(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n current.historyCommit === 'replace' && previous.historyIndex === current.historyIndex\n );\n}\n\nfunction replaceActiveStackEntry(\n entries: StackEntry[],\n activeId: string,\n snapshot: StackSnapshot,\n direction: StackDirection,\n commitInactive: boolean,\n): StackEntry[] {\n return entries.map((entry) => {\n if (entry.id === activeId) {\n return {\n ...mergeEntrySnapshot(entry, snapshot),\n enterDirection: direction,\n };\n }\n return commitInactive ? markCommitted(entry) : entry;\n });\n}\n\nfunction presentationClass(presentation: StackPresentation): string {\n return presentation;\n}\n\nfunction activeAnimationClass(entry: StackEntry): StackAnimationType {\n if (entry.presentation !== 'push') return 'none';\n if (entry.route.animation === 'slide_from_bottom' && entry.enterDirection !== 'back') {\n return 'slide-from-bottom-enter';\n }\n return entry.enterDirection === 'back' ? 'pop-enter' : 'push-enter';\n}\n\nfunction exitingAnimationClass(entry: StackEntry): StackAnimationType {\n if (entry.presentation !== 'push') return 'none';\n if (entry.route.animation === 'slide_from_bottom' && entry.exitDirection === 'back') {\n return 'slide-from-bottom-exit';\n }\n return entry.exitDirection === 'back' ? 'pop-exit' : 'push-exit';\n}\n\nfunction inactiveAnimationClass(\n entry: StackEntry,\n activeEntry: StackEntry | undefined,\n direction: StackDirection,\n): StackAnimationType {\n if (entry.presentation !== 'push' || activeEntry?.presentation !== 'push') {\n return 'none';\n }\n\n if (activeEntry.route.animation === 'slide_from_bottom') {\n return 'none';\n }\n\n return direction === 'back' ? 'pop-background' : 'push-background';\n}\n\nfunction transitionStatusForEntry(\n entry: StackEntry,\n status: StackTransitionStatus | undefined,\n): StackTransitionStatus {\n if (status) return status;\n return entry.animateEnter ? 'preEnter' : 'entered';\n}\n\nfunction phaseForEntry(\n entry: StackEntry,\n activeIds: Set<string>,\n activeId: string | null,\n): StackPhase {\n if (!activeIds.has(entry.id)) return 'exiting';\n return entry.id === activeId ? 'active' : 'inactive';\n}\n\nfunction animationClassForEntry(\n entry: StackEntry,\n phase: StackPhase,\n activeEntry: StackEntry | undefined,\n direction: StackDirection,\n): StackAnimationType {\n if (phase === 'exiting') return exitingAnimationClass(entry);\n if (phase === 'active') return activeAnimationClass(entry);\n return inactiveAnimationClass(entry, activeEntry, direction);\n}\n\nfunction screenClassName(\n entry: StackEntry,\n phase: StackPhase,\n transitionStatus: StackTransitionStatus,\n animationType: StackAnimationType,\n): string {\n return [\n 'screen-stack-item',\n presentationClass(entry.presentation),\n animationType,\n `transition-${transitionStatus}`,\n `phase-${phase}`,\n ].join(' ');\n}\n\nfunction frozenLocationHook(pathname: string): BaseLocationHook {\n return () => [pathname, navigateWithHistoryIndex];\n}\n\nfunction searchParamsForSearch(search: string): URLSearchParams {\n return new URLSearchParams(search.startsWith('?') ? search.slice(1) : search);\n}\n\nfunction routeContextValue(entry: StackEntry): RouterRouteContextValue {\n return {\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n searchParams: searchParamsForSearch(entry.search),\n historyState: entry.historyState,\n presentation: entry.presentation,\n splitPane: entry.splitPane,\n };\n}\n\nfunction routeContextValueFromProps(\n props: RouterRouteRenderProps,\n): RouterRouteContextValue {\n return {\n ...props,\n searchParams: searchParamsForSearch(props.search),\n };\n}\n\nfunction pathnameForRouteContext(\n route: CompiledStackRoute,\n fallbackPathname: string,\n): string {\n const routePath = route.path;\n if (!routePath || routePath.includes(':') || routePath.includes('*')) {\n return fallbackPathname;\n }\n return normalizedPath(routePath);\n}\n\nfunction useMinWidth(minWidth: number): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(`(min-width: ${minWidth}px)`).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(`(min-width: ${minWidth}px)`);\n const handleChange = (event: MediaQueryListEvent) => setMatches(event.matches);\n\n setMatches(mediaQuery.matches);\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n const mediaQueryWithListener = mediaQuery as unknown as {\n addListener?: (handler: (event: MediaQueryListEvent) => void) => void;\n removeListener?: (handler: (event: MediaQueryListEvent) => void) => void;\n };\n mediaQueryWithListener.addListener?.(handleChange);\n return () => mediaQueryWithListener.removeListener?.(handleChange);\n }, [minWidth]);\n\n return matches;\n}\n\nfunction measuredElementWidth(element: HTMLElement): number {\n return element.getBoundingClientRect().width || element.clientWidth || 0;\n}\n\nfunction widthMatchesMinWidth(width: number, minWidth: number): boolean | null {\n if (width <= 0) return null;\n return width >= minWidth;\n}\n\nfunction useElementMinWidth(minWidth: number) {\n const ref = useRef<HTMLDivElement | null>(null);\n const viewportMatches = useMinWidth(minWidth);\n const [elementMatches, setElementMatches] = useState<boolean | null>(null);\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) {\n setElementMatches(null);\n return;\n }\n\n const updateWidth = (width: number) => {\n const nextMatches = widthMatchesMinWidth(width, minWidth);\n setElementMatches((currentMatches) =>\n currentMatches === nextMatches ? currentMatches : nextMatches,\n );\n };\n const measure = () => updateWidth(measuredElementWidth(element));\n\n measure();\n\n let observer: ResizeObserver | null = null;\n if (\n typeof window !== 'undefined' &&\n typeof window.ResizeObserver === 'function'\n ) {\n observer = new window.ResizeObserver((entries) => {\n updateWidth(entries[0]?.contentRect.width ?? measuredElementWidth(element));\n });\n observer.observe(element);\n }\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', measure);\n }\n\n return () => {\n observer?.disconnect();\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', measure);\n }\n };\n }, [minWidth]);\n\n return [ref, elementMatches ?? viewportMatches] as const;\n}\n\nexport function useRoute(): RouterRouteContextValue {\n const route = useContext(RouterRouteContext);\n if (!route) {\n throw new Error('Router route hooks must be used inside <Router>');\n }\n return route;\n}\n\nexport function useCurrentRoute(): RouterRouteContextValue {\n return useRoute();\n}\n\nexport function useParams<TParams extends DefaultParams = DefaultParams>(): TParams {\n return useRoute().params as TParams;\n}\n\nexport function useSearchParams(): URLSearchParams {\n return useRoute().searchParams;\n}\n\nexport function useHistoryState<TState = unknown>(): TState {\n return useRoute().historyState as TState;\n}\n\nexport function useRouter(): RouterApi {\n const router = useContext(RouterActionsContext);\n const splitPaneOrigin = useContext(SplitPaneNavigationContext);\n if (!router) {\n throw new Error('useRouter must be used inside <Router>');\n }\n\n return useMemo(() => {\n if (!splitPaneOrigin) return router;\n\n return {\n ...router,\n navigate: (to, options = {}) => {\n if (typeof to === 'number') {\n router.navigate(to, options);\n return;\n }\n router.navigate(to, {\n ...options,\n state: stateWithSplitNavigationOrigin(options.state, splitPaneOrigin),\n });\n },\n replace: (to, options = {}) => {\n router.replace(to, {\n ...options,\n state: stateWithSplitNavigationOrigin(options.state, splitPaneOrigin),\n });\n },\n };\n }, [router, splitPaneOrigin]);\n}\n\nexport function useDrawer(): RouterDrawerApi {\n const drawer = useContext(RouterDrawerContext);\n if (!drawer) {\n throw new Error('useDrawer must be used inside <Router.Drawer>');\n }\n return drawer;\n}\n\nexport interface CurrentModalApi {\n id: string;\n index: number;\n exiting: boolean;\n /** Begin close: triggers the modal's exit animation. The modal calls `remove()` on animation complete. */\n close: () => void;\n /** Synchronously drop from the stack. Modal implementations use this after their exit animation finishes. */\n remove: () => void;\n}\n\nexport function useCurrentModal(): CurrentModalApi {\n const current = useContext(CurrentModalContext);\n if (!current) {\n throw new Error('useCurrentModal called outside a Router modal/sheet entry');\n }\n return current;\n}\n\nfunction DefaultSplitViewLayout({\n children,\n primary,\n secondary,\n isWide,\n primaryMaxWidth = DEFAULT_SPLIT_PRIMARY_MAX_WIDTH,\n splitViewRef,\n splitViewLayoutId,\n}: RouterRouteLayoutProps) {\n return (\n <div\n ref={splitViewRef}\n className=\"sigmela-split-view\"\n data-layout={isWide ? 'wide' : 'narrow'}\n data-router-split-view-id={splitViewLayoutId}\n style={\n { '--sigmela-split-primary-max-width': `${primaryMaxWidth}px` } as CSSProperties\n }\n >\n <div className=\"sigmela-split-view__primary\">{isWide ? primary : children}</div>\n {isWide ? <div className=\"sigmela-split-view__secondary\">{secondary}</div> : null}\n </div>\n );\n}\n\nfunction DefaultDrawerLayout({\n children,\n aside,\n footer,\n items = [],\n activeItem,\n onItemChange,\n drawer,\n}: RouterRouteLayoutProps) {\n const [expandedGroups, setExpandedGroups] = useState<ReadonlySet<string>>(\n () => new Set(),\n );\n const toggleGroup = useCallback((id: string) => {\n setExpandedGroups((current) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n return (\n <div className=\"sigmela-drawer\" data-drawer-open={drawer?.isOpen ? 'true' : 'false'}>\n <aside className=\"sigmela-drawer__sidebar\">\n <div className=\"sigmela-drawer__sidebar-content\">\n {items\n .filter((node) => !node.hidden)\n .map((node) => {\n if (node.type === 'item') {\n return (\n <button\n key={node.id}\n type=\"button\"\n className=\"sigmela-drawer__item\"\n data-active={node.id === activeItem ? 'true' : undefined}\n onClick={() => onItemChange?.(node.id)}\n >\n {node.icon ? (\n <span className=\"sigmela-drawer__item-icon\">{node.icon}</span>\n ) : null}\n <span className=\"sigmela-drawer__item-label\">{node.label}</span>\n {node.badge ? (\n <span className=\"sigmela-drawer__item-badge\">{node.badge}</span>\n ) : null}\n </button>\n );\n }\n\n if (node.type === 'section') {\n return (\n <div key={node.id} className=\"sigmela-drawer__section-label\">\n {node.title}\n </div>\n );\n }\n\n const visibleItems = node.items.filter((item) => !item.hidden);\n if (visibleItems.length === 0) return null;\n const isExpanded = expandedGroups.has(node.id);\n const itemsId = `${node.id}-drawer-items`;\n\n return (\n <div key={node.id} className=\"sigmela-drawer__group-container\">\n <button\n type=\"button\"\n className=\"sigmela-drawer__item sigmela-drawer__group-label\"\n aria-controls={itemsId}\n aria-expanded={isExpanded}\n onClick={() => toggleGroup(node.id)}\n >\n {node.icon ? (\n <span className=\"sigmela-drawer__item-icon\">{node.icon}</span>\n ) : null}\n <span className=\"sigmela-drawer__item-label\">{node.label}</span>\n {node.chevron ? (\n <span\n className=\"sigmela-drawer__group-chevron\"\n data-expanded={isExpanded ? 'true' : undefined}\n aria-hidden=\"true\"\n >\n {node.chevron}\n </span>\n ) : null}\n </button>\n {isExpanded ? (\n <div id={itemsId} className=\"sigmela-drawer__group-items\">\n {visibleItems.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className=\"sigmela-drawer__item sigmela-drawer__subitem\"\n data-active={item.id === activeItem ? 'true' : undefined}\n onClick={() => onItemChange?.(item.id)}\n >\n {item.icon ? (\n <span className=\"sigmela-drawer__item-icon\">{item.icon}</span>\n ) : null}\n <span className=\"sigmela-drawer__item-label\">{item.label}</span>\n {item.badge ? (\n <span className=\"sigmela-drawer__item-badge\">\n {item.badge}\n </span>\n ) : null}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n {footer ? <div className=\"sigmela-drawer__footer\">{footer}</div> : null}\n </aside>\n <button\n type=\"button\"\n className=\"sigmela-drawer__overlay\"\n aria-label=\"Close navigation\"\n onClick={drawer?.close}\n />\n <main className=\"sigmela-drawer__main\">{children}</main>\n {aside ? <aside className=\"sigmela-drawer__assistant\">{aside}</aside> : null}\n </div>\n );\n}\n\nfunction FrozenPaneRouteContent({\n route,\n props,\n fallback,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n fallback: ReactNode;\n}) {\n const hook = useMemo(() => frozenLocationHook(props.pathname), [props.pathname]);\n const searchHook = useMemo(() => () => props.search, [props.search]);\n const routeContext = useMemo(() => routeContextValueFromProps(props), [props]);\n\n return (\n <WouterRouter hook={hook} searchHook={searchHook}>\n <RouterRouteContext.Provider value={routeContext}>\n <Suspense fallback={fallback}>{renderRouteContent(route, props)}</Suspense>\n </RouterRouteContext.Provider>\n </WouterRouter>\n );\n}\n\nfunction stackSnapshotForRouteProps(\n route: CompiledStackRoute,\n props: RouterRouteRenderProps,\n stackKey: string,\n forcePushRouteChanges = false,\n): StackSnapshot {\n const normalized = normalizedPath(props.pathname);\n const historyIndex = historyIndexFromState(props.historyState);\n const historyNavigationKey =\n historyNavigationKeyFromState(props.historyState) ?? `navigation-${historyIndex}`;\n const splitNavigation = splitNavigationFromState(props.historyState);\n\n return {\n route,\n params: props.params,\n stackKey,\n locationKey: `${normalized}${props.search}:${historyIndex}:${historyNavigationKey}`,\n historyNavigationKey,\n pathname: normalized,\n search: props.search,\n historyState: props.historyState,\n historyIndex,\n historyCommit: historyCommitFromState(props.historyState),\n depth: routeDepth(normalized),\n presentation: route.presentation,\n forcePushRouteChanges,\n splitPane: props.splitPane,\n splitNavigation,\n };\n}\n\nfunction propsForStackEntry(entry: StackEntry): RouterRouteRenderProps {\n return {\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n historyState: entry.historyState,\n presentation: entry.presentation,\n splitPane: entry.splitPane,\n };\n}\n\nfunction RouteStackViewport({\n route,\n props,\n fallback,\n stackKey,\n className = 'sigmela-split-pane-stack',\n contentClassName,\n scopeOverlayContent = false,\n forcePushRouteChanges = false,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n fallback: ReactNode;\n stackKey: string;\n className?: string;\n contentClassName?: string;\n scopeOverlayContent?: boolean;\n forcePushRouteChanges?: boolean;\n}) {\n const snapshot = useMemo(\n () =>\n stackSnapshotForRouteProps(\n route,\n props,\n stackKey,\n forcePushRouteChanges,\n ),\n [\n props.historyState,\n props.params,\n props.pathname,\n props.search,\n props.splitPane,\n forcePushRouteChanges,\n route,\n stackKey,\n ],\n );\n const [entries, setEntries] = useState<StackEntry[]>(() => [\n createEntry(snapshot, 'forward', false),\n ]);\n const [heldEnterIds, setHeldEnterIds] = useState<Set<string>>(() => new Set());\n const heldEnterIdsRef = useRef(heldEnterIds);\n const enterHoldCleanupRef = useRef<Map<string, () => void>>(new Map());\n const entryArchiveRef = useRef<Map<string, StackEntry>>(\n new Map(entries.map((entry) => [entry.id, entry])),\n );\n const { stateMap, setItem, toggle, deleteItem } = useTransitionMap<string>({\n timeout: ROUTE_TRANSITION_MS,\n preEnter: true,\n preExit: true,\n mountOnEnter: true,\n unmountOnExit: true,\n allowMultiple: true,\n });\n\n for (const entry of entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n heldEnterIdsRef.current = heldEnterIds;\n\n const releaseHeldEnter = useCallback((id: string) => {\n const cleanup = enterHoldCleanupRef.current.get(id);\n if (cleanup) cleanup();\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const holdEnterUntilPainted = useCallback((id: string, onRelease: () => void) => {\n if (heldEnterIdsRef.current.has(id) || enterHoldCleanupRef.current.has(id)) return;\n\n setHeldEnterIds((prev) => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n\n let frame = 0;\n let timeout = 0;\n const cleanup = () => {\n if (frame) window.cancelAnimationFrame(frame);\n if (timeout) window.clearTimeout(timeout);\n };\n\n frame = window.requestAnimationFrame(() => {\n timeout = window.setTimeout(() => {\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n onRelease();\n }, 0);\n });\n enterHoldCleanupRef.current.set(id, cleanup);\n }, []);\n\n useEffect(() => {\n return () => {\n for (const cleanup of enterHoldCleanupRef.current.values()) cleanup();\n enterHoldCleanupRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n setEntries((prev) => {\n const change = resolveStackChange(prev, snapshot);\n const nextIds = new Set(change.entries.map((entry) => entry.id));\n\n for (const entry of prev) {\n if (!nextIds.has(entry.id)) {\n entryArchiveRef.current.set(entry.id, {\n ...entry,\n animateEnter: false,\n exitDirection: change.direction,\n });\n }\n }\n\n for (const entry of change.entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n\n return change.entries;\n });\n }, [snapshot]);\n\n const visibleEntries = useMemo(\n () => visibleEntriesForSnapshot(entries, snapshot),\n [entries, snapshot],\n );\n const activeIds = useMemo(() => new Set(entries.map((entry) => entry.id)), [entries]);\n const visibleActiveIds = useMemo(\n () => new Set(visibleEntries.map((entry) => entry.id)),\n [visibleEntries],\n );\n const visibleActiveId = visibleEntries[visibleEntries.length - 1]?.id ?? null;\n const visibleActiveEntry = visibleEntries[visibleEntries.length - 1];\n const visibleStackDirection = visibleActiveEntry?.enterDirection ?? 'forward';\n const activeIdKey = useMemo(\n () => entries.map((entry) => entry.id).join('|'),\n [entries],\n );\n const mountedTransitionEntries = useMemo(\n () => Array.from(stateMap.entries()).filter(([, state]) => state.isMounted),\n [stateMap],\n );\n const isTransitionSettled = mountedTransitionEntries.every(\n ([, state]) => state.isResolved,\n );\n\n useLayoutEffect(() => {\n for (const entry of entries) {\n const state = stateMap.get(entry.id);\n if (!state) {\n setItem(entry.id, { initialEntered: !entry.animateEnter });\n if (entry.animateEnter) {\n holdEnterUntilPainted(entry.id, () => toggle(entry.id, true));\n }\n continue;\n }\n\n if (heldEnterIds.has(entry.id)) {\n continue;\n }\n\n if (!state.isEnter) {\n toggle(entry.id, true);\n }\n }\n\n for (const [id, state] of stateMap) {\n if (!activeIds.has(id) && state.isEnter) {\n releaseHeldEnter(id);\n toggle(id, false);\n }\n }\n }, [\n activeIdKey,\n activeIds,\n entries,\n heldEnterIds,\n holdEnterUntilPainted,\n releaseHeldEnter,\n setItem,\n stateMap,\n toggle,\n ]);\n\n useEffect(() => {\n const unmountedIds = Array.from(stateMap.entries())\n .filter(([, state]) => !state.isMounted)\n .map(([id]) => id);\n\n for (const id of unmountedIds) {\n if (activeIds.has(id)) continue;\n entryArchiveRef.current.delete(id);\n releaseHeldEnter(id);\n deleteItem(id);\n }\n }, [activeIds, deleteItem, releaseHeldEnter, stateMap]);\n\n const renderEntries = useMemo(() => {\n const result = [...visibleEntries];\n const visibleIds = new Set(visibleEntries.map((entry) => entry.id));\n\n for (const [id] of mountedTransitionEntries) {\n if (visibleIds.has(id)) continue;\n const entry = entryArchiveRef.current.get(id);\n if (!entry) continue;\n result.push(entry);\n }\n return result;\n }, [mountedTransitionEntries, visibleEntries]);\n\n return (\n <div\n className={`screen-stack ${className}`}\n data-animation={!isTransitionSettled ? 'true' : undefined}\n style={{ '--stack-transition-time': `${ROUTE_TRANSITION_MS}ms` } as CSSProperties}\n >\n {renderEntries.map((entry, index) => {\n const phase = phaseForEntry(entry, visibleActiveIds, visibleActiveId);\n const transitionStatus = heldEnterIds.has(entry.id)\n ? 'preEnter'\n : transitionStatusForEntry(entry, stateMap.get(entry.id)?.status);\n const animationType = animationClassForEntry(\n entry,\n phase,\n visibleActiveEntry,\n visibleStackDirection,\n );\n const zIndex = phase === 'exiting' ? renderEntries.length + index + 1 : index + 1;\n const routeContent = (\n <FrozenPaneRouteContent\n route={entry.route}\n props={propsForStackEntry(entry)}\n fallback={entry.route.fallback ?? fallback}\n />\n );\n const scopedContent = scopeOverlayContent ? (\n <OverlayContentScope contentKey={entry.historyNavigationKey}>\n {routeContent}\n </OverlayContentScope>\n ) : (\n routeContent\n );\n\n return (\n <div\n key={entry.id}\n data-route-stack-screen=\"true\"\n data-route-stack-key={entry.stackKey}\n data-route-stack-route-id={entry.route.id}\n data-route-stack-container={entry.route.container}\n data-route-stack-presentation={entry.presentation}\n data-route-stack-phase={phase}\n data-route-stack-transition={transitionStatus}\n className={screenClassName(entry, phase, transitionStatus, animationType)}\n aria-hidden={phase === 'active' ? undefined : true}\n inert={phase === 'active' ? undefined : true}\n style={{ zIndex }}\n >\n <div className=\"stack-screen-container\">\n {contentClassName ? (\n <div className={contentClassName}>{scopedContent}</div>\n ) : (\n scopedContent\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction SplitViewRouteContent({\n route,\n props,\n fallback,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n fallback: ReactNode;\n}) {\n const splitView = route.splitView;\n const [splitViewRef, isWide] = useElementMinWidth(\n splitView?.wideMinWidth ??\n splitViewWideMinWidth(DEFAULT_SPLIT_MIN_WIDTH, DEFAULT_SPLIT_PRIMARY_MAX_WIDTH),\n );\n\n if (!splitView) {\n return route.childRoute ? renderRouteContent(route.childRoute, props) : null;\n }\n\n const storedSplitNavigation = splitNavigationFromState(props.historyState);\n const detailPathId =\n storedSplitNavigation?.splitViewId === splitView.layoutId\n ? storedSplitNavigation.detailPathId\n : `${splitView.layoutId}:default`;\n const detailDepth =\n storedSplitNavigation?.splitViewId === splitView.layoutId\n ? storedSplitNavigation.detailDepth\n : 0;\n const primaryNavigationOrigin: SplitPaneNavigationOrigin = {\n splitViewId: splitView.layoutId,\n pane: 'primary',\n detailPathId,\n detailDepth,\n };\n const secondaryNavigationOrigin: SplitPaneNavigationOrigin = {\n splitViewId: splitView.layoutId,\n pane: 'secondary',\n detailPathId,\n detailDepth,\n };\n\n const primaryProps: RouterRouteRenderProps = {\n ...props,\n splitPane: 'primary',\n };\n const secondaryProps: RouterRouteRenderProps = splitView.secondaryRoute\n ? {\n ...props,\n pathname: pathnameForRouteContext(splitView.secondaryRoute, props.pathname),\n splitPane: 'secondary',\n }\n : props;\n const primary = (\n <SplitPaneNavigationContext.Provider value={primaryNavigationOrigin}>\n <FrozenPaneRouteContent\n route={splitView.primaryRoute}\n props={primaryProps}\n fallback={splitView.primaryRoute.fallback ?? fallback}\n />\n </SplitPaneNavigationContext.Provider>\n );\n const secondary = splitView.secondaryRoute ? (\n <SplitPaneNavigationContext.Provider value={secondaryNavigationOrigin}>\n {isWide ? (\n <RouteStackViewport\n // Changing primary selection discards the complete detail stack\n // without playing a secondary push/pop transition.\n key={detailPathId}\n route={splitView.secondaryRoute}\n props={secondaryProps}\n fallback={splitView.secondaryRoute.fallback ?? fallback}\n stackKey={`${route.id}:secondary`}\n />\n ) : (\n <FrozenPaneRouteContent\n route={splitView.secondaryRoute}\n props={secondaryProps}\n fallback={splitView.secondaryRoute.fallback ?? fallback}\n />\n )}\n </SplitPaneNavigationContext.Provider>\n ) : null;\n const activeContent =\n splitView.activePane === 'secondary' && secondary ? secondary : primary;\n const layoutProps: RouterRouteLayoutProps = {\n children: isWide ? primary : activeContent,\n primary,\n secondary,\n isWide,\n hasSecondary: Boolean(splitView.secondaryRoute),\n minWidth: splitView.minWidth,\n primaryMaxWidth: splitView.primaryMaxWidth,\n secondaryMinWidth: splitView.secondaryMinWidth,\n splitViewRef,\n splitViewLayoutId: splitView.layoutId,\n };\n\n if (route.layout) {\n return createElement(route.layout, layoutProps);\n }\n if (route.component) {\n return createElement(route.component, { ...props, ...layoutProps });\n }\n if (route.elementType) {\n return createElement(route.elementType, { ...props, ...layoutProps });\n }\n if (route.render) return route.render(props);\n\n return <DefaultSplitViewLayout {...layoutProps} />;\n}\n\nfunction DrawerRouteContent({\n route,\n props,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n}) {\n const [isOpen, setIsOpen] = useState(false);\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((value) => !value), []);\n const drawerApi = useMemo<RouterDrawerApi>(\n () => ({ isOpen, open, close, toggle }),\n [close, isOpen, open, toggle],\n );\n const childFallback = route.childRoute?.fallback ?? route.fallback ?? null;\n const drawer = route.drawer;\n const activeItem = drawer?.activeItem;\n const content = route.childRoute ? (\n <RouteStackViewport\n key={activeItem}\n route={route.childRoute}\n props={props}\n fallback={childFallback}\n stackKey={`${route.stackKey ?? route.id}:drawer:${activeItem ?? 'content'}`}\n />\n ) : null;\n const onItemChange = drawer\n ? (id: string) => {\n const item = findDrawerItem(drawer.items, id);\n if (item && normalizedPath(item.path) !== props.pathname) {\n navigateWithHistoryIndex(item.path);\n }\n close();\n }\n : undefined;\n const layoutProps: RouterRouteLayoutProps = {\n children: content,\n aside: route.drawerAside,\n footer: route.drawerFooter,\n portal: false,\n items: drawer?.items,\n activeItem: drawer?.activeItem,\n onItemChange,\n drawer: drawerApi,\n };\n\n let rendered: ReactNode;\n if (route.layout) {\n rendered = createElement(route.layout, layoutProps);\n } else if (route.component) {\n rendered = createElement(route.component, { ...props, ...layoutProps });\n } else if (route.elementType) {\n rendered = createElement(route.elementType, { ...props, ...layoutProps });\n } else if (route.render) {\n rendered = route.render(props);\n } else {\n rendered = <DefaultDrawerLayout {...layoutProps} />;\n }\n\n return (\n <RouterDrawerContext.Provider value={drawerApi}>\n {rendered}\n </RouterDrawerContext.Provider>\n );\n}\n\nfunction findDrawerItem(\n nodes: RouterDrawerNode[],\n id: string,\n): RouterDrawerItem | undefined {\n for (const node of nodes) {\n if (node.type === 'item') {\n if (node.id === id) return node;\n continue;\n }\n\n if (node.type === 'section') continue;\n\n const item = node.items.find((entry) => entry.id === id);\n if (item) return item;\n }\n\n return undefined;\n}\n\nfunction renderRouteContent(\n route: CompiledStackRoute,\n props: RouterRouteRenderProps,\n): ReactNode {\n if (route.container === 'splitview' && route.splitView) {\n return (\n <SplitViewRouteContent\n route={route}\n props={props}\n fallback={route.fallback ?? null}\n />\n );\n }\n\n if (route.component) {\n return createElement(route.component, props);\n }\n\n let content: ReactNode;\n if (route.elementType) {\n content = createElement(route.elementType, props);\n } else if (route.render) {\n content = route.render(props);\n } else if (route.childrenNode !== undefined) {\n content = route.childrenNode;\n } else {\n content = route.element;\n }\n\n if (!route.layout) return content;\n return createElement(route.layout, { children: content });\n}\n\nfunction renderCompiledRoute(entry: StackEntry): ReactNode {\n const props: RouterRouteRenderProps = {\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n historyState: entry.historyState,\n presentation: entry.presentation,\n };\n\n if (entry.route.container === 'drawer' && entry.route.childRoute) {\n return <DrawerRouteContent route={entry.route} props={props} />;\n }\n\n if (entry.route.container === 'tabbar' && entry.route.childRoute) {\n const childFallback = entry.route.childRoute.fallback ?? entry.route.fallback ?? null;\n const content = (\n <Suspense fallback={childFallback}>\n {renderRouteContent(entry.route.childRoute, props)}\n </Suspense>\n );\n const tabBar = entry.route.tabBar;\n const onTabChange = tabBar\n ? (id: string) => {\n const tab = tabBar.tabs.find((item) => item.id === id);\n if (tab && normalizedPath(tab.path) !== entry.pathname) {\n navigateWithHistoryIndex(tab.path);\n }\n }\n : undefined;\n const layoutProps: RouterRouteLayoutProps = {\n children: content,\n portal: false,\n tabs: tabBar?.tabs,\n activeTab: tabBar?.activeTab,\n onTabChange,\n };\n\n if (entry.route.layout) {\n return createElement(entry.route.layout, layoutProps);\n }\n if (entry.route.component) {\n return createElement(entry.route.component, { ...props, ...layoutProps });\n }\n if (entry.route.elementType) {\n return createElement(entry.route.elementType, { ...props, ...layoutProps });\n }\n if (entry.route.render) return entry.route.render(props);\n return content;\n }\n\n return renderRouteContent(entry.route, props);\n}\n\nconst FrozenStackEntry = memo(function FrozenStackEntry({\n entry,\n fallback,\n}: {\n entry: StackEntry;\n fallback: ReactNode;\n}) {\n const hook = useMemo(() => frozenLocationHook(entry.pathname), [entry.pathname]);\n const searchHook = useMemo(() => () => entry.search, [entry.search]);\n const routeContext = useMemo(() => routeContextValue(entry), [entry]);\n const suspenseFallback = entry.route.fallback ?? fallback;\n\n return (\n <WouterRouter hook={hook} searchHook={searchHook}>\n <RouterRouteContext.Provider value={routeContext}>\n <Suspense fallback={suspenseFallback}>{renderCompiledRoute(entry)}</Suspense>\n </RouterRouteContext.Provider>\n </WouterRouter>\n );\n});\n\nconst FrozenModalRouteEntry = memo(function FrozenModalRouteEntry({\n entry,\n fallback,\n}: {\n entry: RouterModalEntry;\n fallback: ReactNode;\n}) {\n const activeScreen = entry.flowScreens?.[entry.flowScreens.length - 1];\n if (activeScreen) {\n const props: RouterRouteRenderProps = {\n params: activeScreen.params,\n pathname: activeScreen.pathname,\n search: activeScreen.search,\n historyState: activeScreen.historyState,\n presentation: 'push',\n };\n\n return (\n <RouteStackViewport\n route={activeScreen.route}\n props={props}\n fallback={activeScreen.route.fallback ?? fallback}\n stackKey={`${entry.id}:overlay-flow`}\n className={`router-overlay-flow-stack router-overlay-flow-stack--${entry.kind}`}\n contentClassName=\"router-overlay-flow-screen\"\n scopeOverlayContent\n forcePushRouteChanges\n />\n );\n }\n\n return (\n <FrozenModalCompiledRouteEntry\n entry={entry}\n route={entry.route}\n fallback={fallback}\n />\n );\n});\n\nconst FrozenModalCompiledRouteEntry = memo(function FrozenModalCompiledRouteEntry({\n entry,\n route,\n fallback,\n}: {\n entry: RouterModalEntry;\n route: CompiledStackRoute;\n fallback: ReactNode;\n}) {\n const hook = useMemo(() => frozenLocationHook(entry.pathname), [entry.pathname]);\n const searchHook = useMemo(() => () => entry.search, [entry.search]);\n const routeContext = useMemo<RouterRouteContextValue>(\n () => ({\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n searchParams: searchParamsForSearch(entry.search),\n historyState: entry.historyState,\n presentation: entry.kind,\n }),\n [entry],\n );\n const props = useMemo<RouterRouteRenderProps>(\n () => ({\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n historyState: entry.historyState,\n presentation: entry.kind,\n }),\n [entry],\n );\n const suspenseFallback = route.fallback ?? fallback;\n const modalFallback =\n suspenseFallback ?? (entry.kind === 'sheet' ? DEFAULT_SHEET_FALLBACK : null);\n\n return (\n <WouterRouter hook={hook} searchHook={searchHook}>\n <RouterRouteContext.Provider value={routeContext}>\n <Suspense fallback={modalFallback}>{renderRouteContent(route, props)}</Suspense>\n </RouterRouteContext.Provider>\n </WouterRouter>\n );\n});\n\ninterface RouterModalStackHostProps {\n entries: RouterModalEntry[];\n close: (id: string) => void;\n remove: (id: string) => void;\n fallback: ReactNode;\n shell: RouterShellMode;\n}\n\nfunction RouterModalStackHost({\n entries,\n close,\n remove,\n fallback,\n shell,\n}: RouterModalStackHostProps) {\n return (\n <>\n {entries.map((entry, index) => (\n <RouterModalEntryHost\n key={entry.id}\n entry={entry}\n index={index}\n close={close}\n remove={remove}\n fallback={fallback}\n shell={shell}\n />\n ))}\n </>\n );\n}\n\ninterface RouterModalEntryHostProps {\n entry: RouterModalEntry;\n index: number;\n close: (id: string) => void;\n remove: (id: string) => void;\n fallback: ReactNode;\n shell: RouterShellMode;\n}\n\nconst RouterModalEntryHost = memo(function RouterModalEntryHost({\n entry,\n index,\n close,\n remove,\n fallback,\n shell,\n}: RouterModalEntryHostProps) {\n const closeSelf = useCallback(() => close(entry.id), [close, entry.id]);\n const removeSelf = useCallback(() => remove(entry.id), [remove, entry.id]);\n const current = useMemo<CurrentModalContextValue>(\n () => ({\n id: entry.id,\n index,\n exiting: entry.exiting,\n close: closeSelf,\n remove: removeSelf,\n }),\n [entry.id, entry.exiting, index, closeSelf, removeSelf],\n );\n const zIndex = OVERLAY_STACK_BASE_Z + index;\n const overlayShell = entry.route.overlayLayout ?? shell;\n const activeContentKey = entry.flowScreens\n ? historyNavigationKeyFromState(entry.historyState) ?? undefined\n : undefined;\n\n return (\n <CurrentModalContext.Provider value={current}>\n {entry.kind === 'sheet' ? (\n <SheetFrame\n open={!entry.exiting}\n onRequestClose={closeSelf}\n onExitComplete={removeSelf}\n zIndex={zIndex}\n shell={overlayShell}\n activeContentKey={activeContentKey}\n >\n <FrozenModalRouteEntry entry={entry} fallback={fallback} />\n </SheetFrame>\n ) : (\n <ModalFrame\n open={!entry.exiting}\n onRequestClose={closeSelf}\n onExitComplete={removeSelf}\n zIndex={zIndex}\n shell={overlayShell}\n activeContentKey={activeContentKey}\n >\n <FrozenModalRouteEntry entry={entry} fallback={fallback} />\n </ModalFrame>\n )}\n </CurrentModalContext.Provider>\n );\n});\n\ninterface StackChange {\n entries: StackEntry[];\n direction: StackDirection;\n}\n\nfunction resolveStackChange(prev: StackEntry[], snapshot: StackSnapshot): StackChange {\n const top = prev[prev.length - 1];\n\n if (!top) {\n return {\n entries: [createEntry(snapshot, 'forward', false)],\n direction: 'forward',\n };\n }\n\n if (top.locationKey === snapshot.locationKey) {\n return {\n entries: prev.map((entry) =>\n entry.id === top.id ? mergeEntrySnapshot(entry, snapshot) : markCommitted(entry),\n ),\n direction: 'forward',\n };\n }\n\n const direction = resolveDirection(top, snapshot);\n\n if (isExplicitStackReplace(top, snapshot)) {\n return {\n entries: replaceActiveStackEntry(prev, top.id, snapshot, direction, true),\n direction,\n };\n }\n\n const syncTargetIndex = syncTargetEntryIndex(prev, snapshot);\n if (syncTargetIndex !== -1 && syncTargetIndex !== prev.length - 1) {\n return {\n entries: entriesRevealingSnapshot(prev, syncTargetIndex, snapshot),\n direction: 'back',\n };\n }\n\n if (shouldReplaceActiveStackEntry(top, snapshot)) {\n return {\n entries: replaceActiveStackEntry(prev, top.id, snapshot, direction, true),\n direction,\n };\n }\n\n const existingIndex = existingStackEntryIndexForSnapshot(prev, snapshot);\n const revealsExistingEntry = existingIndex !== -1;\n const isBack = direction === 'back';\n\n if (isBack || revealsExistingEntry) {\n if (!revealsExistingEntry) {\n return {\n entries: [createEntry(snapshot, 'back', false)],\n direction: 'back',\n };\n }\n\n const revealed = prev[existingIndex];\n const base = prev.slice(0, existingIndex).map(markCommitted);\n\n return {\n entries: [\n ...base,\n {\n ...revealed,\n ...snapshot,\n id: revealed.id,\n animateEnter: false,\n enterDirection: 'back',\n },\n ],\n direction: 'back',\n };\n }\n\n return {\n entries: [...prev.map(markCommitted), createEntry(snapshot, 'forward', true)],\n direction: 'forward',\n };\n}\n\nfunction visibleEntriesForSnapshot(\n entries: StackEntry[],\n snapshot: StackSnapshot | null,\n): StackEntry[] {\n if (!snapshot) return entries;\n\n const top = entries[entries.length - 1];\n if (!top) {\n return [createEntry(snapshot, 'forward', false)];\n }\n\n if (top.locationKey === snapshot.locationKey) {\n return entries.map((entry) =>\n entry.id === top.id ? mergeEntrySnapshot(entry, snapshot) : entry,\n );\n }\n\n if (isExplicitStackReplace(top, snapshot)) {\n return replaceActiveStackEntry(\n entries,\n top.id,\n snapshot,\n resolveDirection(top, snapshot),\n false,\n );\n }\n\n const syncTargetIndex = syncTargetEntryIndex(entries, snapshot);\n if (syncTargetIndex !== -1 && syncTargetIndex !== entries.length - 1) {\n return entriesRevealingSnapshot(entries, syncTargetIndex, snapshot);\n }\n\n if (shouldReplaceActiveStackEntry(top, snapshot)) {\n return replaceActiveStackEntry(\n entries,\n top.id,\n snapshot,\n resolveDirection(top, snapshot),\n false,\n );\n }\n\n const direction = resolveDirection(top, snapshot);\n const existingIndex = existingStackEntryIndexForSnapshot(entries, snapshot);\n\n if (direction === 'back' || existingIndex !== -1) {\n if (existingIndex === -1) {\n return [createEntry(snapshot, 'back', false)];\n }\n\n const revealed = entries[existingIndex];\n const base = entries.slice(0, existingIndex).map(markCommitted);\n return [\n ...base,\n {\n ...revealed,\n ...snapshot,\n id: revealed.id,\n animateEnter: false,\n enterDirection: 'back',\n },\n ];\n }\n\n return entries;\n}\n\nfunction activeModalEntry(entries: RouterModalEntry[]): RouterModalEntry | undefined {\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n if (!entries[index].exiting) return entries[index];\n }\n return undefined;\n}\n\nfunction modalFlowScreenFromMatch(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n state: unknown,\n historyIndex: number,\n commit: HistoryCommit,\n): RouterModalFlowScreenEntry | null {\n const route = match.route.childRoute;\n if (!match.route.overlayFlow || !route) return null;\n\n return {\n overlayRoute: match.route,\n route,\n params: match.params,\n pathname,\n search,\n historyState: stateWithHistoryIndex(\n state,\n historyIndex,\n createRouterId(),\n commit,\n ),\n };\n}\n\n/**\n * Trims [pathname] down to the segment depth of the overlay flow root pattern.\n * Overlay children never change the browser URL, so the root screen carries the\n * pathname the flow would have been opened with.\n */\nfunction overlayFlowRootPathname(rootPath: string, pathname: string): string {\n const depth = rootPath.split('/').filter(Boolean).length;\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length <= depth) return pathname;\n return `/${segments.slice(0, depth).join('/')}`;\n}\n\n/**\n * Seeds the local stack of a freshly opened overlay flow.\n *\n * Navigating straight to a child (a deep link, or a flow entered at a later\n * step on purpose) must still leave the visitor standing on a stack: going back\n * from that first screen belongs inside the overlay, on its root, and only the\n * root closes the surface. Without this the flow would open one screen deep and\n * back would dismiss the whole thing.\n */\nfunction seedModalFlowScreens(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n state: unknown,\n): RouterModalFlowScreenEntry[] | undefined {\n const flow = match.route.overlayFlow;\n const rootEntry = flow?.entries[0];\n const rootRoute = flow?.routes[0];\n const targetRoute = match.route.childRoute;\n if (!flow || !rootEntry || !rootRoute || !targetRoute) {\n const target = modalFlowScreenFromMatch(\n match,\n pathname,\n search,\n state,\n 0,\n 'push',\n );\n return target ? [target] : undefined;\n }\n\n const routeChain: CompiledStackRoute[] = [targetRoute];\n const visitedRouteIds = new Set([targetRoute.id]);\n let currentRoute = targetRoute;\n\n while (currentRoute.flowParent) {\n const parentRoute = flow.routes.find(\n (route) => route.id === currentRoute.flowParent,\n );\n if (!parentRoute || visitedRouteIds.has(parentRoute.id)) break;\n routeChain.unshift(parentRoute);\n visitedRouteIds.add(parentRoute.id);\n currentRoute = parentRoute;\n }\n\n if (!visitedRouteIds.has(rootRoute.id)) {\n routeChain.unshift(rootRoute);\n }\n\n return routeChain.flatMap((route, historyIndex) => {\n const routeIndex = flow.routes.indexOf(route);\n const overlayRoute = flow.entries[routeIndex];\n if (!overlayRoute) return [];\n\n const resolvedPathname =\n route === targetRoute\n ? pathname\n : (pathForRoutePattern(route.path, match.params) ??\n (route === rootRoute && route.path\n ? overlayFlowRootPathname(route.path, pathname)\n : pathname));\n\n return [\n {\n overlayRoute,\n route,\n params: match.params,\n pathname: resolvedPathname,\n search,\n historyState: stateWithHistoryIndex(\n state,\n historyIndex,\n createRouterId(),\n 'push',\n ),\n },\n ];\n });\n}\n\nfunction RouterRuntime({\n children,\n fallback,\n shell = 'mobile-contained',\n}: RouterRootProps) {\n const [pathname] = useLocation();\n const search = useWouterSearch();\n const historyState = useBrowserHistoryState();\n const wouterRouter = useWouterRouter();\n const compiledRoutes = useMemo(() => compileStackRoutes(children), [children]);\n const runtimeChildren = useMemo(\n () => flattenRouteNodes(children).filter((child) => !isStackRouteElement(child)),\n [children],\n );\n const rawMatch = useMemo(\n () =>\n matchStackRouteByPresentation(\n compiledRoutes,\n wouterRouter.parser,\n pathname,\n PUSH_PRESENTATIONS,\n ),\n [compiledRoutes, pathname, wouterRouter.parser],\n );\n const fallbackNode = fallback ?? null;\n const [modalEntries, setModalEntries] = useState<RouterModalEntry[]>([]);\n const modalEntriesRef = useRef<RouterModalEntry[]>(modalEntries);\n const modalSeqRef = useRef(0);\n\n modalEntriesRef.current = modalEntries;\n\n useLayoutEffect(() => {\n ensureInitialHistoryIndex();\n }, []);\n\n useEffect(() => {\n document.documentElement.setAttribute('data-router-shell', shell);\n return () => {\n document.documentElement.removeAttribute('data-router-shell');\n };\n }, [shell]);\n\n const searchPath = search ? `?${search}` : '';\n const guardOutcome = useMemo(\n () =>\n rawMatch ? resolveRouteGuard(rawMatch, pathname, searchPath, historyState) : null,\n [historyState, pathname, rawMatch, searchPath],\n );\n const guardRedirect =\n guardOutcome?.status === 'redirect' ? guardOutcome.to : null;\n const matchedRoute = guardRedirect ? null : rawMatch;\n // An undecided guard keeps its match so nothing else — a catch-all redirect\n // above all — can claim the URL, and swaps the content for the pending node.\n // The route identity is preserved, so resolving simply re-renders in place.\n // Container routes (drawer/tabbar) keep their chrome: stripping `layout`\n // there would swap the shell for the default chrome, so only the content\n // pane inside the container is replaced with the pending node.\n const match = useMemo(() => {\n if (!matchedRoute) return null;\n if (guardOutcome?.status !== 'pending') return matchedRoute;\n const route = matchedRoute.route;\n if (route.container && route.childRoute) {\n return {\n ...matchedRoute,\n route: {\n ...route,\n childRoute: {\n ...route.childRoute,\n element: guardOutcome.element,\n elementType: undefined,\n component: undefined,\n layout: undefined,\n overlayLayout: undefined,\n render: undefined,\n childrenNode: undefined,\n container: undefined,\n childRoute: undefined,\n splitView: undefined,\n },\n },\n } satisfies RouterRouteMatch;\n }\n return {\n ...matchedRoute,\n route: {\n ...route,\n element: guardOutcome.element,\n elementType: undefined,\n component: undefined,\n layout: undefined,\n overlayLayout: undefined,\n },\n } satisfies RouterRouteMatch;\n }, [guardOutcome, matchedRoute]);\n\n useLayoutEffect(() => {\n if (!guardRedirect) return;\n const target = parseNavigationTarget(guardRedirect, pathname);\n if (target.pathname === normalizedPath(pathname) && target.search === searchPath) {\n return;\n }\n navigateWithHistoryIndex(`${target.pathname}${target.search}`, { commit: 'sync' });\n }, [guardRedirect, pathname, searchPath]);\n\n const snapshot = useMemo(() => {\n if (!match) return null;\n return stackSnapshot(pathname, searchPath, historyState, match);\n }, [historyState, match, pathname, searchPath]);\n const snapshotHistoryRef = useRef<StackSnapshot[]>([]);\n\n const [entries, setEntries] = useState<StackEntry[]>(() =>\n snapshot ? [createEntry(snapshot, 'forward', false)] : [],\n );\n const [heldEnterIds, setHeldEnterIds] = useState<Set<string>>(() => new Set());\n const heldEnterIdsRef = useRef(heldEnterIds);\n const enterHoldCleanupRef = useRef<Map<string, () => void>>(new Map());\n const entryArchiveRef = useRef<Map<string, StackEntry>>(\n new Map(entries.map((entry) => [entry.id, entry])),\n );\n const { stateMap, setItem, toggle, deleteItem } = useTransitionMap<string>({\n timeout: ROUTE_TRANSITION_MS,\n preEnter: true,\n preExit: true,\n mountOnEnter: true,\n unmountOnExit: true,\n allowMultiple: true,\n });\n\n for (const entry of entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n const entriesRef = useRef<StackEntry[]>(entries);\n entriesRef.current = entries;\n heldEnterIdsRef.current = heldEnterIds;\n\n const releaseHeldEnter = useCallback((id: string) => {\n const cleanup = enterHoldCleanupRef.current.get(id);\n if (cleanup) cleanup();\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const holdEnterUntilPainted = useCallback((id: string, onRelease: () => void) => {\n if (heldEnterIdsRef.current.has(id) || enterHoldCleanupRef.current.has(id)) return;\n\n setHeldEnterIds((prev) => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n\n let frame = 0;\n let timeout = 0;\n const cleanup = () => {\n if (frame) window.cancelAnimationFrame(frame);\n if (timeout) window.clearTimeout(timeout);\n };\n frame = window.requestAnimationFrame(() => {\n timeout = window.setTimeout(() => {\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n onRelease();\n }, 0);\n });\n enterHoldCleanupRef.current.set(id, cleanup);\n }, []);\n\n useEffect(() => {\n return () => {\n for (const cleanup of enterHoldCleanupRef.current.values()) cleanup();\n enterHoldCleanupRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!snapshot) return;\n snapshotHistoryRef.current = updateSnapshotHistory(\n snapshotHistoryRef.current,\n snapshot,\n );\n\n setEntries((prev) => {\n const change = resolveStackChange(prev, snapshot);\n const nextIds = new Set(change.entries.map((entry) => entry.id));\n\n for (const entry of prev) {\n if (!nextIds.has(entry.id)) {\n entryArchiveRef.current.set(entry.id, {\n ...entry,\n animateEnter: false,\n exitDirection: change.direction,\n });\n }\n }\n\n for (const entry of change.entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n\n return change.entries;\n });\n }, [snapshot]);\n\n const visibleEntries = useMemo(\n () => visibleEntriesForSnapshot(entries, snapshot),\n [entries, snapshot],\n );\n const activeIds = useMemo(() => new Set(entries.map((entry) => entry.id)), [entries]);\n const visibleActiveIds = useMemo(\n () => new Set(visibleEntries.map((entry) => entry.id)),\n [visibleEntries],\n );\n const visibleActiveId = visibleEntries[visibleEntries.length - 1]?.id ?? null;\n const visibleActiveEntry = visibleEntries[visibleEntries.length - 1];\n const visibleActiveEntryRef = useRef<StackEntry | undefined>(undefined);\n visibleActiveEntryRef.current = visibleActiveEntry;\n const visibleStackDirection = visibleActiveEntry?.enterDirection ?? 'forward';\n const activeIdKey = useMemo(\n () => entries.map((entry) => entry.id).join('|'),\n [entries],\n );\n const mountedTransitionEntries = useMemo(\n () => Array.from(stateMap.entries()).filter(([, state]) => state.isMounted),\n [stateMap],\n );\n const isTransitionSettled = mountedTransitionEntries.every(\n ([, state]) => state.isResolved,\n );\n\n useLayoutEffect(() => {\n for (const entry of entries) {\n const state = stateMap.get(entry.id);\n if (!state) {\n setItem(entry.id, { initialEntered: !entry.animateEnter });\n if (entry.animateEnter) {\n holdEnterUntilPainted(entry.id, () => toggle(entry.id, true));\n }\n continue;\n }\n\n if (heldEnterIds.has(entry.id)) {\n continue;\n }\n\n if (!state.isEnter) {\n toggle(entry.id, true);\n }\n }\n\n for (const [id, state] of stateMap) {\n if (!activeIds.has(id) && state.isEnter) {\n releaseHeldEnter(id);\n toggle(id, false);\n }\n }\n }, [\n activeIdKey,\n activeIds,\n entries,\n heldEnterIds,\n holdEnterUntilPainted,\n releaseHeldEnter,\n setItem,\n stateMap,\n toggle,\n ]);\n\n useEffect(() => {\n const unmountedIds = Array.from(stateMap.entries())\n .filter(([, state]) => !state.isMounted)\n .map(([id]) => id);\n\n for (const id of unmountedIds) {\n if (activeIds.has(id)) continue;\n entryArchiveRef.current.delete(id);\n releaseHeldEnter(id);\n deleteItem(id);\n }\n }, [activeIds, deleteItem, releaseHeldEnter, stateMap]);\n\n const renderEntries = useMemo(() => {\n const result = [...visibleEntries];\n\n for (const [id] of mountedTransitionEntries) {\n if (visibleActiveIds.has(id)) continue;\n const entry = entryArchiveRef.current.get(id);\n if (!entry) continue;\n\n result.push(entry);\n }\n return result;\n }, [visibleActiveIds, visibleEntries, mountedTransitionEntries]);\n\n const removeModal = useCallback((id: string) => {\n setModalEntries((prev) => prev.filter((entry) => entry.id !== id));\n }, []);\n\n const closeModal = useCallback((id: string) => {\n setModalEntries((prev) => {\n let changed = false;\n const next = prev.map((entry) => {\n if (entry.id !== id || entry.exiting) return entry;\n changed = true;\n return { ...entry, exiting: true };\n });\n return changed ? next : prev;\n });\n }, []);\n\n const closeAllModals = useCallback(() => {\n setModalEntries((prev) => {\n let changed = false;\n const next = prev.map((entry) => {\n if (entry.exiting) return entry;\n changed = true;\n return { ...entry, exiting: true };\n });\n return changed ? next : prev;\n });\n }, []);\n\n const goBackTopModal = useCallback((): boolean => {\n const entry = activeModalEntry(modalEntriesRef.current);\n if (!entry) return false;\n\n if (entry.flowScreens && entry.flowScreens.length > 1) {\n setModalEntries((current) =>\n current.map((candidate) => {\n if (candidate.id !== entry.id || !candidate.flowScreens) return candidate;\n\n const flowScreens = candidate.flowScreens.slice(0, -1);\n const activeScreen = flowScreens[flowScreens.length - 1];\n if (!activeScreen) return candidate;\n\n return {\n ...candidate,\n route: activeScreen.overlayRoute,\n params: activeScreen.params,\n pathname: activeScreen.pathname,\n search: activeScreen.search,\n historyState: activeScreen.historyState,\n flowScreens,\n };\n }),\n );\n return true;\n }\n\n closeModal(entry.id);\n return true;\n }, [closeModal]);\n\n const updateActiveModalFlow = useCallback(\n (\n match: RouterRouteMatch,\n target: { pathname: string; search: string },\n state: unknown,\n operation: 'push' | 'replace',\n ): boolean => {\n const entry = activeModalEntry(modalEntriesRef.current);\n const flow = match.route.overlayFlow;\n if (\n !entry?.flowScreens ||\n !flow ||\n entry.route.overlayFlow?.id !== flow.id\n ) {\n return false;\n }\n\n const historyIndex =\n operation === 'replace'\n ? Math.max(0, entry.flowScreens.length - 1)\n : entry.flowScreens.length;\n const screen = modalFlowScreenFromMatch(\n match,\n target.pathname,\n target.search,\n state,\n historyIndex,\n operation,\n );\n if (!screen) return false;\n\n setModalEntries((current) =>\n current.map((candidate) => {\n if (candidate.id !== entry.id || !candidate.flowScreens) return candidate;\n\n if (operation === 'push') {\n let existingIndex = -1;\n for (\n let index = candidate.flowScreens.length - 1;\n index >= 0;\n index -= 1\n ) {\n const existing = candidate.flowScreens[index];\n if (\n existing.route.id === screen.route.id &&\n normalizedPath(existing.pathname) ===\n normalizedPath(screen.pathname) &&\n existing.search === screen.search\n ) {\n existingIndex = index;\n break;\n }\n }\n\n if (existingIndex !== -1) {\n const existing = candidate.flowScreens[existingIndex];\n const navigationKey =\n historyNavigationKeyFromState(existing.historyState) ??\n createRouterId();\n const revealedScreen: RouterModalFlowScreenEntry = {\n ...screen,\n historyState: stateWithHistoryIndex(\n state,\n existingIndex,\n navigationKey,\n 'sync',\n ),\n };\n const flowScreens = [\n ...candidate.flowScreens.slice(0, existingIndex),\n revealedScreen,\n ];\n\n return {\n ...candidate,\n route: revealedScreen.overlayRoute,\n params: revealedScreen.params,\n pathname: revealedScreen.pathname,\n search: revealedScreen.search,\n historyState: revealedScreen.historyState,\n flowScreens,\n };\n }\n }\n\n const flowScreens =\n operation === 'replace'\n ? [...candidate.flowScreens.slice(0, -1), screen]\n : [...candidate.flowScreens, screen];\n\n return {\n ...candidate,\n route: screen.overlayRoute,\n params: screen.params,\n pathname: screen.pathname,\n search: screen.search,\n historyState: screen.historyState,\n flowScreens,\n };\n }),\n );\n return true;\n },\n [],\n );\n\n const pushModalEntry = useCallback(\n (entry: Omit<RouterModalEntry, 'id' | 'exiting'>, replace = false) => {\n modalSeqRef.current += 1;\n const id = `${entry.kind}:${modalSeqRef.current}-${createRouterId()}`;\n const nextEntry: RouterModalEntry = { ...entry, id, exiting: false };\n setModalEntries((prev) => {\n if (replace && prev.length > 0) {\n return [...prev.slice(0, -1), nextEntry];\n }\n return [...prev, nextEntry];\n });\n return id;\n },\n [],\n );\n\n const navigate = useCallback<RouterNavigateFunction>(\n (to, options = {}) => {\n if (typeof to === 'number') {\n if (to < 0 && goBackTopModal()) return;\n window.history.go(to);\n return;\n }\n\n const target = parseNavigationTarget(to, pathname);\n const overlayMatch = matchStackRouteByPresentation(\n compiledRoutes,\n wouterRouter.parser,\n target.pathname,\n OVERLAY_PRESENTATIONS,\n );\n\n if (overlayMatch && isModalLikePresentation(overlayMatch.route.presentation)) {\n const overlayState = stateForSplitNavigationTarget(\n options.state,\n null,\n 'navigate',\n );\n const overlayRedirect = guardRedirectForMatch(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n if (overlayRedirect) {\n navigateWithHistoryIndex(overlayRedirect, { commit: 'sync' });\n return;\n }\n\n if (updateActiveModalFlow(overlayMatch, target, overlayState, 'push')) {\n return;\n }\n\n const initialFlowScreens = seedModalFlowScreens(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n const activeFlowScreen = initialFlowScreens?.[initialFlowScreens.length - 1];\n pushModalEntry({\n kind: overlayMatch.route.presentation,\n route: overlayMatch.route,\n params: overlayMatch.params,\n pathname: target.pathname,\n search: target.search,\n historyState: activeFlowScreen?.historyState ?? overlayState,\n flowScreens: initialFlowScreens,\n });\n return;\n }\n\n const pushMatch = matchStackRouteByPresentation(\n compiledRoutes,\n wouterRouter.parser,\n target.pathname,\n PUSH_PRESENTATIONS,\n );\n navigateWithHistoryIndex(to, {\n ...options,\n state: stateForSplitNavigationTarget(options.state, pushMatch, 'navigate'),\n });\n },\n [\n compiledRoutes,\n goBackTopModal,\n pathname,\n pushModalEntry,\n updateActiveModalFlow,\n wouterRouter.parser,\n ],\n );\n\n const replace = useCallback<RouterReplaceFunction>(\n (to, options = {}) => {\n const target = parseNavigationTarget(to, pathname);\n const overlayMatch = matchStackRouteByPresentation(\n compiledRoutes,\n wouterRouter.parser,\n target.pathname,\n OVERLAY_PRESENTATIONS,\n );\n\n if (overlayMatch && isModalLikePresentation(overlayMatch.route.presentation)) {\n const overlayState = stateForSplitNavigationTarget(\n options.state,\n null,\n 'replace',\n );\n const overlayRedirect = guardRedirectForMatch(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n if (overlayRedirect) {\n navigateWithHistoryIndex(overlayRedirect, {\n commit: 'replace',\n state: options.state,\n });\n return;\n }\n\n if (updateActiveModalFlow(overlayMatch, target, overlayState, 'replace')) {\n return;\n }\n\n const initialFlowScreens = seedModalFlowScreens(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n const activeFlowScreen = initialFlowScreens?.[initialFlowScreens.length - 1];\n pushModalEntry(\n {\n kind: overlayMatch.route.presentation,\n route: overlayMatch.route,\n params: overlayMatch.params,\n pathname: target.pathname,\n search: target.search,\n historyState: activeFlowScreen?.historyState ?? overlayState,\n flowScreens: initialFlowScreens,\n },\n true,\n );\n return;\n }\n\n const pushMatch = matchStackRouteByPresentation(\n compiledRoutes,\n wouterRouter.parser,\n target.pathname,\n PUSH_PRESENTATIONS,\n );\n navigateWithHistoryIndex(to, {\n commit: 'replace',\n state: stateForSplitNavigationTarget(options.state, pushMatch, 'replace'),\n });\n },\n [\n compiledRoutes,\n pathname,\n pushModalEntry,\n updateActiveModalFlow,\n wouterRouter.parser,\n ],\n );\n\n const goBack = useCallback((): boolean => {\n if (goBackTopModal()) return true;\n\n const activeEntry = visibleActiveEntryRef.current;\n const activeSplitRoute = activeEntry\n ? splitViewRouteForSnapshot(activeEntry)\n : undefined;\n const activeSplitNavigation = activeEntry?.splitNavigation;\n\n if (\n activeEntry &&\n activeSplitRoute?.splitView?.activePane === 'secondary' &&\n activeSplitNavigation\n ) {\n const previousDetailSnapshot = previousSnapshotInDetailPath(\n snapshotHistoryRef.current,\n activeEntry,\n );\n if (navigateToSnapshot(previousDetailSnapshot)) return true;\n\n const splitRootTarget = secondarySplitBackTarget(activeEntry);\n if (splitRootTarget) {\n navigateWithHistoryIndex(`${splitRootTarget}${activeEntry.search}`, {\n commit: 'sync',\n state: stateWithoutSplitNavigation(activeEntry.historyState),\n });\n return true;\n }\n }\n\n const previousSnapshot = previousSnapshotFromHistory(\n snapshotHistoryRef.current,\n activeEntry,\n );\n\n if (canNavigateBackWithinDrawer(previousSnapshot, activeEntry)) {\n return navigateToSnapshot(previousSnapshot);\n }\n\n const previousEntry = previousStackEntry(entriesRef.current, activeEntry);\n if (navigateToSnapshot(previousEntry)) return true;\n\n if (canNavigateBackWithinSplit(previousSnapshot, activeEntry)) {\n return navigateToSnapshot(previousSnapshot);\n }\n\n const splitBackTarget = secondarySplitBackTarget(activeEntry);\n if (splitBackTarget) {\n navigateWithHistoryIndex(`${splitBackTarget}${activeEntry?.search ?? ''}`, {\n commit: 'sync',\n state: activeEntry?.historyState,\n });\n return true;\n }\n\n return false;\n }, [goBackTopModal]);\n\n const router = useMemo<RouterApi>(\n () => ({\n navigate,\n replace,\n close: closeModal,\n closeAll: closeAllModals,\n goBack,\n }),\n [closeAllModals, closeModal, goBack, navigate, replace],\n );\n\n useEffect(() => {\n if (visibleActiveEntry) {\n document.documentElement.setAttribute(\n 'data-route-stack-active-key',\n visibleActiveEntry.stackKey,\n );\n document.documentElement.setAttribute(\n 'data-route-stack-active-presentation',\n visibleActiveEntry.presentation,\n );\n }\n\n return () => {\n document.documentElement.removeAttribute('data-route-stack-active-key');\n document.documentElement.removeAttribute('data-route-stack-active-presentation');\n };\n }, [visibleActiveEntry]);\n\n if (guardRedirect) {\n return (\n <RouterActionsContext.Provider value={router}>\n {runtimeChildren}\n {fallbackNode}\n </RouterActionsContext.Provider>\n );\n }\n\n if (!snapshot && entries.length === 0) {\n return (\n <RouterActionsContext.Provider value={router}>\n {runtimeChildren}\n {fallbackNode}\n <RouterModalStackHost\n entries={modalEntries}\n close={closeModal}\n remove={removeModal}\n fallback={fallbackNode}\n shell={shell}\n />\n </RouterActionsContext.Provider>\n );\n }\n\n return (\n <RouterActionsContext.Provider value={router}>\n {runtimeChildren}\n <div\n className=\"screen-stack\"\n data-router-shell={shell}\n data-animation={!isTransitionSettled ? 'true' : undefined}\n style={{ '--stack-transition-time': `${ROUTE_TRANSITION_MS}ms` } as CSSProperties}\n >\n {renderEntries.map((entry, index) => {\n const phase = phaseForEntry(entry, visibleActiveIds, visibleActiveId);\n const transitionStatus = heldEnterIds.has(entry.id)\n ? 'preEnter'\n : transitionStatusForEntry(entry, stateMap.get(entry.id)?.status);\n const animationType = animationClassForEntry(\n entry,\n phase,\n visibleActiveEntry,\n visibleStackDirection,\n );\n const zIndex =\n phase === 'exiting' ? renderEntries.length + index + 1 : index + 1;\n const contentContainer = stackEntryContentContainer(entry);\n\n return (\n <div\n key={entry.id}\n data-route-stack-screen=\"true\"\n data-route-stack-key={entry.stackKey}\n data-route-stack-route-id={entry.route.id}\n data-route-stack-container={entry.route.container}\n data-route-stack-content-container={contentContainer}\n data-route-stack-presentation={entry.presentation}\n data-route-stack-phase={phase}\n data-route-stack-transition={transitionStatus}\n className={screenClassName(entry, phase, transitionStatus, animationType)}\n style={{ zIndex }}\n >\n <div className=\"stack-screen-container\">\n <FrozenStackEntry entry={entry} fallback={fallbackNode} />\n </div>\n </div>\n );\n })}\n </div>\n <RouterModalStackHost\n entries={modalEntries}\n close={closeModal}\n remove={removeModal}\n fallback={fallbackNode}\n shell={shell}\n />\n </RouterActionsContext.Provider>\n );\n}\n\nfunction RouterRoot(props: RouterRootProps) {\n return (\n <WouterRouter\n aroundNav={(_navigate, to, options) => {\n navigateWithHistoryIndex(to, options);\n }}\n >\n <RouterRuntime {...props} />\n </WouterRouter>\n );\n}\n\nconst RouterScreen = routeComponent('push');\nconst RouterStack = routeComponent('push');\nconst RouterModal = routeComponent('modal');\nconst RouterSheet = routeComponent('sheet');\nconst RouterTabBar = routeComponent('push', 'tabbar');\nconst RouterTabBarItem = routeComponent<RouterTabBarItemProps>('push', 'tabbar-item');\nconst RouterDrawer = routeComponent<RouterDrawerProps>('push', 'drawer');\nconst RouterDrawerGroup = routeComponent<RouterDrawerGroupProps>('push', 'drawer-group');\nconst RouterDrawerSection = routeComponent<RouterDrawerSectionProps>(\n 'push',\n 'drawer-section',\n);\nconst RouterDrawerItem = routeComponent<RouterDrawerItemProps>('push', 'drawer-item');\nconst RouterSplitViewPrimary = routeComponent<RouterSplitViewSlotProps>(\n 'push',\n 'split-primary',\n);\nconst RouterSplitViewSecondary = routeComponent<RouterSplitViewSlotProps>(\n 'push',\n 'split-secondary',\n);\nconst RouterSplitView = Object.assign(\n routeComponent<RouterSplitViewProps>('push', 'splitview'),\n {\n Primary: RouterSplitViewPrimary,\n Secondary: RouterSplitViewSecondary,\n },\n);\nconst RouterProtected = routeComponent<RouterProtectedProps>('push', 'protected');\nconst RouterRedirect = routeComponent<RouterRedirectProps>('push', 'redirect');\n\nexport const Router = Object.assign(RouterRoot, {\n Screen: RouterScreen,\n Stack: RouterStack,\n Redirect: RouterRedirect,\n Modal: RouterModal,\n Sheet: RouterSheet,\n TabBar: RouterTabBar,\n TabBarItem: RouterTabBarItem,\n Drawer: RouterDrawer,\n DrawerGroup: RouterDrawerGroup,\n DrawerSection: RouterDrawerSection,\n DrawerItem: RouterDrawerItem,\n SplitView: RouterSplitView,\n Protected: RouterProtected,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/pageScrollLock.ts","../src/components/sheetDragEngine.ts","../src/components/SheetSurface.tsx","../src/components/RouterCloseButton.tsx","../src/components/OverlayContentScope.tsx","../src/components/Modal.tsx","../src/components/Sheet.tsx","../src/navigationHistory.ts","../src/utils/id.ts","../src/Router.tsx"],"names":["useEffect","shell","jsx","jsxs","createContext","useContext","useCallback","swipeTarget","options","useMemo","useState","scrollElement","useLayoutEffect","Fragment","browserNavigate","compiledChildren","useRef","WouterRouter","FrozenStackEntry","FrozenModalRouteEntry","FrozenModalCompiledRouteEntry","RouterModalEntryHost","existingIndex","useWouterSearch","useBrowserHistoryState","useWouterRouter","match","flowScreens","replace","compiledRoutes","pathname"],"mappings":"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","file":"index.js","sourcesContent":["import { useEffect } from 'react';\nimport { disableScroll, enableScroll } from '@fluejs/noscroll';\n\nlet pageScrollLockCount = 0;\n\nexport function getPageScrollElement(): HTMLElement | null {\n return (\n document.querySelector<HTMLElement>(\n '.screen-stack > .screen-stack-item.phase-active > .stack-screen-container',\n ) ?? document.getElementById('root')\n );\n}\n\nexport function usePageScrollLock(active: boolean) {\n useEffect(() => {\n if (!active) return;\n\n const scrollEl = getPageScrollElement();\n if (!scrollEl) return;\n\n pageScrollLockCount += 1;\n if (pageScrollLockCount === 1) {\n disableScroll(scrollEl);\n }\n\n return () => {\n pageScrollLockCount = Math.max(0, pageScrollLockCount - 1);\n if (pageScrollLockCount === 0) {\n enableScroll(scrollEl);\n }\n };\n }, [active]);\n}\n","import { useEffect, type RefObject } from 'react';\n\nexport const SHEET_DRAG_EPS = 0.5;\nexport const SHEET_DRAG_START_DISTANCE = 2;\n\nexport interface SheetDragUpdate {\n clientY: number;\n deltaY: number;\n totalY: number;\n velocityY: number;\n event: TouchEvent | PointerEvent;\n}\n\ninterface SheetDragEngineOptions<T extends HTMLElement> {\n targetRef: RefObject<T | null>;\n enabled: boolean;\n minDragDistance?: number;\n ignoreStartTarget?: (target: EventTarget | null) => boolean;\n shouldStart: (update: SheetDragUpdate) => boolean;\n onStart: (update: SheetDragUpdate) => void;\n onMove: (update: SheetDragUpdate) => void;\n onEnd: (update: SheetDragUpdate) => void;\n suppressClickOnDrag?: boolean;\n}\n\nexport function sheetScrollAtTop(el: HTMLElement | null): boolean {\n return !el || el.scrollTop <= SHEET_DRAG_EPS;\n}\n\nexport function sheetDragStartsInInteractiveControl(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n return Boolean(\n target.closest(\n 'button,a,input,textarea,select,[role=\"button\"],[data-sheet-drag-ignore=\"true\"]',\n ),\n );\n}\n\nexport function sheetDragStartsInTextInput(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n return Boolean(\n target.closest(\n 'input,textarea,select,[contenteditable=\"true\"],[data-sheet-drag-ignore=\"true\"]',\n ),\n );\n}\n\nexport function useSheetDragEngine<T extends HTMLElement = HTMLElement>({\n targetRef,\n enabled,\n minDragDistance = SHEET_DRAG_START_DISTANCE,\n ignoreStartTarget,\n shouldStart,\n onStart,\n onMove,\n onEnd,\n suppressClickOnDrag = false,\n}: SheetDragEngineOptions<T>) {\n useEffect(() => {\n if (!enabled) return;\n const target = targetRef.current;\n if (!target) return;\n\n const drag = {\n active: false,\n tracking: false,\n pointerId: -1,\n startY: 0,\n lastY: 0,\n lastT: 0,\n velocityY: 0,\n lastClientY: 0,\n lastTotalY: 0,\n };\n let suppressNextClick = false;\n let clearSuppressClickTimer = 0;\n\n const clearSuppressNextClick = () => {\n suppressNextClick = false;\n if (clearSuppressClickTimer) {\n window.clearTimeout(clearSuppressClickTimer);\n clearSuppressClickTimer = 0;\n }\n };\n\n const scheduleSuppressClickClear = () => {\n if (!suppressClickOnDrag) return;\n if (clearSuppressClickTimer) window.clearTimeout(clearSuppressClickTimer);\n clearSuppressClickTimer = window.setTimeout(() => {\n suppressNextClick = false;\n clearSuppressClickTimer = 0;\n }, 350);\n };\n\n const beginTracking = (clientY: number) => {\n drag.active = false;\n drag.tracking = true;\n drag.pointerId = -1;\n drag.startY = clientY;\n drag.lastY = clientY;\n drag.lastT = performance.now();\n drag.velocityY = 0;\n drag.lastClientY = clientY;\n drag.lastTotalY = 0;\n };\n\n const resetTracking = () => {\n drag.active = false;\n drag.tracking = false;\n drag.pointerId = -1;\n drag.velocityY = 0;\n drag.lastTotalY = 0;\n };\n\n const makeUpdate = (\n clientY: number,\n event: TouchEvent | PointerEvent,\n now: number,\n ): SheetDragUpdate => {\n const deltaY = clientY - drag.lastY;\n const totalY = clientY - drag.startY;\n const dt = Math.max(1, now - drag.lastT);\n const velocityY = (deltaY / dt) * 1000;\n return { clientY, deltaY, totalY, velocityY, event };\n };\n\n const updateTracking = (clientY: number, event: TouchEvent | PointerEvent) => {\n if (!drag.tracking) return;\n const now = performance.now();\n const update = makeUpdate(clientY, event, now);\n drag.lastClientY = clientY;\n drag.lastTotalY = update.totalY;\n\n if (!drag.active) {\n if (Math.abs(update.totalY) <= minDragDistance) {\n drag.lastY = clientY;\n drag.lastT = now;\n return;\n }\n if (!shouldStart(update)) {\n drag.lastY = clientY;\n drag.lastT = now;\n return;\n }\n\n drag.active = true;\n if (suppressClickOnDrag) suppressNextClick = true;\n if (event instanceof PointerEvent) {\n try {\n target.setPointerCapture(event.pointerId);\n } catch {\n // Pointer capture is best-effort; movement still works while the pointer stays over target.\n }\n }\n onStart(update);\n }\n\n if (event.cancelable) event.preventDefault();\n drag.velocityY = update.velocityY;\n onMove(update);\n drag.lastY = clientY;\n drag.lastT = now;\n };\n\n const finishTracking = (event: TouchEvent | PointerEvent) => {\n if (!drag.tracking) return;\n const now = performance.now();\n const update = makeUpdate(drag.lastClientY, event, now);\n const wasActive = drag.active;\n if (event instanceof PointerEvent) {\n try {\n target.releasePointerCapture(event.pointerId);\n } catch {\n // See setPointerCapture fallback above.\n }\n }\n const velocityY = drag.velocityY || update.velocityY;\n resetTracking();\n if (!wasActive) return;\n if (event.cancelable) event.preventDefault();\n scheduleSuppressClickClear();\n onEnd({ ...update, velocityY });\n };\n\n const onTouchStart = (event: TouchEvent) => {\n if (event.touches.length !== 1 || ignoreStartTarget?.(event.target)) {\n resetTracking();\n return;\n }\n beginTracking(event.touches[0]?.clientY ?? 0);\n };\n\n const onTouchMove = (event: TouchEvent) => {\n if (event.touches.length !== 1) return;\n updateTracking(event.touches[0]?.clientY ?? drag.lastY, event);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (\n event.pointerType === 'touch' ||\n !event.isPrimary ||\n event.button !== 0 ||\n ignoreStartTarget?.(event.target)\n ) {\n resetTracking();\n return;\n }\n beginTracking(event.clientY);\n drag.pointerId = event.pointerId;\n };\n\n const onPointerMove = (event: PointerEvent) => {\n if (!drag.tracking || drag.pointerId !== event.pointerId) return;\n updateTracking(event.clientY, event);\n };\n\n const onPointerEnd = (event: PointerEvent) => {\n if (!drag.tracking || drag.pointerId !== event.pointerId) return;\n finishTracking(event);\n };\n\n const onClickCapture = (event: MouseEvent) => {\n if (!suppressNextClick) return;\n clearSuppressNextClick();\n event.preventDefault();\n event.stopPropagation();\n };\n\n target.addEventListener('touchstart', onTouchStart, { passive: true });\n target.addEventListener('touchmove', onTouchMove, { passive: false });\n target.addEventListener('touchend', finishTracking, { passive: false });\n target.addEventListener('touchcancel', finishTracking, { passive: false });\n target.addEventListener('pointerdown', onPointerDown);\n target.addEventListener('pointermove', onPointerMove, { passive: false });\n target.addEventListener('pointerup', onPointerEnd);\n target.addEventListener('pointercancel', onPointerEnd);\n if (suppressClickOnDrag) target.addEventListener('click', onClickCapture, true);\n\n return () => {\n target.removeEventListener('touchstart', onTouchStart);\n target.removeEventListener('touchmove', onTouchMove);\n target.removeEventListener('touchend', finishTracking);\n target.removeEventListener('touchcancel', finishTracking);\n target.removeEventListener('pointerdown', onPointerDown);\n target.removeEventListener('pointermove', onPointerMove);\n target.removeEventListener('pointerup', onPointerEnd);\n target.removeEventListener('pointercancel', onPointerEnd);\n if (suppressClickOnDrag) target.removeEventListener('click', onClickCapture, true);\n if (clearSuppressClickTimer) window.clearTimeout(clearSuppressClickTimer);\n };\n }, [\n enabled,\n ignoreStartTarget,\n minDragDistance,\n onEnd,\n onMove,\n onStart,\n shouldStart,\n suppressClickOnDrag,\n targetRef,\n ]);\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { animate, motion, useMotionValue } from 'motion/react';\nimport { usePageScrollLock } from './pageScrollLock';\nimport {\n sheetDragStartsInTextInput,\n sheetScrollAtTop,\n useSheetDragEngine,\n type SheetDragUpdate,\n} from './sheetDragEngine';\nimport type { RouterShellMode } from '../types';\n\nconst SHEET_SPRING = { type: 'spring', bounce: 0, duration: 0.38 } as const;\nconst CLOSE_DISTANCE = 112;\nconst CLOSE_VELOCITY = 850;\nconst DRAG_START_DISTANCE = 6;\nconst PROJECT_VELOCITY_FACTOR = 0.18;\n\nexport type SheetSurfaceMode = 'content' | 'fullscreen';\nexport type SheetSurfaceCloseTarget = 'surface' | 'viewport';\n\ninterface SheetSurfaceProps {\n children: ReactNode;\n open: boolean;\n onRequestClose: () => void;\n onExitComplete: () => void;\n zIndex: number;\n mode: SheetSurfaceMode;\n canDismiss?: boolean;\n swipeToClose?: boolean;\n backdrop?: boolean;\n backdropClassName?: string;\n backdropStyle?: CSSProperties;\n shellClassName?: string;\n surfaceClassName: string;\n surfaceStyle?: CSSProperties;\n scrollElement?: HTMLElement | null;\n ariaLabel?: string;\n shell?: RouterShellMode;\n closeTarget?: SheetSurfaceCloseTarget;\n}\n\nfunction closeTargetY(surface: HTMLElement | null, target: SheetSurfaceCloseTarget): number {\n if (target === 'viewport') return window.innerHeight + 32;\n return (surface?.getBoundingClientRect().height || window.innerHeight) + 32;\n}\n\nexport function SheetSurface({\n children,\n open,\n onRequestClose,\n onExitComplete,\n zIndex,\n mode,\n canDismiss = true,\n swipeToClose = true,\n backdrop = false,\n backdropClassName,\n backdropStyle,\n shellClassName,\n surfaceClassName,\n surfaceStyle,\n scrollElement,\n ariaLabel,\n shell = 'mobile-contained',\n closeTarget = 'surface',\n}: SheetSurfaceProps) {\n const surfaceRef = useRef<HTMLDivElement | null>(null);\n const removeRef = useRef(onExitComplete);\n const requestCloseRef = useRef(onRequestClose);\n const closingOffsetRef = useRef(0);\n const closingRef = useRef(false);\n const y = useMotionValue(window.innerHeight);\n\n removeRef.current = onExitComplete;\n requestCloseRef.current = onRequestClose;\n\n usePageScrollLock(true);\n\n const requestClose = useCallback(\n (offset = 0) => {\n if (!canDismiss || closingRef.current) return;\n closingOffsetRef.current = offset;\n requestCloseRef.current();\n },\n [canDismiss],\n );\n\n const closeWithAnimation = useCallback(\n (offset = 0) => {\n if (closingRef.current) return;\n closingRef.current = true;\n const target = closeTargetY(surfaceRef.current, closeTarget);\n y.stop();\n y.set(Math.max(0, offset));\n const controls = animate(y, target, SHEET_SPRING);\n void controls.finished.then(\n () => {\n removeRef.current();\n },\n () => {\n closingRef.current = false;\n },\n );\n },\n [closeTarget, y],\n );\n\n useEffect(() => {\n if (!open) {\n closeWithAnimation(closingOffsetRef.current);\n return;\n }\n y.set(window.innerHeight);\n const controls = animate(y, 0, SHEET_SPRING);\n return () => controls.stop();\n }, [closeWithAnimation, open, y]);\n\n useEffect(() => {\n if (!canDismiss || !open) return;\n const handler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n const higherSurface = Array.from(\n document.querySelectorAll<HTMLElement>('.router-overlay-shell'),\n ).some((shell) => Number(shell.style.zIndex) > zIndex);\n if (!higherSurface) requestClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [canDismiss, open, requestClose, zIndex]);\n\n const shouldStartDrag = useCallback(\n (update: SheetDragUpdate) => update.totalY > 0 && sheetScrollAtTop(scrollElement ?? null),\n [scrollElement],\n );\n\n const handleDragStart = useCallback(() => {\n y.stop();\n }, [y]);\n\n const handleDragMove = useCallback(\n (update: SheetDragUpdate) => {\n y.set(Math.max(0, y.get() + update.deltaY));\n },\n [y],\n );\n\n const handleDragEnd = useCallback(\n (update: SheetDragUpdate) => {\n const offset = y.get();\n const projected = offset + update.velocityY * PROJECT_VELOCITY_FACTOR;\n if (projected > CLOSE_DISTANCE || update.velocityY > CLOSE_VELOCITY) {\n requestClose(offset);\n return;\n }\n y.stop();\n void animate(y, 0, SHEET_SPRING).finished.catch(() => {});\n },\n [requestClose, y],\n );\n\n useSheetDragEngine({\n targetRef: surfaceRef,\n enabled: swipeToClose && canDismiss,\n minDragDistance: DRAG_START_DISTANCE,\n ignoreStartTarget: sheetDragStartsInTextInput,\n shouldStart: shouldStartDrag,\n onStart: handleDragStart,\n onMove: handleDragMove,\n onEnd: handleDragEnd,\n suppressClickOnDrag: true,\n });\n\n const baseShellClassName =\n mode === 'fullscreen'\n ? 'router-overlay-shell router-overlay-shell--fullscreen'\n : 'router-overlay-shell router-overlay-shell--content';\n const overlayShellClassName = shellClassName\n ? `${baseShellClassName} ${shellClassName}`\n : baseShellClassName;\n\n const shellStyle = useMemo<CSSProperties>(\n () => ({\n zIndex,\n }),\n [zIndex],\n );\n\n const node = (\n <div className={overlayShellClassName} data-router-shell={shell} style={shellStyle}>\n {backdrop ? (\n <motion.button\n type=\"button\"\n aria-label=\"Close\"\n className={`pointer-events-auto absolute inset-0 border-0 p-0 ${backdropClassName ?? ''}`}\n style={backdropStyle}\n initial={{ opacity: 0 }}\n animate={{ opacity: open ? 1 : 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={() => requestClose()}\n />\n ) : null}\n <motion.div\n ref={surfaceRef}\n className={surfaceClassName}\n style={{ ...surfaceStyle, y }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n >\n {children}\n </motion.div>\n </div>\n );\n\n return node;\n}\n","interface RouterCloseButtonProps {\n onPress: () => void;\n disabled?: boolean;\n tone?: 'default' | 'light';\n ariaLabel?: string;\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4.75 4.75L13.25 13.25M13.25 4.75L4.75 13.25\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth=\"2.2\"\n />\n </svg>\n );\n}\n\nexport function RouterCloseButton({\n onPress,\n disabled,\n tone = 'default',\n ariaLabel = 'Close',\n}: RouterCloseButtonProps) {\n const toneClass = tone === 'light' ? ' router-close-button--light' : '';\n return (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={`router-close-button router-close-button-circle${toneClass}`}\n disabled={disabled}\n onClick={onPress}\n >\n <div className={`router-close-button-inner router-close-button-circle${toneClass}`}>\n <CloseIcon />\n </div>\n <div className=\"router-close-button-blur router-close-button-circle\">\n <div className=\"router-close-mask-1\" aria-hidden=\"true\" />\n <div className=\"router-close-mask-2\" aria-hidden=\"true\" />\n <div className=\"router-close-mask-3\" aria-hidden=\"true\" />\n </div>\n </button>\n );\n}\n","import { createContext, useContext, type ReactNode } from 'react';\n\nexport const DEFAULT_OVERLAY_CONTENT_KEY = 'router-overlay-content:default';\n\nconst OverlayContentKeyContext = createContext(DEFAULT_OVERLAY_CONTENT_KEY);\n\nexport function OverlayContentScope({\n contentKey,\n children,\n}: {\n contentKey: string;\n children: ReactNode;\n}) {\n return (\n <OverlayContentKeyContext.Provider value={contentKey}>\n {children}\n </OverlayContentKeyContext.Provider>\n );\n}\n\nexport function useOverlayContentKey(): string {\n return useContext(OverlayContentKeyContext);\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { SheetSurface } from './SheetSurface';\nimport { RouterCloseButton } from './RouterCloseButton';\nimport {\n DEFAULT_OVERLAY_CONTENT_KEY,\n useOverlayContentKey,\n} from './OverlayContentScope';\nimport type { RouterShellMode } from '../types';\n\ninterface ModalContextValue {\n setSwipeTarget: (contentKey: string, el: HTMLElement | null) => void;\n requestClose: () => void;\n setOptions: (contentKey: string, options: ModalOptions | null) => void;\n}\n\nconst ModalContext = createContext<ModalContextValue | null>(null);\n\nfunction useModalContext(): ModalContextValue {\n const ctx = useContext(ModalContext);\n if (!ctx) {\n throw new Error('Modal sub-components must be rendered inside <Modal>');\n }\n return ctx;\n}\n\nexport function useModalSwipeTarget(): (el: HTMLElement | null) => void {\n const { setSwipeTarget } = useModalContext();\n const contentKey = useOverlayContentKey();\n return useCallback(\n (el: HTMLElement | null) => setSwipeTarget(contentKey, el),\n [contentKey, setSwipeTarget],\n );\n}\n\ntype ModalPresentation = 'fullscreen' | 'content';\n\ninterface ModalProps {\n children: ReactNode;\n swipeToClose?: boolean;\n ariaLabel?: string;\n size?: 'regular' | 'wide';\n /** Desired desktop surface size; the viewport still constrains it. */\n width?: number;\n height?: number;\n /** 'content' sizes the surface to its content, floored at half the viewport. */\n presentation?: ModalPresentation;\n}\n\ninterface ModalOptions {\n swipeToClose?: boolean;\n ariaLabel?: string;\n size?: 'regular' | 'wide';\n width?: number;\n height?: number;\n presentation?: ModalPresentation;\n}\n\ninterface ModalContentRegistration {\n options?: ModalOptions;\n swipeTarget?: HTMLElement | null;\n}\n\ninterface ModalFrameProps {\n children: ReactNode;\n open: boolean;\n onRequestClose: () => void;\n onExitComplete: () => void;\n zIndex: number;\n shell?: RouterShellMode;\n contentSized?: boolean;\n activeContentKey?: string;\n}\n\nexport function ModalFrame({\n children,\n open,\n onRequestClose,\n onExitComplete,\n zIndex,\n shell = 'mobile-contained',\n contentSized = false,\n activeContentKey = DEFAULT_OVERLAY_CONTENT_KEY,\n}: ModalFrameProps) {\n const [registrations, setRegistrations] = useState<\n ReadonlyMap<string, ModalContentRegistration>\n >(() => new Map());\n const setSwipeTarget = useCallback(\n (contentKey: string, swipeTarget: HTMLElement | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if ((registration?.swipeTarget ?? null) === swipeTarget) return current;\n\n const next = new Map(current);\n if (!swipeTarget && !registration?.options) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, { ...registration, swipeTarget });\n }\n return next;\n });\n },\n [],\n );\n const setOptions = useCallback((contentKey: string, options: ModalOptions | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if (registration?.options === options) return current;\n\n const next = new Map(current);\n if (!options && !registration?.swipeTarget) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, {\n ...registration,\n options: options ?? undefined,\n });\n }\n return next;\n });\n }, []);\n const activeRegistration = registrations.get(activeContentKey);\n const swipeTarget = activeRegistration?.swipeTarget ?? null;\n const options = activeRegistration?.options;\n const swipeToClose = options?.swipeToClose ?? true;\n const ariaLabel = options?.ariaLabel;\n // The frame prop stays for callers that size the surface from the outside;\n // content can also declare it itself through the options channel.\n const isContentSized = contentSized || options?.presentation === 'content';\n\n // ESC and ModalHeader's X button route through this — same exit path.\n const requestClose = useCallback(() => {\n onRequestClose();\n }, [onRequestClose]);\n\n const contextValue = useMemo<ModalContextValue>(\n () => ({ setSwipeTarget, requestClose, setOptions }),\n [requestClose, setOptions, setSwipeTarget],\n );\n\n return (\n <ModalContext.Provider value={contextValue}>\n <SheetSurface\n open={open}\n onRequestClose={requestClose}\n onExitComplete={onExitComplete}\n zIndex={zIndex}\n mode=\"fullscreen\"\n swipeToClose={swipeToClose}\n shell={shell}\n backdrop\n backdropClassName={`router-modal-backdrop${isContentSized ? ' router-modal-backdrop--transparent' : ''}`}\n shellClassName=\"router-modal-shell\"\n surfaceClassName={`router-modal-surface${isContentSized ? ' router-modal-surface--content-sized' : ''}${options?.size === 'wide' ? ' router-modal-surface--wide' : ''}`}\n surfaceStyle={{\n '--router-modal-width': options?.width ? `${options.width}px` : undefined,\n '--router-modal-height': options?.height ? `${options.height}px` : undefined,\n } as CSSProperties}\n scrollElement={swipeTarget}\n ariaLabel={ariaLabel}\n closeTarget={isContentSized ? 'surface' : 'viewport'}\n >\n {children}\n </SheetSurface>\n </ModalContext.Provider>\n );\n}\n\nfunction ModalRoot({\n children,\n swipeToClose = true,\n ariaLabel,\n size = 'regular',\n width,\n height,\n presentation = 'fullscreen',\n}: ModalProps) {\n const { setOptions } = useModalContext();\n const contentKey = useOverlayContentKey();\n\n useLayoutEffect(() => {\n setOptions(contentKey, { swipeToClose, ariaLabel, size, width, height, presentation });\n return () => setOptions(contentKey, null);\n }, [ariaLabel, contentKey, height, presentation, setOptions, size, swipeToClose, width]);\n\n return <>{children}</>;\n}\n\ninterface ModalHeaderProps {\n title?: string;\n leftAction?: ReactNode;\n rightAction?: ReactNode;\n hideCloseButton?: boolean;\n sticky?: boolean;\n}\n\nfunction ModalHeader({\n title,\n leftAction,\n rightAction,\n hideCloseButton,\n sticky = true,\n}: ModalHeaderProps) {\n const { requestClose } = useModalContext();\n const headerClassName = `router-modal-header${sticky ? ' router-modal-header--sticky' : ''}`;\n return (\n <div className={headerClassName}>\n <div className=\"router-modal-header-side\">{leftAction}</div>\n <h2 className=\"router-modal-title\">\n {title}\n </h2>\n <div className=\"router-modal-header-side router-modal-header-side--trailing\">\n {rightAction ??\n (hideCloseButton ? null : <RouterCloseButton onPress={requestClose} />)}\n </div>\n </div>\n );\n}\n\ninterface ModalContentProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction ModalContent({ children, className }: ModalContentProps) {\n return (\n <div className={`router-modal-content ${className ?? ''}`}>{children}</div>\n );\n}\n\ninterface ModalScrollViewProps {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction ModalScrollView({ children, className, style }: ModalScrollViewProps) {\n const setSwipeTarget = useModalSwipeTarget();\n return (\n <div\n ref={setSwipeTarget}\n className={`router-scroll router-modal-scroll-view ${className ?? ''}`}\n style={style}\n >\n {children}\n </div>\n );\n}\n\ninterface ModalFooterProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction ModalFooter({ children, className }: ModalFooterProps) {\n return (\n <div\n className={`router-modal-footer ${className ?? ''}`}\n >\n <div className=\"router-modal-footer-content\">{children}</div>\n </div>\n );\n}\n\nexport const Modal = Object.assign(ModalRoot, {\n Header: ModalHeader,\n Content: ModalContent,\n ScrollView: ModalScrollView,\n Footer: ModalFooter,\n});\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { SheetSurface } from './SheetSurface';\nimport { RouterCloseButton } from './RouterCloseButton';\nimport {\n DEFAULT_OVERLAY_CONTENT_KEY,\n useOverlayContentKey,\n} from './OverlayContentScope';\nimport type { RouterShellMode } from '../types';\n\ntype SheetVariant = 'attached' | 'detached';\ntype SheetPresentation = 'content' | 'fullscreen';\n\ninterface SheetOptions {\n disableDismiss?: boolean;\n onRequestClose?: () => void;\n variant?: SheetVariant;\n presentation?: SheetPresentation;\n}\n\ninterface SheetContextValue {\n setScrollElement: (contentKey: string, el: HTMLDivElement | null) => void;\n close: () => void;\n canClose: boolean;\n variant: SheetVariant;\n presentation: SheetPresentation;\n setOptions: (contentKey: string, options: SheetOptions | null) => void;\n}\n\nconst SheetContext = createContext<SheetContextValue | null>(null);\n\nfunction useSheetContext(): SheetContextValue {\n const ctx = useContext(SheetContext);\n if (!ctx) {\n throw new Error('Sheet sub-components must be rendered inside <Sheet>');\n }\n return ctx;\n}\n\ninterface SheetProps {\n children: ReactNode;\n disableDismiss?: boolean;\n onRequestClose?: () => void;\n variant?: SheetVariant;\n /** 'fullscreen' turns the sheet into a full-height surface. */\n presentation?: SheetPresentation;\n}\n\ninterface SheetContentRegistration {\n options?: SheetOptions;\n scrollElement?: HTMLDivElement | null;\n}\n\ninterface SheetFrameProps {\n children: ReactNode;\n open: boolean;\n onRequestClose: () => void;\n onExitComplete: () => void;\n zIndex: number;\n shell?: RouterShellMode;\n activeContentKey?: string;\n}\n\nexport function SheetFrame({\n children,\n open,\n onRequestClose,\n onExitComplete,\n zIndex,\n shell = 'mobile-contained',\n activeContentKey = DEFAULT_OVERLAY_CONTENT_KEY,\n}: SheetFrameProps) {\n const [frameScrollElement, setFrameScrollElement] =\n useState<HTMLDivElement | null>(null);\n const [registrations, setRegistrations] = useState<\n ReadonlyMap<string, SheetContentRegistration>\n >(() => new Map());\n const setScrollElement = useCallback(\n (contentKey: string, scrollElement: HTMLDivElement | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if ((registration?.scrollElement ?? null) === scrollElement) return current;\n\n const next = new Map(current);\n if (!scrollElement && !registration?.options) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, { ...registration, scrollElement });\n }\n return next;\n });\n },\n [],\n );\n const setOptions = useCallback((contentKey: string, options: SheetOptions | null) => {\n setRegistrations((current) => {\n const registration = current.get(contentKey);\n if (registration?.options === options) return current;\n\n const next = new Map(current);\n if (!options && !registration?.scrollElement) {\n next.delete(contentKey);\n } else {\n next.set(contentKey, {\n ...registration,\n options: options ?? undefined,\n });\n }\n return next;\n });\n }, []);\n const activeRegistration = registrations.get(activeContentKey);\n const scrollElement = activeRegistration?.scrollElement ?? frameScrollElement;\n const options = activeRegistration?.options;\n const disableDismiss = options?.disableDismiss ?? false;\n const customRequestClose = options?.onRequestClose;\n const variant = options?.variant ?? 'detached';\n const presentation = options?.presentation ?? 'content';\n const fullscreen = presentation === 'fullscreen';\n\n const requestClose = useCallback(() => {\n if (disableDismiss) return;\n if (customRequestClose) {\n customRequestClose();\n return;\n }\n onRequestClose();\n }, [customRequestClose, disableDismiss, onRequestClose]);\n\n const contextValue = useMemo<SheetContextValue>(\n () => ({\n setScrollElement,\n close: requestClose,\n canClose: !disableDismiss,\n variant,\n presentation,\n setOptions,\n }),\n [\n requestClose,\n disableDismiss,\n presentation,\n setScrollElement,\n setOptions,\n variant,\n ],\n );\n\n const surfaceStyle = useMemo<CSSProperties>(\n () =>\n fullscreen\n ? {\n backgroundColor: 'var(--router-bg)',\n borderRadius: '33px 33px 0 0',\n boxShadow: 'var(--router-card-shadow)',\n color: 'var(--router-text)',\n overflow: 'hidden',\n bottom: 0,\n left: 0,\n right: 0,\n width: '100%',\n maxWidth: 'var(--router-container)',\n height: 'calc(100dvh - env(safe-area-inset-top, 0px))',\n maxHeight: 'none',\n marginInline: 'auto',\n }\n : variant === 'detached'\n ? {\n backgroundColor: 'var(--router-bg)',\n borderRadius: '28px 28px 32px 32px',\n boxShadow: 'var(--router-card-shadow)',\n color: 'var(--router-text)',\n overflow: 'hidden',\n // Centered onto the app column with the same 8px gutter on every detached edge.\n bottom: 8,\n left: 8,\n right: 8,\n width: 'auto',\n maxWidth: 'calc(var(--router-container) - 16px)',\n marginInline: 'auto',\n maxHeight:\n 'calc(100dvh - 32px - env(safe-area-inset-top, 0px))',\n }\n : {\n backgroundColor: 'var(--router-bg)',\n borderTop: '1px solid var(--router-line)',\n borderRadius: '28px 28px 0 0',\n boxShadow: 'var(--router-card-shadow)',\n color: 'var(--router-text)',\n // Centered onto the app column, full column width.\n left: 0,\n right: 0,\n maxWidth: 'var(--router-container)',\n marginInline: 'auto',\n bottom: 0,\n maxHeight: 'calc(100dvh - env(safe-area-inset-top, 0px))',\n },\n [fullscreen, variant],\n );\n // Scrim confined to the app column — the desktop surround stays the backdrop.\n const backdropStyle = useMemo<CSSProperties>(\n () =>\n shell === 'desktop-fullscreen'\n ? {\n background: 'var(--router-scrim)',\n left: 0,\n right: 0,\n }\n : {\n background: 'var(--router-scrim)',\n left: 0,\n right: 0,\n maxWidth: 'var(--router-container)',\n marginInline: 'auto',\n },\n [shell],\n );\n\n return (\n <SheetContext.Provider value={contextValue}>\n <SheetSurface\n open={open}\n onRequestClose={requestClose}\n onExitComplete={onExitComplete}\n zIndex={zIndex}\n mode=\"content\"\n canDismiss={!disableDismiss}\n shell={shell}\n backdrop\n backdropStyle={backdropStyle}\n surfaceClassName=\"router-sheet-surface\"\n surfaceStyle={surfaceStyle}\n scrollElement={scrollElement}\n closeTarget={fullscreen ? 'viewport' : 'surface'}\n >\n <div\n ref={setFrameScrollElement}\n className={`router-scroll router-sheet-frame-scroll${\n fullscreen ? ' router-sheet-frame-scroll--fullscreen' : ''\n }`}\n >\n {children}\n </div>\n </SheetSurface>\n </SheetContext.Provider>\n );\n}\n\nfunction SheetRoot({\n children,\n disableDismiss,\n onRequestClose,\n variant = 'detached',\n presentation = 'content',\n}: SheetProps) {\n const { setOptions } = useSheetContext();\n const contentKey = useOverlayContentKey();\n\n useLayoutEffect(() => {\n setOptions(contentKey, {\n disableDismiss,\n onRequestClose,\n variant,\n presentation,\n });\n return () => setOptions(contentKey, null);\n }, [\n contentKey,\n disableDismiss,\n onRequestClose,\n presentation,\n setOptions,\n variant,\n ]);\n\n return <>{children}</>;\n}\n\ninterface SheetHeaderProps {\n title?: string;\n leftAction?: ReactNode;\n rightAction?: ReactNode;\n hideCloseButton?: boolean;\n sticky?: boolean;\n align?: 'start' | 'center';\n}\n\nfunction SheetHeader({\n title,\n leftAction,\n rightAction,\n hideCloseButton,\n sticky = true,\n align = 'start',\n}: SheetHeaderProps) {\n const { close, canClose, presentation } = useSheetContext();\n const headerBaseClassName =\n presentation === 'fullscreen' ? 'router-modal-header' : 'router-sheet-header';\n const headerClassName = `${headerBaseClassName}${\n sticky ? ` ${headerBaseClassName}--sticky` : ''\n }`;\n const titleClassName = `router-sheet-title${align === 'center' ? ' router-sheet-title--center' : ''}`;\n return (\n <div className={headerClassName}>\n {leftAction != null && (\n <div className=\"router-sheet-header-side\">{leftAction}</div>\n )}\n {title && (\n <h2 className={titleClassName}>\n {title}\n </h2>\n )}\n {!title && <div className=\"router-sheet-header-spacer\" />}\n <div className=\"router-sheet-header-side router-sheet-header-side--trailing\">\n {rightAction ??\n (hideCloseButton ? null : (\n <RouterCloseButton onPress={close} disabled={!canClose} />\n ))}\n </div>\n </div>\n );\n}\n\ninterface SheetContentProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction SheetContent({ children, className }: SheetContentProps) {\n return <div className={`router-sheet-content ${className ?? ''}`}>{children}</div>;\n}\n\ninterface SheetScrollViewProps {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction SheetScrollView({ children, className, style }: SheetScrollViewProps) {\n const { setScrollElement } = useSheetContext();\n const contentKey = useOverlayContentKey();\n const setScopedScrollElement = useCallback(\n (el: HTMLDivElement | null) => setScrollElement(contentKey, el),\n [contentKey, setScrollElement],\n );\n return (\n <div\n ref={setScopedScrollElement}\n className={`router-scroll router-sheet-scroll-view ${className ?? ''}`}\n style={style}\n >\n {children}\n </div>\n );\n}\n\ninterface SheetFooterProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction SheetFooter({ children, className }: SheetFooterProps) {\n const { variant } = useSheetContext();\n const variantClassName =\n variant === 'detached'\n ? 'router-sheet-footer--detached'\n : 'router-sheet-footer--attached';\n return (\n <div\n className={`router-sheet-footer ${variantClassName} ${className ?? ''}`}\n >\n {children}\n </div>\n );\n}\n\nexport const Sheet = Object.assign(SheetRoot, {\n Header: SheetHeader,\n Content: SheetContent,\n ScrollView: SheetScrollView,\n Footer: SheetFooter,\n});\n","export interface NavigationHistorySnapshot {\n stackKey: string;\n pathname: string;\n search: string;\n historyIndex: number;\n historyCommit?: string;\n presentation: string;\n splitNavigation?: {\n operation: 'selection' | 'push' | 'replace' | 'pop';\n };\n route: {\n id: string;\n };\n}\n\nconst MAX_HISTORY_LENGTH = 64;\n\nfunction sameLocation(\n left: NavigationHistorySnapshot,\n right: NavigationHistorySnapshot,\n): boolean {\n return left.stackKey === right.stackKey && left.pathname === right.pathname;\n}\n\nfunction sameScreenRoute(\n left: NavigationHistorySnapshot,\n right: NavigationHistorySnapshot,\n): boolean {\n return (\n left.stackKey === right.stackKey &&\n left.route.id === right.route.id &&\n left.presentation === right.presentation\n );\n}\n\nfunction latestSnapshots<TSnapshot>(history: TSnapshot[]): TSnapshot[] {\n return history.length > MAX_HISTORY_LENGTH\n ? history.slice(history.length - MAX_HISTORY_LENGTH)\n : history;\n}\n\nexport function updateSnapshotHistory<TSnapshot extends NavigationHistorySnapshot>(\n history: TSnapshot[],\n snapshot: TSnapshot,\n): TSnapshot[] {\n const browserIndex = history.findIndex(\n (entry) => entry.historyIndex === snapshot.historyIndex,\n );\n const locationIndex = history.findIndex((entry) => sameLocation(entry, snapshot));\n\n // replace(path) changes only the current logical item, even when the target\n // pathname already exists lower in the stack.\n if (snapshot.historyCommit === 'replace' && browserIndex !== -1) {\n return latestSnapshots([...history.slice(0, browserIndex), snapshot]);\n }\n\n // Internal back keeps the current browser index and replaces its URL. If the\n // target already exists lower in the logical stack, this is a pop-to, not a\n // second instance of the target screen.\n if (locationIndex !== -1 && locationIndex !== browserIndex) {\n return latestSnapshots([...history.slice(0, locationIndex), snapshot]);\n }\n\n // A browser back/forward event revisits a known browser index. Drop logical\n // entries that were above it, mirroring the browser's history cursor.\n if (browserIndex !== -1) {\n return latestSnapshots([...history.slice(0, browserIndex), snapshot]);\n }\n\n const active = history[history.length - 1];\n if (\n active &&\n sameScreenRoute(active, snapshot) &&\n snapshot.splitNavigation?.operation !== 'push'\n ) {\n return latestSnapshots([...history.slice(0, -1), snapshot]);\n }\n\n const insertIndex = history.findIndex(\n (entry) => entry.historyIndex > snapshot.historyIndex,\n );\n const next =\n insertIndex === -1\n ? [...history, snapshot]\n : [...history.slice(0, insertIndex), snapshot];\n\n return latestSnapshots(next);\n}\n\nexport function previousSnapshotFromHistory<TSnapshot extends NavigationHistorySnapshot>(\n history: TSnapshot[],\n snapshot: TSnapshot | undefined,\n): TSnapshot | undefined {\n if (!snapshot) return undefined;\n\n const currentIndex = history.findIndex(\n (entry) => entry.historyIndex === snapshot.historyIndex,\n );\n if (currentIndex <= 0) return undefined;\n return history[currentIndex - 1];\n}\n","export function createRouterId(): string {\n if (\n typeof globalThis.crypto !== 'undefined' &&\n typeof globalThis.crypto.randomUUID === 'function'\n ) {\n return globalThis.crypto.randomUUID();\n }\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {\n const value = Math.floor(Math.random() * 16);\n const nibble = char === 'x' ? value : (value & 0x3) | 0x8;\n return nibble.toString(16);\n });\n}\n","import {\n Children,\n Fragment,\n Suspense,\n createContext,\n createElement,\n isValidElement,\n memo,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type CSSProperties,\n type ElementType,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { useTransitionMap, type TransitionStatus } from 'react-transition-state';\nimport {\n Router as WouterRouter,\n matchRoute,\n useLocation,\n useRouter as useWouterRouter,\n useSearch as useWouterSearch,\n type BaseLocationHook,\n type DefaultParams,\n type NavigateOptions as WouterNavigateOptions,\n} from 'wouter';\nimport {\n navigate as browserNavigate,\n useHistoryState as useBrowserHistoryState,\n} from 'wouter/use-browser-location';\nimport { ModalFrame, SheetFrame } from './components';\nimport { OverlayContentScope } from './components/OverlayContentScope';\nimport { previousSnapshotFromHistory, updateSnapshotHistory } from './navigationHistory';\nimport { createRouterId } from './utils/id';\nimport type { RouterOverlayLayout, RouterShellMode } from './types';\nimport './router.css';\n\ntype StackDirection = 'forward' | 'back';\nexport type StackPresentation = 'push' | 'modal' | 'sheet';\nexport type RouterScreenAnimation = 'push' | 'slide_from_bottom';\ntype StackRouteContainer =\n | 'tabbar'\n | 'tabbar-item'\n | 'drawer'\n | 'drawer-group'\n | 'drawer-section'\n | 'drawer-item'\n | 'splitview'\n | 'split-primary'\n | 'split-secondary'\n | 'protected'\n | 'redirect';\ntype StackPhase = 'active' | 'inactive' | 'exiting';\ntype StackTransitionStatus = TransitionStatus;\ntype ModalKind = 'modal' | 'sheet';\nexport interface RouterNavigateOptions {\n state?: unknown;\n}\n\ntype HistoryCommit = 'push' | 'sync' | 'replace' | 'pop';\n\ntype RouterInternalNavigateOptions = Omit<WouterNavigateOptions, 'replace' | 'state'> & {\n commit?: HistoryCommit;\n state?: unknown;\n};\n\nexport type RouterNavigateFunction = (\n to: string | number,\n options?: RouterNavigateOptions,\n) => void;\nexport type RouterReplaceFunction = (to: string, options?: RouterNavigateOptions) => void;\ntype RouterGuardValue<T> = T | ((props: RouterRouteRenderProps) => T);\n/**\n * A guard answers one of three things: allowed, denied, or not decided yet.\n * `'pending'` (and `undefined`, so `when={user?.isAdmin}` works before the user\n * loads) holds the URL and renders the guard's `pending` node — it must not\n * redirect, or every deep link would be lost while the app boots.\n */\nexport type RouterGuardState = boolean | 'pending';\nexport type RouterSplitPane = 'primary' | 'secondary';\ntype SplitNavigationOperation = 'selection' | 'push' | 'replace' | 'pop';\n\ninterface SplitNavigationMetadata {\n splitViewId: string;\n /** Primary selection creates a new path; secondary navigation preserves it. */\n detailPathId: string;\n detailDepth: number;\n operation: SplitNavigationOperation;\n}\n\ninterface SplitPaneNavigationOrigin {\n splitViewId: string;\n pane: RouterSplitPane;\n detailPathId: string;\n detailDepth: number;\n}\n\ntype StackAnimationType =\n | 'none'\n | 'push-enter'\n | 'push-exit'\n | 'push-background'\n | 'pop-enter'\n | 'pop-exit'\n | 'pop-background'\n | 'slide-from-bottom-enter'\n | 'slide-from-bottom-exit';\n\nexport interface RouterRouteRenderProps {\n params: DefaultParams;\n pathname: string;\n search: string;\n historyState: unknown;\n presentation: StackPresentation;\n splitPane?: RouterSplitPane;\n}\n\nexport interface RouterRouteContextValue extends RouterRouteRenderProps {\n searchParams: URLSearchParams;\n}\n\nexport interface RouterTabBarTab {\n id: string;\n path: string;\n label: string;\n icon: ReactNode;\n}\n\nexport interface RouterDrawerItem {\n type: 'item';\n id: string;\n path: string;\n label: string;\n icon?: ReactNode;\n badge?: ReactNode;\n hidden?: boolean;\n}\n\nexport interface RouterDrawerGroup {\n type: 'group';\n id: string;\n label: string;\n icon?: ReactNode;\n chevron?: ReactNode;\n hidden?: boolean;\n items: RouterDrawerItem[];\n}\n\nexport interface RouterDrawerSection {\n type: 'section';\n id: string;\n title: string;\n hidden?: boolean;\n}\n\nexport type RouterDrawerNode =\n | RouterDrawerItem\n | RouterDrawerGroup\n | RouterDrawerSection;\n\nexport interface RouterRouteLayoutProps {\n children: ReactNode;\n aside?: ReactNode;\n footer?: ReactNode;\n portal?: boolean;\n tabs?: RouterTabBarTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n items?: RouterDrawerNode[];\n activeItem?: string;\n onItemChange?: (id: string) => void;\n drawer?: RouterDrawerApi;\n primary?: ReactNode;\n secondary?: ReactNode;\n isWide?: boolean;\n hasSecondary?: boolean;\n minWidth?: number;\n primaryMaxWidth?: number;\n secondaryMinWidth?: number;\n splitViewRef?: Ref<HTMLDivElement>;\n splitViewLayoutId?: string;\n}\n\ntype RouterRouteChildren = ReactNode | ((props: RouterRouteRenderProps) => ReactNode);\n\ntype RouterRouteElement = ReactNode | ElementType;\n\nexport interface RouterRouteProps {\n id?: string;\n path?: string;\n /**\n * Route id that must sit immediately below this screen when a modal flow is\n * entered straight at a deeper step. This restores the same spatial history\n * a visitor would have built by walking the flow normally.\n */\n flowParent?: string;\n stackKey?: string | ((props: RouterRouteRenderProps) => string);\n fallback?: ReactNode;\n animation?: RouterScreenAnimation;\n overlayLayout?: RouterOverlayLayout;\n element?: RouterRouteElement;\n component?: ElementType;\n layout?: ElementType<RouterRouteLayoutProps>;\n children?: RouterRouteChildren;\n}\n\nexport interface RouterTabBarItemProps extends RouterRouteProps {\n path: string;\n label: string;\n icon: ReactNode;\n}\n\nexport interface RouterDrawerItemProps extends RouterRouteProps {\n path: string;\n label: string;\n icon?: ReactNode;\n badge?: ReactNode;\n hidden?: boolean;\n}\n\nexport interface RouterDrawerProps extends RouterRouteProps {\n /** Desktop collapse hides the panel or keeps a compact navigation rail. */\n desktopCollapsible?: 'offcanvas' | 'icon';\n /** Persistent content rendered to the right of the active Drawer route. */\n aside?: ReactNode;\n /** Persistent content anchored below the navigation items in the Drawer. */\n footer?: ReactNode;\n}\n\nexport interface RouterDrawerGroupProps extends RouterRouteProps {\n label: string;\n icon?: ReactNode;\n chevron?: ReactNode;\n hidden?: boolean;\n}\n\nexport interface RouterDrawerSectionProps extends RouterRouteProps {\n title: string;\n hidden?: boolean;\n}\n\nexport interface RouterSplitViewProps extends RouterRouteProps {\n minWidth?: number;\n primaryMaxWidth?: number;\n secondaryMinWidth?: number;\n}\n\nexport type RouterSplitViewSlotProps = RouterRouteProps;\n\nexport interface RouterProtectedProps extends RouterRouteProps {\n when: RouterGuardValue<RouterGuardState | undefined>;\n redirectTo: RouterGuardValue<string>;\n /** Rendered instead of the subtree while `when` is undecided. */\n pending?: ReactNode;\n}\n\nexport interface RouterRedirectProps extends RouterRouteProps {\n to: RouterGuardValue<string>;\n}\n\nexport interface RouterApi {\n navigate: RouterNavigateFunction;\n /** Replaces the active screen without adding a browser or router history entry. */\n replace: RouterReplaceFunction;\n /** Replaces the URL while popping to an ancestor screen in the active stack. */\n popTo: RouterReplaceFunction;\n close: (id: string) => void;\n closeAll: () => void;\n /** Closes the top overlay with animation or pops the active router stack. */\n goBack: () => boolean;\n}\n\nexport interface RouterDrawerApi {\n /** Whether the mobile panel is visible or the desktop panel is expanded. */\n isOpen: boolean;\n isMobile: boolean;\n /** True only on desktop when the panel is collapsed. */\n isCollapsed: boolean;\n desktopCollapsible: 'offcanvas' | 'icon';\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\ninterface CurrentModalContextValue {\n id: string;\n index: number;\n exiting: boolean;\n close: () => void;\n remove: () => void;\n}\n\ninterface RouterRootProps {\n children: ReactNode;\n fallback?: ReactNode;\n shell?: RouterShellMode;\n}\n\ninterface CompiledStackRoute {\n id: string;\n path?: string;\n flowParent?: string;\n presentation: StackPresentation;\n animation: RouterScreenAnimation;\n overlayLayout?: RouterOverlayLayout;\n redirectTo?: RouterGuardValue<string>;\n guards: CompiledRouteGuard[];\n stackKey?: RouterRouteProps['stackKey'];\n fallback?: ReactNode;\n element?: ReactNode;\n elementType?: ElementType;\n component?: ElementType;\n layout?: ElementType<RouterRouteLayoutProps>;\n render?: (props: RouterRouteRenderProps) => ReactNode;\n childrenNode?: ReactNode;\n container?: StackRouteContainer;\n childRoute?: CompiledStackRoute;\n overlayFlow?: CompiledOverlayFlow;\n tabBar?: {\n tabs: RouterTabBarTab[];\n activeTab: string;\n };\n drawer?: {\n items: RouterDrawerNode[];\n activeItem: string;\n };\n drawerAside?: ReactNode;\n drawerFooter?: ReactNode;\n drawerDesktopCollapsible?: 'offcanvas' | 'icon';\n splitView?: {\n primaryRoute: CompiledStackRoute;\n secondaryRoute?: CompiledStackRoute;\n secondaryRoutes?: CompiledStackRoute[];\n activePane: 'primary' | 'secondary';\n minWidth: number;\n primaryMaxWidth: number;\n secondaryMinWidth: number;\n wideMinWidth: number;\n layoutId: string;\n };\n}\n\ninterface CompiledOverlayFlow {\n id: string;\n kind: ModalKind;\n routes: CompiledStackRoute[];\n /** Wrapper routes, index-aligned with [routes]. entries[0] is the flow root. */\n entries: CompiledStackRoute[];\n}\n\ninterface CompiledRouteGuard {\n id: string;\n when: RouterGuardValue<RouterGuardState | undefined>;\n redirectTo: RouterGuardValue<string>;\n pending?: ReactNode;\n}\n\ninterface RouterRouteMatch {\n route: CompiledStackRoute;\n params: DefaultParams;\n}\n\ninterface StackSnapshot extends RouterRouteMatch {\n stackKey: string;\n locationKey: string;\n historyNavigationKey: string;\n pathname: string;\n search: string;\n historyState: unknown;\n historyIndex: number;\n historyCommit: HistoryCommit;\n depth: number;\n presentation: StackPresentation;\n forcePushRouteChanges?: boolean;\n splitPane?: RouterSplitPane;\n splitNavigation?: SplitNavigationMetadata;\n}\n\ninterface StackEntry extends StackSnapshot {\n id: string;\n transitionKey: string;\n enterDirection: StackDirection;\n exitDirection: StackDirection;\n animateEnter: boolean;\n}\n\ninterface RouterModalEntry {\n id: string;\n kind: ModalKind;\n route: CompiledStackRoute;\n params: DefaultParams;\n pathname: string;\n search: string;\n historyState: unknown;\n flowScreens?: RouterModalFlowScreenEntry[];\n exiting: boolean;\n}\n\ninterface RouterModalFlowScreenEntry {\n overlayRoute: CompiledStackRoute;\n route: CompiledStackRoute;\n params: DefaultParams;\n pathname: string;\n search: string;\n historyState: unknown;\n}\n\nconst STACK_ROUTE_KIND = Symbol.for('sigmela.stack.route.kind');\nconst HISTORY_INDEX_KEY = '__sigmela_idx';\nconst SPLIT_NAVIGATION_KEY = '__sigmela_split_navigation';\nconst SPLIT_NAVIGATION_ORIGIN_KEY = '__sigmela_split_navigation_origin';\nconst ROUTE_TRANSITION_MS = 300;\nconst OVERLAY_STACK_BASE_Z = 60;\nconst DEFAULT_SPLIT_MIN_WIDTH = 640;\nconst DEFAULT_SPLIT_PRIMARY_MAX_WIDTH = 390;\nconst DEFAULT_SPLIT_SECONDARY_MIN_WIDTH = 360;\nconst RouterRouteContext = createContext<RouterRouteContextValue | null>(null);\nconst RouterActionsContext = createContext<RouterApi | null>(null);\nconst SplitPaneNavigationContext = createContext<SplitPaneNavigationOrigin | null>(null);\nconst RouterDrawerContext = createContext<RouterDrawerApi | null>(null);\nconst CurrentModalContext = createContext<CurrentModalContextValue | null>(null);\nconst REACT_COMPONENT_TYPE_SYMBOLS = new Set([\n Symbol.for('react.forward_ref'),\n Symbol.for('react.lazy'),\n Symbol.for('react.memo'),\n]);\nconst HISTORY_NAVIGATION_KEY = '__sigmela_nav';\nconst HISTORY_COMMIT_KEY = '__sigmela_commit';\nconst DEFAULT_SHEET_FALLBACK = <div className=\"min-h-[160px]\" />;\n\nfunction splitViewWideMinWidth(\n minWidth: number,\n primaryMaxWidth: number,\n secondaryMinWidth = DEFAULT_SPLIT_SECONDARY_MIN_WIDTH,\n): number {\n return Math.max(minWidth, primaryMaxWidth + secondaryMinWidth);\n}\n\ninterface StackRouteDescriptor {\n presentation: StackPresentation;\n container?: StackRouteContainer;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mutableHistoryState(state: unknown): Record<string, unknown> {\n if (isRecord(state)) return { ...state };\n if (state == null) return {};\n return { value: state };\n}\n\nfunction splitNavigationFromState(state: unknown): SplitNavigationMetadata | undefined {\n if (!isRecord(state)) return undefined;\n const value = state[SPLIT_NAVIGATION_KEY];\n if (!isRecord(value)) return undefined;\n if (\n typeof value.splitViewId !== 'string' ||\n typeof value.detailPathId !== 'string' ||\n typeof value.detailDepth !== 'number' ||\n (value.operation !== 'selection' &&\n value.operation !== 'push' &&\n value.operation !== 'replace' &&\n value.operation !== 'pop')\n ) {\n return undefined;\n }\n\n return {\n splitViewId: value.splitViewId,\n detailPathId: value.detailPathId,\n detailDepth: value.detailDepth,\n operation: value.operation,\n };\n}\n\nfunction splitNavigationOriginFromState(\n state: unknown,\n): SplitPaneNavigationOrigin | undefined {\n if (!isRecord(state)) return undefined;\n const value = state[SPLIT_NAVIGATION_ORIGIN_KEY];\n if (!isRecord(value)) return undefined;\n if (\n typeof value.splitViewId !== 'string' ||\n (value.pane !== 'primary' && value.pane !== 'secondary') ||\n typeof value.detailPathId !== 'string' ||\n typeof value.detailDepth !== 'number'\n ) {\n return undefined;\n }\n\n return {\n splitViewId: value.splitViewId,\n pane: value.pane,\n detailPathId: value.detailPathId,\n detailDepth: value.detailDepth,\n };\n}\n\nfunction stateWithSplitNavigationOrigin(\n state: unknown,\n origin: SplitPaneNavigationOrigin,\n): Record<string, unknown> {\n const next = mutableHistoryState(state);\n next[SPLIT_NAVIGATION_ORIGIN_KEY] = origin;\n return next;\n}\n\nfunction stateWithoutSplitNavigation(state: unknown): Record<string, unknown> {\n const next = mutableHistoryState(state);\n delete next[SPLIT_NAVIGATION_KEY];\n delete next[SPLIT_NAVIGATION_ORIGIN_KEY];\n return next;\n}\n\nfunction historyIndexFromState(state: unknown): number {\n if (isRecord(state) && typeof state[HISTORY_INDEX_KEY] === 'number') {\n return state[HISTORY_INDEX_KEY];\n }\n if (isRecord(state) && typeof state.idx === 'number') {\n return state.idx;\n }\n return 0;\n}\n\nfunction historyNavigationKeyFromState(state: unknown): string | null {\n if (isRecord(state) && typeof state[HISTORY_NAVIGATION_KEY] === 'string') {\n return state[HISTORY_NAVIGATION_KEY];\n }\n return null;\n}\n\nfunction historyCommitFromState(state: unknown): HistoryCommit {\n if (isRecord(state)) {\n const commit = state[HISTORY_COMMIT_KEY];\n if (commit === 'sync' || commit === 'replace' || commit === 'pop') return commit;\n }\n return 'push';\n}\n\nfunction stateWithHistoryIndex(\n state: unknown,\n index: number,\n navigationKey = createRouterId(),\n commit: HistoryCommit = 'push',\n): Record<string, unknown> {\n const next: Record<string, unknown> = isRecord(state)\n ? { ...state }\n : state == null\n ? {}\n : { value: state };\n next[HISTORY_INDEX_KEY] = index;\n next[HISTORY_NAVIGATION_KEY] = navigationKey;\n next[HISTORY_COMMIT_KEY] = commit;\n return next;\n}\n\nfunction navigateWithHistoryIndex(\n to: string,\n options: RouterInternalNavigateOptions = {},\n) {\n const { commit = 'push', ...navigationOptions } = options;\n const currentState = window.history.state;\n const currentIndex = historyIndexFromState(currentState);\n const isSyncCommit = commit === 'sync';\n const replacesBrowserEntry = commit !== 'push';\n const nextIndex = replacesBrowserEntry ? currentIndex : currentIndex + 1;\n const currentNavigationKey = historyNavigationKeyFromState(currentState);\n const nextNavigationKey = isSyncCommit\n ? (historyNavigationKeyFromState(options.state) ??\n currentNavigationKey ??\n createRouterId())\n : replacesBrowserEntry\n ? (currentNavigationKey ?? createRouterId())\n : createRouterId();\n browserNavigate(to, {\n ...navigationOptions,\n replace: replacesBrowserEntry,\n state: stateWithHistoryIndex(options.state, nextIndex, nextNavigationKey, commit),\n });\n}\n\nfunction ensureInitialHistoryIndex() {\n const currentState = window.history.state;\n const hasIndex =\n isRecord(currentState) && typeof currentState[HISTORY_INDEX_KEY] === 'number';\n const currentNavigationKey = historyNavigationKeyFromState(currentState);\n if (hasIndex && currentNavigationKey) return;\n\n window.history.replaceState(\n stateWithHistoryIndex(\n currentState,\n historyIndexFromState(currentState),\n currentNavigationKey ?? createRouterId(),\n ),\n '',\n window.location.href,\n );\n}\n\nfunction normalizedPath(pathname: string): string {\n if (pathname === '/') return '/';\n return pathname.replace(/\\/+$/, '') || '/';\n}\n\nfunction routeDepth(pathname: string): number {\n const path = normalizedPath(pathname);\n if (path === '/') return 0;\n return path.split('/').filter(Boolean).length;\n}\n\nfunction joinRoutePath(\n parentPath: string | undefined,\n childPath: string | undefined,\n): string | undefined {\n if (childPath == null || childPath === '') return parentPath;\n if (childPath === '*') return '*';\n if (childPath.startsWith('/')) return normalizedPath(childPath);\n if (!parentPath || parentPath === '/') return normalizedPath(`/${childPath}`);\n return normalizedPath(`${parentPath}/${childPath}`);\n}\n\nfunction routeComponent<TProps extends RouterRouteProps = RouterRouteProps>(\n presentation: StackPresentation,\n container?: StackRouteContainer,\n): ComponentType<TProps> {\n return Object.assign(\n function RouterRouteComponent(_props: TProps) {\n return null;\n },\n { [STACK_ROUTE_KIND]: { presentation, container } satisfies StackRouteDescriptor },\n );\n}\n\nfunction routeDescriptorFromElement(element: ReactElement): StackRouteDescriptor | null {\n const type = element.type as {\n [STACK_ROUTE_KIND]?: StackPresentation | StackRouteDescriptor;\n };\n const descriptor = type[STACK_ROUTE_KIND];\n if (!descriptor) return null;\n if (typeof descriptor === 'string') return { presentation: descriptor };\n return descriptor;\n}\n\nfunction isStackRouteElement(node: ReactNode): node is ReactElement<RouterRouteProps> {\n return isValidElement(node) && routeDescriptorFromElement(node) != null;\n}\n\nfunction isTabBarItemElement(\n node: ReactNode,\n): node is ReactElement<RouterTabBarItemProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'tabbar-item'\n );\n}\n\nfunction isDrawerItemElement(\n node: ReactNode,\n): node is ReactElement<RouterDrawerItemProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'drawer-item'\n );\n}\n\nfunction isDrawerGroupElement(\n node: ReactNode,\n): node is ReactElement<RouterDrawerGroupProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'drawer-group'\n );\n}\n\nfunction isDrawerSectionElement(\n node: ReactNode,\n): node is ReactElement<RouterDrawerSectionProps> {\n return (\n isValidElement(node) &&\n routeDescriptorFromElement(node)?.container === 'drawer-section'\n );\n}\n\nfunction isSplitPrimaryElement(\n node: ReactNode,\n): node is ReactElement<RouterSplitViewSlotProps> {\n return (\n isValidElement(node) &&\n routeDescriptorFromElement(node)?.container === 'split-primary'\n );\n}\n\nfunction isSplitSecondaryElement(\n node: ReactNode,\n): node is ReactElement<RouterSplitViewSlotProps> {\n return (\n isValidElement(node) &&\n routeDescriptorFromElement(node)?.container === 'split-secondary'\n );\n}\n\nfunction isProtectedElement(node: ReactNode): node is ReactElement<RouterProtectedProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'protected'\n );\n}\n\nfunction isRedirectElement(node: ReactNode): node is ReactElement<RouterRedirectProps> {\n return (\n isValidElement(node) && routeDescriptorFromElement(node)?.container === 'redirect'\n );\n}\n\nfunction isElementType(value: RouterRouteElement): value is ElementType {\n if (isValidElement(value)) return false;\n if (typeof value === 'function') return true;\n if (typeof value !== 'object' || value === null) return false;\n const reactType = (value as { $$typeof?: symbol }).$$typeof;\n return reactType ? REACT_COMPONENT_TYPE_SYMBOLS.has(reactType) : false;\n}\n\nfunction flattenRouteNodes(children: ReactNode): ReactNode[] {\n const result: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment) {\n result.push(...flattenRouteNodes(child.props.children));\n return;\n }\n result.push(child);\n });\n\n return result;\n}\n\nfunction splitRouteChildren(children: RouterRouteChildren | undefined): {\n routeChildren: ReactElement<RouterRouteProps>[];\n renderChildren: RouterRouteChildren | undefined;\n} {\n if (typeof children === 'function') {\n return { routeChildren: [], renderChildren: children };\n }\n\n const childArray = flattenRouteNodes(children);\n const routeChildren: ReactElement<RouterRouteProps>[] = [];\n const nonRouteChildren: ReactNode[] = [];\n\n for (const child of childArray) {\n if (child == null || typeof child === 'boolean') continue;\n if (isStackRouteElement(child)) {\n routeChildren.push(child);\n } else {\n nonRouteChildren.push(child);\n }\n }\n\n if (routeChildren.length === 0) {\n return { routeChildren, renderChildren: children };\n }\n\n return {\n routeChildren,\n renderChildren: nonRouteChildren.length > 0 ? nonRouteChildren : undefined,\n };\n}\n\ninterface DrawerNavigationEntry {\n element: ReactElement<RouterDrawerItemProps>;\n item: RouterDrawerItem;\n}\n\ninterface DrawerNavigationCollection {\n nodes: RouterDrawerNode[];\n entries: DrawerNavigationEntry[];\n}\n\nfunction drawerItemFromElement(\n element: ReactElement<RouterDrawerItemProps>,\n parentPath: string | undefined,\n): RouterDrawerItem {\n const itemPath = joinRoutePath(parentPath, element.props.path) ?? '/';\n return {\n type: 'item',\n id: element.props.id ?? normalizedPath(itemPath),\n path: itemPath,\n label: element.props.label,\n icon: element.props.icon,\n badge: element.props.badge,\n hidden: element.props.hidden,\n };\n}\n\nfunction collectDrawerNavigation(\n routeChildren: ReactElement<RouterRouteProps>[],\n parentPath: string | undefined,\n parentId: string,\n): DrawerNavigationCollection {\n const nodes: RouterDrawerNode[] = [];\n const entries: DrawerNavigationEntry[] = [];\n\n routeChildren.forEach((child, index) => {\n if (isDrawerSectionElement(child)) {\n nodes.push({\n type: 'section',\n id: child.props.id ?? `${parentId}/drawer-section-${index}`,\n title: child.props.title,\n hidden: child.props.hidden,\n });\n return;\n }\n\n if (isDrawerItemElement(child)) {\n const item = drawerItemFromElement(child, parentPath);\n nodes.push(item);\n entries.push({ element: child, item });\n return;\n }\n\n if (!isDrawerGroupElement(child)) return;\n\n const groupChildren = splitRouteChildren(child.props.children).routeChildren;\n const groupEntries = groupChildren.filter(isDrawerItemElement).map((element) => {\n const item = drawerItemFromElement(element, parentPath);\n return { element, item };\n });\n\n if (groupEntries.length === 0) return;\n\n nodes.push({\n type: 'group',\n id: child.props.id ?? `${parentId}/drawer-group-${index}`,\n label: child.props.label,\n icon: child.props.icon,\n chevron: child.props.chevron,\n hidden: child.props.hidden,\n items: groupEntries.map((entry) => entry.item),\n });\n entries.push(...groupEntries);\n });\n\n return { nodes, entries };\n}\n\nfunction compiledRouteFromProps(\n props: RouterRouteProps,\n path: string | undefined,\n routeId: string,\n presentation: StackPresentation,\n animation: RouterScreenAnimation,\n renderChildren: RouterRouteChildren | undefined,\n inheritedGuards: CompiledRouteGuard[],\n): CompiledStackRoute | null {\n const elementType =\n props.element !== undefined && isElementType(props.element)\n ? props.element\n : undefined;\n const elementNode: ReactNode | undefined =\n props.element !== undefined && !elementType\n ? (props.element as ReactNode)\n : undefined;\n const hasRenderable =\n props.element !== undefined ||\n props.component !== undefined ||\n renderChildren !== undefined;\n\n if (!hasRenderable) return null;\n\n return {\n id: routeId,\n path,\n flowParent: props.flowParent,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n guards: inheritedGuards,\n stackKey: props.stackKey,\n fallback: props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n };\n}\n\nfunction compileStackRoutes(\n children: ReactNode,\n parentPath?: string,\n parentId = 'root',\n inheritedGuards: CompiledRouteGuard[] = [],\n): CompiledStackRoute[] {\n const routes: CompiledStackRoute[] = [];\n\n flattenRouteNodes(children).forEach((child, index) => {\n if (!isStackRouteElement(child)) return;\n\n const descriptor = routeDescriptorFromElement(child) ?? { presentation: 'push' };\n const presentation = descriptor.presentation;\n const props = child.props;\n const animation = props.animation ?? 'push';\n const path = joinRoutePath(parentPath, props.path);\n const { routeChildren, renderChildren } = splitRouteChildren(props.children);\n const routeId = props.id ?? `${parentId}/${index}:${path ?? '*'}:${presentation}`;\n\n if (isRedirectElement(child)) {\n routes.push({\n id: routeId,\n path,\n flowParent: props.flowParent,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n redirectTo: child.props.to,\n guards: inheritedGuards,\n stackKey: props.stackKey,\n fallback: props.fallback,\n });\n return;\n }\n\n if (isProtectedElement(child)) {\n const guard: CompiledRouteGuard = {\n id: props.id ?? routeId,\n when: child.props.when,\n redirectTo: child.props.redirectTo,\n pending: child.props.pending,\n };\n if (routeChildren.length > 0) {\n routes.push(\n ...compileStackRoutes(routeChildren, path, routeId, [\n ...inheritedGuards,\n guard,\n ]),\n );\n }\n return;\n }\n\n const elementType =\n props.element !== undefined && isElementType(props.element)\n ? props.element\n : undefined;\n const elementNode: ReactNode | undefined =\n props.element !== undefined && !elementType\n ? (props.element as ReactNode)\n : undefined;\n const hasRenderable =\n props.element !== undefined ||\n props.component !== undefined ||\n renderChildren !== undefined;\n\n if (isModalLikePresentation(presentation) && routeChildren.length > 0) {\n const compiledChildren = compileStackRoutes(\n routeChildren,\n path,\n routeId,\n inheritedGuards,\n );\n const nestedOverlays = compiledChildren.filter(\n (route) => route.presentation !== 'push',\n );\n const flowRoutes: CompiledStackRoute[] = [];\n const rootRoute = compiledRouteFromProps(\n props,\n path,\n `${routeId}/overlay-root`,\n 'push',\n animation,\n renderChildren,\n inheritedGuards,\n );\n\n if (rootRoute) flowRoutes.push(rootRoute);\n flowRoutes.push(\n ...compiledChildren.filter((route) => route.presentation === 'push'),\n );\n routes.push(...nestedOverlays);\n\n if (flowRoutes.length === 0) return;\n\n const overlayFlow: CompiledOverlayFlow = {\n id: `${routeId}/overlay-flow`,\n kind: presentation,\n routes: flowRoutes,\n entries: [],\n };\n\n for (const flowRoute of flowRoutes) {\n const entryRoute: CompiledStackRoute = {\n id: `${overlayFlow.id}:${flowRoute.id}`,\n path: flowRoute.path,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n redirectTo: flowRoute.redirectTo,\n guards: flowRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: flowRoute.fallback ?? props.fallback,\n childRoute: flowRoute,\n overlayFlow,\n };\n overlayFlow.entries.push(entryRoute);\n routes.push(entryRoute);\n }\n return;\n }\n\n if (descriptor.container === 'splitview') {\n const primarySlot = routeChildren.find(isSplitPrimaryElement);\n const secondarySlot = routeChildren.find(isSplitSecondaryElement);\n\n const compileSplitSlot = (\n slot: ReactElement<RouterSplitViewSlotProps> | undefined,\n slotName: 'primary' | 'secondary',\n ): CompiledStackRoute[] => {\n if (!slot) return [];\n\n const slotProps = slot.props;\n const slotPath = joinRoutePath(path, slotProps.path);\n const { routeChildren: slotRouteChildren, renderChildren: slotRenderChildren } =\n splitRouteChildren(slotProps.children);\n const slotRouteId = slotProps.id ?? `${routeId}/${slotName}`;\n const slotAnimation = slotProps.animation ?? 'push';\n const slotRoutes: CompiledStackRoute[] = [];\n const slotOwnRoute = compiledRouteFromProps(\n slotProps,\n slotPath,\n slotRouteId,\n presentation,\n slotAnimation,\n slotRenderChildren,\n inheritedGuards,\n );\n\n if (slotOwnRoute) {\n slotRoutes.push(slotOwnRoute);\n }\n\n if (slotRouteChildren.length > 0) {\n slotRoutes.push(\n ...compileStackRoutes(\n slotRouteChildren,\n slotPath,\n slotRouteId,\n inheritedGuards,\n ),\n );\n }\n\n return slotRoutes;\n };\n\n const primaryRoutes = compileSplitSlot(primarySlot, 'primary');\n const secondaryRoutes = compileSplitSlot(secondarySlot, 'secondary');\n\n for (const splitChildRoute of [...primaryRoutes, ...secondaryRoutes]) {\n if (splitChildRoute.presentation !== 'push') {\n routes.push(splitChildRoute);\n }\n }\n\n const primaryPushRoutes = primaryRoutes.filter(\n (route) => route.presentation === 'push',\n );\n const secondaryPushRoutes = secondaryRoutes.filter(\n (route) => route.presentation === 'push',\n );\n const defaultPrimaryRoute = primaryPushRoutes[0];\n\n if (!defaultPrimaryRoute) {\n return;\n }\n\n const minWidth =\n (props as RouterSplitViewProps).minWidth ?? DEFAULT_SPLIT_MIN_WIDTH;\n const primaryMaxWidth =\n (props as RouterSplitViewProps).primaryMaxWidth ??\n DEFAULT_SPLIT_PRIMARY_MAX_WIDTH;\n const secondaryMinWidth =\n (props as RouterSplitViewProps).secondaryMinWidth ??\n DEFAULT_SPLIT_SECONDARY_MIN_WIDTH;\n const wideMinWidth = splitViewWideMinWidth(\n minWidth,\n primaryMaxWidth,\n secondaryMinWidth,\n );\n const splitViewLayoutId = `${routeId}/splitview`;\n\n for (const primaryRoute of primaryPushRoutes) {\n routes.push({\n id: `${routeId}/splitview:primary:${primaryRoute.id}`,\n path: primaryRoute.path,\n presentation: primaryRoute.presentation,\n animation: primaryRoute.animation,\n overlayLayout: primaryRoute.overlayLayout,\n guards: primaryRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: primaryRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute: primaryRoute,\n splitView: {\n primaryRoute,\n secondaryRoutes: secondaryPushRoutes,\n activePane: 'primary',\n minWidth,\n primaryMaxWidth,\n secondaryMinWidth,\n wideMinWidth,\n layoutId: splitViewLayoutId,\n },\n });\n }\n\n for (const secondaryRoute of secondaryPushRoutes) {\n routes.push({\n id: `${routeId}/splitview:secondary:${secondaryRoute.id}`,\n path: secondaryRoute.path,\n presentation: secondaryRoute.presentation,\n animation: secondaryRoute.animation,\n overlayLayout: secondaryRoute.overlayLayout,\n guards: secondaryRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: secondaryRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute: secondaryRoute,\n splitView: {\n primaryRoute: defaultPrimaryRoute,\n secondaryRoute,\n secondaryRoutes: secondaryPushRoutes,\n activePane: 'secondary',\n minWidth,\n primaryMaxWidth,\n secondaryMinWidth,\n wideMinWidth,\n layoutId: splitViewLayoutId,\n },\n });\n }\n return;\n }\n\n if (descriptor.container === 'tabbar' || descriptor.container === 'drawer') {\n const isTabBar = descriptor.container === 'tabbar';\n const drawerNavigation = isTabBar\n ? null\n : collectDrawerNavigation(routeChildren, path, routeId);\n const navigationItems = isTabBar\n ? routeChildren.filter(isTabBarItemElement)\n : drawerNavigation!.entries.map((entry) => entry.element);\n\n if (navigationItems.length > 0) {\n const tabs: RouterTabBarTab[] | undefined = isTabBar\n ? (navigationItems as ReactElement<RouterTabBarItemProps>[]).map((item) => {\n const itemPath = joinRoutePath(path, item.props.path) ?? '/';\n return {\n id: item.props.id ?? normalizedPath(itemPath),\n path: itemPath,\n label: item.props.label,\n icon: item.props.icon,\n };\n })\n : undefined;\n const drawerItems = drawerNavigation?.nodes;\n\n navigationItems.forEach((item, itemIndex) => {\n const itemProps = item.props as RouterTabBarItemProps | RouterDrawerItemProps;\n const itemPath = joinRoutePath(path, itemProps.path);\n const navigationItem = isTabBar\n ? tabs?.[itemIndex]\n : drawerNavigation?.entries[itemIndex]?.item;\n if (!navigationItem) return;\n\n const { routeChildren: itemRouteChildren, renderChildren: itemRenderChildren } =\n splitRouteChildren(itemProps.children);\n const itemRouteId =\n itemProps.id ??\n `${routeId}/${descriptor.container}-${itemIndex}:${itemPath ?? '*'}:push`;\n const itemAnimation = itemProps.animation ?? 'push';\n const itemElementType =\n itemProps.element !== undefined && isElementType(itemProps.element)\n ? itemProps.element\n : undefined;\n const itemElementNode: ReactNode | undefined =\n itemProps.element !== undefined && !itemElementType\n ? (itemProps.element as ReactNode)\n : undefined;\n const itemHasRenderable =\n itemProps.element !== undefined ||\n itemProps.component !== undefined ||\n itemRenderChildren !== undefined;\n const itemChildRoutes: CompiledStackRoute[] = [];\n\n if (itemHasRenderable) {\n itemChildRoutes.push({\n id: itemRouteId,\n path: itemPath,\n presentation,\n animation: itemAnimation,\n overlayLayout: itemProps.overlayLayout,\n guards: inheritedGuards,\n stackKey: itemProps.stackKey,\n fallback: itemProps.fallback,\n element: itemElementNode,\n elementType: itemElementType,\n component: itemProps.component,\n layout: itemProps.layout,\n render:\n typeof itemRenderChildren === 'function' ? itemRenderChildren : undefined,\n childrenNode:\n typeof itemRenderChildren === 'function' ? undefined : itemRenderChildren,\n });\n }\n\n if (itemRouteChildren.length > 0) {\n itemChildRoutes.push(\n ...compileStackRoutes(\n itemRouteChildren,\n itemPath,\n itemRouteId,\n inheritedGuards,\n ),\n );\n }\n\n for (const childRoute of itemChildRoutes) {\n if (childRoute.presentation !== 'push') {\n routes.push(childRoute);\n continue;\n }\n\n const containerRoute: CompiledStackRoute = {\n id: `${routeId}/${descriptor.container}:${navigationItem.id}:${childRoute.id}`,\n path: childRoute.path,\n presentation: childRoute.presentation,\n animation: childRoute.animation,\n overlayLayout: childRoute.overlayLayout,\n guards: childRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: childRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode:\n typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute,\n drawerAside: isTabBar ? undefined : (props as RouterDrawerProps).aside,\n drawerFooter: isTabBar ? undefined : (props as RouterDrawerProps).footer,\n drawerDesktopCollapsible: isTabBar\n ? undefined\n : (props as RouterDrawerProps).desktopCollapsible,\n };\n\n if (isTabBar && tabs) {\n containerRoute.tabBar = {\n tabs,\n activeTab: navigationItem.id,\n };\n } else if (!isTabBar && drawerItems) {\n containerRoute.drawer = {\n items: drawerItems,\n activeItem: navigationItem.id,\n };\n }\n\n routes.push(containerRoute);\n }\n });\n return;\n }\n\n const compiledChildren =\n routeChildren.length > 0\n ? compileStackRoutes(routeChildren, path, routeId, inheritedGuards)\n : [];\n\n for (const childRoute of compiledChildren) {\n if (childRoute.presentation !== 'push') {\n routes.push(childRoute);\n continue;\n }\n\n routes.push({\n id: routeId,\n path: childRoute.path,\n presentation,\n animation: childRoute.animation,\n overlayLayout: childRoute.overlayLayout,\n guards: childRoute.guards,\n stackKey: props.stackKey ?? routeId,\n fallback: childRoute.fallback ?? props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n container: descriptor.container,\n childRoute,\n });\n }\n return;\n }\n\n if (\n descriptor.container === 'tabbar-item' ||\n descriptor.container === 'drawer-group' ||\n descriptor.container === 'drawer-section' ||\n descriptor.container === 'drawer-item' ||\n descriptor.container === 'split-primary' ||\n descriptor.container === 'split-secondary'\n ) {\n return;\n }\n\n const compiledChildren =\n routeChildren.length > 0\n ? compileStackRoutes(routeChildren, path, routeId, inheritedGuards)\n : [];\n\n if (hasRenderable) {\n routes.push({\n id: routeId,\n path,\n flowParent: props.flowParent,\n presentation,\n animation,\n overlayLayout: props.overlayLayout,\n guards: inheritedGuards,\n stackKey: props.stackKey,\n fallback: props.fallback,\n element: elementNode,\n elementType,\n component: props.component,\n layout: props.layout,\n render: typeof renderChildren === 'function' ? renderChildren : undefined,\n childrenNode: typeof renderChildren === 'function' ? undefined : renderChildren,\n });\n }\n\n if (compiledChildren.length > 0) {\n routes.push(...compiledChildren);\n }\n });\n\n return routes;\n}\n\nfunction matchStackRouteByPresentation(\n routes: CompiledStackRoute[],\n parser: ReturnType<typeof useWouterRouter>['parser'],\n pathname: string,\n presentations: ReadonlySet<StackPresentation>,\n): RouterRouteMatch | null {\n for (const route of routes) {\n if (!presentations.has(route.presentation)) continue;\n const [matches, params] = matchRoute(parser, route.path ?? '*', pathname);\n if (matches) {\n return {\n route,\n params: { ...params },\n };\n }\n }\n\n return null;\n}\n\nfunction splitViewRouteForCompiledRoute(\n route: CompiledStackRoute | undefined,\n): CompiledStackRoute | undefined {\n if (route?.container === 'splitview' && route.splitView) return route;\n if (route?.childRoute?.container === 'splitview' && route.childRoute.splitView) {\n return route.childRoute;\n }\n return undefined;\n}\n\nfunction stateForSplitNavigationTarget(\n state: unknown,\n targetMatch: RouterRouteMatch | null,\n action: 'navigate' | 'replace' | 'pop',\n): unknown {\n const origin = splitNavigationOriginFromState(state);\n if (!origin) return state;\n\n const next = mutableHistoryState(state);\n delete next[SPLIT_NAVIGATION_ORIGIN_KEY];\n\n const targetSplitRoute = splitViewRouteForCompiledRoute(targetMatch?.route);\n const targetSplit = targetSplitRoute?.splitView;\n if (\n !targetSplit ||\n targetSplit.layoutId !== origin.splitViewId ||\n targetSplit.activePane !== 'secondary'\n ) {\n delete next[SPLIT_NAVIGATION_KEY];\n return next;\n }\n\n const metadata: SplitNavigationMetadata =\n // A primary selection establishes a new detail root. Navigation initiated\n // inside secondary continues (or explicitly replaces) that detail path.\n origin.pane === 'primary'\n ? {\n splitViewId: origin.splitViewId,\n detailPathId: createRouterId(),\n detailDepth: 0,\n operation: 'selection',\n }\n : {\n splitViewId: origin.splitViewId,\n detailPathId: origin.detailPathId,\n detailDepth:\n action === 'navigate'\n ? origin.detailDepth + 1\n : action === 'pop'\n ? Math.max(0, origin.detailDepth - 1)\n : origin.detailDepth,\n operation: action === 'navigate' ? 'push' : action,\n };\n\n next[SPLIT_NAVIGATION_KEY] = metadata;\n return next;\n}\n\nfunction routeRenderPropsForMatch(\n pathname: string,\n search: string,\n historyState: unknown,\n match: RouterRouteMatch,\n): RouterRouteRenderProps {\n return {\n params: match.params,\n pathname: normalizedPath(pathname),\n search,\n historyState,\n presentation: match.route.presentation,\n };\n}\n\nfunction resolveGuardValue<T>(\n value: RouterGuardValue<T>,\n props: RouterRouteRenderProps,\n): T {\n return typeof value === 'function'\n ? (value as (props: RouterRouteRenderProps) => T)(props)\n : value;\n}\n\ntype RouteGuardOutcome =\n | { status: 'allow' }\n | { status: 'redirect'; to: string }\n | { status: 'pending'; element: ReactNode };\n\nconst GUARD_ALLOW: RouteGuardOutcome = { status: 'allow' };\n\n/**\n * Guards resolve outside-in: the first one that is not `true` decides. An\n * undecided guard wins over a later denial — until it answers we cannot know\n * whether the later one would even be reached.\n */\nfunction resolveRouteGuard(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n historyState: unknown,\n): RouteGuardOutcome {\n const props = routeRenderPropsForMatch(pathname, search, historyState, match);\n\n for (const guard of match.route.guards) {\n const value = resolveGuardValue(guard.when, props);\n if (value === true) continue;\n if (value === false) {\n return { status: 'redirect', to: resolveGuardValue(guard.redirectTo, props) };\n }\n return { status: 'pending', element: guard.pending ?? null };\n }\n\n if (match.route.redirectTo) {\n return { status: 'redirect', to: resolveGuardValue(match.route.redirectTo, props) };\n }\n\n return GUARD_ALLOW;\n}\n\nfunction guardRedirectForMatch(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n historyState: unknown,\n): string | null {\n const outcome = resolveRouteGuard(match, pathname, search, historyState);\n return outcome.status === 'redirect' ? outcome.to : null;\n}\n\nconst PUSH_PRESENTATIONS = new Set<StackPresentation>(['push']);\nconst OVERLAY_PRESENTATIONS = new Set<StackPresentation>(['modal', 'sheet']);\n\nfunction parseNavigationTarget(\n to: string,\n currentPathname: string,\n): { pathname: string; search: string } {\n const base = `${window.location.origin}${currentPathname.startsWith('/') ? currentPathname : `/${currentPathname}`}`;\n const url = new URL(to, base);\n return {\n pathname: normalizedPath(url.pathname),\n search: url.search,\n };\n}\n\nfunction pathForRoutePattern(\n pattern: string | undefined,\n params: DefaultParams,\n): string | null {\n if (!pattern || pattern === '*') return null;\n\n let missingParam = false;\n const pathname = pattern.replace(/:([A-Za-z0-9_]+)/g, (_match, key: string) => {\n const value = params[key];\n if (value == null) {\n missingParam = true;\n return '';\n }\n return encodeURIComponent(String(value));\n });\n\n if (missingParam || pathname.includes('*')) return null;\n return normalizedPath(pathname);\n}\n\nfunction resolveStackKey(match: RouterRouteMatch, props: RouterRouteRenderProps): string {\n const { route } = match;\n if (typeof route.stackKey === 'function') return route.stackKey(props);\n if (typeof route.stackKey === 'string') return route.stackKey;\n return normalizedPath(props.pathname);\n}\n\nfunction stackSnapshot(\n pathname: string,\n search: string,\n historyState: unknown,\n match: RouterRouteMatch,\n): StackSnapshot {\n const normalized = normalizedPath(pathname);\n const historyIndex = historyIndexFromState(historyState);\n const historyNavigationKey =\n historyNavigationKeyFromState(historyState) ?? `navigation-${historyIndex}`;\n const props = routeRenderPropsForMatch(normalized, search, historyState, match);\n const stackKey = resolveStackKey(match, props);\n const splitNavigation = splitNavigationFromState(historyState);\n\n return {\n ...match,\n stackKey,\n locationKey: `${normalized}${search}:${historyIndex}:${historyNavigationKey}`,\n historyNavigationKey,\n pathname: normalized,\n search,\n historyState,\n historyIndex,\n historyCommit: historyCommitFromState(historyState),\n depth: routeDepth(normalized),\n presentation: match.route.presentation,\n splitNavigation,\n };\n}\n\nfunction resolveDirection(\n previous: StackSnapshot | undefined,\n current: StackSnapshot,\n): StackDirection {\n if (!previous) return 'forward';\n if (current.historyIndex < previous.historyIndex) return 'back';\n if (current.historyIndex > previous.historyIndex) return 'forward';\n if (current.depth < previous.depth) return 'back';\n return 'forward';\n}\n\nfunction createEntry(\n snapshot: StackSnapshot,\n enterDirection: StackDirection,\n animateEnter: boolean,\n): StackEntry {\n const transitionKey = animateEnter\n ? `${snapshot.stackKey}:${snapshot.locationKey}:${createRouterId()}`\n : `${snapshot.stackKey}:${snapshot.locationKey}`;\n\n return {\n ...snapshot,\n id: transitionKey,\n transitionKey,\n enterDirection,\n exitDirection: 'back',\n animateEnter,\n };\n}\n\nfunction markCommitted(entry: StackEntry): StackEntry {\n return entry.animateEnter ? { ...entry, animateEnter: false } : entry;\n}\n\nfunction mergeEntrySnapshot(entry: StackEntry, snapshot: StackSnapshot): StackEntry {\n return {\n ...entry,\n ...snapshot,\n id: entry.id,\n transitionKey: entry.transitionKey,\n animateEnter: entry.animateEnter,\n };\n}\n\nfunction isModalLikePresentation(\n presentation: StackPresentation,\n): presentation is ModalKind {\n return presentation === 'modal' || presentation === 'sheet';\n}\n\nfunction isTabBarStackEntry(entry: StackSnapshot): boolean {\n return entry.route.container === 'tabbar';\n}\n\nfunction isDrawerContainerUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n previous.stackKey === current.stackKey &&\n previous.route.container === 'drawer' &&\n current.route.container === 'drawer'\n );\n}\n\nfunction canNavigateBackWithinDrawer(\n previous: StackSnapshot | undefined,\n current: StackSnapshot | undefined,\n): boolean {\n if (!previous || !current) return false;\n\n return (\n previous.stackKey === current.stackKey &&\n previous.route.container === 'drawer' &&\n current.route.container === 'drawer' &&\n previous.route.drawer?.activeItem === current.route.drawer?.activeItem &&\n previous.pathname !== current.pathname\n );\n}\n\nfunction isTabBarContainerUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n previous.stackKey === current.stackKey &&\n (isTabBarStackEntry(previous) || isTabBarStackEntry(current))\n );\n}\n\nfunction stackEntryContentContainer(\n entry: StackSnapshot,\n): StackRouteContainer | undefined {\n return entry.route.childRoute?.container ?? entry.route.container;\n}\n\nfunction splitViewRouteForSnapshot(\n snapshot: StackSnapshot,\n): CompiledStackRoute | undefined {\n return splitViewRouteForCompiledRoute(snapshot.route);\n}\n\nfunction activeSplitViewLayout(layoutId: string): boolean | null {\n if (typeof document === 'undefined') return null;\n\n const splitViews = document.querySelectorAll<HTMLElement>(\n '.sigmela-split-view[data-router-split-view-id]',\n );\n\n for (const splitView of splitViews) {\n if (splitView.dataset.routerSplitViewId !== layoutId) continue;\n\n const stackScreen = splitView.closest<HTMLElement>(\n '[data-route-stack-screen=\"true\"]',\n );\n if (stackScreen?.dataset.routeStackPhase !== 'active') continue;\n\n const layout = splitView.dataset.layout;\n if (layout === 'wide') return true;\n if (layout === 'narrow') return false;\n }\n\n return null;\n}\n\nfunction isWideSplitViewRoute(route: CompiledStackRoute | undefined): boolean {\n const splitView = route?.splitView;\n if (\n !splitView ||\n typeof window === 'undefined' ||\n typeof window.matchMedia !== 'function'\n ) {\n return false;\n }\n\n const activeLayout = activeSplitViewLayout(splitView.layoutId);\n if (activeLayout !== null) return activeLayout;\n\n return window.matchMedia(`(min-width: ${splitView.wideMinWidth}px)`).matches;\n}\n\nfunction secondarySplitBackTarget(snapshot: StackSnapshot | undefined): string | null {\n if (!snapshot) return null;\n\n const splitRoute = splitViewRouteForSnapshot(snapshot);\n const splitView = splitRoute?.splitView;\n\n if (!splitView || splitView.activePane !== 'secondary') return null;\n if (!isWideSplitViewRoute(splitRoute)) return null;\n\n const currentPath = normalizedPath(snapshot.pathname);\n const parentSecondaryRoute = (splitView.secondaryRoutes ?? [])\n .map((route) => pathForRoutePattern(route.path, snapshot.params))\n .filter((path): path is string =>\n Boolean(path && path !== currentPath && currentPath.startsWith(`${path}/`)),\n )\n .sort((a, b) => routeDepth(b) - routeDepth(a))[0];\n\n if (parentSecondaryRoute) return parentSecondaryRoute;\n\n const target = pathForRoutePattern(splitView.primaryRoute.path, snapshot.params);\n if (!target || target === snapshot.pathname) return null;\n\n return target;\n}\n\nfunction canNavigateBackWithinSplit(\n previous: StackSnapshot | undefined,\n current: StackSnapshot | undefined,\n): boolean {\n if (!previous || !current) return false;\n\n const currentRoute = splitViewRouteForSnapshot(current);\n const previousRoute = splitViewRouteForSnapshot(previous);\n const currentSplit = currentRoute?.splitView;\n const previousSplit = previousRoute?.splitView;\n\n if (!currentSplit || currentSplit.activePane !== 'secondary') return false;\n if (!previousSplit) return false;\n if (!isWideSplitViewRoute(currentRoute)) return false;\n\n return (\n previous.stackKey === current.stackKey &&\n previousSplit.primaryRoute.id === currentSplit.primaryRoute.id\n );\n}\n\nfunction existingStackEntryIndexForSnapshot(\n entries: StackEntry[],\n snapshot: StackSnapshot,\n): number {\n const locationIndex = entries.findIndex(\n (entry) => entry.locationKey === snapshot.locationKey,\n );\n if (locationIndex !== -1) return locationIndex;\n\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (\n entry.stackKey === snapshot.stackKey &&\n entry.pathname === snapshot.pathname &&\n entry.search === snapshot.search\n ) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction syncTargetEntryIndex(entries: StackEntry[], snapshot: StackSnapshot): number {\n if (snapshot.historyCommit !== 'sync') return -1;\n return entries.findIndex(\n (entry) => entry.historyNavigationKey === snapshot.historyNavigationKey,\n );\n}\n\nfunction entriesRevealingSnapshot(\n entries: StackEntry[],\n existingIndex: number,\n snapshot: StackSnapshot,\n): StackEntry[] {\n const revealed = entries[existingIndex];\n const base = entries.slice(0, existingIndex).map(markCommitted);\n\n return [\n ...base,\n {\n ...revealed,\n ...snapshot,\n id: revealed.id,\n animateEnter: false,\n enterDirection: 'back',\n },\n ];\n}\n\nfunction previousStackEntry(\n entries: StackEntry[],\n active: StackEntry | undefined,\n): StackEntry | undefined {\n if (!active) return undefined;\n const activeIndex = entries.findIndex((entry) => entry.id === active.id);\n if (activeIndex <= 0) return undefined;\n return entries[activeIndex - 1];\n}\n\nfunction previousSnapshotInDetailPath(\n history: StackSnapshot[],\n current: StackSnapshot,\n): StackSnapshot | undefined {\n const navigation = current.splitNavigation;\n if (!navigation || navigation.detailDepth <= 0) return undefined;\n\n const currentIndex = history.findIndex(\n (entry) => entry.historyIndex === current.historyIndex,\n );\n if (currentIndex <= 0) return undefined;\n\n for (let index = currentIndex - 1; index >= 0; index -= 1) {\n const candidate = history[index];\n const candidateNavigation = candidate.splitNavigation;\n if (\n candidateNavigation?.splitViewId === navigation.splitViewId &&\n candidateNavigation.detailPathId === navigation.detailPathId &&\n candidateNavigation.detailDepth === navigation.detailDepth - 1\n ) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nfunction navigateToSnapshot(snapshot: StackSnapshot | undefined): boolean {\n if (!snapshot) return false;\n navigateWithHistoryIndex(`${snapshot.pathname}${snapshot.search}`, {\n commit: 'sync',\n state: snapshot.historyState,\n });\n return true;\n}\n\nfunction isWideSplitInternalUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n const previousRoute = splitViewRouteForSnapshot(previous);\n const currentRoute = splitViewRouteForSnapshot(current);\n const previousSplit = previousRoute?.splitView;\n const currentSplit = currentRoute?.splitView;\n\n if (!previousSplit || !currentSplit) return false;\n\n return (\n previous.stackKey === current.stackKey &&\n (previousSplit.activePane === 'secondary' ||\n currentSplit.activePane === 'secondary') &&\n previousSplit.primaryRoute.id === currentSplit.primaryRoute.id &&\n isWideSplitViewRoute(currentRoute)\n );\n}\n\nfunction isSameScreenRouteUpdate(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n previous.stackKey === current.stackKey &&\n previous.route.id === current.route.id &&\n previous.presentation === current.presentation\n );\n}\n\nfunction shouldReplaceActiveStackEntry(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n const isSecondaryPush =\n current.splitPane === 'secondary' && current.splitNavigation?.operation === 'push';\n\n return (\n (!current.forcePushRouteChanges &&\n !isSecondaryPush &&\n isSameScreenRouteUpdate(previous, current)) ||\n isWideSplitInternalUpdate(previous, current) ||\n isDrawerContainerUpdate(previous, current) ||\n isTabBarContainerUpdate(previous, current)\n );\n}\n\nfunction isExplicitStackReplace(\n previous: StackSnapshot,\n current: StackSnapshot,\n): boolean {\n return (\n current.historyCommit === 'replace' && previous.historyIndex === current.historyIndex\n );\n}\n\nfunction replaceActiveStackEntry(\n entries: StackEntry[],\n activeId: string,\n snapshot: StackSnapshot,\n direction: StackDirection,\n commitInactive: boolean,\n): StackEntry[] {\n return entries.map((entry) => {\n if (entry.id === activeId) {\n return {\n ...mergeEntrySnapshot(entry, snapshot),\n enterDirection: direction,\n };\n }\n return commitInactive ? markCommitted(entry) : entry;\n });\n}\n\nfunction presentationClass(presentation: StackPresentation): string {\n return presentation;\n}\n\nfunction activeAnimationClass(entry: StackEntry): StackAnimationType {\n if (entry.presentation !== 'push') return 'none';\n if (entry.route.animation === 'slide_from_bottom' && entry.enterDirection !== 'back') {\n return 'slide-from-bottom-enter';\n }\n return entry.enterDirection === 'back' ? 'pop-enter' : 'push-enter';\n}\n\nfunction exitingAnimationClass(entry: StackEntry): StackAnimationType {\n if (entry.presentation !== 'push') return 'none';\n if (entry.route.animation === 'slide_from_bottom' && entry.exitDirection === 'back') {\n return 'slide-from-bottom-exit';\n }\n return entry.exitDirection === 'back' ? 'pop-exit' : 'push-exit';\n}\n\nfunction inactiveAnimationClass(\n entry: StackEntry,\n activeEntry: StackEntry | undefined,\n direction: StackDirection,\n): StackAnimationType {\n if (entry.presentation !== 'push' || activeEntry?.presentation !== 'push') {\n return 'none';\n }\n\n if (activeEntry.route.animation === 'slide_from_bottom') {\n return 'none';\n }\n\n return direction === 'back' ? 'pop-background' : 'push-background';\n}\n\nfunction transitionStatusForEntry(\n entry: StackEntry,\n status: StackTransitionStatus | undefined,\n): StackTransitionStatus {\n if (status) return status;\n return entry.animateEnter ? 'preEnter' : 'entered';\n}\n\nfunction phaseForEntry(\n entry: StackEntry,\n activeIds: Set<string>,\n activeId: string | null,\n): StackPhase {\n if (!activeIds.has(entry.id)) return 'exiting';\n return entry.id === activeId ? 'active' : 'inactive';\n}\n\nfunction animationClassForEntry(\n entry: StackEntry,\n phase: StackPhase,\n activeEntry: StackEntry | undefined,\n direction: StackDirection,\n): StackAnimationType {\n if (phase === 'exiting') return exitingAnimationClass(entry);\n if (phase === 'active') return activeAnimationClass(entry);\n return inactiveAnimationClass(entry, activeEntry, direction);\n}\n\nfunction screenClassName(\n entry: StackEntry,\n phase: StackPhase,\n transitionStatus: StackTransitionStatus,\n animationType: StackAnimationType,\n): string {\n return [\n 'screen-stack-item',\n presentationClass(entry.presentation),\n animationType,\n `transition-${transitionStatus}`,\n `phase-${phase}`,\n ].join(' ');\n}\n\nfunction frozenLocationHook(pathname: string): BaseLocationHook {\n return () => [pathname, navigateWithHistoryIndex];\n}\n\nfunction searchParamsForSearch(search: string): URLSearchParams {\n return new URLSearchParams(search.startsWith('?') ? search.slice(1) : search);\n}\n\nfunction routeContextValue(entry: StackEntry): RouterRouteContextValue {\n return {\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n searchParams: searchParamsForSearch(entry.search),\n historyState: entry.historyState,\n presentation: entry.presentation,\n splitPane: entry.splitPane,\n };\n}\n\nfunction routeContextValueFromProps(\n props: RouterRouteRenderProps,\n): RouterRouteContextValue {\n return {\n ...props,\n searchParams: searchParamsForSearch(props.search),\n };\n}\n\nfunction pathnameForRouteContext(\n route: CompiledStackRoute,\n fallbackPathname: string,\n): string {\n const routePath = route.path;\n if (!routePath || routePath.includes(':') || routePath.includes('*')) {\n return fallbackPathname;\n }\n return normalizedPath(routePath);\n}\n\nfunction useMinWidth(minWidth: number): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(`(min-width: ${minWidth}px)`).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(`(min-width: ${minWidth}px)`);\n const handleChange = (event: MediaQueryListEvent) => setMatches(event.matches);\n\n setMatches(mediaQuery.matches);\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n const mediaQueryWithListener = mediaQuery as unknown as {\n addListener?: (handler: (event: MediaQueryListEvent) => void) => void;\n removeListener?: (handler: (event: MediaQueryListEvent) => void) => void;\n };\n mediaQueryWithListener.addListener?.(handleChange);\n return () => mediaQueryWithListener.removeListener?.(handleChange);\n }, [minWidth]);\n\n return matches;\n}\n\nfunction measuredElementWidth(element: HTMLElement): number {\n return element.getBoundingClientRect().width || element.clientWidth || 0;\n}\n\nfunction widthMatchesMinWidth(width: number, minWidth: number): boolean | null {\n if (width <= 0) return null;\n return width >= minWidth;\n}\n\nfunction useElementMinWidth(minWidth: number) {\n const ref = useRef<HTMLDivElement | null>(null);\n const viewportMatches = useMinWidth(minWidth);\n const [elementMatches, setElementMatches] = useState<boolean | null>(null);\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) {\n setElementMatches(null);\n return;\n }\n\n const updateWidth = (width: number) => {\n const nextMatches = widthMatchesMinWidth(width, minWidth);\n setElementMatches((currentMatches) =>\n currentMatches === nextMatches ? currentMatches : nextMatches,\n );\n };\n const measure = () => updateWidth(measuredElementWidth(element));\n\n measure();\n\n let observer: ResizeObserver | null = null;\n if (\n typeof window !== 'undefined' &&\n typeof window.ResizeObserver === 'function'\n ) {\n observer = new window.ResizeObserver((entries) => {\n updateWidth(entries[0]?.contentRect.width ?? measuredElementWidth(element));\n });\n observer.observe(element);\n }\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', measure);\n }\n\n return () => {\n observer?.disconnect();\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', measure);\n }\n };\n }, [minWidth]);\n\n return [ref, elementMatches ?? viewportMatches] as const;\n}\n\nexport function useRoute(): RouterRouteContextValue {\n const route = useContext(RouterRouteContext);\n if (!route) {\n throw new Error('Router route hooks must be used inside <Router>');\n }\n return route;\n}\n\nexport function useCurrentRoute(): RouterRouteContextValue {\n return useRoute();\n}\n\nexport function useParams<TParams extends DefaultParams = DefaultParams>(): TParams {\n return useRoute().params as TParams;\n}\n\nexport function useSearchParams(): URLSearchParams {\n return useRoute().searchParams;\n}\n\nexport function useHistoryState<TState = unknown>(): TState {\n return useRoute().historyState as TState;\n}\n\nexport function useRouter(): RouterApi {\n const router = useContext(RouterActionsContext);\n const splitPaneOrigin = useContext(SplitPaneNavigationContext);\n if (!router) {\n throw new Error('useRouter must be used inside <Router>');\n }\n\n return useMemo(() => {\n if (!splitPaneOrigin) return router;\n\n return {\n ...router,\n navigate: (to, options = {}) => {\n if (typeof to === 'number') {\n router.navigate(to, options);\n return;\n }\n router.navigate(to, {\n ...options,\n state: stateWithSplitNavigationOrigin(options.state, splitPaneOrigin),\n });\n },\n replace: (to, options = {}) => {\n router.replace(to, {\n ...options,\n state: stateWithSplitNavigationOrigin(options.state, splitPaneOrigin),\n });\n },\n popTo: (to, options = {}) => {\n router.popTo(to, {\n ...options,\n state: stateWithSplitNavigationOrigin(options.state, splitPaneOrigin),\n });\n },\n };\n }, [router, splitPaneOrigin]);\n}\n\nexport function useDrawer(): RouterDrawerApi {\n const drawer = useContext(RouterDrawerContext);\n if (!drawer) {\n throw new Error('useDrawer must be used inside <Router.Drawer>');\n }\n return drawer;\n}\n\nexport interface CurrentModalApi {\n id: string;\n index: number;\n exiting: boolean;\n /** Begin close: triggers the modal's exit animation. The modal calls `remove()` on animation complete. */\n close: () => void;\n /** Synchronously drop from the stack. Modal implementations use this after their exit animation finishes. */\n remove: () => void;\n}\n\nexport function useCurrentModal(): CurrentModalApi {\n const current = useContext(CurrentModalContext);\n if (!current) {\n throw new Error('useCurrentModal called outside a Router modal/sheet entry');\n }\n return current;\n}\n\nfunction DefaultSplitViewLayout({\n primary,\n secondary,\n isWide,\n primaryMaxWidth = DEFAULT_SPLIT_PRIMARY_MAX_WIDTH,\n splitViewRef,\n splitViewLayoutId,\n}: RouterRouteLayoutProps) {\n return (\n <div\n ref={splitViewRef}\n className=\"sigmela-split-view\"\n data-layout={isWide ? 'wide' : 'narrow'}\n data-router-split-view-id={splitViewLayoutId}\n style={\n { '--sigmela-split-primary-max-width': `${primaryMaxWidth}px` } as CSSProperties\n }\n >\n <div\n className=\"sigmela-split-view__primary\"\n style={!isWide && secondary ? { display: 'none' } : undefined}\n >\n {primary}\n </div>\n <div className=\"sigmela-split-view__secondary\">{secondary}</div>\n </div>\n );\n}\n\nfunction DefaultDrawerLayout({\n children,\n aside,\n footer,\n items = [],\n activeItem,\n onItemChange,\n drawer,\n}: RouterRouteLayoutProps) {\n const [expandedGroups, setExpandedGroups] = useState<ReadonlySet<string>>(\n () => new Set(),\n );\n const toggleGroup = useCallback((id: string) => {\n setExpandedGroups((current) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n return (\n <div\n className=\"sigmela-drawer\"\n data-drawer-open={drawer?.isOpen ? 'true' : 'false'}\n data-drawer-collapsed={drawer?.isCollapsed ? 'true' : 'false'}\n data-drawer-desktop={drawer?.desktopCollapsible}\n >\n <aside\n className=\"sigmela-drawer__sidebar\"\n inert={drawer?.isMobile && !drawer.isOpen ? true : undefined}\n >\n <div className=\"sigmela-drawer__sidebar-content\">\n {items\n .filter((node) => !node.hidden)\n .map((node) => {\n if (node.type === 'item') {\n return (\n <button\n key={node.id}\n type=\"button\"\n className=\"sigmela-drawer__item\"\n aria-label={node.label}\n title={drawer?.isCollapsed ? node.label : undefined}\n data-active={node.id === activeItem ? 'true' : undefined}\n onClick={() => onItemChange?.(node.id)}\n >\n {node.icon || drawer?.isCollapsed ? (\n <span className=\"sigmela-drawer__item-icon\" aria-hidden=\"true\">\n {node.icon ?? node.label.slice(0, 1)}\n </span>\n ) : null}\n <span className=\"sigmela-drawer__item-label\">{node.label}</span>\n {node.badge ? (\n <span className=\"sigmela-drawer__item-badge\">{node.badge}</span>\n ) : null}\n </button>\n );\n }\n\n if (node.type === 'section') {\n return (\n <div key={node.id} className=\"sigmela-drawer__section-label\">\n {node.title}\n </div>\n );\n }\n\n const visibleItems = node.items.filter((item) => !item.hidden);\n if (visibleItems.length === 0) return null;\n const isExpanded = expandedGroups.has(node.id);\n const itemsId = `${node.id}-drawer-items`;\n\n return (\n <div key={node.id} className=\"sigmela-drawer__group-container\">\n <button\n type=\"button\"\n className=\"sigmela-drawer__item sigmela-drawer__group-label\"\n aria-label={node.label}\n title={drawer?.isCollapsed ? node.label : undefined}\n aria-controls={itemsId}\n aria-expanded={isExpanded}\n onClick={() => {\n if (drawer?.isCollapsed) drawer.open();\n toggleGroup(node.id);\n }}\n >\n {node.icon || drawer?.isCollapsed ? (\n <span className=\"sigmela-drawer__item-icon\" aria-hidden=\"true\">\n {node.icon ?? node.label.slice(0, 1)}\n </span>\n ) : null}\n <span className=\"sigmela-drawer__item-label\">{node.label}</span>\n {node.chevron ? (\n <span\n className=\"sigmela-drawer__group-chevron\"\n data-expanded={isExpanded ? 'true' : undefined}\n aria-hidden=\"true\"\n >\n {node.chevron}\n </span>\n ) : null}\n </button>\n {isExpanded ? (\n <div id={itemsId} className=\"sigmela-drawer__group-items\">\n {visibleItems.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className=\"sigmela-drawer__item sigmela-drawer__subitem\"\n data-active={item.id === activeItem ? 'true' : undefined}\n onClick={() => onItemChange?.(item.id)}\n >\n {item.icon ? (\n <span className=\"sigmela-drawer__item-icon\">{item.icon}</span>\n ) : null}\n <span className=\"sigmela-drawer__item-label\">{item.label}</span>\n {item.badge ? (\n <span className=\"sigmela-drawer__item-badge\">\n {item.badge}\n </span>\n ) : null}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n {footer ? <div className=\"sigmela-drawer__footer\">{footer}</div> : null}\n </aside>\n <button\n type=\"button\"\n className=\"sigmela-drawer__overlay\"\n aria-label=\"Close navigation\"\n tabIndex={drawer?.isMobile && drawer.isOpen ? 0 : -1}\n onClick={drawer?.close}\n />\n <main\n className=\"sigmela-drawer__main\"\n inert={drawer?.isMobile && drawer.isOpen ? true : undefined}\n >\n {children}\n </main>\n {aside ? <aside className=\"sigmela-drawer__assistant\">{aside}</aside> : null}\n </div>\n );\n}\n\nfunction FrozenPaneRouteContent({\n route,\n props,\n fallback,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n fallback: ReactNode;\n}) {\n const hook = useMemo(() => frozenLocationHook(props.pathname), [props.pathname]);\n const searchHook = useMemo(() => () => props.search, [props.search]);\n const routeContext = useMemo(() => routeContextValueFromProps(props), [props]);\n\n return (\n <WouterRouter hook={hook} searchHook={searchHook}>\n <RouterRouteContext.Provider value={routeContext}>\n <Suspense fallback={fallback}>{renderRouteContent(route, props)}</Suspense>\n </RouterRouteContext.Provider>\n </WouterRouter>\n );\n}\n\nfunction stackSnapshotForRouteProps(\n route: CompiledStackRoute,\n props: RouterRouteRenderProps,\n stackKey: string,\n forcePushRouteChanges = false,\n): StackSnapshot {\n const normalized = normalizedPath(props.pathname);\n const historyIndex = historyIndexFromState(props.historyState);\n const historyNavigationKey =\n historyNavigationKeyFromState(props.historyState) ?? `navigation-${historyIndex}`;\n const splitNavigation = splitNavigationFromState(props.historyState);\n\n return {\n route,\n params: props.params,\n stackKey,\n locationKey: `${normalized}${props.search}:${historyIndex}:${historyNavigationKey}`,\n historyNavigationKey,\n pathname: normalized,\n search: props.search,\n historyState: props.historyState,\n historyIndex,\n historyCommit: historyCommitFromState(props.historyState),\n depth: routeDepth(normalized),\n presentation: route.presentation,\n forcePushRouteChanges,\n splitPane: props.splitPane,\n splitNavigation,\n };\n}\n\nfunction propsForStackEntry(entry: StackEntry): RouterRouteRenderProps {\n return {\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n historyState: entry.historyState,\n presentation: entry.presentation,\n splitPane: entry.splitPane,\n };\n}\n\nfunction RouteStackViewport({\n route,\n props,\n fallback,\n stackKey,\n className = 'sigmela-split-pane-stack',\n contentClassName,\n scopeOverlayContent = false,\n forcePushRouteChanges = false,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n fallback: ReactNode;\n stackKey: string;\n className?: string;\n contentClassName?: string;\n scopeOverlayContent?: boolean;\n forcePushRouteChanges?: boolean;\n}) {\n const snapshot = useMemo(\n () =>\n stackSnapshotForRouteProps(\n route,\n props,\n stackKey,\n forcePushRouteChanges,\n ),\n [\n props.historyState,\n props.params,\n props.pathname,\n props.search,\n props.splitPane,\n forcePushRouteChanges,\n route,\n stackKey,\n ],\n );\n const [entries, setEntries] = useState<StackEntry[]>(() => [\n createEntry(snapshot, 'forward', false),\n ]);\n const [heldEnterIds, setHeldEnterIds] = useState<Set<string>>(() => new Set());\n const heldEnterIdsRef = useRef(heldEnterIds);\n const enterHoldCleanupRef = useRef<Map<string, () => void>>(new Map());\n const entryArchiveRef = useRef<Map<string, StackEntry>>(\n new Map(entries.map((entry) => [entry.id, entry])),\n );\n const { stateMap, setItem, toggle, deleteItem } = useTransitionMap<string>({\n timeout: ROUTE_TRANSITION_MS,\n preEnter: true,\n preExit: true,\n mountOnEnter: true,\n unmountOnExit: true,\n allowMultiple: true,\n });\n\n for (const entry of entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n heldEnterIdsRef.current = heldEnterIds;\n\n const releaseHeldEnter = useCallback((id: string) => {\n const cleanup = enterHoldCleanupRef.current.get(id);\n if (cleanup) cleanup();\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const holdEnterUntilPainted = useCallback((id: string, onRelease: () => void) => {\n if (heldEnterIdsRef.current.has(id) || enterHoldCleanupRef.current.has(id)) return;\n\n setHeldEnterIds((prev) => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n\n let frame = 0;\n let timeout = 0;\n const cleanup = () => {\n if (frame) window.cancelAnimationFrame(frame);\n if (timeout) window.clearTimeout(timeout);\n };\n\n frame = window.requestAnimationFrame(() => {\n timeout = window.setTimeout(() => {\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n onRelease();\n }, 0);\n });\n enterHoldCleanupRef.current.set(id, cleanup);\n }, []);\n\n useEffect(() => {\n return () => {\n for (const cleanup of enterHoldCleanupRef.current.values()) cleanup();\n enterHoldCleanupRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n setEntries((prev) => {\n const change = resolveStackChange(prev, snapshot);\n const nextIds = new Set(change.entries.map((entry) => entry.id));\n\n for (const entry of prev) {\n if (!nextIds.has(entry.id)) {\n entryArchiveRef.current.set(entry.id, {\n ...entry,\n animateEnter: false,\n exitDirection: change.direction,\n });\n }\n }\n\n for (const entry of change.entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n\n return change.entries;\n });\n }, [snapshot]);\n\n const visibleEntries = useMemo(\n () => visibleEntriesForSnapshot(entries, snapshot),\n [entries, snapshot],\n );\n const activeIds = useMemo(() => new Set(entries.map((entry) => entry.id)), [entries]);\n const visibleActiveIds = useMemo(\n () => new Set(visibleEntries.map((entry) => entry.id)),\n [visibleEntries],\n );\n const visibleActiveId = visibleEntries[visibleEntries.length - 1]?.id ?? null;\n const visibleActiveEntry = visibleEntries[visibleEntries.length - 1];\n const visibleStackDirection = visibleActiveEntry?.enterDirection ?? 'forward';\n const activeIdKey = useMemo(\n () => entries.map((entry) => entry.id).join('|'),\n [entries],\n );\n const mountedTransitionEntries = useMemo(\n () => Array.from(stateMap.entries()).filter(([, state]) => state.isMounted),\n [stateMap],\n );\n const isTransitionSettled = mountedTransitionEntries.every(\n ([, state]) => state.isResolved,\n );\n\n useLayoutEffect(() => {\n for (const entry of entries) {\n const state = stateMap.get(entry.id);\n if (!state) {\n setItem(entry.id, { initialEntered: !entry.animateEnter });\n if (entry.animateEnter) {\n holdEnterUntilPainted(entry.id, () => toggle(entry.id, true));\n }\n continue;\n }\n\n if (heldEnterIds.has(entry.id)) {\n continue;\n }\n\n if (!state.isEnter) {\n toggle(entry.id, true);\n }\n }\n\n for (const [id, state] of stateMap) {\n if (!activeIds.has(id) && state.isEnter) {\n releaseHeldEnter(id);\n toggle(id, false);\n }\n }\n }, [\n activeIdKey,\n activeIds,\n entries,\n heldEnterIds,\n holdEnterUntilPainted,\n releaseHeldEnter,\n setItem,\n stateMap,\n toggle,\n ]);\n\n useEffect(() => {\n const unmountedIds = Array.from(stateMap.entries())\n .filter(([, state]) => !state.isMounted)\n .map(([id]) => id);\n\n for (const id of unmountedIds) {\n if (activeIds.has(id)) continue;\n entryArchiveRef.current.delete(id);\n releaseHeldEnter(id);\n deleteItem(id);\n }\n }, [activeIds, deleteItem, releaseHeldEnter, stateMap]);\n\n const renderEntries = useMemo(() => {\n const result = [...visibleEntries];\n const visibleIds = new Set(visibleEntries.map((entry) => entry.id));\n\n for (const [id] of mountedTransitionEntries) {\n if (visibleIds.has(id)) continue;\n const entry = entryArchiveRef.current.get(id);\n if (!entry) continue;\n result.push(entry);\n }\n return result;\n }, [mountedTransitionEntries, visibleEntries]);\n\n return (\n <div\n className={`screen-stack ${className}`}\n data-animation={!isTransitionSettled ? 'true' : undefined}\n style={{ '--stack-transition-time': `${ROUTE_TRANSITION_MS}ms` } as CSSProperties}\n >\n {renderEntries.map((entry, index) => {\n const phase = phaseForEntry(entry, visibleActiveIds, visibleActiveId);\n const transitionStatus = heldEnterIds.has(entry.id)\n ? 'preEnter'\n : transitionStatusForEntry(entry, stateMap.get(entry.id)?.status);\n const animationType = animationClassForEntry(\n entry,\n phase,\n visibleActiveEntry,\n visibleStackDirection,\n );\n const zIndex = phase === 'exiting' ? renderEntries.length + index + 1 : index + 1;\n const routeContent = (\n <FrozenPaneRouteContent\n route={entry.route}\n props={propsForStackEntry(entry)}\n fallback={entry.route.fallback ?? fallback}\n />\n );\n const scopedContent = scopeOverlayContent ? (\n <OverlayContentScope contentKey={entry.historyNavigationKey}>\n {routeContent}\n </OverlayContentScope>\n ) : (\n routeContent\n );\n\n return (\n <div\n key={entry.id}\n data-route-stack-screen=\"true\"\n data-route-stack-key={entry.stackKey}\n data-route-stack-route-id={entry.route.id}\n data-route-stack-container={entry.route.container}\n data-route-stack-presentation={entry.presentation}\n data-route-stack-phase={phase}\n data-route-stack-transition={transitionStatus}\n className={screenClassName(entry, phase, transitionStatus, animationType)}\n aria-hidden={phase === 'active' ? undefined : true}\n inert={phase === 'active' ? undefined : true}\n style={{ zIndex }}\n >\n <div className=\"stack-screen-container\">\n {contentClassName ? (\n <div className={contentClassName}>{scopedContent}</div>\n ) : (\n scopedContent\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction SplitViewRouteContent({\n route,\n props,\n fallback,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n fallback: ReactNode;\n}) {\n const splitView = route.splitView;\n const [splitViewRef, isWide] = useElementMinWidth(\n splitView?.wideMinWidth ??\n splitViewWideMinWidth(DEFAULT_SPLIT_MIN_WIDTH, DEFAULT_SPLIT_PRIMARY_MAX_WIDTH),\n );\n\n if (!splitView) {\n return route.childRoute ? renderRouteContent(route.childRoute, props) : null;\n }\n\n const storedSplitNavigation = splitNavigationFromState(props.historyState);\n const detailPathId =\n storedSplitNavigation?.splitViewId === splitView.layoutId\n ? storedSplitNavigation.detailPathId\n : `${splitView.layoutId}:default`;\n const detailDepth =\n storedSplitNavigation?.splitViewId === splitView.layoutId\n ? storedSplitNavigation.detailDepth\n : 0;\n const primaryNavigationOrigin: SplitPaneNavigationOrigin = {\n splitViewId: splitView.layoutId,\n pane: 'primary',\n detailPathId,\n detailDepth,\n };\n const secondaryNavigationOrigin: SplitPaneNavigationOrigin = {\n splitViewId: splitView.layoutId,\n pane: 'secondary',\n detailPathId,\n detailDepth,\n };\n\n const primaryProps: RouterRouteRenderProps = {\n ...props,\n splitPane: 'primary',\n };\n const secondaryProps: RouterRouteRenderProps = splitView.secondaryRoute\n ? {\n ...props,\n pathname: pathnameForRouteContext(splitView.secondaryRoute, props.pathname),\n splitPane: 'secondary',\n }\n : props;\n const primary = (\n <SplitPaneNavigationContext.Provider value={primaryNavigationOrigin}>\n <FrozenPaneRouteContent\n route={splitView.primaryRoute}\n props={primaryProps}\n fallback={splitView.primaryRoute.fallback ?? fallback}\n />\n </SplitPaneNavigationContext.Provider>\n );\n const secondary = splitView.secondaryRoute ? (\n <SplitPaneNavigationContext.Provider value={secondaryNavigationOrigin}>\n <RouteStackViewport\n // Changing primary selection discards the complete detail stack\n // without playing a secondary push/pop transition.\n key={detailPathId}\n route={splitView.secondaryRoute}\n props={secondaryProps}\n fallback={splitView.secondaryRoute.fallback ?? fallback}\n stackKey={`${route.id}:secondary`}\n />\n </SplitPaneNavigationContext.Provider>\n ) : null;\n const activeContent =\n splitView.activePane === 'secondary' && secondary ? secondary : primary;\n const layoutProps: RouterRouteLayoutProps = {\n children: isWide ? primary : activeContent,\n primary,\n secondary,\n isWide,\n hasSecondary: Boolean(splitView.secondaryRoute),\n minWidth: splitView.minWidth,\n primaryMaxWidth: splitView.primaryMaxWidth,\n secondaryMinWidth: splitView.secondaryMinWidth,\n splitViewRef,\n splitViewLayoutId: splitView.layoutId,\n };\n\n if (route.layout) {\n return createElement(route.layout, layoutProps);\n }\n if (route.component) {\n return createElement(route.component, { ...props, ...layoutProps });\n }\n if (route.elementType) {\n return createElement(route.elementType, { ...props, ...layoutProps });\n }\n if (route.render) return route.render(props);\n\n return <DefaultSplitViewLayout {...layoutProps} />;\n}\n\nfunction DrawerRouteContent({\n route,\n props,\n}: {\n route: CompiledStackRoute;\n props: RouterRouteRenderProps;\n}) {\n const isMobile = !useMinWidth(641);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [desktopCollapsed, setDesktopCollapsed] = useState(false);\n const desktopCollapsible = route.drawerDesktopCollapsible ?? 'offcanvas';\n const isCollapsed = !isMobile && desktopCollapsed;\n const isOpen = isMobile ? mobileOpen : !desktopCollapsed;\n const open = useCallback(() => {\n if (isMobile) setMobileOpen(true);\n else setDesktopCollapsed(false);\n }, [isMobile]);\n const close = useCallback(() => {\n if (isMobile) setMobileOpen(false);\n else setDesktopCollapsed(true);\n }, [isMobile]);\n const toggle = useCallback(() => {\n if (isMobile) setMobileOpen((value) => !value);\n else setDesktopCollapsed((value) => !value);\n }, [isMobile]);\n // Mobile visibility is transient; desktop preference survives navigation\n // and crossing the breakpoint in either direction.\n useEffect(() => setMobileOpen(false), [isMobile, props.pathname]);\n useEffect(() => {\n if (!isMobile || !mobileOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && !event.defaultPrevented) setMobileOpen(false);\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [isMobile, mobileOpen]);\n const drawerApi = useMemo<RouterDrawerApi>(\n () => ({\n isOpen,\n isMobile,\n isCollapsed,\n desktopCollapsible,\n open,\n close,\n toggle,\n }),\n [close, isOpen, isMobile, isCollapsed, desktopCollapsible, open, toggle],\n );\n const childFallback = route.childRoute?.fallback ?? route.fallback ?? null;\n const drawer = route.drawer;\n const activeItem = drawer?.activeItem;\n const content = route.childRoute ? (\n <RouteStackViewport\n key={activeItem}\n route={route.childRoute}\n props={props}\n fallback={childFallback}\n stackKey={`${route.stackKey ?? route.id}:drawer:${activeItem ?? 'content'}`}\n />\n ) : null;\n const onItemChange = drawer\n ? (id: string) => {\n const item = findDrawerItem(drawer.items, id);\n if (item && normalizedPath(item.path) !== props.pathname) {\n navigateWithHistoryIndex(item.path);\n }\n setMobileOpen(false);\n }\n : undefined;\n const layoutProps: RouterRouteLayoutProps = {\n children: content,\n aside: route.drawerAside,\n footer: route.drawerFooter,\n portal: false,\n items: drawer?.items,\n activeItem: drawer?.activeItem,\n onItemChange,\n drawer: drawerApi,\n };\n\n let rendered: ReactNode;\n if (route.layout) {\n rendered = createElement(route.layout, layoutProps);\n } else if (route.component) {\n rendered = createElement(route.component, { ...props, ...layoutProps });\n } else if (route.elementType) {\n rendered = createElement(route.elementType, { ...props, ...layoutProps });\n } else if (route.render) {\n rendered = route.render(props);\n } else {\n rendered = <DefaultDrawerLayout {...layoutProps} />;\n }\n\n return (\n <RouterDrawerContext.Provider value={drawerApi}>\n {rendered}\n </RouterDrawerContext.Provider>\n );\n}\n\nfunction findDrawerItem(\n nodes: RouterDrawerNode[],\n id: string,\n): RouterDrawerItem | undefined {\n for (const node of nodes) {\n if (node.type === 'item') {\n if (node.id === id) return node;\n continue;\n }\n\n if (node.type === 'section') continue;\n\n const item = node.items.find((entry) => entry.id === id);\n if (item) return item;\n }\n\n return undefined;\n}\n\nfunction renderRouteContent(\n route: CompiledStackRoute,\n props: RouterRouteRenderProps,\n): ReactNode {\n if (route.container === 'splitview' && route.splitView) {\n return (\n <SplitViewRouteContent\n route={route}\n props={props}\n fallback={route.fallback ?? null}\n />\n );\n }\n\n if (route.component) {\n return createElement(route.component, props);\n }\n\n let content: ReactNode;\n if (route.elementType) {\n content = createElement(route.elementType, props);\n } else if (route.render) {\n content = route.render(props);\n } else if (route.childrenNode !== undefined) {\n content = route.childrenNode;\n } else {\n content = route.element;\n }\n\n if (!route.layout) return content;\n return createElement(route.layout, { children: content });\n}\n\nfunction renderCompiledRoute(entry: StackEntry): ReactNode {\n const props: RouterRouteRenderProps = {\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n historyState: entry.historyState,\n presentation: entry.presentation,\n };\n\n if (entry.route.container === 'drawer' && entry.route.childRoute) {\n return <DrawerRouteContent route={entry.route} props={props} />;\n }\n\n if (entry.route.container === 'tabbar' && entry.route.childRoute) {\n const childFallback = entry.route.childRoute.fallback ?? entry.route.fallback ?? null;\n const content = (\n <Suspense fallback={childFallback}>\n {renderRouteContent(entry.route.childRoute, props)}\n </Suspense>\n );\n const tabBar = entry.route.tabBar;\n const onTabChange = tabBar\n ? (id: string) => {\n const tab = tabBar.tabs.find((item) => item.id === id);\n if (tab && normalizedPath(tab.path) !== entry.pathname) {\n navigateWithHistoryIndex(tab.path);\n }\n }\n : undefined;\n const layoutProps: RouterRouteLayoutProps = {\n children: content,\n portal: false,\n tabs: tabBar?.tabs,\n activeTab: tabBar?.activeTab,\n onTabChange,\n };\n\n if (entry.route.layout) {\n return createElement(entry.route.layout, layoutProps);\n }\n if (entry.route.component) {\n return createElement(entry.route.component, { ...props, ...layoutProps });\n }\n if (entry.route.elementType) {\n return createElement(entry.route.elementType, { ...props, ...layoutProps });\n }\n if (entry.route.render) return entry.route.render(props);\n return content;\n }\n\n return renderRouteContent(entry.route, props);\n}\n\nconst FrozenStackEntry = memo(function FrozenStackEntry({\n entry,\n fallback,\n}: {\n entry: StackEntry;\n fallback: ReactNode;\n}) {\n const hook = useMemo(() => frozenLocationHook(entry.pathname), [entry.pathname]);\n const searchHook = useMemo(() => () => entry.search, [entry.search]);\n const routeContext = useMemo(() => routeContextValue(entry), [entry]);\n const suspenseFallback = entry.route.fallback ?? fallback;\n\n return (\n <WouterRouter hook={hook} searchHook={searchHook}>\n <RouterRouteContext.Provider value={routeContext}>\n <Suspense fallback={suspenseFallback}>{renderCompiledRoute(entry)}</Suspense>\n </RouterRouteContext.Provider>\n </WouterRouter>\n );\n});\n\nconst FrozenModalRouteEntry = memo(function FrozenModalRouteEntry({\n entry,\n fallback,\n}: {\n entry: RouterModalEntry;\n fallback: ReactNode;\n}) {\n const activeScreen = entry.flowScreens?.[entry.flowScreens.length - 1];\n if (activeScreen) {\n const props: RouterRouteRenderProps = {\n params: activeScreen.params,\n pathname: activeScreen.pathname,\n search: activeScreen.search,\n historyState: activeScreen.historyState,\n presentation: 'push',\n };\n\n return (\n <RouteStackViewport\n route={activeScreen.route}\n props={props}\n fallback={activeScreen.route.fallback ?? fallback}\n stackKey={`${entry.id}:overlay-flow`}\n className={`router-overlay-flow-stack router-overlay-flow-stack--${entry.kind}`}\n contentClassName=\"router-overlay-flow-screen\"\n scopeOverlayContent\n forcePushRouteChanges\n />\n );\n }\n\n return (\n <FrozenModalCompiledRouteEntry\n entry={entry}\n route={entry.route}\n fallback={fallback}\n />\n );\n});\n\nconst FrozenModalCompiledRouteEntry = memo(function FrozenModalCompiledRouteEntry({\n entry,\n route,\n fallback,\n}: {\n entry: RouterModalEntry;\n route: CompiledStackRoute;\n fallback: ReactNode;\n}) {\n const hook = useMemo(() => frozenLocationHook(entry.pathname), [entry.pathname]);\n const searchHook = useMemo(() => () => entry.search, [entry.search]);\n const routeContext = useMemo<RouterRouteContextValue>(\n () => ({\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n searchParams: searchParamsForSearch(entry.search),\n historyState: entry.historyState,\n presentation: entry.kind,\n }),\n [entry],\n );\n const props = useMemo<RouterRouteRenderProps>(\n () => ({\n params: entry.params,\n pathname: entry.pathname,\n search: entry.search,\n historyState: entry.historyState,\n presentation: entry.kind,\n }),\n [entry],\n );\n const suspenseFallback = route.fallback ?? fallback;\n const modalFallback =\n suspenseFallback ?? (entry.kind === 'sheet' ? DEFAULT_SHEET_FALLBACK : null);\n\n return (\n <WouterRouter hook={hook} searchHook={searchHook}>\n <RouterRouteContext.Provider value={routeContext}>\n <Suspense fallback={modalFallback}>{renderRouteContent(route, props)}</Suspense>\n </RouterRouteContext.Provider>\n </WouterRouter>\n );\n});\n\ninterface RouterModalStackHostProps {\n entries: RouterModalEntry[];\n close: (id: string) => void;\n remove: (id: string) => void;\n fallback: ReactNode;\n shell: RouterShellMode;\n}\n\nfunction RouterModalStackHost({\n entries,\n close,\n remove,\n fallback,\n shell,\n}: RouterModalStackHostProps) {\n return (\n <>\n {entries.map((entry, index) => (\n <RouterModalEntryHost\n key={entry.id}\n entry={entry}\n index={index}\n close={close}\n remove={remove}\n fallback={fallback}\n shell={shell}\n />\n ))}\n </>\n );\n}\n\ninterface RouterModalEntryHostProps {\n entry: RouterModalEntry;\n index: number;\n close: (id: string) => void;\n remove: (id: string) => void;\n fallback: ReactNode;\n shell: RouterShellMode;\n}\n\nconst RouterModalEntryHost = memo(function RouterModalEntryHost({\n entry,\n index,\n close,\n remove,\n fallback,\n shell,\n}: RouterModalEntryHostProps) {\n const closeSelf = useCallback(() => close(entry.id), [close, entry.id]);\n const removeSelf = useCallback(() => remove(entry.id), [remove, entry.id]);\n const current = useMemo<CurrentModalContextValue>(\n () => ({\n id: entry.id,\n index,\n exiting: entry.exiting,\n close: closeSelf,\n remove: removeSelf,\n }),\n [entry.id, entry.exiting, index, closeSelf, removeSelf],\n );\n const zIndex = OVERLAY_STACK_BASE_Z + index;\n const overlayShell = entry.route.overlayLayout ?? shell;\n const activeContentKey = entry.flowScreens\n ? historyNavigationKeyFromState(entry.historyState) ?? undefined\n : undefined;\n\n return (\n <CurrentModalContext.Provider value={current}>\n {entry.kind === 'sheet' ? (\n <SheetFrame\n open={!entry.exiting}\n onRequestClose={closeSelf}\n onExitComplete={removeSelf}\n zIndex={zIndex}\n shell={overlayShell}\n activeContentKey={activeContentKey}\n >\n <FrozenModalRouteEntry entry={entry} fallback={fallback} />\n </SheetFrame>\n ) : (\n <ModalFrame\n open={!entry.exiting}\n onRequestClose={closeSelf}\n onExitComplete={removeSelf}\n zIndex={zIndex}\n shell={overlayShell}\n activeContentKey={activeContentKey}\n >\n <FrozenModalRouteEntry entry={entry} fallback={fallback} />\n </ModalFrame>\n )}\n </CurrentModalContext.Provider>\n );\n});\n\ninterface StackChange {\n entries: StackEntry[];\n direction: StackDirection;\n}\n\nfunction resolveStackChange(prev: StackEntry[], snapshot: StackSnapshot): StackChange {\n const top = prev[prev.length - 1];\n\n if (!top) {\n return {\n entries: [createEntry(snapshot, 'forward', false)],\n direction: 'forward',\n };\n }\n\n if (top.locationKey === snapshot.locationKey) {\n return {\n entries: prev.map((entry) =>\n entry.id === top.id ? mergeEntrySnapshot(entry, snapshot) : markCommitted(entry),\n ),\n direction: 'forward',\n };\n }\n\n const direction = resolveDirection(top, snapshot);\n\n if (snapshot.historyCommit === 'pop' && snapshot.splitPane === 'secondary') {\n const existingIndex = existingStackEntryIndexForSnapshot(prev, snapshot);\n return {\n entries:\n existingIndex !== -1 && existingIndex < prev.length - 1\n ? entriesRevealingSnapshot(prev, existingIndex, snapshot)\n : [createEntry(snapshot, 'back', true)],\n direction: 'back',\n };\n }\n\n if (isExplicitStackReplace(top, snapshot)) {\n return {\n entries: replaceActiveStackEntry(prev, top.id, snapshot, direction, true),\n direction,\n };\n }\n\n const syncTargetIndex = syncTargetEntryIndex(prev, snapshot);\n if (syncTargetIndex !== -1 && syncTargetIndex !== prev.length - 1) {\n return {\n entries: entriesRevealingSnapshot(prev, syncTargetIndex, snapshot),\n direction: 'back',\n };\n }\n\n if (shouldReplaceActiveStackEntry(top, snapshot)) {\n return {\n entries: replaceActiveStackEntry(prev, top.id, snapshot, direction, true),\n direction,\n };\n }\n\n const existingIndex = existingStackEntryIndexForSnapshot(prev, snapshot);\n const revealsExistingEntry = existingIndex !== -1;\n const isBack = direction === 'back';\n\n if (isBack || revealsExistingEntry) {\n if (!revealsExistingEntry) {\n return {\n entries: [createEntry(snapshot, 'back', false)],\n direction: 'back',\n };\n }\n\n const revealed = prev[existingIndex];\n const base = prev.slice(0, existingIndex).map(markCommitted);\n\n return {\n entries: [\n ...base,\n {\n ...revealed,\n ...snapshot,\n id: revealed.id,\n animateEnter: false,\n enterDirection: 'back',\n },\n ],\n direction: 'back',\n };\n }\n\n return {\n entries: [...prev.map(markCommitted), createEntry(snapshot, 'forward', true)],\n direction: 'forward',\n };\n}\n\nfunction visibleEntriesForSnapshot(\n entries: StackEntry[],\n snapshot: StackSnapshot | null,\n): StackEntry[] {\n if (!snapshot) return entries;\n\n const top = entries[entries.length - 1];\n if (!top) {\n return [createEntry(snapshot, 'forward', false)];\n }\n\n if (top.locationKey === snapshot.locationKey) {\n return entries.map((entry) =>\n entry.id === top.id ? mergeEntrySnapshot(entry, snapshot) : entry,\n );\n }\n\n if (snapshot.historyCommit === 'pop' && snapshot.splitPane === 'secondary') {\n const existingIndex = existingStackEntryIndexForSnapshot(entries, snapshot);\n return existingIndex !== -1 && existingIndex < entries.length - 1\n ? entriesRevealingSnapshot(entries, existingIndex, snapshot)\n : [createEntry(snapshot, 'back', true)];\n }\n\n if (isExplicitStackReplace(top, snapshot)) {\n return replaceActiveStackEntry(\n entries,\n top.id,\n snapshot,\n resolveDirection(top, snapshot),\n false,\n );\n }\n\n const syncTargetIndex = syncTargetEntryIndex(entries, snapshot);\n if (syncTargetIndex !== -1 && syncTargetIndex !== entries.length - 1) {\n return entriesRevealingSnapshot(entries, syncTargetIndex, snapshot);\n }\n\n if (shouldReplaceActiveStackEntry(top, snapshot)) {\n return replaceActiveStackEntry(\n entries,\n top.id,\n snapshot,\n resolveDirection(top, snapshot),\n false,\n );\n }\n\n const direction = resolveDirection(top, snapshot);\n const existingIndex = existingStackEntryIndexForSnapshot(entries, snapshot);\n\n if (direction === 'back' || existingIndex !== -1) {\n if (existingIndex === -1) {\n return [createEntry(snapshot, 'back', false)];\n }\n\n const revealed = entries[existingIndex];\n const base = entries.slice(0, existingIndex).map(markCommitted);\n return [\n ...base,\n {\n ...revealed,\n ...snapshot,\n id: revealed.id,\n animateEnter: false,\n enterDirection: 'back',\n },\n ];\n }\n\n return entries;\n}\n\nfunction activeModalEntry(entries: RouterModalEntry[]): RouterModalEntry | undefined {\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n if (!entries[index].exiting) return entries[index];\n }\n return undefined;\n}\n\nfunction modalFlowScreenFromMatch(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n state: unknown,\n historyIndex: number,\n commit: HistoryCommit,\n): RouterModalFlowScreenEntry | null {\n const route = match.route.childRoute;\n if (!match.route.overlayFlow || !route) return null;\n\n return {\n overlayRoute: match.route,\n route,\n params: match.params,\n pathname,\n search,\n historyState: stateWithHistoryIndex(\n state,\n historyIndex,\n createRouterId(),\n commit,\n ),\n };\n}\n\n/**\n * Trims [pathname] down to the segment depth of the overlay flow root pattern.\n * Overlay children never change the browser URL, so the root screen carries the\n * pathname the flow would have been opened with.\n */\nfunction overlayFlowRootPathname(rootPath: string, pathname: string): string {\n const depth = rootPath.split('/').filter(Boolean).length;\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length <= depth) return pathname;\n return `/${segments.slice(0, depth).join('/')}`;\n}\n\n/**\n * Seeds the local stack of a freshly opened overlay flow.\n *\n * Navigating straight to a child (a deep link, or a flow entered at a later\n * step on purpose) must still leave the visitor standing on a stack: going back\n * from that first screen belongs inside the overlay, on its root, and only the\n * root closes the surface. Without this the flow would open one screen deep and\n * back would dismiss the whole thing.\n */\nfunction seedModalFlowScreens(\n match: RouterRouteMatch,\n pathname: string,\n search: string,\n state: unknown,\n): RouterModalFlowScreenEntry[] | undefined {\n const flow = match.route.overlayFlow;\n const rootEntry = flow?.entries[0];\n const rootRoute = flow?.routes[0];\n const targetRoute = match.route.childRoute;\n if (!flow || !rootEntry || !rootRoute || !targetRoute) {\n const target = modalFlowScreenFromMatch(\n match,\n pathname,\n search,\n state,\n 0,\n 'push',\n );\n return target ? [target] : undefined;\n }\n\n const routeChain: CompiledStackRoute[] = [targetRoute];\n const visitedRouteIds = new Set([targetRoute.id]);\n let currentRoute = targetRoute;\n\n while (currentRoute.flowParent) {\n const parentRoute = flow.routes.find(\n (route) => route.id === currentRoute.flowParent,\n );\n if (!parentRoute || visitedRouteIds.has(parentRoute.id)) break;\n routeChain.unshift(parentRoute);\n visitedRouteIds.add(parentRoute.id);\n currentRoute = parentRoute;\n }\n\n if (!visitedRouteIds.has(rootRoute.id)) {\n routeChain.unshift(rootRoute);\n }\n\n return routeChain.flatMap((route, historyIndex) => {\n const routeIndex = flow.routes.indexOf(route);\n const overlayRoute = flow.entries[routeIndex];\n if (!overlayRoute) return [];\n\n const resolvedPathname =\n route === targetRoute\n ? pathname\n : (pathForRoutePattern(route.path, match.params) ??\n (route === rootRoute && route.path\n ? overlayFlowRootPathname(route.path, pathname)\n : pathname));\n\n return [\n {\n overlayRoute,\n route,\n params: match.params,\n pathname: resolvedPathname,\n search,\n historyState: stateWithHistoryIndex(\n state,\n historyIndex,\n createRouterId(),\n 'push',\n ),\n },\n ];\n });\n}\n\nfunction RouterRuntime({\n children,\n fallback,\n shell = 'mobile-contained',\n}: RouterRootProps) {\n const [pathname] = useLocation();\n const search = useWouterSearch();\n const historyState = useBrowserHistoryState();\n const wouterRouter = useWouterRouter();\n const compiledRoutes = useMemo(() => compileStackRoutes(children), [children]);\n const runtimeChildren = useMemo(\n () => flattenRouteNodes(children).filter((child) => !isStackRouteElement(child)),\n [children],\n );\n const rawMatch = useMemo(\n () =>\n matchStackRouteByPresentation(\n compiledRoutes,\n wouterRouter.parser,\n pathname,\n PUSH_PRESENTATIONS,\n ),\n [compiledRoutes, pathname, wouterRouter.parser],\n );\n const fallbackNode = fallback ?? null;\n const [modalEntries, setModalEntries] = useState<RouterModalEntry[]>([]);\n const modalEntriesRef = useRef<RouterModalEntry[]>(modalEntries);\n const modalSeqRef = useRef(0);\n\n modalEntriesRef.current = modalEntries;\n\n /*\n * `navigate` and `replace` reach consumers through `useRouter()`, and callers\n * put that object in effect dependency arrays. It has to keep one identity\n * for the life of the router: `compiledRoutes` is derived from `children`, so\n * a dependency on it rebuilds the whole API every time the app above the\n * router re-renders, re-firing every effect that depends on `useRouter()` —\n * and any of those that write state loop straight back here.\n */\n const navigationScopeRef = useRef({\n compiledRoutes,\n pathname,\n parser: wouterRouter.parser,\n });\n navigationScopeRef.current = {\n compiledRoutes,\n pathname,\n parser: wouterRouter.parser,\n };\n\n useLayoutEffect(() => {\n ensureInitialHistoryIndex();\n }, []);\n\n useEffect(() => {\n document.documentElement.setAttribute('data-router-shell', shell);\n return () => {\n document.documentElement.removeAttribute('data-router-shell');\n };\n }, [shell]);\n\n const searchPath = search ? `?${search}` : '';\n const guardOutcome = useMemo(\n () =>\n rawMatch ? resolveRouteGuard(rawMatch, pathname, searchPath, historyState) : null,\n [historyState, pathname, rawMatch, searchPath],\n );\n const guardRedirect =\n guardOutcome?.status === 'redirect' ? guardOutcome.to : null;\n const matchedRoute = guardRedirect ? null : rawMatch;\n // An undecided guard keeps its match so nothing else — a catch-all redirect\n // above all — can claim the URL, and swaps the content for the pending node.\n // The route identity is preserved, so resolving simply re-renders in place.\n // Container routes (drawer/tabbar) keep their chrome: stripping `layout`\n // there would swap the shell for the default chrome, so only the content\n // pane inside the container is replaced with the pending node.\n const match = useMemo(() => {\n if (!matchedRoute) return null;\n if (guardOutcome?.status !== 'pending') return matchedRoute;\n const route = matchedRoute.route;\n if (route.container && route.childRoute) {\n return {\n ...matchedRoute,\n route: {\n ...route,\n childRoute: {\n ...route.childRoute,\n element: guardOutcome.element,\n elementType: undefined,\n component: undefined,\n layout: undefined,\n overlayLayout: undefined,\n render: undefined,\n childrenNode: undefined,\n container: undefined,\n childRoute: undefined,\n splitView: undefined,\n },\n },\n } satisfies RouterRouteMatch;\n }\n return {\n ...matchedRoute,\n route: {\n ...route,\n element: guardOutcome.element,\n elementType: undefined,\n component: undefined,\n layout: undefined,\n overlayLayout: undefined,\n },\n } satisfies RouterRouteMatch;\n }, [guardOutcome, matchedRoute]);\n\n useLayoutEffect(() => {\n if (!guardRedirect) return;\n const target = parseNavigationTarget(guardRedirect, pathname);\n if (target.pathname === normalizedPath(pathname) && target.search === searchPath) {\n return;\n }\n navigateWithHistoryIndex(`${target.pathname}${target.search}`, { commit: 'sync' });\n }, [guardRedirect, pathname, searchPath]);\n\n const snapshot = useMemo(() => {\n if (!match) return null;\n return stackSnapshot(pathname, searchPath, historyState, match);\n }, [historyState, match, pathname, searchPath]);\n const snapshotHistoryRef = useRef<StackSnapshot[]>([]);\n\n const [entries, setEntries] = useState<StackEntry[]>(() =>\n snapshot ? [createEntry(snapshot, 'forward', false)] : [],\n );\n const [heldEnterIds, setHeldEnterIds] = useState<Set<string>>(() => new Set());\n const heldEnterIdsRef = useRef(heldEnterIds);\n const enterHoldCleanupRef = useRef<Map<string, () => void>>(new Map());\n const entryArchiveRef = useRef<Map<string, StackEntry>>(\n new Map(entries.map((entry) => [entry.id, entry])),\n );\n const { stateMap, setItem, toggle, deleteItem } = useTransitionMap<string>({\n timeout: ROUTE_TRANSITION_MS,\n preEnter: true,\n preExit: true,\n mountOnEnter: true,\n unmountOnExit: true,\n allowMultiple: true,\n });\n\n for (const entry of entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n const entriesRef = useRef<StackEntry[]>(entries);\n entriesRef.current = entries;\n heldEnterIdsRef.current = heldEnterIds;\n\n const releaseHeldEnter = useCallback((id: string) => {\n const cleanup = enterHoldCleanupRef.current.get(id);\n if (cleanup) cleanup();\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const holdEnterUntilPainted = useCallback((id: string, onRelease: () => void) => {\n if (heldEnterIdsRef.current.has(id) || enterHoldCleanupRef.current.has(id)) return;\n\n setHeldEnterIds((prev) => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n\n let frame = 0;\n let timeout = 0;\n const cleanup = () => {\n if (frame) window.cancelAnimationFrame(frame);\n if (timeout) window.clearTimeout(timeout);\n };\n frame = window.requestAnimationFrame(() => {\n timeout = window.setTimeout(() => {\n enterHoldCleanupRef.current.delete(id);\n setHeldEnterIds((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n onRelease();\n }, 0);\n });\n enterHoldCleanupRef.current.set(id, cleanup);\n }, []);\n\n useEffect(() => {\n return () => {\n for (const cleanup of enterHoldCleanupRef.current.values()) cleanup();\n enterHoldCleanupRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!snapshot) return;\n snapshotHistoryRef.current = updateSnapshotHistory(\n snapshotHistoryRef.current,\n snapshot,\n );\n\n setEntries((prev) => {\n const change = resolveStackChange(prev, snapshot);\n const nextIds = new Set(change.entries.map((entry) => entry.id));\n\n for (const entry of prev) {\n if (!nextIds.has(entry.id)) {\n entryArchiveRef.current.set(entry.id, {\n ...entry,\n animateEnter: false,\n exitDirection: change.direction,\n });\n }\n }\n\n for (const entry of change.entries) {\n entryArchiveRef.current.set(entry.id, entry);\n }\n\n return change.entries;\n });\n }, [snapshot]);\n\n const visibleEntries = useMemo(\n () => visibleEntriesForSnapshot(entries, snapshot),\n [entries, snapshot],\n );\n const activeIds = useMemo(() => new Set(entries.map((entry) => entry.id)), [entries]);\n const visibleActiveIds = useMemo(\n () => new Set(visibleEntries.map((entry) => entry.id)),\n [visibleEntries],\n );\n const visibleActiveId = visibleEntries[visibleEntries.length - 1]?.id ?? null;\n const visibleActiveEntry = visibleEntries[visibleEntries.length - 1];\n const visibleActiveEntryRef = useRef<StackEntry | undefined>(undefined);\n visibleActiveEntryRef.current = visibleActiveEntry;\n const visibleStackDirection = visibleActiveEntry?.enterDirection ?? 'forward';\n const activeIdKey = useMemo(\n () => entries.map((entry) => entry.id).join('|'),\n [entries],\n );\n const mountedTransitionEntries = useMemo(\n () => Array.from(stateMap.entries()).filter(([, state]) => state.isMounted),\n [stateMap],\n );\n const isTransitionSettled = mountedTransitionEntries.every(\n ([, state]) => state.isResolved,\n );\n\n useLayoutEffect(() => {\n for (const entry of entries) {\n const state = stateMap.get(entry.id);\n if (!state) {\n setItem(entry.id, { initialEntered: !entry.animateEnter });\n if (entry.animateEnter) {\n holdEnterUntilPainted(entry.id, () => toggle(entry.id, true));\n }\n continue;\n }\n\n if (heldEnterIds.has(entry.id)) {\n continue;\n }\n\n if (!state.isEnter) {\n toggle(entry.id, true);\n }\n }\n\n for (const [id, state] of stateMap) {\n if (!activeIds.has(id) && state.isEnter) {\n releaseHeldEnter(id);\n toggle(id, false);\n }\n }\n }, [\n activeIdKey,\n activeIds,\n entries,\n heldEnterIds,\n holdEnterUntilPainted,\n releaseHeldEnter,\n setItem,\n stateMap,\n toggle,\n ]);\n\n useEffect(() => {\n const unmountedIds = Array.from(stateMap.entries())\n .filter(([, state]) => !state.isMounted)\n .map(([id]) => id);\n\n for (const id of unmountedIds) {\n if (activeIds.has(id)) continue;\n entryArchiveRef.current.delete(id);\n releaseHeldEnter(id);\n deleteItem(id);\n }\n }, [activeIds, deleteItem, releaseHeldEnter, stateMap]);\n\n const renderEntries = useMemo(() => {\n const result = [...visibleEntries];\n\n for (const [id] of mountedTransitionEntries) {\n if (visibleActiveIds.has(id)) continue;\n const entry = entryArchiveRef.current.get(id);\n if (!entry) continue;\n\n result.push(entry);\n }\n return result;\n }, [visibleActiveIds, visibleEntries, mountedTransitionEntries]);\n\n const removeModal = useCallback((id: string) => {\n setModalEntries((prev) => prev.filter((entry) => entry.id !== id));\n }, []);\n\n const closeModal = useCallback((id: string) => {\n setModalEntries((prev) => {\n let changed = false;\n const next = prev.map((entry) => {\n if (entry.id !== id || entry.exiting) return entry;\n changed = true;\n return { ...entry, exiting: true };\n });\n return changed ? next : prev;\n });\n }, []);\n\n const closeAllModals = useCallback(() => {\n setModalEntries((prev) => {\n let changed = false;\n const next = prev.map((entry) => {\n if (entry.exiting) return entry;\n changed = true;\n return { ...entry, exiting: true };\n });\n return changed ? next : prev;\n });\n }, []);\n\n const goBackTopModal = useCallback((): boolean => {\n const entry = activeModalEntry(modalEntriesRef.current);\n if (!entry) return false;\n\n if (entry.flowScreens && entry.flowScreens.length > 1) {\n setModalEntries((current) =>\n current.map((candidate) => {\n if (candidate.id !== entry.id || !candidate.flowScreens) return candidate;\n\n const flowScreens = candidate.flowScreens.slice(0, -1);\n const activeScreen = flowScreens[flowScreens.length - 1];\n if (!activeScreen) return candidate;\n\n return {\n ...candidate,\n route: activeScreen.overlayRoute,\n params: activeScreen.params,\n pathname: activeScreen.pathname,\n search: activeScreen.search,\n historyState: activeScreen.historyState,\n flowScreens,\n };\n }),\n );\n return true;\n }\n\n closeModal(entry.id);\n return true;\n }, [closeModal]);\n\n const updateActiveModalFlow = useCallback(\n (\n match: RouterRouteMatch,\n target: { pathname: string; search: string },\n state: unknown,\n operation: 'push' | 'replace',\n ): boolean => {\n const entry = activeModalEntry(modalEntriesRef.current);\n const flow = match.route.overlayFlow;\n if (\n !entry?.flowScreens ||\n !flow ||\n entry.route.overlayFlow?.id !== flow.id\n ) {\n return false;\n }\n\n const historyIndex =\n operation === 'replace'\n ? Math.max(0, entry.flowScreens.length - 1)\n : entry.flowScreens.length;\n const screen = modalFlowScreenFromMatch(\n match,\n target.pathname,\n target.search,\n state,\n historyIndex,\n operation,\n );\n if (!screen) return false;\n\n setModalEntries((current) =>\n current.map((candidate) => {\n if (candidate.id !== entry.id || !candidate.flowScreens) return candidate;\n\n if (operation === 'push') {\n let existingIndex = -1;\n for (\n let index = candidate.flowScreens.length - 1;\n index >= 0;\n index -= 1\n ) {\n const existing = candidate.flowScreens[index];\n if (\n existing.route.id === screen.route.id &&\n normalizedPath(existing.pathname) ===\n normalizedPath(screen.pathname) &&\n existing.search === screen.search\n ) {\n existingIndex = index;\n break;\n }\n }\n\n if (existingIndex !== -1) {\n const existing = candidate.flowScreens[existingIndex];\n const navigationKey =\n historyNavigationKeyFromState(existing.historyState) ??\n createRouterId();\n const revealedScreen: RouterModalFlowScreenEntry = {\n ...screen,\n historyState: stateWithHistoryIndex(\n state,\n existingIndex,\n navigationKey,\n 'sync',\n ),\n };\n const flowScreens = [\n ...candidate.flowScreens.slice(0, existingIndex),\n revealedScreen,\n ];\n\n return {\n ...candidate,\n route: revealedScreen.overlayRoute,\n params: revealedScreen.params,\n pathname: revealedScreen.pathname,\n search: revealedScreen.search,\n historyState: revealedScreen.historyState,\n flowScreens,\n };\n }\n }\n\n const flowScreens =\n operation === 'replace'\n ? [...candidate.flowScreens.slice(0, -1), screen]\n : [...candidate.flowScreens, screen];\n\n return {\n ...candidate,\n route: screen.overlayRoute,\n params: screen.params,\n pathname: screen.pathname,\n search: screen.search,\n historyState: screen.historyState,\n flowScreens,\n };\n }),\n );\n return true;\n },\n [],\n );\n\n const pushModalEntry = useCallback(\n (entry: Omit<RouterModalEntry, 'id' | 'exiting'>, replace = false) => {\n modalSeqRef.current += 1;\n const id = `${entry.kind}:${modalSeqRef.current}-${createRouterId()}`;\n const nextEntry: RouterModalEntry = { ...entry, id, exiting: false };\n setModalEntries((prev) => {\n if (replace && prev.length > 0) {\n return [...prev.slice(0, -1), nextEntry];\n }\n return [...prev, nextEntry];\n });\n return id;\n },\n [],\n );\n\n const navigate = useCallback<RouterNavigateFunction>(\n (to, options = {}) => {\n if (typeof to === 'number') {\n if (to < 0 && goBackTopModal()) return;\n window.history.go(to);\n return;\n }\n\n const { compiledRoutes, pathname, parser } = navigationScopeRef.current;\n const target = parseNavigationTarget(to, pathname);\n const overlayMatch = matchStackRouteByPresentation(\n compiledRoutes,\n parser,\n target.pathname,\n OVERLAY_PRESENTATIONS,\n );\n\n if (overlayMatch && isModalLikePresentation(overlayMatch.route.presentation)) {\n const overlayState = stateForSplitNavigationTarget(\n options.state,\n null,\n 'navigate',\n );\n const overlayRedirect = guardRedirectForMatch(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n if (overlayRedirect) {\n navigateWithHistoryIndex(overlayRedirect, { commit: 'sync' });\n return;\n }\n\n if (updateActiveModalFlow(overlayMatch, target, overlayState, 'push')) {\n return;\n }\n\n const initialFlowScreens = seedModalFlowScreens(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n const activeFlowScreen = initialFlowScreens?.[initialFlowScreens.length - 1];\n pushModalEntry({\n kind: overlayMatch.route.presentation,\n route: overlayMatch.route,\n params: overlayMatch.params,\n pathname: target.pathname,\n search: target.search,\n historyState: activeFlowScreen?.historyState ?? overlayState,\n flowScreens: initialFlowScreens,\n });\n return;\n }\n\n const pushMatch = matchStackRouteByPresentation(\n compiledRoutes,\n parser,\n target.pathname,\n PUSH_PRESENTATIONS,\n );\n navigateWithHistoryIndex(to, {\n ...options,\n state: stateForSplitNavigationTarget(options.state, pushMatch, 'navigate'),\n });\n },\n // Every value this reads travels through navigationScopeRef, and the three\n // callbacks below are themselves identity-stable, so this keeps one identity.\n [goBackTopModal, pushModalEntry, updateActiveModalFlow],\n );\n\n const replace = useCallback<RouterReplaceFunction>(\n (to, options = {}) => {\n const { compiledRoutes, pathname, parser } = navigationScopeRef.current;\n const target = parseNavigationTarget(to, pathname);\n const overlayMatch = matchStackRouteByPresentation(\n compiledRoutes,\n parser,\n target.pathname,\n OVERLAY_PRESENTATIONS,\n );\n\n if (overlayMatch && isModalLikePresentation(overlayMatch.route.presentation)) {\n const overlayState = stateForSplitNavigationTarget(\n options.state,\n null,\n 'replace',\n );\n const overlayRedirect = guardRedirectForMatch(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n if (overlayRedirect) {\n navigateWithHistoryIndex(overlayRedirect, {\n commit: 'replace',\n state: options.state,\n });\n return;\n }\n\n if (updateActiveModalFlow(overlayMatch, target, overlayState, 'replace')) {\n return;\n }\n\n const initialFlowScreens = seedModalFlowScreens(\n overlayMatch,\n target.pathname,\n target.search,\n overlayState,\n );\n const activeFlowScreen = initialFlowScreens?.[initialFlowScreens.length - 1];\n pushModalEntry(\n {\n kind: overlayMatch.route.presentation,\n route: overlayMatch.route,\n params: overlayMatch.params,\n pathname: target.pathname,\n search: target.search,\n historyState: activeFlowScreen?.historyState ?? overlayState,\n flowScreens: initialFlowScreens,\n },\n true,\n );\n return;\n }\n\n const pushMatch = matchStackRouteByPresentation(\n compiledRoutes,\n parser,\n target.pathname,\n PUSH_PRESENTATIONS,\n );\n navigateWithHistoryIndex(to, {\n commit: 'replace',\n state: stateForSplitNavigationTarget(options.state, pushMatch, 'replace'),\n });\n },\n [pushModalEntry, updateActiveModalFlow],\n );\n\n const popTo = useCallback<RouterReplaceFunction>((to, options = {}) => {\n const { compiledRoutes, pathname, parser } = navigationScopeRef.current;\n const target = parseNavigationTarget(to, pathname);\n const pushMatch = matchStackRouteByPresentation(\n compiledRoutes,\n parser,\n target.pathname,\n PUSH_PRESENTATIONS,\n );\n navigateWithHistoryIndex(to, {\n commit: 'pop',\n state: stateForSplitNavigationTarget(options.state, pushMatch, 'pop'),\n });\n }, []);\n\n const goBack = useCallback((): boolean => {\n if (goBackTopModal()) return true;\n\n const activeEntry = visibleActiveEntryRef.current;\n const activeSplitRoute = activeEntry\n ? splitViewRouteForSnapshot(activeEntry)\n : undefined;\n const activeSplitNavigation = activeEntry?.splitNavigation;\n\n if (\n activeEntry &&\n activeSplitRoute?.splitView?.activePane === 'secondary' &&\n activeSplitNavigation\n ) {\n const previousDetailSnapshot = previousSnapshotInDetailPath(\n snapshotHistoryRef.current,\n activeEntry,\n );\n if (navigateToSnapshot(previousDetailSnapshot)) return true;\n\n const splitRootTarget = secondarySplitBackTarget(activeEntry);\n if (splitRootTarget) {\n navigateWithHistoryIndex(`${splitRootTarget}${activeEntry.search}`, {\n commit: 'sync',\n state: stateWithoutSplitNavigation(activeEntry.historyState),\n });\n return true;\n }\n }\n\n const previousSnapshot = previousSnapshotFromHistory(\n snapshotHistoryRef.current,\n activeEntry,\n );\n\n if (canNavigateBackWithinDrawer(previousSnapshot, activeEntry)) {\n return navigateToSnapshot(previousSnapshot);\n }\n\n const previousEntry = previousStackEntry(entriesRef.current, activeEntry);\n if (navigateToSnapshot(previousEntry)) return true;\n\n if (canNavigateBackWithinSplit(previousSnapshot, activeEntry)) {\n return navigateToSnapshot(previousSnapshot);\n }\n\n const splitBackTarget = secondarySplitBackTarget(activeEntry);\n if (splitBackTarget) {\n navigateWithHistoryIndex(`${splitBackTarget}${activeEntry?.search ?? ''}`, {\n commit: 'sync',\n state: activeEntry?.historyState,\n });\n return true;\n }\n\n return false;\n }, [goBackTopModal]);\n\n const router = useMemo<RouterApi>(\n () => ({\n navigate,\n replace,\n popTo,\n close: closeModal,\n closeAll: closeAllModals,\n goBack,\n }),\n [closeAllModals, closeModal, goBack, navigate, popTo, replace],\n );\n\n useEffect(() => {\n if (visibleActiveEntry) {\n document.documentElement.setAttribute(\n 'data-route-stack-active-key',\n visibleActiveEntry.stackKey,\n );\n document.documentElement.setAttribute(\n 'data-route-stack-active-presentation',\n visibleActiveEntry.presentation,\n );\n }\n\n return () => {\n document.documentElement.removeAttribute('data-route-stack-active-key');\n document.documentElement.removeAttribute('data-route-stack-active-presentation');\n };\n }, [visibleActiveEntry]);\n\n if (guardRedirect) {\n return (\n <RouterActionsContext.Provider value={router}>\n {runtimeChildren}\n {fallbackNode}\n </RouterActionsContext.Provider>\n );\n }\n\n if (!snapshot && entries.length === 0) {\n return (\n <RouterActionsContext.Provider value={router}>\n {runtimeChildren}\n {fallbackNode}\n <RouterModalStackHost\n entries={modalEntries}\n close={closeModal}\n remove={removeModal}\n fallback={fallbackNode}\n shell={shell}\n />\n </RouterActionsContext.Provider>\n );\n }\n\n return (\n <RouterActionsContext.Provider value={router}>\n {runtimeChildren}\n <div\n className=\"screen-stack\"\n data-router-shell={shell}\n data-animation={!isTransitionSettled ? 'true' : undefined}\n style={{ '--stack-transition-time': `${ROUTE_TRANSITION_MS}ms` } as CSSProperties}\n >\n {renderEntries.map((entry, index) => {\n const phase = phaseForEntry(entry, visibleActiveIds, visibleActiveId);\n const transitionStatus = heldEnterIds.has(entry.id)\n ? 'preEnter'\n : transitionStatusForEntry(entry, stateMap.get(entry.id)?.status);\n const animationType = animationClassForEntry(\n entry,\n phase,\n visibleActiveEntry,\n visibleStackDirection,\n );\n const zIndex =\n phase === 'exiting' ? renderEntries.length + index + 1 : index + 1;\n const contentContainer = stackEntryContentContainer(entry);\n\n return (\n <div\n key={entry.id}\n data-route-stack-screen=\"true\"\n data-route-stack-key={entry.stackKey}\n data-route-stack-route-id={entry.route.id}\n data-route-stack-container={entry.route.container}\n data-route-stack-content-container={contentContainer}\n data-route-stack-presentation={entry.presentation}\n data-route-stack-phase={phase}\n data-route-stack-transition={transitionStatus}\n className={screenClassName(entry, phase, transitionStatus, animationType)}\n aria-hidden={phase === 'active' ? undefined : true}\n inert={phase === 'active' ? undefined : true}\n style={{ zIndex }}\n >\n <div className=\"stack-screen-container\">\n <FrozenStackEntry entry={entry} fallback={fallbackNode} />\n </div>\n </div>\n );\n })}\n </div>\n <RouterModalStackHost\n entries={modalEntries}\n close={closeModal}\n remove={removeModal}\n fallback={fallbackNode}\n shell={shell}\n />\n </RouterActionsContext.Provider>\n );\n}\n\nfunction RouterRoot(props: RouterRootProps) {\n return (\n <WouterRouter\n aroundNav={(_navigate, to, options) => {\n navigateWithHistoryIndex(to, options);\n }}\n >\n <RouterRuntime {...props} />\n </WouterRouter>\n );\n}\n\nconst RouterScreen = routeComponent('push');\nconst RouterStack = routeComponent('push');\nconst RouterModal = routeComponent('modal');\nconst RouterSheet = routeComponent('sheet');\nconst RouterTabBar = routeComponent('push', 'tabbar');\nconst RouterTabBarItem = routeComponent<RouterTabBarItemProps>('push', 'tabbar-item');\nconst RouterDrawer = routeComponent<RouterDrawerProps>('push', 'drawer');\nconst RouterDrawerGroup = routeComponent<RouterDrawerGroupProps>('push', 'drawer-group');\nconst RouterDrawerSection = routeComponent<RouterDrawerSectionProps>(\n 'push',\n 'drawer-section',\n);\nconst RouterDrawerItem = routeComponent<RouterDrawerItemProps>('push', 'drawer-item');\nconst RouterSplitViewPrimary = routeComponent<RouterSplitViewSlotProps>(\n 'push',\n 'split-primary',\n);\nconst RouterSplitViewSecondary = routeComponent<RouterSplitViewSlotProps>(\n 'push',\n 'split-secondary',\n);\nconst RouterSplitView = Object.assign(\n routeComponent<RouterSplitViewProps>('push', 'splitview'),\n {\n Primary: RouterSplitViewPrimary,\n Secondary: RouterSplitViewSecondary,\n },\n);\nconst RouterProtected = routeComponent<RouterProtectedProps>('push', 'protected');\nconst RouterRedirect = routeComponent<RouterRedirectProps>('push', 'redirect');\n\nexport const Router = Object.assign(RouterRoot, {\n Screen: RouterScreen,\n Stack: RouterStack,\n Redirect: RouterRedirect,\n Modal: RouterModal,\n Sheet: RouterSheet,\n TabBar: RouterTabBar,\n TabBarItem: RouterTabBarItem,\n Drawer: RouterDrawer,\n DrawerGroup: RouterDrawerGroup,\n DrawerSection: RouterDrawerSection,\n DrawerItem: RouterDrawerItem,\n SplitView: RouterSplitView,\n Protected: RouterProtected,\n});\n"]}