@k2b/ui 0.23.0 → 0.24.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/browser/content/Calendar.js +84 -64
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +1 -1
- package/dist/browser/content/CalendarDayView.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +28 -6
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/DataTable.js +45 -35
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/calendar-day-scroll.js +17 -4
- package/dist/browser/content/calendar-day-scroll.js.map +1 -1
- package/dist/browser/content/calendar-time-view.js +9 -4
- package/dist/browser/content/calendar-time-view.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +2 -0
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/Navigation.js +18 -3
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +14 -0
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/SidebarSwitcher.js +505 -0
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +12 -2
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +1 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +1 -0
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/ssr/content/Calendar.js +36 -13
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +1 -1
- package/dist/ssr/content/CalendarDayView.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +27 -6
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +21 -17
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/calendar-day-scroll.js +17 -4
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -1
- package/dist/ssr/content/calendar-time-view.js +8 -3
- package/dist/ssr/content/calendar-time-view.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +2 -0
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +12 -2
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +14 -0
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/SidebarSwitcher.js +271 -0
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +12 -2
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +1 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/content/Calendar.d.ts +4 -1
- package/dist/types/content/CalendarWeekView.d.ts +1 -1
- package/dist/types/content/DataTable.d.ts +9 -0
- package/dist/types/content/calendar-day-scroll.d.ts +9 -4
- package/dist/types/layout/AppWorkspace.d.ts +2 -0
- package/dist/types/layout/SidebarSwitcher.d.ts +65 -0
- package/dist/types/layout/index.d.ts +1 -0
- package/dist/types/layout/navigation-model.d.ts +4 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\nimport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n /** A hideable sidebar dragged below half its minimum previews the hidden state. */\n hiding: boolean;\n direction: 1 | -1;\n releaseTextSelection: () => void;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst TOGGLE_SELECTOR = \"[data-app-workspace-sidebar-toggle]\";\n/** The width range in which the sidebar is an overlay; it matches the compact media query in the stylesheet. */\nconst COMPACT_QUERY = \"(min-width: 48rem) and (max-width: 63.999rem)\";\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled]):not([type='hidden'])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n/** Text entry, menus, dialogs, and open popups keep their own keys. */\nconst KEY_OWNER_SELECTOR =\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='textbox'], [role='combobox'], [role='searchbox'], [role='spinbutton'], [role='menu'], [role='listbox'], [role='dialog'], dialog, [aria-haspopup]:not([aria-haspopup='false'])[aria-expanded='true']\";\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst sidebarHideable = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceHideable === \"true\";\n/**\n * Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop\n * stays application state, so the controller only requests the change.\n */\nexport const APP_WORKSPACE_SIDEBAR_HIDE_EVENT = \"k2b-app-workspace-sidebar-hide\";\n/** Asks the owning `AppWorkspace.Detail` to close; its `onClose` decides. */\nexport const APP_WORKSPACE_DETAIL_CLOSE_EVENT = \"k2b-app-workspace-detail-close\";\n/**\n * Asks the owning Detail to step by `detail.direction` (`-1` or `1`). It writes\n * the Main element showing the selection to `detail.item`, read synchronously\n * by the controller after dispatch.\n */\nexport const APP_WORKSPACE_DETAIL_STEP_EVENT = \"k2b-app-workspace-detail-step\";\nexport type AppWorkspaceDetailStep = { direction: 1 | -1; item?: HTMLElement };\nconst previewSidebarHidden = (root: HTMLElement, hidden: boolean) => {\n const sidebar = sidebarElement(root);\n if (!sidebar) return;\n if (hidden) sidebar.dataset.workspaceHidePreview = \"true\";\n else delete sidebar.dataset.workspaceHidePreview;\n};\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n // Content ends before the detail track, so its width alone would shrink a\n // persisted panel again on every reconciliation. Measure from Content's\n // start to the workspace's inner end: this includes the detail column and\n // leaves out a desktop sidebar, while an overlay sidebar takes no width.\n const content = kind === \"detail\" ? controlled?.closest<HTMLElement>(\".k2b-app-workspace__content\") : null;\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : content\n ? root.getBoundingClientRect().right - root.clientLeft - content.getBoundingClientRect().left\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"detail\"\n ? 8\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate. A revealed row action\n * pads the label's fading end, so the text is measured against the content box.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const style = getComputedStyle(label);\n const width = label.clientWidth - (Number.parseFloat(style.paddingLeft) || 0) - (Number.parseFloat(style.paddingRight) || 0);\n const overflow = Math.max(0, text.scrollWidth - width);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\ntype OverlaySidebar = { root: HTMLElement; sidebar: HTMLElement; toggle: HTMLElement };\n/** An open overlay remembers the regions it made inert, so it leaves the application's own `inert` alone. */\ntype OpenOverlay = OverlaySidebar & { inerted: HTMLElement[] };\n\n/**\n * The elements Tab stops at, in order. A roving tab index, as in a tree, keeps\n * links and buttons at `tabindex=\"-1\"`; they take focus but are no stops.\n */\nconst tabStopsIn = (container: HTMLElement) =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (element) =>\n element.tabIndex >= 0 &&\n element.getClientRects().length > 0 &&\n !element.closest(\"[inert]\") &&\n getComputedStyle(element).visibility !== \"hidden\",\n );\n/** Several controllers can see one click on a nested workspace's button; the innermost one, which sees it first, owns it. */\nconst claimedToggleClicks = new WeakSet<Event>();\nconst claimedDetailGestures = new WeakSet<Event>();\n\n/**\n * The compact overlay: from 48 to 64 rem the sidebar opens over the work area\n * from the button in the workspace's head. While it is open the rest of\n * the workspace is inert, Tab stays in the sidebar, and Escape, the scrim,\n * choosing an item, hiding the sidebar, or leaving the width range close it\n * again. The state is one attribute on the workspace root, so server-rendered\n * and hydrated workspaces behave the same.\n */\nconst overlayTarget = (toggle: HTMLElement): OverlaySidebar | null => {\n const root = workspaceRoot(toggle);\n // The button belongs to its workspace's own sidebar. A sidebar rendered apart\n // from the head, for example in an island, can carry another id than the one\n // the head named, so the button learns the real one here.\n const sidebar = root ? sidebarElement(root) : null;\n if (!root || !sidebar || sidebar.hidden || sidebar.dataset.mobile === \"stacked\") return null;\n if (sidebar.id) toggle.setAttribute(\"aria-controls\", sidebar.id);\n return { root, sidebar, toggle };\n};\nconst overlayRegions = (root: HTMLElement, sidebar: HTMLElement) =>\n Array.from(root.children)\n .flatMap((child) =>\n child instanceof HTMLElement && (child.localName === \"solid-island\" || child.localName === \"solid-client\")\n ? Array.from(child.children)\n : [child],\n )\n .filter((child): child is HTMLElement => child instanceof HTMLElement && child !== sidebar && !child.contains(sidebar));\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n // A document has no owner document; an element root listens on its own.\n const ownerDocument = eventRoot.ownerDocument ?? document;\n const ownerWindow = ownerDocument.defaultView ?? window;\n let overlay: OpenOverlay | null = null;\n const compact = typeof window.matchMedia === \"function\" ? window.matchMedia(COMPACT_QUERY) : null;\n // A server-rendered head names the sidebar before the sidebar renders; the button learns its real id now.\n for (const toggle of eventRoot.querySelectorAll<HTMLElement>(TOGGLE_SELECTOR)) overlayTarget(toggle);\n const openOverlay = (target: OverlaySidebar) => {\n if (overlay) closeOverlay(\"none\");\n const inerted = overlayRegions(target.root, target.sidebar).filter((region) => !region.hasAttribute(\"inert\"));\n overlay = { ...target, inerted };\n target.root.dataset.sidebarOverlay = \"open\";\n target.toggle.setAttribute(\"aria-expanded\", \"true\");\n inerted.forEach((region) => region.setAttribute(\"inert\", \"\"));\n // Focus starts on the current destination, so the reader knows where they\n // are: on its own tab stop, or on the tree item around it.\n const current = target.sidebar.querySelector<HTMLElement>(\"[aria-current='page'], .is-active\");\n const stops = tabStopsIn(target.sidebar);\n const first =\n (current && (stops.find((element) => current.contains(element)) ?? stops.findLast((element) => element.contains(current)))) ??\n stops[0];\n if (first) first.focus();\n else {\n target.sidebar.tabIndex = -1;\n target.sidebar.focus();\n }\n };\n /**\n * `\"button\"` returns focus to the button. `\"kept\"` leaves it where it moved,\n * for example into a dialog an item opened, and only rescues focus that the\n * closing sidebar would hide. `\"none\"` moves nothing, for cleanup.\n */\n const closeOverlay = (focus: \"button\" | \"kept\" | \"none\") => {\n const closing = overlay;\n if (!closing) return;\n overlay = null;\n delete closing.root.dataset.sidebarOverlay;\n closing.toggle.setAttribute(\"aria-expanded\", \"false\");\n closing.inerted.forEach((region) => region.removeAttribute(\"inert\"));\n if (focus === \"none\") return;\n const active = document.activeElement;\n if (focus === \"button\" || !active || active === document.body || closing.sidebar.contains(active)) closing.toggle.focus();\n };\n const onClick = (event: MouseEvent) => {\n const target = eventElement(event);\n const toggle = target?.closest<HTMLElement>(TOGGLE_SELECTOR);\n if (toggle) {\n const next = overlayTarget(toggle);\n if (!next || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (overlay?.sidebar === next.sidebar) closeOverlay(\"button\");\n else if (compact?.matches) openOverlay(next);\n return;\n }\n if (!overlay || !target) return;\n // The scrim is the workspace root's own pseudo-element.\n if (target === overlay.root) {\n closeOverlay(\"button\");\n return;\n }\n // Choosing a destination closes the overlay: a link, or the button of a\n // row. A tree folder that only expands, a control that opens a popup or\n // expands something, such as a row's preview, and an item's own actions\n // keep it open.\n const control = target.closest<HTMLElement>(\"a[href], button\");\n if (!control || !overlay.sidebar.contains(control)) return;\n if (\n target.closest(\"[data-k2b-nav-tree-toggle]\") ||\n control.closest(\n \"[data-k2b-nav-tree-disclosure], .k2b-app-workspace__sidebar-item-action, .k2b-app-workspace__sidebar-item-actions\",\n ) ||\n control.matches(\"[aria-haspopup], [aria-expanded]\")\n )\n return;\n if (control.matches(\"a[href]\") || control.closest(ITEM_SELECTOR)) closeOverlay(\"kept\");\n };\n const onOverlayKeyDown = (event: KeyboardEvent) => {\n if (!overlay || event.defaultPrevented) return;\n const target = eventElement(event);\n if (!target) return;\n // Escape also closes it when a click left focus on nothing, so on the body.\n if (event.key === \"Escape\" && (overlay.sidebar.contains(target) || target === ownerDocument.body)) {\n event.preventDefault();\n closeOverlay(\"button\");\n return;\n }\n if (event.key !== \"Tab\" || !overlay.sidebar.contains(target)) return;\n const stops = tabStopsIn(overlay.sidebar);\n const first = stops[0];\n const last = stops.at(-1);\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n if (event.shiftKey && (document.activeElement === first || document.activeElement === overlay.sidebar)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n const onCompactChange = () => {\n if (!compact?.matches) closeOverlay(\"none\");\n };\n const phone = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(max-width: 47.999rem)\") : null;\n const wide = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(min-width: 48rem)\") : null;\n const touchDrawer = typeof window.matchMedia === \"function\" ? window.matchMedia(`${COMPACT_QUERY} and (pointer: coarse)`) : null;\n const reducedMotion = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(prefers-reduced-motion: reduce)\") : null;\n const detailSelector = \".k2b-app-workspace__detail\";\n const grabberSelector = \".k2b-app-workspace__detail-grabber\";\n type RememberedItem = {\n item: HTMLElement;\n cell: HTMLElement | null;\n interaction: \"pointer\" | \"keyboard\";\n scroller: HTMLElement | null;\n scrollTop: number;\n top: number;\n fresh: boolean;\n };\n const detailHidden = new WeakMap<HTMLElement, boolean>();\n const remembered = new WeakMap<HTMLElement, RememberedItem>();\n const lastFocus = new WeakMap<HTMLElement, Element>();\n const touchedDetails = new Set<HTMLElement>();\n // Only a panel blocks scrolling for its touch gestures; a document-wide\n // non-passive listener would make every scroll on the page wait for script.\n const touchMoveAsides = new Set<HTMLElement>();\n const titleTabIndices = new Set<HTMLElement>();\n const motionFrames = new Map<HTMLElement, number>();\n const pendingAnchors = new Map<HTMLElement, () => void>();\n const slides = new Map<HTMLElement, () => void>();\n const motionRoots = new Set<HTMLElement>();\n const revealFrames = new Map<HTMLElement, number>();\n const openDetails = (root: HTMLElement) => rootElements(root, detailSelector).filter((aside) => !aside.hidden);\n const closeControl = (aside: HTMLElement) =>\n Array.from(aside.querySelectorAll<HTMLElement>(\"[data-workspace-detail-close]\")).find(\n (control) => control.closest(detailSelector) === aside,\n );\n const closable = (aside: HTMLElement) => aside.hasAttribute(\"data-workspace-detail-closable\") || Boolean(closeControl(aside));\n const requestClose = (aside: HTMLElement) => {\n if (aside.hasAttribute(\"data-workspace-detail-closable\")) aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_CLOSE_EVENT));\n else closeControl(aside)?.click();\n };\n const scrollerOn = (axis: \"x\" | \"y\", target: Element, boundary: HTMLElement) => {\n for (let element: Element | null = target; element && boundary.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(axis === \"y\" ? getComputedStyle(element).overflowY : getComputedStyle(element).overflowX) &&\n (axis === \"y\" ? element.scrollHeight > element.clientHeight : element.scrollWidth > element.clientWidth)\n )\n return element;\n if (element === boundary) break;\n }\n return null;\n };\n const verticalScroller = (target: Element, boundary: HTMLElement) => scrollerOn(\"y\", target, boundary);\n const refreshItem = (snapshot: RememberedItem) => {\n snapshot.top = snapshot.item.getBoundingClientRect().top;\n snapshot.scrollTop = snapshot.scroller?.scrollTop ?? 0;\n };\n // A table row can exceed its scroller's width, so keep the clicked cell for horizontal reveal.\n const rememberInteraction = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n const previous = remembered.get(root);\n if (previous && openDetails(root).length) refreshItem(previous);\n const main = mainElement(root);\n const item = target.closest<HTMLElement>(FOCUSABLE_SELECTOR);\n if (!main || !item || !main.contains(item) || item.closest(ROOT_SELECTOR) !== root) return;\n if (event instanceof KeyboardEvent && event.key !== \"Enter\" && event.key !== \" \") return;\n const cell = target.closest<HTMLElement>(\"td, th\");\n const snapshot: RememberedItem = {\n item,\n cell: cell && main.contains(cell) && cell.closest(ROOT_SELECTOR) === root ? cell : null,\n interaction: event instanceof KeyboardEvent ? \"keyboard\" : \"pointer\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: true,\n };\n refreshItem(snapshot);\n remembered.set(root, snapshot);\n // Enter in an editor or a field types; only an item that chooses something moves on to its title.\n if (event instanceof KeyboardEvent && !target.closest(KEY_OWNER_SELECTOR)) {\n const aside = openDetails(root).find(isVisible);\n if (aside) requestTitle(aside, true);\n }\n };\n const onDetailFocusIn = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n lastFocus.set(root, target);\n const previous = remembered.get(root);\n // Pointer focus follows pointerdown; keeping that snapshot also keeps the\n // interaction that opened the panel rather than treating focus as a new one.\n if (previous?.item.contains(target)) {\n const main = mainElement(root);\n if (target !== previous.item && target instanceof HTMLElement && main) {\n previous.item = target;\n previous.scroller = verticalScroller(target, main);\n refreshItem(previous);\n }\n return;\n }\n rememberInteraction(event);\n };\n const titleIn = (aside: HTMLElement) => aside.querySelector<HTMLElement>(\"h1, h2, h3, [role='heading']\");\n let focusingTitle: HTMLElement | null = null;\n const focusTitle = (aside: HTMLElement) => {\n const title = titleIn(aside);\n if (!title) return false;\n if (!title.matches(FOCUSABLE_SELECTOR) && !title.hasAttribute(\"tabindex\")) {\n title.tabIndex = -1;\n titleTabIndices.add(title);\n }\n focusingTitle = title;\n try {\n title.focus({ preventScroll: true });\n } finally {\n focusingTitle = null;\n }\n return true;\n };\n let pendingTitle: { aside: HTMLElement; observer: MutationObserver } | null = null;\n const cancelTitle = () => {\n pendingTitle?.observer.disconnect();\n pendingTitle = null;\n };\n // A step from inside the panel can remove the focused element with the old\n // content, so focus falls to the body. The panel keeps owning the steps until\n // focus or a pointer goes elsewhere, so a quick second J still ends on the title.\n let panelStep: HTMLElement | null = null;\n const cancelTitleOnInteraction = (event: Event) => {\n if (event.type !== \"keydown\" && !(event.target instanceof Node && panelStep?.contains(event.target))) panelStep = null;\n if (event.type !== \"focusin\" || event.target !== focusingTitle) cancelTitle();\n };\n const requestTitle = (aside: HTMLElement, waitForChange = false) => {\n cancelTitle();\n if (aside.hidden || !aside.isConnected) return;\n if (!waitForChange && focusTitle(aside)) return;\n const previousTitle = titleIn(aside);\n const previousText = previousTitle?.textContent;\n // Loading fallbacks and selection changes can produce their heading after\n // the opening interaction. A later user action always takes precedence.\n const observer = new MutationObserver(() => {\n if (aside.hidden || !aside.isConnected) {\n cancelTitle();\n return;\n }\n const title = titleIn(aside);\n if (!title || (waitForChange && title === previousTitle && title.textContent === previousText)) return;\n cancelTitle();\n focusTitle(aside);\n });\n pendingTitle = { aside, observer };\n observer.observe(aside, { childList: true, subtree: true, characterData: true });\n // An element-scoped controller cannot see its own root leave the document.\n observer.observe(ownerDocument, { childList: true, subtree: true });\n };\n const setDetent = (aside: HTMLElement, full: boolean) => {\n touchedDetails.add(aside);\n if (full) aside.dataset.workspaceDetailSheet = \"full\";\n else delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", String(full));\n };\n const clearDrag = (aside: HTMLElement) => {\n aside.style.removeProperty(\"--k2b-workspace-detail-sheet-height\");\n aside.style.removeProperty(\"transform\");\n delete aside.dataset.workspaceDetailDragging;\n };\n const anchorItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem | undefined) => {\n if (!wide?.matches || (touchDrawer?.matches && closable(aside)) || !snapshot?.item.isConnected) return;\n if (!mainElement(root)?.contains(snapshot.item) || snapshot.item.closest(ROOT_SELECTOR) !== root) return;\n const scroller = snapshot.scroller;\n if (scroller?.isConnected && scroller.scrollTop === snapshot.scrollTop)\n scroller.scrollTop += snapshot.item.getBoundingClientRect().top - snapshot.top;\n };\n // From 64 rem the workspace does not clip, so the panel's shadow shows on\n // every edge. A panel sliding in or out would cross a framed workspace's\n // edge, so the workspace clips while the panel moves (see the stylesheet).\n const slide = (root: HTMLElement, aside: HTMLElement) => {\n slides.get(root)?.();\n if (!root.hasAttribute(\"data-workspace-motion\") || reducedMotion?.matches || !wide?.matches) return;\n const end = () => {\n aside.removeEventListener(\"transitionend\", onEnd);\n aside.removeEventListener(\"transitioncancel\", onEnd);\n cancelAnimationFrame(frame);\n slides.delete(root);\n delete root.dataset.workspaceDetailSliding;\n };\n const onEnd = (event: TransitionEvent) => {\n if (event.target === aside && event.propertyName === \"transform\") end();\n };\n aside.addEventListener(\"transitionend\", onEnd);\n aside.addEventListener(\"transitioncancel\", onEnd);\n // A slow first frame must not end the clip early, so only a panel that\n // does not slide at all ends it in that frame.\n const frame = requestAnimationFrame(() => {\n const sliding = aside\n .getAnimations?.()\n .some((animation) => \"transitionProperty\" in animation && animation.transitionProperty === \"transform\");\n if (!sliding) end();\n });\n slides.set(root, end);\n root.dataset.workspaceDetailSliding = \"\";\n };\n const revealItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem) => {\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.set(\n root,\n requestAnimationFrame(() => {\n revealFrames.delete(root);\n if (\n !aside.hidden &&\n aside.isConnected &&\n snapshot.item.isConnected &&\n mainElement(root)?.contains(snapshot.item) &&\n snapshot.item.closest(ROOT_SELECTOR) === root\n ) {\n const behavior = reducedMotion?.matches ? \"auto\" : \"smooth\";\n const main = mainElement(root);\n const cell = snapshot.cell;\n const target = cell?.isConnected && main?.contains(cell) ? cell : snapshot.item;\n if (phone?.matches && main) {\n // The sheet covers Main's lower part, so the item ends 8px above it;\n // a step can also land above Main's top or beside it, as in a board.\n const page = ownerDocument.scrollingElement;\n const vertical = verticalScroller(target, main) ?? page;\n const horizontal = scrollerOn(\"x\", target, main) ?? page;\n const bounds = (scroller: Element | null) => (scroller && scroller !== page ? scroller.getBoundingClientRect() : null);\n const box = target.getBoundingClientRect();\n const top = Math.max(0, bounds(vertical)?.top ?? 0);\n const left = Math.max(0, bounds(horizontal)?.left ?? 0);\n const right = Math.min(ownerWindow.innerWidth, bounds(horizontal)?.right ?? Infinity);\n const dy = box.top < top ? box.top - top - 8 : Math.max(0, box.bottom - (ownerWindow.innerHeight - aside.offsetHeight) + 8);\n // As with scrollIntoView's \"nearest\", an item past both edges stays put\n // and one wider than the view keeps its start in view.\n const dx =\n box.left < left && box.right > right\n ? 0\n : box.left < left\n ? box.left - left - 8\n : box.right > right\n ? Math.min(box.right - right + 8, Math.max(0, box.left - left - 8))\n : 0;\n if (vertical && vertical === horizontal) {\n if (dy || dx) vertical.scrollBy({ top: dy, left: dx, behavior });\n } else {\n if (dy) vertical?.scrollBy({ top: dy, behavior });\n if (dx) horizontal?.scrollBy({ left: dx, behavior });\n }\n } else target.scrollIntoView({ block: \"nearest\", inline: \"nearest\", behavior });\n }\n }),\n );\n };\n const detailTransition = (aside: HTMLElement, wasHidden: boolean) => {\n const root = aside.closest<HTMLElement>(ROOT_SELECTOR);\n detailHidden.set(aside, Boolean(aside.hidden));\n if (!root || !observedRoots.has(root) || Boolean(aside.hidden) === wasHidden) return;\n pendingAnchors.get(root)?.();\n slide(root, aside);\n touchedDetails.add(aside);\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.delete(root);\n const snapshot = remembered.get(root);\n const followedInteraction = snapshot?.fresh ?? false;\n if (snapshot) snapshot.fresh = false;\n if (aside.hidden) {\n if (pendingTitle?.aside === aside) cancelTitle();\n if (panelStep === aside) panelStep = null;\n if (root.hasAttribute(\"data-workspace-motion\") && !reducedMotion?.matches && wide?.matches) {\n // Closing holds the detail column until the slide ends; anchor after Main widens.\n const cancel = () => {\n root.removeEventListener(\"transitionend\", onTransitionEnd);\n clearTimeout(timer);\n pendingAnchors.delete(root);\n };\n const finish = () => {\n cancel();\n if (aside.hidden && aside.isConnected) anchorItem(root, aside, snapshot);\n };\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.target === root && event.propertyName === \"--k2b-workspace-detail-track\") finish();\n };\n const timer = setTimeout(finish, 300);\n root.addEventListener(\"transitionend\", onTransitionEnd);\n pendingAnchors.set(root, cancel);\n } else anchorItem(root, aside, snapshot);\n const focused = ownerDocument.activeElement;\n if (\n snapshot?.item.isConnected &&\n (aside.contains(lastFocus.get(root) ?? null) || aside.contains(focused) || focused === ownerDocument.body)\n )\n snapshot.item.focus({ preventScroll: true });\n clearDrag(aside);\n if (detailDrag?.aside === aside) finishDetailDrag(true);\n return;\n }\n anchorItem(root, aside, snapshot);\n if (phone?.matches) setDetent(aside, false);\n if (followedInteraction && snapshot) {\n revealItem(root, aside, snapshot);\n if (snapshot.interaction === \"keyboard\" || phone?.matches) requestTitle(aside);\n }\n };\n const onDetailKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) return;\n const target = eventElement(event);\n if (!target || target.closest(KEY_OWNER_SELECTOR)) return;\n if (ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\")) return;\n try {\n if (ownerDocument.querySelector(\":popover-open\")) return;\n } catch {\n // Older engines have no popover selector; the other popup guards still apply.\n }\n const root = target.closest<HTMLElement>(ROOT_SELECTOR);\n let aside = target.closest<HTMLElement>(detailSelector);\n if (aside?.hidden || (aside && (!eventRoot.contains(aside) || aside.closest(ROOT_SELECTOR) !== root))) aside = null;\n if (!aside && root && observedRoots.has(root) && mainElement(root)?.contains(target)) aside = openDetails(root)[0] ?? null;\n if (!aside && target === ownerDocument.body) {\n const open = allRoots().flatMap(openDetails);\n if (open.length === 1) aside = open[0]!;\n }\n const owningRoot = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!aside || !owningRoot) return;\n if (event.key === \"Escape\" && closable(aside)) requestClose(aside);\n else if (\n (event.key.toLowerCase() === \"j\" || event.key.toLowerCase() === \"k\") &&\n aside.hasAttribute(\"data-workspace-detail-steppable\")\n ) {\n const main = mainElement(owningRoot);\n const inMain = remembered.get(owningRoot)?.item.contains(target) || main?.contains(target);\n const inPanel = aside.contains(target) || (target === ownerDocument.body && panelStep === aside);\n panelStep = inPanel ? aside : null;\n const previousTitle = inPanel ? titleIn(aside) : null;\n const previousText = previousTitle?.textContent;\n const detail: AppWorkspaceDetailStep = { direction: event.key.toLowerCase() === \"j\" ? 1 : -1 };\n aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_STEP_EVENT, { detail }));\n const shown = detail.item;\n const item = shown instanceof HTMLElement && main?.contains(shown) && shown.closest(ROOT_SELECTOR) === owningRoot ? shown : null;\n if (item && main) {\n const snapshot: RememberedItem = {\n item,\n cell: null,\n interaction: \"keyboard\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: false,\n };\n refreshItem(snapshot);\n remembered.set(owningRoot, snapshot);\n revealItem(owningRoot, aside, snapshot);\n }\n const title = titleIn(aside);\n if (item && inMain) item.focus({ preventScroll: true });\n // A panel that swapped its title during the event has the new one now.\n else if (item && inPanel && title && (title !== previousTitle || title.textContent !== previousText)) focusTitle(aside);\n // This key's capture cancelled an earlier step's title request, so a\n // step from the body, even past the last item, asks again.\n else if (inPanel && (item || target === ownerDocument.body)) requestTitle(aside, Boolean(item));\n } else if (event.key === \"F6\") {\n if (aside.contains(target)) {\n const item = remembered.get(owningRoot)?.item;\n const main = mainElement(owningRoot);\n (item?.isConnected ? item : main ? tabStopsIn(main)[0] : null)?.focus({ preventScroll: true });\n } else focusTitle(aside);\n } else return;\n event.preventDefault();\n };\n\n type DetailDrag = {\n aside: HTMLElement;\n source: \"pointer\" | \"sheet\" | \"drawer\";\n target: Element;\n pointerId: number;\n startX: number;\n startY: number;\n startHeight: number;\n full: boolean;\n dx: number;\n dy: number;\n time: number;\n velocity: number;\n moved: boolean;\n releaseTextSelection?: () => void;\n };\n let detailDrag: DetailDrag | null = null;\n let detailDragFrame: number | null = null;\n let suppressedClick: HTMLElement | null = null;\n let suppressedClickTimer: ReturnType<typeof setTimeout> | null = null;\n const paintDetailDrag = () => {\n detailDragFrame = null;\n const drag = detailDrag;\n if (!drag?.moved) return;\n drag.aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(drag.aside);\n if (drag.source === \"drawer\") drag.aside.style.transform = `translateX(${Math.max(0, drag.dx)}px)`;\n else {\n const height = ownerWindow.innerHeight;\n drag.aside.style.setProperty(\n \"--k2b-workspace-detail-sheet-height\",\n `${clamp(drag.startHeight - drag.dy, 0, Math.max(0, height - 8))}px`,\n );\n }\n };\n const scheduleDetailDrag = () => {\n if (detailDragFrame === null) detailDragFrame = requestAnimationFrame(paintDetailDrag);\n };\n const finishDetailDrag = (cancelled: boolean) => {\n const drag = detailDrag;\n if (!drag) return;\n detailDrag = null;\n if (detailDragFrame !== null) cancelAnimationFrame(detailDragFrame);\n detailDragFrame = null;\n drag.releaseTextSelection?.();\n if (drag.source === \"pointer\") {\n if (drag.target instanceof HTMLElement && drag.target.hasPointerCapture?.(drag.pointerId))\n drag.target.releasePointerCapture(drag.pointerId);\n if (drag.moved) {\n suppressedClick = drag.aside;\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n suppressedClickTimer = setTimeout(() => {\n suppressedClick = null;\n suppressedClickTimer = null;\n }, 0);\n }\n }\n clearDrag(drag.aside);\n if (cancelled || !drag.moved) return;\n if (drag.source === \"drawer\") {\n if (drag.dx > 80 || (drag.dx > 30 && drag.velocity > 0.5)) requestClose(drag.aside);\n } else if (drag.dy > 60) {\n setDetent(drag.aside, false);\n if (!drag.full && closable(drag.aside)) requestClose(drag.aside);\n } else if (drag.dy < -60) setDetent(drag.aside, true);\n };\n const beginDetailDrag = (aside: HTMLElement, target: Element, source: DetailDrag[\"source\"], x: number, y: number, pointerId: number) => {\n detailDrag = {\n aside,\n target,\n source,\n pointerId,\n startX: x,\n startY: y,\n startHeight: aside.getBoundingClientRect().height,\n full: aside.dataset.workspaceDetailSheet === \"full\",\n dx: 0,\n dy: 0,\n time: performance.now(),\n velocity: 0,\n moved: false,\n };\n return detailDrag;\n };\n const onSheetPointerDown = (event: Event) => {\n if (!(event instanceof PointerEvent) || !phone?.matches || event.button !== 0 || !event.isPrimary || claimedDetailGestures.has(event))\n return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n const grabber = target.closest<HTMLElement>(grabberSelector);\n if (\n !grabber &&\n (!target.closest(\".k2b-detail-panel__header\") ||\n target.closest(\"a, button, input, select, textarea, [role='button'], [contenteditable]:not([contenteditable='false'])\"))\n )\n return;\n claimedDetailGestures.add(event);\n if (detailDrag) finishDetailDrag(true);\n const drag = beginDetailDrag(aside, grabber ?? target, \"pointer\", event.clientX, event.clientY, event.pointerId);\n drag.releaseTextSelection = suppressTextSelection(event.pointerId);\n if (drag.target instanceof HTMLElement) drag.target.setPointerCapture?.(event.pointerId);\n aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(aside);\n };\n const onSheetPointerMove = (event: PointerEvent) => {\n const drag = detailDrag;\n if (!drag || drag.source !== \"pointer\" || drag.pointerId !== event.pointerId) return;\n drag.dy = event.clientY - drag.startY;\n drag.moved ||= Math.abs(drag.dy) > 4;\n if (drag.moved) scheduleDetailDrag();\n };\n const onSheetPointerEnd = (event: Event) => {\n if (!(event instanceof PointerEvent)) return;\n if (detailDrag?.source === \"pointer\" && detailDrag.pointerId === event.pointerId) finishDetailDrag(event.type !== \"pointerup\");\n };\n const onGrabberClick = (event: Event) => {\n const target = eventElement(event);\n const grabber = target?.closest(grabberSelector);\n const aside = grabber?.closest<HTMLElement>(detailSelector);\n if (!aside || aside.hidden || !phone?.matches || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (suppressedClick === aside && event instanceof MouseEvent && event.detail !== 0) {\n event.preventDefault();\n suppressedClick = null;\n return;\n }\n setDetent(aside, aside.dataset.workspaceDetailSheet !== \"full\");\n };\n const ownsTouchGesture = (target: Element, aside: HTMLElement, source: \"sheet\" | \"drawer\") => {\n for (let element: Element | null = target; element && element !== aside; element = element.parentElement) {\n if (\n element.matches(\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='slider'], [draggable='true'], canvas\",\n )\n )\n return true;\n const action = getComputedStyle(element).getPropertyValue(\"touch-action\");\n const horizontal = /\\bpan-(x|left|right)\\b/.test(action);\n const vertical = /\\bpan-(y|up|down)\\b/.test(action);\n if (action.trim() === \"none\" || (source === \"drawer\" ? vertical && !horizontal : horizontal && !vertical)) return true;\n }\n return false;\n };\n const onDetailTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent) || event.touches.length !== 1) {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(true);\n return;\n }\n if (detailDrag || claimedDetailGestures.has(event)) return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const touch = event.touches[0];\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !touch || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n if (phone?.matches && (verticalScroller(target, aside) ?? aside).scrollTop <= 0) {\n if (!ownsTouchGesture(target, aside, \"sheet\"))\n beginDetailDrag(aside, target, \"sheet\", touch.clientX, touch.clientY, touch.identifier);\n } else if (touchDrawer?.matches && closable(aside)) {\n if (!ownsTouchGesture(target, aside, \"drawer\"))\n beginDetailDrag(aside, target, \"drawer\", touch.clientX, touch.clientY, touch.identifier);\n }\n if (detailDrag) claimedDetailGestures.add(event);\n };\n const onDetailTouchMove = (event: Event) => {\n const drag = detailDrag;\n if (!(event instanceof TouchEvent) || !drag || drag.source === \"pointer\") return;\n const touch = Array.from(event.touches).find((touch) => touch.identifier === drag.pointerId);\n if (!touch || event.touches.length !== 1) {\n finishDetailDrag(true);\n return;\n }\n const dx = touch.clientX - drag.startX;\n const dy = touch.clientY - drag.startY;\n const now = performance.now();\n drag.velocity = (dx - drag.dx) / Math.max(1, now - drag.time);\n drag.time = now;\n drag.dx = dx;\n drag.dy = dy;\n if (!drag.moved) {\n if (drag.source === \"sheet\") {\n if (dy < 0 || (verticalScroller(drag.target, drag.aside) ?? drag.aside).scrollTop > 0) {\n finishDetailDrag(true);\n return;\n }\n if (dy <= 4) return;\n } else {\n if (Math.max(Math.abs(dx), Math.abs(dy)) <= 8) return;\n if (dx <= Math.abs(dy)) {\n finishDetailDrag(true);\n return;\n }\n for (let element: Element | null = drag.target; element && drag.aside.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(getComputedStyle(element).overflowX) &&\n element.scrollWidth > element.clientWidth &&\n element.scrollLeft > 0\n ) {\n finishDetailDrag(true);\n return;\n }\n if (element === drag.aside) break;\n }\n }\n drag.moved = true;\n }\n event.preventDefault();\n scheduleDetailDrag();\n };\n const onDetailTouchEnd = (event: Event) => {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(event.type === \"touchcancel\");\n };\n const onDetailDoubleClick = (event: Event) => {\n const handle = resizeHandle(event);\n const root = handle?.closest<HTMLElement>(ROOT_SELECTOR);\n if (\n !handle ||\n !root ||\n resizeKind(handle) !== \"detail\" ||\n !workspaceResizable(root) ||\n !controlsResizableRegion(root, handle, \"detail\")\n )\n return;\n const widths = { ...layoutState.detailWidths };\n delete widths[panelId(handle)];\n layoutState = { ...layoutState, detailWidths: widths };\n const variable = appWorkspacePanelVariable(\"detail\", panelId(handle));\n root.style.removeProperty(variable);\n if (getComputedStyle(root).getPropertyValue(variable).trim())\n root.style.setProperty(variable, `${numberData(handle, \"workspaceDefaultSize\", APP_WORKSPACE_DETAIL_DEFAULT)}px`);\n updateHandleValue(root, handle, \"detail\", currentSize(root, handle, \"detail\"));\n options.writeState?.(layoutState);\n };\n\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n const requested = active.startSize + (client - active.startClient) * active.direction;\n // Below half the smallest visible width a hideable sidebar stays at its\n // minimum and previews hiding; dragging back out resumes the live width.\n const hiding =\n active.kind === \"sidebar\" && sidebarHideable(active.root) && requested < sizeLimits(active.root, active.handle, active.kind).min / 2;\n if (hiding !== active.hiding) {\n active.hiding = hiding;\n previewSidebarHidden(active.root, hiding);\n }\n if (!hiding)\n active.liveSize = applySize(active.root, active.handle, active.kind, requested, { snapSidebar: active.kind !== \"sidebar\" });\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.hiding) {\n // The request comes first, while the layout is still the one on screen,\n // so the host sees the sidebar disappear in a single change. The width\n // before the drag then stays the remembered width for the next time it\n // shows; a host that declines the request gets that width back.\n sidebarElement(finished.root)?.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));\n previewSidebarHidden(finished.root, false);\n applySize(finished.root, finished.handle, \"sidebar\", finished.startSize);\n } else if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n finished.releaseTextSelection();\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n hiding: false,\n direction: resizeDirection(handle, kind),\n releaseTextSelection: suppressTextSelection(event.pointerId),\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n if (detailDrag && (detailDrag.source === \"drawer\" ? !touchDrawer?.matches : !phone?.matches)) finishDetailDrag(true);\n allRoots().forEach((root) => {\n if (!phone?.matches) {\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.dataset.workspaceDetailSheet === \"full\") setDetent(aside, false);\n }\n }\n });\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n for (const elements of [touchedDetails, titleTabIndices, motionRoots]) {\n elements.forEach((element) => {\n if (!element.isConnected) elements.delete(element);\n });\n }\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n pendingAnchors.get(root)?.();\n slides.get(root)?.();\n resizeObserver?.unobserve(root);\n const frame = motionFrames.get(root);\n if (frame !== undefined) cancelAnimationFrame(frame);\n motionFrames.delete(root);\n observedRoots.delete(root);\n }\n });\n touchMoveAsides.forEach((aside) => {\n if (aside.isConnected) return;\n aside.removeEventListener(\"touchmove\", onDetailTouchMove);\n touchMoveAsides.delete(aside);\n });\n next.forEach((root) => {\n rootElements(root, detailSelector).forEach((aside) => {\n if (!detailHidden.has(aside)) detailHidden.set(aside, Boolean(aside.hidden));\n if (touchMoveAsides.has(aside)) return;\n aside.addEventListener(\"touchmove\", onDetailTouchMove, { passive: false });\n touchMoveAsides.add(aside);\n });\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver?.observe(root);\n if (!root.hasAttribute(\"data-workspace-motion\")) {\n motionRoots.add(root);\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.delete(root);\n if (observedRoots.has(root)) root.dataset.workspaceMotion = \"true\";\n }),\n );\n }),\n );\n }\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n if (pendingTitle && (pendingTitle.aside.hidden || !pendingTitle.aside.isConnected)) cancelTitle();\n // Hiding or removing the sidebar, or its button, ends the overlay.\n if (overlay && (overlay.sidebar.hidden || !overlay.sidebar.isConnected || !overlay.toggle.isConnected)) closeOverlay(\"kept\");\n const details = new Set<HTMLElement>();\n for (const record of records) {\n if (\n record.type === \"attributes\" &&\n record.target instanceof HTMLElement &&\n record.target.matches(detailSelector) &&\n !details.has(record.target)\n ) {\n details.add(record.target);\n detailTransition(record.target, detailHidden.get(record.target) ?? record.oldValue !== null);\n }\n }\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"click\", onClick as EventListener);\n ownerDocument.addEventListener(\"keydown\", onOverlayKeyDown);\n ownerWindow.addEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.addEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"keydown\", cancelTitleOnInteraction, true);\n eventRoot.addEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.addEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.addEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.addEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.addEventListener(\"click\", onGrabberClick);\n eventRoot.addEventListener(\"dblclick\", onDetailDoubleClick);\n window.addEventListener(\"pointermove\", onSheetPointerMove);\n window.addEventListener(\"pointerup\", onSheetPointerEnd);\n window.addEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.addEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.addEventListener(\"touchstart\", onDetailTouchStart, { passive: true });\n eventRoot.addEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.addEventListener(\"touchcancel\", onDetailTouchEnd);\n compact?.addEventListener(\"change\", onCompactChange);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n cancelTitle();\n pendingAnchors.forEach((cancel) => cancel());\n slides.forEach((end) => end());\n stopScrollFades();\n finishDetailDrag(true);\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n motionFrames.forEach(cancelAnimationFrame);\n revealFrames.forEach(cancelAnimationFrame);\n motionRoots.forEach((root) => delete root.dataset.workspaceMotion);\n touchedDetails.forEach((aside) => {\n clearDrag(aside);\n delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", \"false\");\n });\n titleTabIndices.forEach((title) => title.removeAttribute(\"tabindex\"));\n ownerWindow.removeEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.removeEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"keydown\", cancelTitleOnInteraction, true);\n eventRoot.removeEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.removeEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.removeEventListener(\"click\", onGrabberClick);\n eventRoot.removeEventListener(\"dblclick\", onDetailDoubleClick);\n window.removeEventListener(\"pointermove\", onSheetPointerMove);\n window.removeEventListener(\"pointerup\", onSheetPointerEnd);\n window.removeEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"touchstart\", onDetailTouchStart);\n touchMoveAsides.forEach((aside) => aside.removeEventListener(\"touchmove\", onDetailTouchMove));\n eventRoot.removeEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.removeEventListener(\"touchcancel\", onDetailTouchEnd);\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n closeOverlay(\"none\");\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"click\", onClick as EventListener);\n ownerDocument.removeEventListener(\"keydown\", onOverlayKeyDown);\n compact?.removeEventListener(\"change\", onCompactChange);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\nimport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n /** A hideable sidebar dragged below half its minimum previews the hidden state. */\n hiding: boolean;\n direction: 1 | -1;\n releaseTextSelection: () => void;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst TOGGLE_SELECTOR = \"[data-app-workspace-sidebar-toggle]\";\n/** The width range in which the sidebar is an overlay; it matches the compact media query in the stylesheet. */\nconst COMPACT_QUERY = \"(min-width: 48rem) and (max-width: 63.999rem)\";\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled]):not([type='hidden'])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n/** Text entry, menus, dialogs, and open popups keep their own keys. */\nconst KEY_OWNER_SELECTOR =\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='textbox'], [role='combobox'], [role='searchbox'], [role='spinbutton'], [role='menu'], [role='listbox'], [role='dialog'], dialog, [aria-haspopup]:not([aria-haspopup='false'])[aria-expanded='true']\";\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst sidebarHideable = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceHideable === \"true\";\n/**\n * Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop\n * stays application state, so the controller only requests the change.\n */\nexport const APP_WORKSPACE_SIDEBAR_HIDE_EVENT = \"k2b-app-workspace-sidebar-hide\";\n/** Asks the owning `AppWorkspace.Detail` to close; its `onClose` decides. */\nexport const APP_WORKSPACE_DETAIL_CLOSE_EVENT = \"k2b-app-workspace-detail-close\";\n/**\n * Asks the owning Detail to step by `detail.direction` (`-1` or `1`). It writes\n * the Main element showing the selection to `detail.item`, read synchronously\n * by the controller after dispatch.\n */\nexport const APP_WORKSPACE_DETAIL_STEP_EVENT = \"k2b-app-workspace-detail-step\";\nexport type AppWorkspaceDetailStep = { direction: 1 | -1; item?: HTMLElement };\nconst previewSidebarHidden = (root: HTMLElement, hidden: boolean) => {\n const sidebar = sidebarElement(root);\n if (!sidebar) return;\n if (hidden) sidebar.dataset.workspaceHidePreview = \"true\";\n else delete sidebar.dataset.workspaceHidePreview;\n};\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n // Content ends before the detail track, so its width alone would shrink a\n // persisted panel again on every reconciliation. Measure from Content's\n // start to the workspace's inner end: this includes the detail column and\n // leaves out a desktop sidebar, while an overlay sidebar takes no width.\n const content = kind === \"detail\" ? controlled?.closest<HTMLElement>(\".k2b-app-workspace__content\") : null;\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : content\n ? root.getBoundingClientRect().right - root.clientLeft - content.getBoundingClientRect().left\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"detail\"\n ? 8\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate. A revealed row action\n * pads the label's fading end, so the text is measured against the content box.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const style = getComputedStyle(label);\n const width = label.clientWidth - (Number.parseFloat(style.paddingLeft) || 0) - (Number.parseFloat(style.paddingRight) || 0);\n const overflow = Math.max(0, text.scrollWidth - width);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\ntype OverlaySidebar = { root: HTMLElement; sidebar: HTMLElement; toggle: HTMLElement };\n/** An open overlay remembers the regions it made inert, so it leaves the application's own `inert` alone. */\ntype OpenOverlay = OverlaySidebar & { inerted: HTMLElement[] };\n\n/**\n * The elements Tab stops at, in order. A roving tab index, as in a tree, keeps\n * links and buttons at `tabindex=\"-1\"`; they take focus but are no stops.\n */\nconst tabStopsIn = (container: HTMLElement) =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (element) =>\n element.tabIndex >= 0 &&\n element.getClientRects().length > 0 &&\n !element.closest(\"[inert]\") &&\n getComputedStyle(element).visibility !== \"hidden\",\n );\n/** Several controllers can see one click on a nested workspace's button; the innermost one, which sees it first, owns it. */\nconst claimedToggleClicks = new WeakSet<Event>();\nconst claimedDetailGestures = new WeakSet<Event>();\n\n/**\n * The compact overlay: from 48 to 64 rem the sidebar opens over the work area\n * from the button in the workspace's head. While it is open the rest of\n * the workspace is inert, Tab stays in the sidebar, and Escape, the scrim,\n * choosing an item, hiding the sidebar, or leaving the width range close it\n * again. The state is one attribute on the workspace root, so server-rendered\n * and hydrated workspaces behave the same.\n */\nconst overlayTarget = (toggle: HTMLElement): OverlaySidebar | null => {\n const root = workspaceRoot(toggle);\n // The button belongs to its workspace's own sidebar. A sidebar rendered apart\n // from the head, for example in an island, can carry another id than the one\n // the head named, so the button learns the real one here.\n const sidebar = root ? sidebarElement(root) : null;\n if (!root || !sidebar || sidebar.hidden || sidebar.dataset.mobile === \"stacked\") return null;\n if (sidebar.id) toggle.setAttribute(\"aria-controls\", sidebar.id);\n return { root, sidebar, toggle };\n};\nconst overlayRegions = (root: HTMLElement, sidebar: HTMLElement) =>\n Array.from(root.children)\n .flatMap((child) =>\n child instanceof HTMLElement && (child.localName === \"solid-island\" || child.localName === \"solid-client\")\n ? Array.from(child.children)\n : [child],\n )\n .filter((child): child is HTMLElement => child instanceof HTMLElement && child !== sidebar && !child.contains(sidebar));\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n // A document has no owner document; an element root listens on its own.\n const ownerDocument = eventRoot.ownerDocument ?? document;\n const ownerWindow = ownerDocument.defaultView ?? window;\n let overlay: OpenOverlay | null = null;\n const compact = typeof window.matchMedia === \"function\" ? window.matchMedia(COMPACT_QUERY) : null;\n // A server-rendered head names the sidebar before the sidebar renders; the button learns its real id now.\n for (const toggle of eventRoot.querySelectorAll<HTMLElement>(TOGGLE_SELECTOR)) overlayTarget(toggle);\n const openOverlay = (target: OverlaySidebar) => {\n if (overlay) closeOverlay(\"none\");\n const inerted = overlayRegions(target.root, target.sidebar).filter((region) => !region.hasAttribute(\"inert\"));\n overlay = { ...target, inerted };\n target.root.dataset.sidebarOverlay = \"open\";\n target.toggle.setAttribute(\"aria-expanded\", \"true\");\n inerted.forEach((region) => region.setAttribute(\"inert\", \"\"));\n // Focus starts on the current destination, so the reader knows where they\n // are: on its own tab stop, or on the tree item around it.\n const current = target.sidebar.querySelector<HTMLElement>(\"[aria-current='page'], .is-active\");\n const stops = tabStopsIn(target.sidebar);\n const first =\n (current && (stops.find((element) => current.contains(element)) ?? stops.findLast((element) => element.contains(current)))) ??\n stops[0];\n if (first) first.focus();\n else {\n target.sidebar.tabIndex = -1;\n target.sidebar.focus();\n }\n };\n /**\n * `\"button\"` returns focus to the button. `\"kept\"` leaves it where it moved,\n * for example into a dialog an item opened, and only rescues focus that the\n * closing sidebar would hide. `\"none\"` moves nothing, for cleanup.\n */\n const closeOverlay = (focus: \"button\" | \"kept\" | \"none\") => {\n const closing = overlay;\n if (!closing) return;\n overlay = null;\n delete closing.root.dataset.sidebarOverlay;\n closing.toggle.setAttribute(\"aria-expanded\", \"false\");\n closing.inerted.forEach((region) => region.removeAttribute(\"inert\"));\n if (focus === \"none\") return;\n const active = document.activeElement;\n if (focus === \"button\" || !active || active === document.body || closing.sidebar.contains(active)) closing.toggle.focus();\n };\n const onClick = (event: MouseEvent) => {\n const target = eventElement(event);\n const toggle = target?.closest<HTMLElement>(TOGGLE_SELECTOR);\n if (toggle) {\n const next = overlayTarget(toggle);\n if (!next || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (overlay?.sidebar === next.sidebar) closeOverlay(\"button\");\n else if (compact?.matches) openOverlay(next);\n return;\n }\n if (!overlay || !target) return;\n // The scrim is the workspace root's own pseudo-element.\n if (target === overlay.root) {\n closeOverlay(\"button\");\n return;\n }\n // Choosing a destination closes the overlay: a link, or the button of a\n // row. A tree folder that only expands, a control that opens a popup or\n // expands something, such as a row's preview, and an item's own actions\n // keep it open.\n const control = target.closest<HTMLElement>(\"a[href], button\");\n if (!control || !overlay.sidebar.contains(control)) return;\n if (\n target.closest(\"[data-k2b-nav-tree-toggle]\") ||\n control.closest(\n \"[data-k2b-nav-tree-disclosure], .k2b-app-workspace__sidebar-item-action, .k2b-app-workspace__sidebar-item-actions\",\n ) ||\n control.matches(\"[aria-haspopup], [aria-expanded]\")\n )\n return;\n if (control.matches(\"a[href]\") || control.closest(ITEM_SELECTOR)) closeOverlay(\"kept\");\n };\n const onOverlayKeyDown = (event: KeyboardEvent) => {\n if (!overlay || event.defaultPrevented) return;\n const target = eventElement(event);\n if (!target) return;\n // Escape also closes it when a click left focus on nothing, so on the body.\n if (event.key === \"Escape\" && (overlay.sidebar.contains(target) || target === ownerDocument.body)) {\n event.preventDefault();\n closeOverlay(\"button\");\n return;\n }\n if (event.key !== \"Tab\" || !overlay.sidebar.contains(target)) return;\n const stops = tabStopsIn(overlay.sidebar);\n const first = stops[0];\n const last = stops.at(-1);\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n if (event.shiftKey && (document.activeElement === first || document.activeElement === overlay.sidebar)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n const onCompactChange = () => {\n if (!compact?.matches) closeOverlay(\"none\");\n };\n const phone = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(max-width: 47.999rem)\") : null;\n const wide = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(min-width: 48rem)\") : null;\n const touchDrawer = typeof window.matchMedia === \"function\" ? window.matchMedia(`${COMPACT_QUERY} and (pointer: coarse)`) : null;\n const reducedMotion = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(prefers-reduced-motion: reduce)\") : null;\n const detailSelector = \".k2b-app-workspace__detail\";\n const grabberSelector = \".k2b-app-workspace__detail-grabber\";\n type RememberedItem = {\n item: HTMLElement;\n cell: HTMLElement | null;\n interaction: \"pointer\" | \"keyboard\";\n scroller: HTMLElement | null;\n scrollTop: number;\n top: number;\n fresh: boolean;\n };\n const detailHidden = new WeakMap<HTMLElement, boolean>();\n const remembered = new WeakMap<HTMLElement, RememberedItem>();\n const lastFocus = new WeakMap<HTMLElement, Element>();\n const touchedDetails = new Set<HTMLElement>();\n // Only a panel blocks scrolling for its touch gestures; a document-wide\n // non-passive listener would make every scroll on the page wait for script.\n const touchMoveAsides = new Set<HTMLElement>();\n const titleTabIndices = new Set<HTMLElement>();\n const motionFrames = new Map<HTMLElement, number>();\n const pendingAnchors = new Map<HTMLElement, () => void>();\n const slides = new Map<HTMLElement, () => void>();\n const motionRoots = new Set<HTMLElement>();\n const revealFrames = new Map<HTMLElement, number>();\n const openDetails = (root: HTMLElement) => rootElements(root, detailSelector).filter((aside) => !aside.hidden);\n const closeControl = (aside: HTMLElement) =>\n Array.from(aside.querySelectorAll<HTMLElement>(\"[data-workspace-detail-close]\")).find(\n (control) => control.closest(detailSelector) === aside,\n );\n const closable = (aside: HTMLElement) => aside.hasAttribute(\"data-workspace-detail-closable\") || Boolean(closeControl(aside));\n const requestClose = (aside: HTMLElement) => {\n if (aside.hasAttribute(\"data-workspace-detail-closable\")) aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_CLOSE_EVENT));\n else closeControl(aside)?.click();\n };\n const scrollerOn = (axis: \"x\" | \"y\", target: Element, boundary: HTMLElement) => {\n for (let element: Element | null = target; element && boundary.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(axis === \"y\" ? getComputedStyle(element).overflowY : getComputedStyle(element).overflowX) &&\n (axis === \"y\" ? element.scrollHeight > element.clientHeight : element.scrollWidth > element.clientWidth)\n )\n return element;\n if (element === boundary) break;\n }\n return null;\n };\n const verticalScroller = (target: Element, boundary: HTMLElement) => scrollerOn(\"y\", target, boundary);\n const refreshItem = (snapshot: RememberedItem) => {\n snapshot.top = snapshot.item.getBoundingClientRect().top;\n snapshot.scrollTop = snapshot.scroller?.scrollTop ?? 0;\n };\n // A table row can exceed its scroller's width, so keep the clicked cell for horizontal reveal.\n const rememberInteraction = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n const previous = remembered.get(root);\n if (previous && openDetails(root).length) refreshItem(previous);\n const main = mainElement(root);\n const item = target.closest<HTMLElement>(FOCUSABLE_SELECTOR);\n if (!main || !item || !main.contains(item) || item.closest(ROOT_SELECTOR) !== root) return;\n if (event instanceof KeyboardEvent && event.key !== \"Enter\" && event.key !== \" \") return;\n const cell = target.closest<HTMLElement>(\"td, th\");\n const snapshot: RememberedItem = {\n item,\n cell: cell && main.contains(cell) && cell.closest(ROOT_SELECTOR) === root ? cell : null,\n interaction: event instanceof KeyboardEvent ? \"keyboard\" : \"pointer\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: true,\n };\n refreshItem(snapshot);\n remembered.set(root, snapshot);\n // Enter in an editor or a field types; only an item that chooses something moves on to its title.\n if (event instanceof KeyboardEvent && !target.closest(KEY_OWNER_SELECTOR)) {\n const aside = openDetails(root).find(isVisible);\n if (aside) requestTitle(aside, true);\n }\n };\n const onDetailFocusIn = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n lastFocus.set(root, target);\n const previous = remembered.get(root);\n // Pointer focus follows pointerdown; keeping that snapshot also keeps the\n // interaction that opened the panel rather than treating focus as a new one.\n if (previous?.item.contains(target)) {\n const main = mainElement(root);\n if (target !== previous.item && target instanceof HTMLElement && main) {\n previous.item = target;\n previous.scroller = verticalScroller(target, main);\n refreshItem(previous);\n }\n return;\n }\n rememberInteraction(event);\n };\n const titleIn = (aside: HTMLElement) => aside.querySelector<HTMLElement>(\"h1, h2, h3, [role='heading']\");\n let focusingTitle: HTMLElement | null = null;\n const focusTitle = (aside: HTMLElement) => {\n const title = titleIn(aside);\n if (!title) return false;\n if (!title.matches(FOCUSABLE_SELECTOR) && !title.hasAttribute(\"tabindex\")) {\n title.tabIndex = -1;\n titleTabIndices.add(title);\n }\n focusingTitle = title;\n try {\n title.focus({ preventScroll: true });\n } finally {\n focusingTitle = null;\n }\n return true;\n };\n let pendingTitle: { aside: HTMLElement; observer: MutationObserver } | null = null;\n const cancelTitle = () => {\n pendingTitle?.observer.disconnect();\n pendingTitle = null;\n };\n // A step from inside the panel can remove the focused element with the old\n // content, so focus falls to the body. The panel keeps owning the steps until\n // focus or a pointer goes elsewhere, so a quick second J still ends on the title.\n let panelStep: HTMLElement | null = null;\n const cancelTitleOnInteraction = (event: Event) => {\n if (event.type !== \"keydown\" && !(event.target instanceof Node && panelStep?.contains(event.target))) panelStep = null;\n if (event.type !== \"focusin\" || event.target !== focusingTitle) cancelTitle();\n };\n const requestTitle = (aside: HTMLElement, waitForChange = false) => {\n cancelTitle();\n if (aside.hidden || !aside.isConnected) return;\n if (!waitForChange && focusTitle(aside)) return;\n const previousTitle = titleIn(aside);\n const previousText = previousTitle?.textContent;\n // Loading fallbacks and selection changes can produce their heading after\n // the opening interaction. A later user action always takes precedence.\n const observer = new MutationObserver(() => {\n if (aside.hidden || !aside.isConnected) {\n cancelTitle();\n return;\n }\n const title = titleIn(aside);\n if (!title || (waitForChange && title === previousTitle && title.textContent === previousText)) return;\n cancelTitle();\n focusTitle(aside);\n });\n pendingTitle = { aside, observer };\n observer.observe(aside, { childList: true, subtree: true, characterData: true });\n // An element-scoped controller cannot see its own root leave the document.\n observer.observe(ownerDocument, { childList: true, subtree: true });\n };\n const setDetent = (aside: HTMLElement, full: boolean) => {\n touchedDetails.add(aside);\n if (full) aside.dataset.workspaceDetailSheet = \"full\";\n else delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", String(full));\n };\n const clearDrag = (aside: HTMLElement) => {\n aside.style.removeProperty(\"--k2b-workspace-detail-sheet-height\");\n aside.style.removeProperty(\"transform\");\n delete aside.dataset.workspaceDetailDragging;\n };\n const anchorItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem | undefined) => {\n if (!wide?.matches || (touchDrawer?.matches && closable(aside)) || !snapshot?.item.isConnected) return;\n if (!mainElement(root)?.contains(snapshot.item) || snapshot.item.closest(ROOT_SELECTOR) !== root) return;\n const scroller = snapshot.scroller;\n if (scroller?.isConnected && scroller.scrollTop === snapshot.scrollTop)\n scroller.scrollTop += snapshot.item.getBoundingClientRect().top - snapshot.top;\n };\n // From 64 rem the workspace does not clip, so the panel's shadow shows on\n // every edge. A panel sliding in or out would cross a framed workspace's\n // edge, so the workspace clips while the panel moves (see the stylesheet).\n const slide = (root: HTMLElement, aside: HTMLElement) => {\n slides.get(root)?.();\n if (!root.hasAttribute(\"data-workspace-motion\") || reducedMotion?.matches || !wide?.matches) return;\n const end = () => {\n aside.removeEventListener(\"transitionend\", onEnd);\n aside.removeEventListener(\"transitioncancel\", onEnd);\n cancelAnimationFrame(frame);\n slides.delete(root);\n delete root.dataset.workspaceDetailSliding;\n };\n const onEnd = (event: TransitionEvent) => {\n if (event.target === aside && event.propertyName === \"transform\") end();\n };\n aside.addEventListener(\"transitionend\", onEnd);\n aside.addEventListener(\"transitioncancel\", onEnd);\n // A slow first frame must not end the clip early, so only a panel that\n // does not slide at all ends it in that frame.\n const frame = requestAnimationFrame(() => {\n const sliding = aside\n .getAnimations?.()\n .some((animation) => \"transitionProperty\" in animation && animation.transitionProperty === \"transform\");\n if (!sliding) end();\n });\n slides.set(root, end);\n root.dataset.workspaceDetailSliding = \"\";\n };\n const revealItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem) => {\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.set(\n root,\n requestAnimationFrame(() => {\n revealFrames.delete(root);\n if (\n !aside.hidden &&\n aside.isConnected &&\n snapshot.item.isConnected &&\n mainElement(root)?.contains(snapshot.item) &&\n snapshot.item.closest(ROOT_SELECTOR) === root\n ) {\n const behavior = reducedMotion?.matches ? \"auto\" : \"smooth\";\n const main = mainElement(root);\n const cell = snapshot.cell;\n const target = cell?.isConnected && main?.contains(cell) ? cell : snapshot.item;\n if (phone?.matches && main) {\n // The sheet covers Main's lower part, so the item ends 8px above it;\n // the other edges include the scroller's scroll padding, like scrollIntoView.\n const page = ownerDocument.scrollingElement;\n const vertical = verticalScroller(target, main) ?? page;\n const horizontal = scrollerOn(\"x\", target, main) ?? page;\n const bounds = (scroller: Element | null) => {\n if (!scroller || scroller === page) return null;\n const rect = scroller.getBoundingClientRect();\n const style = ownerWindow.getComputedStyle(scroller);\n const padding = (value: string) => Number.parseFloat(value) || 0;\n return {\n top: rect.top + padding(style.scrollPaddingTop),\n left: rect.left + padding(style.scrollPaddingLeft),\n right: rect.right - padding(style.scrollPaddingRight),\n };\n };\n const box = target.getBoundingClientRect();\n const top = Math.max(0, bounds(vertical)?.top ?? 0);\n const left = Math.max(0, bounds(horizontal)?.left ?? 0);\n const right = Math.min(ownerWindow.innerWidth, bounds(horizontal)?.right ?? Infinity);\n const dy = box.top < top ? box.top - top - 8 : Math.max(0, box.bottom - (ownerWindow.innerHeight - aside.offsetHeight) + 8);\n // As with scrollIntoView's \"nearest\", an item past both edges stays put\n // and one wider than the view keeps its start in view.\n const dx =\n box.left < left && box.right > right\n ? 0\n : box.left < left\n ? box.left - left - 8\n : box.right > right\n ? Math.min(box.right - right + 8, Math.max(0, box.left - left - 8))\n : 0;\n if (vertical && vertical === horizontal) {\n if (dy || dx) vertical.scrollBy({ top: dy, left: dx, behavior });\n } else {\n if (dy) vertical?.scrollBy({ top: dy, behavior });\n if (dx) horizontal?.scrollBy({ left: dx, behavior });\n }\n } else target.scrollIntoView({ block: \"nearest\", inline: \"nearest\", behavior });\n }\n }),\n );\n };\n const detailTransition = (aside: HTMLElement, wasHidden: boolean) => {\n const root = aside.closest<HTMLElement>(ROOT_SELECTOR);\n detailHidden.set(aside, Boolean(aside.hidden));\n if (!root || !observedRoots.has(root) || Boolean(aside.hidden) === wasHidden) return;\n pendingAnchors.get(root)?.();\n slide(root, aside);\n touchedDetails.add(aside);\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.delete(root);\n const snapshot = remembered.get(root);\n const followedInteraction = snapshot?.fresh ?? false;\n if (snapshot) snapshot.fresh = false;\n if (aside.hidden) {\n if (pendingTitle?.aside === aside) cancelTitle();\n if (panelStep === aside) panelStep = null;\n if (root.hasAttribute(\"data-workspace-motion\") && !reducedMotion?.matches && wide?.matches) {\n // Closing holds the detail column until the slide ends; anchor after Main widens.\n const cancel = () => {\n root.removeEventListener(\"transitionend\", onTransitionEnd);\n clearTimeout(timer);\n pendingAnchors.delete(root);\n };\n const finish = () => {\n cancel();\n if (aside.hidden && aside.isConnected) anchorItem(root, aside, snapshot);\n };\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.target === root && event.propertyName === \"--k2b-workspace-detail-track\") finish();\n };\n const timer = setTimeout(finish, 300);\n root.addEventListener(\"transitionend\", onTransitionEnd);\n pendingAnchors.set(root, cancel);\n } else anchorItem(root, aside, snapshot);\n const focused = ownerDocument.activeElement;\n if (\n snapshot?.item.isConnected &&\n (aside.contains(lastFocus.get(root) ?? null) || aside.contains(focused) || focused === ownerDocument.body)\n )\n snapshot.item.focus({ preventScroll: true });\n clearDrag(aside);\n if (detailDrag?.aside === aside) finishDetailDrag(true);\n return;\n }\n anchorItem(root, aside, snapshot);\n if (phone?.matches) setDetent(aside, false);\n if (followedInteraction && snapshot) {\n revealItem(root, aside, snapshot);\n if (snapshot.interaction === \"keyboard\" || phone?.matches) requestTitle(aside);\n }\n };\n const onDetailKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) return;\n const target = eventElement(event);\n if (!target || target.closest(KEY_OWNER_SELECTOR)) return;\n if (ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\")) return;\n try {\n if (ownerDocument.querySelector(\":popover-open\")) return;\n } catch {\n // Older engines have no popover selector; the other popup guards still apply.\n }\n const root = target.closest<HTMLElement>(ROOT_SELECTOR);\n let aside = target.closest<HTMLElement>(detailSelector);\n if (aside?.hidden || (aside && (!eventRoot.contains(aside) || aside.closest(ROOT_SELECTOR) !== root))) aside = null;\n if (!aside && root && observedRoots.has(root) && mainElement(root)?.contains(target)) aside = openDetails(root)[0] ?? null;\n if (!aside && target === ownerDocument.body) {\n const open = allRoots().flatMap(openDetails);\n if (open.length === 1) aside = open[0]!;\n }\n const owningRoot = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!aside || !owningRoot) return;\n if (event.key === \"Escape\" && closable(aside)) requestClose(aside);\n else if (\n (event.key.toLowerCase() === \"j\" || event.key.toLowerCase() === \"k\") &&\n aside.hasAttribute(\"data-workspace-detail-steppable\")\n ) {\n const main = mainElement(owningRoot);\n const inMain = remembered.get(owningRoot)?.item.contains(target) || main?.contains(target);\n const inPanel = aside.contains(target) || (target === ownerDocument.body && panelStep === aside);\n panelStep = inPanel ? aside : null;\n const previousTitle = inPanel ? titleIn(aside) : null;\n const previousText = previousTitle?.textContent;\n const detail: AppWorkspaceDetailStep = { direction: event.key.toLowerCase() === \"j\" ? 1 : -1 };\n aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_STEP_EVENT, { detail }));\n const shown = detail.item;\n const item = shown instanceof HTMLElement && main?.contains(shown) && shown.closest(ROOT_SELECTOR) === owningRoot ? shown : null;\n if (item && main) {\n const snapshot: RememberedItem = {\n item,\n cell: null,\n interaction: \"keyboard\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: false,\n };\n refreshItem(snapshot);\n remembered.set(owningRoot, snapshot);\n revealItem(owningRoot, aside, snapshot);\n }\n const title = titleIn(aside);\n if (item && inMain) item.focus({ preventScroll: true });\n // A panel that swapped its title during the event has the new one now.\n else if (item && inPanel && title && (title !== previousTitle || title.textContent !== previousText)) focusTitle(aside);\n // This key's capture cancelled an earlier step's title request, so a\n // step from the body, even past the last item, asks again.\n else if (inPanel && (item || target === ownerDocument.body)) requestTitle(aside, Boolean(item));\n } else if (event.key === \"F6\") {\n if (aside.contains(target)) {\n const item = remembered.get(owningRoot)?.item;\n const main = mainElement(owningRoot);\n (item?.isConnected ? item : main ? tabStopsIn(main)[0] : null)?.focus({ preventScroll: true });\n } else focusTitle(aside);\n } else return;\n event.preventDefault();\n };\n\n type DetailDrag = {\n aside: HTMLElement;\n source: \"pointer\" | \"sheet\" | \"drawer\";\n target: Element;\n pointerId: number;\n startX: number;\n startY: number;\n startHeight: number;\n full: boolean;\n dx: number;\n dy: number;\n time: number;\n velocity: number;\n moved: boolean;\n releaseTextSelection?: () => void;\n };\n let detailDrag: DetailDrag | null = null;\n let detailDragFrame: number | null = null;\n let suppressedClick: HTMLElement | null = null;\n let suppressedClickTimer: ReturnType<typeof setTimeout> | null = null;\n const paintDetailDrag = () => {\n detailDragFrame = null;\n const drag = detailDrag;\n if (!drag?.moved) return;\n drag.aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(drag.aside);\n if (drag.source === \"drawer\") drag.aside.style.transform = `translateX(${Math.max(0, drag.dx)}px)`;\n else {\n const height = ownerWindow.innerHeight;\n drag.aside.style.setProperty(\n \"--k2b-workspace-detail-sheet-height\",\n `${clamp(drag.startHeight - drag.dy, 0, Math.max(0, height - 8))}px`,\n );\n }\n };\n const scheduleDetailDrag = () => {\n if (detailDragFrame === null) detailDragFrame = requestAnimationFrame(paintDetailDrag);\n };\n const finishDetailDrag = (cancelled: boolean) => {\n const drag = detailDrag;\n if (!drag) return;\n detailDrag = null;\n if (detailDragFrame !== null) cancelAnimationFrame(detailDragFrame);\n detailDragFrame = null;\n drag.releaseTextSelection?.();\n if (drag.source === \"pointer\") {\n if (drag.target instanceof HTMLElement && drag.target.hasPointerCapture?.(drag.pointerId))\n drag.target.releasePointerCapture(drag.pointerId);\n if (drag.moved) {\n suppressedClick = drag.aside;\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n suppressedClickTimer = setTimeout(() => {\n suppressedClick = null;\n suppressedClickTimer = null;\n }, 0);\n }\n }\n clearDrag(drag.aside);\n if (cancelled || !drag.moved) return;\n if (drag.source === \"drawer\") {\n if (drag.dx > 80 || (drag.dx > 30 && drag.velocity > 0.5)) requestClose(drag.aside);\n } else if (drag.dy > 60) {\n setDetent(drag.aside, false);\n if (!drag.full && closable(drag.aside)) requestClose(drag.aside);\n } else if (drag.dy < -60) setDetent(drag.aside, true);\n };\n const beginDetailDrag = (aside: HTMLElement, target: Element, source: DetailDrag[\"source\"], x: number, y: number, pointerId: number) => {\n detailDrag = {\n aside,\n target,\n source,\n pointerId,\n startX: x,\n startY: y,\n startHeight: aside.getBoundingClientRect().height,\n full: aside.dataset.workspaceDetailSheet === \"full\",\n dx: 0,\n dy: 0,\n time: performance.now(),\n velocity: 0,\n moved: false,\n };\n return detailDrag;\n };\n const onSheetPointerDown = (event: Event) => {\n if (!(event instanceof PointerEvent) || !phone?.matches || event.button !== 0 || !event.isPrimary || claimedDetailGestures.has(event))\n return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n const grabber = target.closest<HTMLElement>(grabberSelector);\n if (\n !grabber &&\n (!target.closest(\".k2b-detail-panel__header\") ||\n target.closest(\"a, button, input, select, textarea, [role='button'], [contenteditable]:not([contenteditable='false'])\"))\n )\n return;\n claimedDetailGestures.add(event);\n if (detailDrag) finishDetailDrag(true);\n const drag = beginDetailDrag(aside, grabber ?? target, \"pointer\", event.clientX, event.clientY, event.pointerId);\n drag.releaseTextSelection = suppressTextSelection(event.pointerId);\n if (drag.target instanceof HTMLElement) drag.target.setPointerCapture?.(event.pointerId);\n aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(aside);\n };\n const onSheetPointerMove = (event: PointerEvent) => {\n const drag = detailDrag;\n if (!drag || drag.source !== \"pointer\" || drag.pointerId !== event.pointerId) return;\n drag.dy = event.clientY - drag.startY;\n drag.moved ||= Math.abs(drag.dy) > 4;\n if (drag.moved) scheduleDetailDrag();\n };\n const onSheetPointerEnd = (event: Event) => {\n if (!(event instanceof PointerEvent)) return;\n if (detailDrag?.source === \"pointer\" && detailDrag.pointerId === event.pointerId) finishDetailDrag(event.type !== \"pointerup\");\n };\n const onGrabberClick = (event: Event) => {\n const target = eventElement(event);\n const grabber = target?.closest(grabberSelector);\n const aside = grabber?.closest<HTMLElement>(detailSelector);\n if (!aside || aside.hidden || !phone?.matches || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (suppressedClick === aside && event instanceof MouseEvent && event.detail !== 0) {\n event.preventDefault();\n suppressedClick = null;\n return;\n }\n setDetent(aside, aside.dataset.workspaceDetailSheet !== \"full\");\n };\n const ownsTouchGesture = (target: Element, aside: HTMLElement, source: \"sheet\" | \"drawer\") => {\n for (let element: Element | null = target; element && element !== aside; element = element.parentElement) {\n if (\n element.matches(\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='slider'], [draggable='true'], canvas\",\n )\n )\n return true;\n const action = getComputedStyle(element).getPropertyValue(\"touch-action\");\n const horizontal = /\\bpan-(x|left|right)\\b/.test(action);\n const vertical = /\\bpan-(y|up|down)\\b/.test(action);\n if (action.trim() === \"none\" || (source === \"drawer\" ? vertical && !horizontal : horizontal && !vertical)) return true;\n }\n return false;\n };\n const onDetailTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent) || event.touches.length !== 1) {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(true);\n return;\n }\n if (detailDrag || claimedDetailGestures.has(event)) return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const touch = event.touches[0];\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !touch || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n if (phone?.matches && (verticalScroller(target, aside) ?? aside).scrollTop <= 0) {\n if (!ownsTouchGesture(target, aside, \"sheet\"))\n beginDetailDrag(aside, target, \"sheet\", touch.clientX, touch.clientY, touch.identifier);\n } else if (touchDrawer?.matches && closable(aside)) {\n if (!ownsTouchGesture(target, aside, \"drawer\"))\n beginDetailDrag(aside, target, \"drawer\", touch.clientX, touch.clientY, touch.identifier);\n }\n if (detailDrag) claimedDetailGestures.add(event);\n };\n const onDetailTouchMove = (event: Event) => {\n const drag = detailDrag;\n if (!(event instanceof TouchEvent) || !drag || drag.source === \"pointer\") return;\n const touch = Array.from(event.touches).find((touch) => touch.identifier === drag.pointerId);\n if (!touch || event.touches.length !== 1) {\n finishDetailDrag(true);\n return;\n }\n const dx = touch.clientX - drag.startX;\n const dy = touch.clientY - drag.startY;\n const now = performance.now();\n drag.velocity = (dx - drag.dx) / Math.max(1, now - drag.time);\n drag.time = now;\n drag.dx = dx;\n drag.dy = dy;\n if (!drag.moved) {\n if (drag.source === \"sheet\") {\n if (dy < 0 || (verticalScroller(drag.target, drag.aside) ?? drag.aside).scrollTop > 0) {\n finishDetailDrag(true);\n return;\n }\n if (dy <= 4) return;\n } else {\n if (Math.max(Math.abs(dx), Math.abs(dy)) <= 8) return;\n if (dx <= Math.abs(dy)) {\n finishDetailDrag(true);\n return;\n }\n for (let element: Element | null = drag.target; element && drag.aside.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(getComputedStyle(element).overflowX) &&\n element.scrollWidth > element.clientWidth &&\n element.scrollLeft > 0\n ) {\n finishDetailDrag(true);\n return;\n }\n if (element === drag.aside) break;\n }\n }\n drag.moved = true;\n }\n event.preventDefault();\n scheduleDetailDrag();\n };\n const onDetailTouchEnd = (event: Event) => {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(event.type === \"touchcancel\");\n };\n const onDetailDoubleClick = (event: Event) => {\n const handle = resizeHandle(event);\n const root = handle?.closest<HTMLElement>(ROOT_SELECTOR);\n if (\n !handle ||\n !root ||\n resizeKind(handle) !== \"detail\" ||\n !workspaceResizable(root) ||\n !controlsResizableRegion(root, handle, \"detail\")\n )\n return;\n const widths = { ...layoutState.detailWidths };\n delete widths[panelId(handle)];\n layoutState = { ...layoutState, detailWidths: widths };\n const variable = appWorkspacePanelVariable(\"detail\", panelId(handle));\n root.style.removeProperty(variable);\n if (getComputedStyle(root).getPropertyValue(variable).trim())\n root.style.setProperty(variable, `${numberData(handle, \"workspaceDefaultSize\", APP_WORKSPACE_DETAIL_DEFAULT)}px`);\n updateHandleValue(root, handle, \"detail\", currentSize(root, handle, \"detail\"));\n options.writeState?.(layoutState);\n };\n\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n const requested = active.startSize + (client - active.startClient) * active.direction;\n // Below half the smallest visible width a hideable sidebar stays at its\n // minimum and previews hiding; dragging back out resumes the live width.\n const hiding =\n active.kind === \"sidebar\" && sidebarHideable(active.root) && requested < sizeLimits(active.root, active.handle, active.kind).min / 2;\n if (hiding !== active.hiding) {\n active.hiding = hiding;\n previewSidebarHidden(active.root, hiding);\n }\n if (!hiding)\n active.liveSize = applySize(active.root, active.handle, active.kind, requested, { snapSidebar: active.kind !== \"sidebar\" });\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.hiding) {\n // The request comes first, while the layout is still the one on screen,\n // so the host sees the sidebar disappear in a single change. The width\n // before the drag then stays the remembered width for the next time it\n // shows; a host that declines the request gets that width back.\n sidebarElement(finished.root)?.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));\n previewSidebarHidden(finished.root, false);\n applySize(finished.root, finished.handle, \"sidebar\", finished.startSize);\n } else if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n finished.releaseTextSelection();\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n hiding: false,\n direction: resizeDirection(handle, kind),\n releaseTextSelection: suppressTextSelection(event.pointerId),\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n if (detailDrag && (detailDrag.source === \"drawer\" ? !touchDrawer?.matches : !phone?.matches)) finishDetailDrag(true);\n allRoots().forEach((root) => {\n if (!phone?.matches) {\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.dataset.workspaceDetailSheet === \"full\") setDetent(aside, false);\n }\n }\n });\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n for (const elements of [touchedDetails, titleTabIndices, motionRoots]) {\n elements.forEach((element) => {\n if (!element.isConnected) elements.delete(element);\n });\n }\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n pendingAnchors.get(root)?.();\n slides.get(root)?.();\n resizeObserver?.unobserve(root);\n const frame = motionFrames.get(root);\n if (frame !== undefined) cancelAnimationFrame(frame);\n motionFrames.delete(root);\n observedRoots.delete(root);\n }\n });\n touchMoveAsides.forEach((aside) => {\n if (aside.isConnected) return;\n aside.removeEventListener(\"touchmove\", onDetailTouchMove);\n touchMoveAsides.delete(aside);\n });\n next.forEach((root) => {\n rootElements(root, detailSelector).forEach((aside) => {\n if (!detailHidden.has(aside)) detailHidden.set(aside, Boolean(aside.hidden));\n if (touchMoveAsides.has(aside)) return;\n aside.addEventListener(\"touchmove\", onDetailTouchMove, { passive: false });\n touchMoveAsides.add(aside);\n });\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver?.observe(root);\n if (!root.hasAttribute(\"data-workspace-motion\")) {\n motionRoots.add(root);\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.delete(root);\n if (observedRoots.has(root)) root.dataset.workspaceMotion = \"true\";\n }),\n );\n }),\n );\n }\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n if (pendingTitle && (pendingTitle.aside.hidden || !pendingTitle.aside.isConnected)) cancelTitle();\n // Hiding or removing the sidebar, or its button, ends the overlay.\n if (overlay && (overlay.sidebar.hidden || !overlay.sidebar.isConnected || !overlay.toggle.isConnected)) closeOverlay(\"kept\");\n const details = new Set<HTMLElement>();\n for (const record of records) {\n if (\n record.type === \"attributes\" &&\n record.target instanceof HTMLElement &&\n record.target.matches(detailSelector) &&\n !details.has(record.target)\n ) {\n details.add(record.target);\n detailTransition(record.target, detailHidden.get(record.target) ?? record.oldValue !== null);\n }\n }\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"click\", onClick as EventListener);\n ownerDocument.addEventListener(\"keydown\", onOverlayKeyDown);\n ownerWindow.addEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.addEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"keydown\", cancelTitleOnInteraction, true);\n eventRoot.addEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.addEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.addEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.addEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.addEventListener(\"click\", onGrabberClick);\n eventRoot.addEventListener(\"dblclick\", onDetailDoubleClick);\n window.addEventListener(\"pointermove\", onSheetPointerMove);\n window.addEventListener(\"pointerup\", onSheetPointerEnd);\n window.addEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.addEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.addEventListener(\"touchstart\", onDetailTouchStart, { passive: true });\n eventRoot.addEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.addEventListener(\"touchcancel\", onDetailTouchEnd);\n compact?.addEventListener(\"change\", onCompactChange);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n cancelTitle();\n pendingAnchors.forEach((cancel) => cancel());\n slides.forEach((end) => end());\n stopScrollFades();\n finishDetailDrag(true);\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n motionFrames.forEach(cancelAnimationFrame);\n revealFrames.forEach(cancelAnimationFrame);\n motionRoots.forEach((root) => delete root.dataset.workspaceMotion);\n touchedDetails.forEach((aside) => {\n clearDrag(aside);\n delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", \"false\");\n });\n titleTabIndices.forEach((title) => title.removeAttribute(\"tabindex\"));\n ownerWindow.removeEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.removeEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"keydown\", cancelTitleOnInteraction, true);\n eventRoot.removeEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.removeEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.removeEventListener(\"click\", onGrabberClick);\n eventRoot.removeEventListener(\"dblclick\", onDetailDoubleClick);\n window.removeEventListener(\"pointermove\", onSheetPointerMove);\n window.removeEventListener(\"pointerup\", onSheetPointerEnd);\n window.removeEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"touchstart\", onDetailTouchStart);\n touchMoveAsides.forEach((aside) => aside.removeEventListener(\"touchmove\", onDetailTouchMove));\n eventRoot.removeEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.removeEventListener(\"touchcancel\", onDetailTouchEnd);\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n closeOverlay(\"none\");\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"click\", onClick as EventListener);\n ownerDocument.removeEventListener(\"keydown\", onOverlayKeyDown);\n compact?.removeEventListener(\"change\", onCompactChange);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
|