{
  "version": 3,
  "sources": ["../../../../../src/lib/ui/components/PageMenu/DefaultPageMenu.tsx"],
  "sourcesContent": ["import {\n\tPageRecordType,\n\tTLPageId,\n\treleasePointerCapture,\n\tsetPointerCapture,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport { memo, useCallback, useEffect, useRef, useState } from 'react'\nimport { PORTRAIT_BREAKPOINT } from '../../constants'\nimport { useBreakpoint } from '../../context/breakpoints'\nimport { useUiEvents } from '../../context/events'\nimport { useMenuIsOpen } from '../../hooks/useMenuIsOpen'\nimport { useReadonly } from '../../hooks/useReadonly'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButton } from '../primitives/Button/TldrawUiButton'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonLabel } from '../primitives/Button/TldrawUiButtonLabel'\nimport {\n\tTldrawUiPopover,\n\tTldrawUiPopoverContent,\n\tTldrawUiPopoverTrigger,\n} from '../primitives/TldrawUiPopover'\nimport { onMovePage } from './edit-pages-shared'\nimport { PageItemInput } from './PageItemInput'\nimport { PageItemSubmenu } from './PageItemSubmenu'\n\nconst PAGE_MENU_LIST_HEIGHT_KEY = 'tldraw_page_menu_list_height'\nconst MAX_PAGE_MENU_RENDER_HEIGHT = 800\nconst LIST_BOTTOM_PADDING = 4\nconst MAX_PAGE_MENU_AVAILABLE_HEIGHT_RATIO = 0.62\nconst PAGE_MENU_CREATE_BUTTON_HEIGHT = 40\nconst PAGE_MENU_RESIZE_HANDLE_HEIGHT = 1\nconst PAGE_MENU_ITEM_HEIGHT = 36\nconst MIN_PAGE_MENU_LIST_HEIGHT = PAGE_MENU_ITEM_HEIGHT + LIST_BOTTOM_PADDING\nconst PAGE_MENU_DRAG_THRESHOLD = 5\nconst PAGE_MENU_AUTO_SCROLL_ZONE = 16\nconst PAGE_MENU_AUTO_SCROLL_RAMP_DISTANCE = 48\nconst PAGE_MENU_MIN_AUTO_SCROLL_SPEED = 1\nconst PAGE_MENU_MAX_AUTO_SCROLL_SPEED = 6\n\nfunction readSavedPageMenuListHeight(): number | null {\n\tif (typeof window === 'undefined') return null\n\ttry {\n\t\tconst raw = window.localStorage.getItem(PAGE_MENU_LIST_HEIGHT_KEY)\n\t\tif (!raw) return null\n\t\tconst n = Number(raw)\n\t\treturn Number.isFinite(n) && n >= MIN_PAGE_MENU_LIST_HEIGHT ? n : null\n\t} catch {\n\t\treturn null\n\t}\n}\n\nfunction getPageMenuRenderCap(availableHeight: number): number {\n\tconst maxMenuHeight = Math.min(\n\t\tMAX_PAGE_MENU_RENDER_HEIGHT,\n\t\tavailableHeight * MAX_PAGE_MENU_AVAILABLE_HEIGHT_RATIO\n\t)\n\tconst footerHeight = PAGE_MENU_CREATE_BUTTON_HEIGHT + PAGE_MENU_RESIZE_HANDLE_HEIGHT\n\treturn Math.max(MIN_PAGE_MENU_LIST_HEIGHT, maxMenuHeight - footerHeight)\n}\n\nfunction getPageMenuAutoFitListHeight(pageCount: number): number {\n\treturn Math.max(\n\t\tMIN_PAGE_MENU_LIST_HEIGHT,\n\t\tpageCount * PAGE_MENU_ITEM_HEIGHT + LIST_BOTTOM_PADDING\n\t)\n}\n\n/** @public @react */\nexport const DefaultPageMenu = memo(function DefaultPageMenu() {\n\tconst editor = useEditor()\n\tconst trackEvent = useUiEvents()\n\tconst msg = useTranslation()\n\tconst breakpoint = useBreakpoint()\n\n\t// The id of the page currently being renamed inline, if any.\n\tconst [editingPageId, setEditingPageId] = useState<TLPageId | null>(null)\n\n\tconst closePageItemSubmenus = useCallback(\n\t\t(exceptIndex?: number) => {\n\t\t\tconst contextSuffix = `-${editor.contextId}`\n\t\t\tfor (const menuId of editor.menus.getOpenMenus()) {\n\t\t\t\tconst id = menuId.endsWith(contextSuffix) ? menuId.slice(0, -contextSuffix.length) : menuId\n\t\t\t\tif (!id.startsWith('page item submenu ')) continue\n\t\t\t\tif (exceptIndex !== undefined && id === `page item submenu ${exceptIndex}`) continue\n\t\t\t\teditor.menus.deleteOpenMenu(id)\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\tconst handleOpenChange = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tsetEditingPageId(null)\n\t\t\tif (!isOpen) {\n\t\t\t\tclosePageItemSubmenus()\n\t\t\t}\n\t\t},\n\t\t[closePageItemSubmenus]\n\t)\n\n\tconst [isOpen, onOpenChange] = useMenuIsOpen('page-menu', handleOpenChange)\n\n\tconst rSortableContainer = useRef<HTMLDivElement>(null)\n\n\tconst pages = useValue('pages', () => editor.getPages(), [editor])\n\tconst currentPage = useValue('currentPage', () => editor.getCurrentPage(), [editor])\n\n\tconst isReadonlyMode = useReadonly()\n\n\tconst isCoarsePointer = useValue(\n\t\t'isCoarsePointer',\n\t\t() => editor.getInstanceState().isCoarsePointer,\n\t\t[editor]\n\t)\n\n\t// null = auto-fit to the number of pages (capped). A number means the user\n\t// has pinned the list to that height via the resize handle.\n\tconst [userListHeight, setUserListHeight] = useState<number | null>(readSavedPageMenuListHeight)\n\tconst [isResizing, setIsResizing] = useState(false)\n\tconst [availableHeight, setAvailableHeight] = useState(() =>\n\t\ttypeof window === 'undefined' ? 800 : window.innerHeight\n\t)\n\n\tconst updateAvailableHeight = useCallback(() => {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst popoverContent =\n\t\t\trSortableContainer.current?.closest<HTMLElement>('.tlui-popover__content')\n\t\tconst radixAvailableHeight = popoverContent\n\t\t\t? Number.parseFloat(\n\t\t\t\t\tgetComputedStyle(popoverContent).getPropertyValue(\n\t\t\t\t\t\t'--radix-popover-content-available-height'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t: NaN\n\n\t\tsetAvailableHeight(\n\t\t\tNumber.isFinite(radixAvailableHeight) ? radixAvailableHeight : window.innerHeight\n\t\t)\n\t}, [])\n\n\tuseEffect(() => {\n\t\tconst onResize = () => updateAvailableHeight()\n\t\twindow.addEventListener('resize', onResize)\n\t\treturn () => window.removeEventListener('resize', onResize)\n\t}, [updateAvailableHeight])\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return\n\t\teditor.timers.requestAnimationFrame(updateAvailableHeight)\n\t}, [editor, isOpen, updateAvailableHeight])\n\n\tconst renderCap = getPageMenuRenderCap(availableHeight)\n\tconst autoFitListHeight = getPageMenuAutoFitListHeight(pages.length)\n\tconst renderedListHeight = Math.min(userListHeight ?? autoFitListHeight, renderCap)\n\tconst hasReachedMaxPages = pages.length >= editor.options.maxPages\n\tconst createPageButtonLabel = msg(\n\t\thasReachedMaxPages ? 'page-menu.max-pages-reached' : 'page-menu.create-new-page'\n\t)\n\n\tconst handleResizePointerDown = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n\t\te.preventDefault()\n\t\tconst handle = e.currentTarget\n\t\thandle.setPointerCapture(e.pointerId)\n\t\tconst startY = e.clientY\n\t\t// Start the drag from what the user currently sees, so the divider\n\t\t// tracks the cursor even when the stored preference exceeds the cap.\n\t\tconst startHeight = handle.previousElementSibling?.getBoundingClientRect().height ?? 0\n\t\tlet nextHeight = startHeight\n\n\t\tsetIsResizing(true)\n\n\t\tconst onMove = (moveEvent: PointerEvent) => {\n\t\t\tnextHeight = Math.max(MIN_PAGE_MENU_LIST_HEIGHT, startHeight + (moveEvent.clientY - startY))\n\t\t\tsetUserListHeight(nextHeight)\n\t\t}\n\n\t\tconst onUp = () => {\n\t\t\thandle.removeEventListener('pointermove', onMove)\n\t\t\thandle.removeEventListener('pointerup', onUp)\n\t\t\thandle.removeEventListener('pointercancel', onUp)\n\t\t\tsetIsResizing(false)\n\t\t\ttry {\n\t\t\t\twindow.localStorage.setItem(PAGE_MENU_LIST_HEIGHT_KEY, String(nextHeight))\n\t\t\t} catch {\n\t\t\t\t// ignore \u2014 storage may be unavailable in private/embedded contexts\n\t\t\t}\n\t\t}\n\n\t\thandle.addEventListener('pointermove', onMove)\n\t\thandle.addEventListener('pointerup', onUp, { once: true })\n\t\thandle.addEventListener('pointercancel', onUp, { once: true })\n\t}, [])\n\n\tconst handleResizeDoubleClick = useCallback(() => {\n\t\tsetUserListHeight(null)\n\t\ttry {\n\t\t\twindow.localStorage.removeItem(PAGE_MENU_LIST_HEIGHT_KEY)\n\t\t} catch {\n\t\t\t// ignore \u2014 storage may be unavailable in private/embedded contexts\n\t\t}\n\t}, [])\n\n\tuseEffect(\n\t\tfunction closePageMenuOnEnterPressAfterPressingEnterToConfirmRename() {\n\t\t\tconst doc = editor.getContainerDocument()\n\t\t\tfunction handleKeyDown() {\n\t\t\t\tif (editingPageId) return\n\t\t\t\tif (doc.activeElement === doc.body) {\n\t\t\t\t\teditor.menus.clearOpenMenus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdoc.addEventListener('keydown', handleKeyDown, { passive: true })\n\t\t\treturn () => {\n\t\t\t\tdoc.removeEventListener('keydown', handleKeyDown)\n\t\t\t}\n\t\t},\n\t\t[editor, editingPageId]\n\t)\n\n\tconst rMutables = useRef({\n\t\tstatus: 'idle' as 'idle' | 'pointing' | 'dragging',\n\t\tid: null as TLPageId | null,\n\t\tstartIndex: 0,\n\t\tdragIndex: 0,\n\t\tstartY: 0,\n\t\tstartScrollTop: 0,\n\t\tlastClientY: 0,\n\t\t// Set true on pointer-up after a drag, so the synthetic click that\n\t\t// follows pointer-up doesn't also navigate to the dragged page.\n\t\tjustDragged: false,\n\t\tstartedOnDragHandle: false,\n\t\t// Whether an auto-scroll rAF is in flight; the loop reschedules itself\n\t\t// while status === 'dragging' and exits otherwise.\n\t\tautoScrollScheduled: false,\n\t})\n\n\t// The single source of truth for an in-progress drag. Null when idle.\n\t// Other rows' positions are derived from startIndex/dragIndex during render.\n\tconst [dragState, setDragState] = useState<{\n\t\tid: TLPageId\n\t\tstartIndex: number\n\t\tdragIndex: number\n\t\toffsetY: number\n\t} | null>(null)\n\n\t// Scroll the current page into view when the menu opens / when current page changes.\n\t// Rows are absolutely positioned at top:0 and translated via transform, so\n\t// `offsetTop` is always 0 \u2014 derive the row's visual position from its index.\n\tuseEffect(() => {\n\t\tif (!isOpen) return\n\t\teditor.timers.requestAnimationFrame(() => {\n\t\t\tconst container = rSortableContainer.current\n\t\t\tif (!container) return\n\t\t\tconst currentIndex = editor.getPages().findIndex((p) => p.id === currentPage.id)\n\t\t\tif (currentIndex === -1) return\n\n\t\t\tconst doc = editor.getContainerDocument()\n\t\t\tconst elm = doc.querySelector(`[data-pageid=\"${currentPage.id}\"]`) as HTMLDivElement | null\n\t\t\telm?.querySelector<HTMLButtonElement>('button.tlui-page-menu__item__button')?.focus()\n\n\t\t\tconst elmTop = currentIndex * PAGE_MENU_ITEM_HEIGHT\n\t\t\tconst elmBottom = elmTop + PAGE_MENU_ITEM_HEIGHT\n\t\t\tconst viewTop = container.scrollTop\n\t\t\tconst viewBottom = viewTop + container.clientHeight\n\t\t\tif (elmTop < viewTop) {\n\t\t\t\tcontainer.scrollTo({ top: elmTop })\n\t\t\t} else if (elmBottom > viewBottom) {\n\t\t\t\tcontainer.scrollTo({ top: elmBottom - container.clientHeight })\n\t\t\t}\n\t\t})\n\t}, [currentPage.id, isOpen, editor])\n\n\t// Recomputes the dragged row's offset and dragIndex from the current\n\t// pointer position and container scrollTop, then publishes the new\n\t// dragState so the rest of the rows shift around it.\n\tconst updateDragFromPointer = useCallback(\n\t\t(clientY: number) => {\n\t\t\tconst mut = rMutables.current\n\t\t\tif (mut.status !== 'dragging' || !mut.id) return\n\t\t\tconst scrollTop = rSortableContainer.current?.scrollTop ?? 0\n\t\t\t// Offsets the cursor delta by any auto-scroll that has happened\n\t\t\t// since the drag started, so the row tracks the cursor as the\n\t\t\t// list scrolls underneath it.\n\t\t\tconst rawOffsetY = clientY - mut.startY + (scrollTop - mut.startScrollTop)\n\t\t\t// Clamp the dragged row's visible position to the first/last slot\n\t\t\t// so its transform never extends the popover scroll area.\n\t\t\tconst minDragY = 0\n\t\t\tconst maxDragY = (pages.length - 1) * PAGE_MENU_ITEM_HEIGHT\n\t\t\tconst dragY = Math.max(\n\t\t\t\tminDragY,\n\t\t\t\tMath.min(maxDragY, mut.startIndex * PAGE_MENU_ITEM_HEIGHT + rawOffsetY)\n\t\t\t)\n\t\t\tconst offsetY = dragY - mut.startIndex * PAGE_MENU_ITEM_HEIGHT\n\t\t\tconst dragIndex = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(Math.round(dragY / PAGE_MENU_ITEM_HEIGHT), pages.length - 1)\n\t\t\t)\n\t\t\tmut.dragIndex = dragIndex\n\t\t\tmut.lastClientY = clientY\n\t\t\tsetDragState({ id: mut.id, startIndex: mut.startIndex, dragIndex, offsetY })\n\t\t},\n\t\t[pages.length]\n\t)\n\n\t// During a drag, the list should only scroll from the auto-scroll loop\n\t// below. Native wheel/trackpad scroll would fight the drag position.\n\tuseEffect(() => {\n\t\tif (!isOpen) return\n\t\tconst container = rSortableContainer.current\n\t\tif (!container) return\n\t\tfunction onWheel(e: WheelEvent) {\n\t\t\tif (rMutables.current.status !== 'dragging') return\n\t\t\te.preventDefault()\n\t\t}\n\t\tcontainer.addEventListener('wheel', onWheel, { passive: false })\n\t\treturn () => container.removeEventListener('wheel', onWheel)\n\t}, [isOpen])\n\n\tconst tickAutoScrollDuringDrag = useCallback(() => {\n\t\tconst mut = rMutables.current\n\t\tconst container = rSortableContainer.current\n\t\tif (mut.status !== 'dragging' || !container) {\n\t\t\tmut.autoScrollScheduled = false\n\t\t\treturn\n\t\t}\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst fromTop = mut.lastClientY - rect.top\n\t\tconst fromBottom = rect.bottom - mut.lastClientY\n\t\tconst maxScroll = container.scrollHeight - container.clientHeight\n\t\t// During a drag, scroll speed ramps up as the pointer approaches and\n\t\t// passes the edge of the scroll container.\n\t\t// `overshoot` is 0 at the inner edge of PAGE_MENU_AUTO_SCROLL_ZONE and grows\n\t\t// as the cursor approaches and passes the edge of the container.\n\t\tconst overshootTop = PAGE_MENU_AUTO_SCROLL_ZONE - fromTop\n\t\tconst overshootBottom = PAGE_MENU_AUTO_SCROLL_ZONE - fromBottom\n\t\tlet dy = 0\n\t\tif (overshootTop > 0 && container.scrollTop > 0) {\n\t\t\tconst t = Math.min(1, overshootTop / PAGE_MENU_AUTO_SCROLL_RAMP_DISTANCE)\n\t\t\tconst speed =\n\t\t\t\tPAGE_MENU_MIN_AUTO_SCROLL_SPEED +\n\t\t\t\t(PAGE_MENU_MAX_AUTO_SCROLL_SPEED - PAGE_MENU_MIN_AUTO_SCROLL_SPEED) * t\n\t\t\tdy = -Math.ceil(speed)\n\t\t} else if (overshootBottom > 0 && container.scrollTop < maxScroll) {\n\t\t\tconst t = Math.min(1, overshootBottom / PAGE_MENU_AUTO_SCROLL_RAMP_DISTANCE)\n\t\t\tconst speed =\n\t\t\t\tPAGE_MENU_MIN_AUTO_SCROLL_SPEED +\n\t\t\t\t(PAGE_MENU_MAX_AUTO_SCROLL_SPEED - PAGE_MENU_MIN_AUTO_SCROLL_SPEED) * t\n\t\t\tdy = Math.ceil(speed)\n\t\t}\n\t\tif (dy !== 0) {\n\t\t\tconst before = container.scrollTop\n\t\t\tcontainer.scrollTop = Math.max(0, Math.min(maxScroll, before + dy))\n\t\t\tif (container.scrollTop !== before) {\n\t\t\t\tupdateDragFromPointer(mut.lastClientY)\n\t\t\t}\n\t\t}\n\t\teditor.timers.requestAnimationFrame(tickAutoScrollDuringDrag)\n\t}, [editor, updateDragFromPointer])\n\n\tconst ensureAutoScrollLoop = useCallback(() => {\n\t\tconst mut = rMutables.current\n\t\tif (mut.autoScrollScheduled) return\n\t\tmut.autoScrollScheduled = true\n\t\teditor.timers.requestAnimationFrame(tickAutoScrollDuringDrag)\n\t}, [editor, tickAutoScrollDuringDrag])\n\n\tconst handlePointerDown = useCallback((e: React.PointerEvent<HTMLButtonElement>) => {\n\t\tif (e.button !== 0) return\n\n\t\tconst { clientY, currentTarget } = e\n\t\tconst { id, index } = currentTarget.dataset\n\t\tif (!id || index === undefined) return\n\n\t\tconst startedOnDragHandle = currentTarget.dataset.dragHandle === 'true'\n\t\tif (startedOnDragHandle) {\n\t\t\te.preventDefault()\n\t\t\te.stopPropagation()\n\t\t}\n\n\t\tconst mut = rMutables.current\n\t\tsetPointerCapture(currentTarget, e)\n\t\tmut.status = 'pointing'\n\t\tmut.id = id as TLPageId\n\t\tmut.startIndex = +index\n\t\tmut.dragIndex = +index\n\t\tmut.startY = clientY\n\t\tmut.lastClientY = clientY\n\t\tmut.startScrollTop = rSortableContainer.current?.scrollTop ?? 0\n\t\tmut.startedOnDragHandle = startedOnDragHandle\n\t}, [])\n\n\tconst handlePointerMove = useCallback(\n\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\tconst mut = rMutables.current\n\t\t\tconst { clientY } = e\n\t\t\tif (mut.status === 'pointing') {\n\t\t\t\tif (Math.abs(clientY - mut.startY) <= PAGE_MENU_DRAG_THRESHOLD) return\n\t\t\t\tmut.status = 'dragging'\n\t\t\t\tmut.lastClientY = clientY\n\t\t\t\tensureAutoScrollLoop()\n\t\t\t}\n\t\t\tif (mut.status === 'dragging') {\n\t\t\t\te.preventDefault()\n\t\t\t\tupdateDragFromPointer(clientY)\n\t\t\t}\n\t\t},\n\t\t[ensureAutoScrollLoop, updateDragFromPointer]\n\t)\n\n\tconst handlePointerUp = useCallback(\n\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\tconst mut = rMutables.current\n\t\t\tif (mut.status === 'dragging' && mut.id) {\n\t\t\t\tonMovePage(editor, mut.id, mut.startIndex, mut.dragIndex, trackEvent)\n\t\t\t\tif (!mut.startedOnDragHandle) {\n\t\t\t\t\tmut.justDragged = true\n\t\t\t\t}\n\t\t\t}\n\t\t\treleasePointerCapture(e.currentTarget, e)\n\t\t\tmut.status = 'idle'\n\t\t\tmut.id = null\n\t\t\tmut.startedOnDragHandle = false\n\t\t\tsetDragState(null)\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tconst handleItemContextMenu = useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>, index: number) => {\n\t\t\te.preventDefault()\n\t\t\te.stopPropagation()\n\n\t\t\tclosePageItemSubmenus(index)\n\t\t\teditor.menus.addOpenMenu(`page item submenu ${index}`)\n\t\t},\n\t\t[closePageItemSubmenus, editor]\n\t)\n\n\tconst handlePointerCancel = useCallback((e: React.PointerEvent<HTMLButtonElement>) => {\n\t\tconst mut = rMutables.current\n\t\treleasePointerCapture(e.currentTarget, e)\n\t\tmut.status = 'idle'\n\t\tmut.id = null\n\t\tmut.startedOnDragHandle = false\n\t\tsetDragState(null)\n\t}, [])\n\n\tconst handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\tconst mut = rMutables.current\n\t\t// Pointer capture is naturally released on the eventual pointer up,\n\t\t// at which point the idle status makes the up handler a no-op.\n\t\tif (e.key === 'Escape' && mut.status !== 'idle') {\n\t\t\tmut.status = 'idle'\n\t\t\tmut.id = null\n\t\t\tmut.startedOnDragHandle = false\n\t\t\tsetDragState(null)\n\t\t}\n\t}, [])\n\n\tconst shouldUseWindowPrompt = breakpoint < PORTRAIT_BREAKPOINT.TABLET_SM && isCoarsePointer\n\tconst shouldUseDragHandle = !isReadonlyMode && isCoarsePointer\n\n\tconst startRenamingPage = useCallback(\n\t\t(id: TLPageId, currentName: string) => {\n\t\t\tif (isReadonlyMode) return\n\t\t\tif (shouldUseWindowPrompt) {\n\t\t\t\tconst name = window.prompt(msg('action.rename'), currentName)\n\t\t\t\tif (name && name !== currentName) {\n\t\t\t\t\teditor.renamePage(id, name)\n\t\t\t\t\ttrackEvent('rename-page', { source: 'page-menu' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsetEditingPageId(id)\n\t\t},\n\t\t[editor, msg, isReadonlyMode, shouldUseWindowPrompt, trackEvent]\n\t)\n\n\tconst handleCreatePageClick = useCallback(() => {\n\t\tif (isReadonlyMode) return\n\n\t\tconst newPageId = PageRecordType.createId()\n\t\tconst initialName = msg('page-menu.new-page-initial-name')\n\t\tlet name = initialName\n\n\t\tif (shouldUseWindowPrompt) {\n\t\t\tconst result = window.prompt(msg('page-menu.create-new-page'), initialName)\n\t\t\tif (result === null) return\n\t\t\tname = result || initialName\n\t\t}\n\n\t\teditor.run(() => {\n\t\t\teditor.markHistoryStoppingPoint('creating page')\n\t\t\teditor.createPage({ name, id: newPageId })\n\t\t\teditor.setCurrentPage(newPageId)\n\t\t})\n\n\t\tif (!shouldUseWindowPrompt) {\n\t\t\tstartRenamingPage(newPageId, initialName)\n\t\t}\n\t\ttrackEvent('new-page', { source: 'page-menu' })\n\t}, [editor, msg, isReadonlyMode, shouldUseWindowPrompt, startRenamingPage, trackEvent])\n\n\tconst changePage = useCallback(\n\t\t(id: TLPageId) => {\n\t\t\teditor.setCurrentPage(id)\n\t\t\ttrackEvent('change-page', { source: 'page-menu' })\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\treturn (\n\t\t<TldrawUiPopover id=\"pages\" onOpenChange={onOpenChange} open={isOpen}>\n\t\t\t<TldrawUiPopoverTrigger data-testid=\"main.page-menu\">\n\t\t\t\t<TldrawUiButton\n\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\ttooltip={currentPage.name}\n\t\t\t\t\ttitle={currentPage.name}\n\t\t\t\t\tdata-testid=\"page-menu.button\"\n\t\t\t\t\tclassName=\"tlui-page-menu__trigger\"\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonLabel>{currentPage.name}</TldrawUiButtonLabel>\n\t\t\t\t\t<TldrawUiButtonIcon icon=\"chevron-down\" small />\n\t\t\t\t</TldrawUiButton>\n\t\t\t</TldrawUiPopoverTrigger>\n\t\t\t<TldrawUiPopoverContent\n\t\t\t\tside=\"bottom\"\n\t\t\t\talign=\"start\"\n\t\t\t\tsideOffset={0}\n\t\t\t\tdisableEscapeKeyDown={editingPageId !== null}\n\t\t\t>\n\t\t\t\t<div className=\"tlui-page-menu__wrapper\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-testid=\"page-menu.list\"\n\t\t\t\t\t\tclassName=\"tlui-page-menu__list\"\n\t\t\t\t\t\tref={rSortableContainer}\n\t\t\t\t\t\tstyle={{ height: renderedListHeight }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"tlui-page-menu__list__content\"\n\t\t\t\t\t\t\tdata-dragging={dragState !== null}\n\t\t\t\t\t\t\tstyle={{ height: autoFitListHeight }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{pages.map((page, index) => {\n\t\t\t\t\t\t\t\tconst isCurrentPage = page.id === currentPage.id\n\t\t\t\t\t\t\t\tconst isRenamingThisPage = editingPageId === page.id\n\t\t\t\t\t\t\t\tconst isDragging = dragState?.id === page.id\n\n\t\t\t\t\t\t\t\tlet y = index * PAGE_MENU_ITEM_HEIGHT\n\t\t\t\t\t\t\t\tif (dragState) {\n\t\t\t\t\t\t\t\t\tif (isDragging) {\n\t\t\t\t\t\t\t\t\t\ty = dragState.startIndex * PAGE_MENU_ITEM_HEIGHT + dragState.offsetY\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tconst { startIndex, dragIndex } = dragState\n\t\t\t\t\t\t\t\t\t\tif (dragIndex < startIndex && index >= dragIndex && index < startIndex) {\n\t\t\t\t\t\t\t\t\t\t\ty = (index + 1) * PAGE_MENU_ITEM_HEIGHT\n\t\t\t\t\t\t\t\t\t\t} else if (dragIndex > startIndex && index > startIndex && index <= dragIndex) {\n\t\t\t\t\t\t\t\t\t\t\ty = (index - 1) * PAGE_MENU_ITEM_HEIGHT\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={page.id}\n\t\t\t\t\t\t\t\t\t\tdata-pageid={page.id}\n\t\t\t\t\t\t\t\t\t\tdata-testid=\"page-menu.item\"\n\t\t\t\t\t\t\t\t\t\tdata-iscurrent={isCurrentPage}\n\t\t\t\t\t\t\t\t\t\tdata-dragging={isDragging}\n\t\t\t\t\t\t\t\t\t\tdata-editing={isRenamingThisPage}\n\t\t\t\t\t\t\t\t\t\tclassName=\"tlui-page-menu__item\"\n\t\t\t\t\t\t\t\t\t\tonContextMenu={\n\t\t\t\t\t\t\t\t\t\t\t!isReadonlyMode && !isRenamingThisPage\n\t\t\t\t\t\t\t\t\t\t\t\t? (e) => handleItemContextMenu(e, index)\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tzIndex: isDragging\n\t\t\t\t\t\t\t\t\t\t\t\t? pages.length + 2\n\t\t\t\t\t\t\t\t\t\t\t\t: isCurrentPage\n\t\t\t\t\t\t\t\t\t\t\t\t\t? pages.length + 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: index,\n\t\t\t\t\t\t\t\t\t\t\ttransform: `translateY(${y}px)`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{isRenamingThisPage ? (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"tlui-page-menu__item__title\">\n\t\t\t\t\t\t\t\t\t\t\t\t<PageItemInput\n\t\t\t\t\t\t\t\t\t\t\t\t\tid={page.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\tname={page.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisCurrentPage={isCurrentPage}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonComplete={() => setEditingPageId(null)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCancel={() => setEditingPageId(null)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t{shouldUseDragHandle && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TldrawUiButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"tlui-page-menu__item__drag-handle\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-testid=\"page-menu.item-drag-handle\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-id={page.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-index={index}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-drag-handle=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltip={msg('context-menu.reorder')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={msg('context-menu.reorder')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"drag-handle-dots\" small />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TldrawUiButton>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t<TldrawUiButton\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"normal\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"tlui-page-menu__item__button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (rMutables.current.justDragged) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trMutables.current.justDragged = false\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchangePage(page.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={() => startRenamingPage(page.id, page.name)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerDown={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisReadonlyMode || shouldUseDragHandle ? undefined : handlePointerDown\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerMove={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisReadonlyMode || shouldUseDragHandle ? undefined : handlePointerMove\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerUp={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisReadonlyMode || shouldUseDragHandle ? undefined : handlePointerUp\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPointerCancel={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisReadonlyMode || shouldUseDragHandle ? undefined : handlePointerCancel\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttooltip={msg('page-menu.go-to-page')}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={msg('page-menu.go-to-page')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-id={page.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-index={index}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Escape') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleKeyDown(e)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter' && isCurrentPage) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstartRenamingPage(page.id, page.name)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditor.markEventAsHandled(e)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TldrawUiButtonLabel>{page.name}</TldrawUiButtonLabel>\n\t\t\t\t\t\t\t\t\t\t\t\t</TldrawUiButton>\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!isReadonlyMode && !isRenamingThisPage && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"tlui-page-menu__item__submenu\">\n\t\t\t\t\t\t\t\t\t\t\t\t<PageItemSubmenu\n\t\t\t\t\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\t\t\t\t\titem={page}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlistSize={pages.length}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonRename={() => startRenamingPage(page.id, page.name)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"tlui-page-menu__resize-handle\"\n\t\t\t\t\t\tdata-resizing={isResizing}\n\t\t\t\t\t\tonPointerDown={handleResizePointerDown}\n\t\t\t\t\t\tonDoubleClick={handleResizeDoubleClick}\n\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\taria-orientation=\"horizontal\"\n\t\t\t\t\t\taria-label={msg('page-menu.resize')}\n\t\t\t\t\t/>\n\t\t\t\t\t<TldrawUiButton\n\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\tclassName=\"tlui-page-menu__create-button\"\n\t\t\t\t\t\tdata-testid=\"page-menu.create\"\n\t\t\t\t\t\ttooltip={createPageButtonLabel}\n\t\t\t\t\t\ttitle={createPageButtonLabel}\n\t\t\t\t\t\tdisabled={isReadonlyMode || hasReachedMaxPages}\n\t\t\t\t\t\tonClick={handleCreatePageClick}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TldrawUiButtonLabel>{createPageButtonLabel}</TldrawUiButtonLabel>\n\t\t\t\t\t\t{!hasReachedMaxPages && <TldrawUiButtonIcon icon=\"plus\" small />}\n\t\t\t\t\t</TldrawUiButton>\n\t\t\t\t</div>\n\t\t\t</TldrawUiPopoverContent>\n\t\t</TldrawUiPopover>\n\t)\n})\n"],
  "mappings": "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",
  "names": ["DefaultPageMenu", "isOpen", "handleKeyDown"]
}
