@k2b/ui 0.38.1 → 0.40.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.
Files changed (41) hide show
  1. package/dist/browser/actions/Dropdown.js +42 -6
  2. package/dist/browser/actions/Dropdown.js.map +1 -1
  3. package/dist/browser/actions/SelectionToolbar.js +11 -6
  4. package/dist/browser/actions/SelectionToolbar.js.map +1 -1
  5. package/dist/browser/actions/Toolbar.js +5 -1
  6. package/dist/browser/actions/Toolbar.js.map +1 -1
  7. package/dist/browser/actions/index.js.map +1 -1
  8. package/dist/browser/chat/ChatComposer.js +11 -2
  9. package/dist/browser/chat/ChatComposer.js.map +1 -1
  10. package/dist/browser/layout/AppWorkspace.js +31 -17
  11. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  12. package/dist/browser/layout/app-workspace-controller.js +49 -5
  13. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  14. package/dist/browser/text-editor/TextEditor.js +331 -214
  15. package/dist/browser/text-editor/TextEditor.js.map +1 -1
  16. package/dist/browser/text-editor/table.js +43 -6
  17. package/dist/browser/text-editor/table.js.map +1 -1
  18. package/dist/ssr/actions/Dropdown.js +38 -6
  19. package/dist/ssr/actions/Dropdown.js.map +1 -1
  20. package/dist/ssr/actions/SelectionToolbar.js +11 -6
  21. package/dist/ssr/actions/SelectionToolbar.js.map +1 -1
  22. package/dist/ssr/actions/Toolbar.js +5 -1
  23. package/dist/ssr/actions/Toolbar.js.map +1 -1
  24. package/dist/ssr/actions/index.js.map +1 -1
  25. package/dist/ssr/chat/ChatComposer.js +10 -2
  26. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  27. package/dist/ssr/layout/AppWorkspace.js +31 -17
  28. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  29. package/dist/ssr/layout/app-workspace-controller.js +49 -5
  30. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  31. package/dist/ssr/text-editor/TextEditor.js +225 -96
  32. package/dist/ssr/text-editor/TextEditor.js.map +1 -1
  33. package/dist/ssr/text-editor/table.js +43 -6
  34. package/dist/ssr/text-editor/table.js.map +1 -1
  35. package/dist/styles.css +1 -1
  36. package/dist/types/actions/Dropdown.d.ts +15 -1
  37. package/dist/types/actions/Toolbar.d.ts +6 -1
  38. package/dist/types/actions/index.d.ts +1 -1
  39. package/dist/types/layout/AppWorkspace.d.ts +14 -0
  40. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\nimport { prefersReducedMotion } from \"../motion\";\nimport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\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 { readAppWorkspaceWidth, resolveAppWorkspaceWidth } from \"./app-workspace-width\";\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\",\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]\";\nconst DETAIL_TOGGLE_SELECTOR = \"[data-app-workspace-detail-toggle]\";\nconst DETAIL_DRAWER_SELECTOR = '.k2b-app-workspace__detail[data-workspace-detail-drawer=\"open\"]';\nconst cssState = (element: HTMLElement, name: string) => getComputedStyle(element).getPropertyValue(name).trim();\nconst detailWaiting = (aside: HTMLElement) => cssState(aside, \"--k2b-workspace-detail-waiting\") === \"1\";\nconst detailDrawer = (aside: HTMLElement) => aside.dataset.workspaceDetailDrawer === \"open\";\nconst detailToggle = (aside: HTMLElement) => {\n const root = workspaceRoot(aside);\n return rootElements(root ?? aside, DETAIL_TOGGLE_SELECTOR).find((toggle) => toggle.getAttribute(\"aria-controls\") === aside.id);\n};\n// The trail's registered property accepts a length, not the drawer's percentage\n// cap. Only a user-opened drawer needs this measurement; the first frame stays CSS-owned.\nconst detailDrawerContent = (aside: HTMLElement) => aside.closest<HTMLElement>(\".k2b-app-workspace__content\");\nconst syncDetailDrawerSpace = (aside: HTMLElement) =>\n detailDrawerContent(aside)?.style.setProperty(\"--k2b-detail-space\", `${aside.getBoundingClientRect().width}px`);\nconst parkDetailDrawer = (aside: HTMLElement, focus = false) => {\n if (!detailDrawer(aside)) return;\n delete aside.dataset.workspaceDetailDrawer;\n detailDrawerContent(aside)?.style.removeProperty(\"--k2b-detail-space\");\n const toggle = detailToggle(aside);\n toggle?.setAttribute(\"aria-expanded\", \"false\");\n if (focus) detailReturnControl(aside)?.focus({ preventScroll: true });\n};\n\n/** Parks open waiting-detail drawers; focus follows only when it was inside one. */\nexport const parkWorkspaceDetailDrawers = (root: ParentNode = document): void => {\n for (const aside of root.querySelectorAll<HTMLElement>(DETAIL_DRAWER_SELECTOR))\n parkDetailDrawer(aside, aside.contains(aside.ownerDocument.activeElement));\n};\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 ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\n/** Controls inside a selected row that act on their own instead of choosing the row. */\nconst NESTED_CONTROL_SELECTOR =\n \"[aria-expanded], [aria-haspopup]:not([aria-haspopup='false']), [aria-pressed], [role='checkbox'], [role='switch'], [role='menuitem'], input, select, textarea, summary\";\nconst DETAIL_REQUEST_CONTROL_SELECTOR = \"[aria-pressed], [aria-expanded], [aria-controls]\";\nconst SELECTION_MARK_SELECTOR =\n '[aria-selected=\"true\"], [aria-current]:not([aria-current=\"false\"]):not([aria-current=\"date\"]):not([aria-current=\"time\"]), [data-selected=\"true\"]';\n// Calendar day marks select a date range, not the Detail's subject.\nconst IGNORED_SELECTION_MARK_SELECTOR = \"[data-calendar-day-key]\";\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 sidebarForm = (root: HTMLElement) => cssState(sidebarElement(root) ?? root, \"--k2b-workspace-sidebar-form\");\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 Detail to reopen its current available object. */\nexport const APP_WORKSPACE_DETAIL_OPEN_EVENT = \"k2b-app-workspace-detail-open\";\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\");\n// A pane-bound head can be absent on a phone. The visible control in Main\n// that names this same detail remains its return target, within the same root.\nconst detailReturnControl = (aside: HTMLElement) => {\n const root = workspaceRoot(aside);\n if (!root) return undefined;\n const shared = detailToggle(aside);\n if (isVisible(shared ?? null) && shared && !shared.matches(\":disabled\")) return shared;\n return rootElements(root, DETAIL_REQUEST_CONTROL_SELECTOR).find(\n (control) =>\n control.matches(FOCUSABLE_SELECTOR) &&\n !aside.contains(control) &&\n !control.matches(\":disabled, [inert]\") &&\n !control.closest(\"[inert]\") &&\n control.getAttribute(\"aria-controls\")?.split(/\\s+/).includes(aside.id) &&\n control.getClientRects().length > 0,\n );\n};\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 flexibleLevel = (pane: HTMLElement) => {\n if (!pane.hasAttribute(\"data-workspace-level\")) return false;\n const root = workspaceRoot(pane);\n const widthClass = root ? cssState(root, \"--k2b-workspace-level-class\") : \"\";\n return Boolean(widthClass && pane.dataset.workspaceLevelLast?.split(\" \").includes(widthClass));\n};\n/** How much more than Main's default minimum the filling last level declares, such as a wide list. */\nconst flexibleLevelExtra = (main: HTMLElement | null) => {\n const level = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\":scope > [data-workspace-level]\")).find(\n (pane) => flexibleLevel(pane) && isVisible(pane),\n )\n : undefined;\n const minimum = level ? Number.parseFloat(getComputedStyle(level).getPropertyValue(\"--k2b-workspace-level-min\")) : Number.NaN;\n return Number.isFinite(minimum) ? Math.max(0, minimum - APP_WORKSPACE_MAIN_MIN) : 0;\n};\nconst levelsMain = (handle: HTMLElement) => handle.closest(\".k2b-app-workspace__main\")?.hasAttribute(\"data-workspace-levels\") ?? false;\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const panel = kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle);\n return (\n panel?.dataset.workspaceResizable === \"true\" &&\n (!panel.hasAttribute(\"data-workspace-level\") || (isVisible(panel) && isVisible(handle) && !flexibleLevel(panel)))\n );\n};\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, reserveMainMinimum = true) => {\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) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n !flexibleLevel(pane) &&\n isVisible(pane),\n )\n : [];\n const separatorSize =\n kind === \"pane\" && main\n ? Array.from(main.querySelectorAll<HTMLElement>(`.k2b-app-workspace__resize${HANDLE_SELECTOR}`))\n .filter(\n (separator) =>\n separator.closest(\".k2b-app-workspace__main\") === main && resizeKind(separator) === \"pane\" && isVisible(separator),\n )\n .reduce((total, separator) => {\n const style = getComputedStyle(separator);\n return (\n total +\n Math.max(\n 0,\n separator.getBoundingClientRect().width +\n (Number.parseFloat(style.marginLeft) || 0) +\n (Number.parseFloat(style.marginRight) || 0),\n )\n );\n }, 0)\n : 0;\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 const mainSpec = readAppWorkspaceWidth(mainElement(root)?.dataset.workspaceMainMin);\n const mainMinValue = cssState(root, \"--k2b-workspace-main-min\");\n const mainMin =\n typeof mainSpec === \"object\"\n ? resolveAppWorkspaceWidth(mainSpec, root.getBoundingClientRect().width)\n : mainMinValue.endsWith(\"px\")\n ? Number.parseFloat(mainMinValue)\n : APP_WORKSPACE_MAIN_MIN;\n const mainExtra = Math.max(0, (Number.isFinite(mainMin) ? mainMin : APP_WORKSPACE_MAIN_MIN) - APP_WORKSPACE_MAIN_MIN);\n const limits = 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 : kind === \"sidebar\"\n ? root.getBoundingClientRect().width - 2 * root.clientLeft\n : root.getBoundingClientRect().width,\n // Interactive sizing keeps Main's declared minimum beside the sidebar and the Detail.\n reservedSize:\n kind === \"sidebar\" && reserveMainMinimum\n ? mainExtra\n : kind === \"detail\"\n ? 8 + (reserveMainMinimum ? mainExtra : 0)\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0) +\n separatorSize +\n flexibleLevelExtra(main)\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n // Widths are applied as whole pixels; rounding up must not cross the fit boundary.\n return kind === \"sidebar\" ? { min: limits.min, max: Math.max(limits.min, Math.floor(limits.max)) } : limits;\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 applyRegionSize = (\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; reserveMainMinimum?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind, options.reserveMainMinimum);\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 // A restored width may require an overlay; the handle still advertises interactive limits.\n updateHandleValue(root, handle, kind, sidebar.width);\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 cssDefault: boolean;\n requested: number;\n configuredMin: 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 if (main.hasAttribute(\"data-workspace-levels\")) {\n // CSS owns the multi-level fit, including a flexible shown-last pane.\n // Keep preferences intact when the window temporarily has less room.\n for (const handle of handles) {\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 = active?.moved && active.handle === handle ? active.liveSize : layoutState.paneWidths?.[panelId(handle)];\n if (preferred !== undefined)\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), `${clamp(preferred, min, max)}px`);\n updateHandleValue(root, handle, \"pane\", currentSize(root, handle, \"pane\"));\n }\n return;\n }\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 spec = readAppWorkspaceWidth(handle.dataset.workspaceDefaultSize) ?? elementSize(panel, \"pane\");\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : layoutState.paneWidths?.[panelId(handle)];\n const cssDefault = preferred === undefined && typeof spec !== \"number\";\n if (cssDefault && root.style.getPropertyValue(appWorkspacePanelVariable(\"pane\", panelId(handle))))\n // Drop a previous live width (or an inherited SSR preference after reset).\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), \"initial\");\n // CSS has already applied this default and the pane-fit clamp, including\n // subpixels. Reserve exactly that box when fitting other preferences;\n // measuring must not turn a responsive default into a stored px width.\n const requested = preferred ?? resolveAppWorkspaceWidth(spec, root.getBoundingClientRect().width);\n const desired = cssDefault ? elementSize(panel, \"pane\") : clamp(requested, min, max);\n return [{ desired, handle, min: cssDefault ? desired : min, cssDefault, requested: clamp(requested, min, max), configuredMin: min }];\n });\n if (!fits.length) return;\n\n const budget = main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN - flexibleLevelExtra(main);\n // Each share default clamps only against Main, not its resizable or non-resizable siblings. When panes\n // together leave Main's primary region less than its minimum, fit them like stored widths, allowing subpixels.\n if (fits.reduce((total, fit) => total + fit.desired, 0) > budget + 0.5)\n for (const fit of fits) if (fit.cssDefault) Object.assign(fit, { cssDefault: false, desired: fit.requested, min: fit.configuredMin });\n const sizes = fitAppWorkspacePaneSizes(fits, budget);\n fits.forEach((fit, index) => {\n // Defaults stay CSS-owned; fit only saved or live preferences around them.\n if (!fit.cssDefault) 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\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 overlay sidebar opens over the work area when its column does not fit\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 // 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 detailButton = target?.closest<HTMLElement>(DETAIL_TOGGLE_SELECTOR);\n if (detailButton) {\n const root = workspaceRoot(detailButton);\n const aside = root ? controlledPanel(root, detailButton) : null;\n if (!aside || detailButton.matches(\":disabled\") || claimedToggleClicks.has(event)) return;\n const reopenable = aside.dataset.workspaceDetailReopen === \"true\";\n if (!reopenable && (aside.hidden || !detailWaiting(aside))) return;\n claimedToggleClicks.add(event);\n if (aside.hidden) {\n aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_OPEN_EVENT));\n // The app may reject opening (for example while navigating). Never\n // override hidden ourselves or reveal retained, unavailable contents.\n if (aside.hidden) return;\n if (wide?.matches && detailWaiting(aside)) openDetailDrawer(aside);\n if (event.detail === 0 || phone?.matches) requestTitle(aside);\n else detailButton.focus({ preventScroll: true });\n } else if (reopenable && (!wide?.matches || !detailWaiting(aside))) requestClose(aside);\n else if (detailDrawer(aside)) parkDetailDrawer(aside);\n else {\n openDetailDrawer(aside);\n if (event.detail === 0) requestTitle(aside);\n else detailButton.focus({ preventScroll: true });\n }\n syncDetailRequestControls();\n return;\n }\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 (sidebarForm(next.root) === \"overlay\") 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 (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 (overlay && event.key === \"Escape\" && (overlay.sidebar.contains(target) || target === ownerDocument.body)) {\n event.preventDefault();\n closeOverlay(\"button\");\n return;\n }\n const aside = target.closest<HTMLElement>(detailSelector);\n const panel =\n overlay?.sidebar ?? (phone?.matches && aside && !aside.hidden && phonePage(aside) && eventRoot.contains(aside) ? aside : null);\n if (event.key !== \"Tab\") return;\n if (!panel) {\n // Focus outside an open phone page, on the body after a load or on chrome the page covers, enters the page.\n // Dialogs and popovers keep their own Tab order.\n const page = phone?.matches ? allRoots().flatMap(openDetails).find(phonePage) : undefined;\n if (!page || ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\") || target.closest(\"[popover]\")) return;\n if (target !== ownerDocument.body) {\n const rect = target.getBoundingClientRect();\n const hit = ownerDocument.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);\n if (hit && target.contains(hit)) return;\n }\n const stops = tabStopsIn(page);\n event.preventDefault();\n (event.shiftKey ? stops.at(-1) : stops[0])?.focus();\n return;\n }\n if (!panel.contains(target)) return;\n const stops = tabStopsIn(panel);\n const first = stops[0];\n const last = stops.at(-1);\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n // Focus can also rest on an element that is no tab stop, such as a title focused as the panel opened.\n const active = document.activeElement;\n const before = (element: Element | null, other: Element | null) =>\n Boolean(element && other && element.compareDocumentPosition(other) & Node.DOCUMENT_POSITION_FOLLOWING);\n if (event.shiftKey && !stops.some((stop) => before(stop, active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && !stops.some((stop) => before(active, stop))) {\n event.preventDefault();\n first.focus();\n }\n };\n // Whether each open detail waited at the last check, so a column that starts\n // waiting under focus hands that focus to its Details button.\n const detailWasWaiting = new WeakMap<HTMLElement, boolean>();\n const detailRequestExpanded = new Map<HTMLElement, { aside: HTMLElement; rendered: string | null; written: string }>();\n const restoreDetailRequestExpanded = (control: HTMLElement, state: { aside: HTMLElement; rendered: string | null; written: string }) => {\n // A newer application render already owns the current value.\n if (control.getAttribute(\"aria-expanded\") !== state.written) return;\n if (state.rendered === null) control.removeAttribute(\"aria-expanded\");\n else control.setAttribute(\"aria-expanded\", state.aside.hidden || !state.aside.isConnected ? \"false\" : state.rendered);\n };\n const requestedWaitingDetail = (control: HTMLElement) => {\n if (!wide?.matches || control.matches(DETAIL_TOGGLE_SELECTOR) || !eventRoot.contains(control)) return null;\n const root = workspaceRoot(control);\n const region = control.closest(\".k2b-app-workspace__main, .k2b-app-workspace__detail\");\n if (!root || !region || region.closest(ROOT_SELECTOR) !== root) return null;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n return rootElements(root, detailSelector).find((aside) => !aside.hidden && ids?.includes(aside.id) && detailWaiting(aside)) ?? null;\n };\n const syncDetailRequestControls = () => {\n for (const root of allRoots()) {\n for (const aside of rootElements(root, detailSelector)) {\n const toggle = detailToggle(aside);\n if (toggle?.dataset.workspaceDetailReopen !== \"true\") continue;\n const expanded = !aside.hidden && (!wide?.matches || !detailWaiting(aside) || detailDrawer(aside));\n const value = String(expanded);\n if (toggle.getAttribute(\"aria-expanded\") !== value) toggle.setAttribute(\"aria-expanded\", value);\n }\n }\n const waitingControls = new Map<HTMLElement, HTMLElement>();\n for (const root of allRoots()) {\n const waitingDetails = wide?.matches\n ? rootElements(root, detailSelector).filter((aside) => !aside.hidden && detailWaiting(aside))\n : [];\n if (!waitingDetails.length) continue;\n // Only a control that names a Detail can request it.\n for (const control of rootElements(root, \"[aria-controls]\")) {\n if (control.matches(DETAIL_TOGGLE_SELECTOR) || !eventRoot.contains(control)) continue;\n const region = control.closest(\".k2b-app-workspace__main, .k2b-app-workspace__detail\");\n if (!region || region.closest(ROOT_SELECTOR) !== root) continue;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n const aside = waitingDetails.find((aside) => ids?.includes(aside.id));\n if (aside) waitingControls.set(control, aside);\n }\n }\n detailRequestExpanded.forEach((state, control) => {\n if (waitingControls.has(control)) return;\n restoreDetailRequestExpanded(control, state);\n detailRequestExpanded.delete(control);\n });\n waitingControls.forEach((aside, control) => {\n const current = control.getAttribute(\"aria-expanded\");\n const state = detailRequestExpanded.get(control);\n const written = String(detailDrawer(aside));\n // Keep the application's latest value to restore when waiting ends.\n const rendered = !state || current !== state.written ? current : state.rendered;\n detailRequestExpanded.set(control, { aside, rendered, written });\n if (current !== written) control.setAttribute(\"aria-expanded\", written);\n });\n };\n const onDetailRequestClick = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;\n const control = eventElement(event)?.closest<HTMLElement>(DETAIL_REQUEST_CONTROL_SELECTOR);\n const aside = control ? requestedWaitingDetail(control) : null;\n if (!control || !aside) return;\n // The application keeps its Detail open; only its waiting drawer changes.\n event.preventDefault();\n event.stopImmediatePropagation();\n cancelPendingDetail();\n cancelTitle();\n clearActivation();\n // A control inside the drawer leaves with it, so focus goes to Details.\n if (detailDrawer(aside)) parkDetailDrawer(aside, aside.contains(ownerDocument.activeElement));\n else {\n openDetailDrawer(aside);\n if (event.detail === 0) requestTitle(aside);\n else control.focus({ preventScroll: true });\n }\n syncDetailRequestControls();\n };\n const openDetailDrawer = (aside: HTMLElement) => {\n aside.dataset.workspaceDetailDrawer = \"open\";\n detailToggle(aside)?.setAttribute(\"aria-expanded\", \"true\");\n syncDetailDrawerSpace(aside);\n syncDetailRequestControls();\n };\n // A sidebar drag changes the room beside it without resizing the workspace,\n // so it rechecks waiting once per frame.\n let hostSyncFrame: number | null = null;\n const scheduleHostSync = () => {\n if (hostSyncFrame !== null) return;\n hostSyncFrame = requestAnimationFrame(() => {\n hostSyncFrame = null;\n syncHostState();\n });\n };\n const applySize = (...args: Parameters<typeof applyRegionSize>) => {\n const size = applyRegionSize(...args);\n if (args[2] === \"sidebar\") scheduleHostSync();\n return size;\n };\n // A responsive application control and the shared control can name the same\n // Detail. Remember actual focus, not an old selection, before CSS hides it.\n let detailControlFocus: { control: HTMLElement; aside: HTMLElement; root: HTMLElement } | null = null;\n const controlledDetail = (control: HTMLElement) => {\n if (!control.matches(FOCUSABLE_SELECTOR) || control.matches(HANDLE_SELECTOR) || !eventRoot.contains(control)) return null;\n const root = workspaceRoot(control);\n if (!root) return null;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n const aside = rootElements(root, detailSelector).find((aside) => ids?.includes(aside.id));\n return aside ? { control, aside, root } : null;\n };\n const detailControlVisible = (control: HTMLElement) =>\n control.isConnected && control.getClientRects().length > 0 && getComputedStyle(control).visibility === \"visible\";\n const detailControlUsable = (control: HTMLElement) =>\n detailControlVisible(control) &&\n !control.matches(\":disabled, [aria-disabled='true']\") &&\n !control.closest(\"[inert], [hidden], [aria-hidden='true']\");\n const onDetailControlFocusOut = () => {\n // Explicit blur of a visible control is not a responsive focus loss.\n if (detailControlFocus && detailControlVisible(detailControlFocus.control)) detailControlFocus = null;\n };\n const rescueDetailControlFocus = () => {\n const previous = detailControlFocus;\n if (!previous) return;\n const { control, aside, root } = previous;\n const active = ownerDocument.activeElement;\n if (\n !control.isConnected ||\n !aside.isConnected ||\n workspaceRoot(control) !== root ||\n workspaceRoot(aside) !== root ||\n (active !== ownerDocument.body && !control.contains(active))\n ) {\n detailControlFocus = null;\n return;\n }\n const shared = detailToggle(aside);\n if (\n shared?.dataset.workspaceDetailReopen === \"true\" &&\n phone?.matches &&\n phonePage(aside) &&\n !aside.hidden &&\n !aside.contains(control)\n ) {\n // WebKit can update matchMedia after resize has already focused the now\n // visible application control. Move into the page before Main becomes inert.\n detailControlFocus = null;\n requestTitle(aside);\n return;\n }\n if (detailControlVisible(control)) return;\n detailControlFocus = null;\n if (shared?.dataset.workspaceDetailReopen !== \"true\") {\n // Selection-only details keep their existing returning-column title target.\n if (control === shared && !aside.hidden && !detailWaiting(aside)) requestTitle(aside);\n return;\n }\n const candidates = shared ? [shared, ...rootElements(root, \"[aria-controls]\")] : rootElements(root, \"[aria-controls]\");\n const replacement = candidates.find(\n (candidate) => candidate !== control && detailControlUsable(candidate) && controlledDetail(candidate)?.aside === aside,\n );\n replacement?.focus({ preventScroll: true });\n };\n const syncHostState = () => {\n rescueDetailControlFocus();\n if (pendingDetail && !canOpenPendingDetail(pendingDetail.aside)) cancelPendingDetail();\n if (overlay && sidebarForm(overlay.root) !== \"overlay\") closeOverlay(\"none\");\n for (const root of allRoots()) {\n // A drawer removed with its panel leaves no space behind in Content.\n for (const content of rootElements(root, \".k2b-app-workspace__content\"))\n if (content.style.getPropertyValue(\"--k2b-detail-space\") && !content.querySelector(DETAIL_DRAWER_SELECTOR))\n content.style.removeProperty(\"--k2b-detail-space\");\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.hidden) {\n detailWasWaiting.delete(aside);\n parkDetailDrawer(aside);\n continue;\n }\n const waiting = detailWaiting(aside);\n const before = detailWasWaiting.get(aside);\n detailWasWaiting.set(aside, waiting);\n if (!waiting) {\n // Rescue focus only when the legacy waiting-only button disappears.\n // A persistent head control stays a valid focus target after resizing.\n const toggle = detailToggle(aside);\n const toggleFocused = toggle?.contains(ownerDocument.activeElement) ?? false;\n parkDetailDrawer(aside);\n if (toggle && toggleFocused && !isVisible(toggle)) focusTitle(aside);\n } else if (detailDrawer(aside)) syncDetailDrawerSpace(aside);\n else if (before !== true && aside.contains(ownerDocument.activeElement)) detailReturnControl(aside)?.focus({ preventScroll: true });\n }\n }\n syncDetailRequestControls();\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 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 /** Pointer, Enter/Space, or assistive activation chose an item outside text entry. */\n chosen: 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 // Native Enter/Space clicks and pointer clicks continue their initiating event.\n let activationItem: HTMLElement | null = null;\n let activationFrame: number | null = null;\n const clearActivation = () => {\n if (activationFrame !== null) cancelAnimationFrame(activationFrame);\n activationFrame = null;\n activationItem = null;\n };\n const endActivation = () => {\n if (!activationItem) return;\n // Space's native click follows keyup before the next frame.\n if (activationFrame !== null) cancelAnimationFrame(activationFrame);\n activationFrame = requestAnimationFrame(clearActivation);\n };\n const cancelActivation = () => {\n // A cancelled gesture must not open a Detail that appears later.\n if (lastChosen?.interaction === \"pointer\" && lastChosen.item === activationItem) {\n lastChosen.chosen = false;\n lastChosen = null;\n }\n clearActivation();\n };\n const onChoiceClick = (event: MouseEvent) => {\n const preceded = event.target instanceof Node && Boolean(activationItem?.contains(event.target));\n clearActivation();\n if (event.detail === 0 && !preceded) {\n cancelTitleOnInteraction(event);\n rememberInteraction(event);\n } else if (!(event.target instanceof Node && lastChosen?.item.contains(event.target))) cancelTitleOnInteraction(event);\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 // Collection rows with a roving tab index are items too, though no tab stops.\n const item = target.closest<HTMLElement>(`${FOCUSABLE_SELECTOR}, [tabindex]`);\n if (!main || !item || item === main || !main.contains(item) || item.closest(ROOT_SELECTOR) !== root) return;\n if (event instanceof KeyboardEvent && event.key !== \"Enter\" && event.key !== \" \") return;\n if (event.type === \"pointerdown\" || event.type === \"keydown\") activationItem = item;\n const assistive = event instanceof MouseEvent && event.type === \"click\" && event.detail === 0 && event.button === 0;\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 || assistive ? \"keyboard\" : \"pointer\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: true,\n // Text entry and focus alone do not choose an item.\n // A modified activation, such as Ctrl/Cmd-click opening a new tab, chooses nothing here.\n chosen:\n ((event instanceof PointerEvent && event.type === \"pointerdown\" && event.button === 0) ||\n event instanceof KeyboardEvent ||\n assistive) &&\n !(event instanceof MouseEvent || event instanceof KeyboardEvent\n ? event.ctrlKey || event.metaKey || event.shiftKey || event.altKey\n : false) &&\n // Space scrolls on native links; it does not activate them.\n !(\n event instanceof KeyboardEvent &&\n event.key === \" \" &&\n item.matches(\"a[href], area[href]\") &&\n (!item.hasAttribute(\"role\") || item.getAttribute(\"role\") === \"link\")\n ) &&\n !target.closest(KEY_OWNER_SELECTOR) &&\n !item.closest(\"[role='tab'], [role='tablist']\"),\n };\n refreshItem(snapshot);\n remembered.set(root, snapshot);\n if (snapshot.chosen) lastChosen = snapshot;\n if (snapshot.chosen) {\n const aside = openDetails(root).find(canOpenPendingDetail);\n if (aside) checkPendingDetail(root, aside, snapshot, event instanceof KeyboardEvent && event.key === \" \");\n }\n // Enter in an editor or a field types; only an item that chooses something moves on to its title.\n if (snapshot.chosen && snapshot.interaction === \"keyboard\") {\n const aside = openDetails(root).find((aside) => isVisible(aside) && (!detailWaiting(aside) || detailDrawer(aside)));\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 control = target.closest<HTMLElement>(\"[aria-controls]\");\n detailControlFocus = control ? controlledDetail(control) : null;\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 // The last choice in Main, until another interaction replaces it: a Detail\n // that opens later than that does not take the drawer or the focus.\n let lastChosen: RememberedItem | null = null;\n const cancelTitleOnInteraction = (event: Event) => {\n if (detailControlFocus && !(event.target instanceof Node && detailControlFocus.control.contains(event.target)))\n detailControlFocus = null;\n if (event.type === \"pointerdown\" || event.type === \"keydown\") clearActivation();\n if (lastChosen && !(event.target instanceof Node && lastChosen.item.contains(event.target))) {\n lastChosen.chosen = false;\n lastChosen = null;\n }\n if (\n pendingDetail &&\n // Native pointer focus on the chosen item continues its activation.\n !(event.type === \"focusin\" && event.target instanceof Node && pendingDetail.snapshot.item.contains(event.target))\n )\n cancelPendingDetail();\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 phonePage = (aside: HTMLElement) => aside.dataset.workspaceDetailPhone === \"page\";\n const setDetent = (aside: HTMLElement, full: boolean) => {\n if (phonePage(aside)) return;\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 || detailDrawer(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 // A moving Detail would cross a framed workspace's edge, so the workspace\n // clips while it slides (see the stylesheet).\n const slide = (root: HTMLElement, aside: HTMLElement) => {\n slides.get(root)?.();\n if (!root.hasAttribute(\"data-workspace-motion\") || prefersReducedMotion() || !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 if (phone?.matches && phonePage(aside)) return;\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 = prefersReducedMotion() ? \"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 let pendingDetail: { aside: HTMLElement; snapshot: RememberedItem; stop: () => void } | null = null;\n const canOpenPendingDetail = (aside: HTMLElement) =>\n aside.isConnected &&\n eventRoot.contains(aside) &&\n !aside.hidden &&\n detailWaiting(aside) &&\n !detailDrawer(aside) &&\n aside.dataset.workspaceDetailChoice !== \"request\";\n const cancelPendingDetail = () => {\n pendingDetail?.stop();\n pendingDetail = null;\n };\n // Check a completed choice after two frames. If its selection mark arrives\n // later, keep waiting until another interaction replaces the choice.\n const checkPendingDetail = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem, space = false) => {\n cancelPendingDetail();\n let frame: number | null = null;\n let observer: MutationObserver | null = null;\n const settle = () => {\n ownerDocument.removeEventListener(\"click\", onClick, true);\n ownerDocument.removeEventListener(\"keyup\", onKeyUp, true);\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n frame = requestAnimationFrame(() => {\n frame = null;\n const main = mainElement(root);\n if (\n !canOpenPendingDetail(aside) ||\n !snapshot.chosen ||\n !snapshot.item.isConnected ||\n !main?.contains(snapshot.item) ||\n snapshot.item.closest(ROOT_SELECTOR) !== root\n ) {\n cancelPendingDetail();\n return;\n }\n // ARIA marks, and `data-selected` as DataTable and Calendar mark their selection.\n let selected = snapshot.item.closest(SELECTION_MARK_SELECTOR);\n while (selected?.matches(IGNORED_SELECTION_MARK_SELECTOR))\n selected = selected.parentElement?.closest(SELECTION_MARK_SELECTOR) ?? null;\n if (!selected || selected === main || !main.contains(selected)) {\n if (!observer) {\n observer = new MutationObserver(settle);\n observer.observe(main, {\n subtree: true,\n attributes: true,\n attributeFilter: [\"aria-selected\", \"aria-current\", \"data-selected\"],\n });\n }\n return;\n }\n cancelPendingDetail();\n // A control inside a selected row that discloses, toggles, or opens\n // a menu does its own job and selects nothing.\n if (selected !== snapshot.item && snapshot.item.matches(NESTED_CONTROL_SELECTOR)) return;\n snapshot.fresh = false;\n openDetailDrawer(aside);\n revealItem(root, aside, snapshot);\n // The same item keeps its title; another one may still be loading,\n // so focus follows the title that replaces the current one.\n if (snapshot.interaction === \"keyboard\") {\n focusTitle(aside);\n requestTitle(aside, true);\n }\n });\n });\n };\n const onClick = (event: MouseEvent) => {\n if (event.button === 0 && event.target instanceof Node && snapshot.item.contains(event.target)) settle();\n else cancelPendingDetail();\n };\n // Space activates a button on release, so its check waits for keyup.\n const onKeyUp = (event: KeyboardEvent) => {\n if (event.key === \" \") settle();\n };\n const stop = () => {\n if (frame !== null) cancelAnimationFrame(frame);\n observer?.disconnect();\n ownerDocument.removeEventListener(\"click\", onClick, true);\n ownerDocument.removeEventListener(\"keyup\", onKeyUp, true);\n ownerDocument.removeEventListener(\"pointercancel\", cancelPendingDetail, true);\n };\n pendingDetail = { aside, snapshot, stop };\n ownerDocument.addEventListener(\"pointercancel\", cancelPendingDetail, true);\n if (space) ownerDocument.addEventListener(\"keyup\", onKeyUp, true);\n else if (snapshot.interaction === \"keyboard\") settle();\n else ownerDocument.addEventListener(\"click\", onClick, true);\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 (pendingDetail?.aside === aside) cancelPendingDetail();\n parkDetailDrawer(aside);\n if (pendingTitle?.aside === aside) cancelTitle();\n if (panelStep === aside) panelStep = null;\n if (root.hasAttribute(\"data-workspace-motion\") && !prefersReducedMotion() && 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 const toggle = detailToggle(aside);\n const returnControl = detailReturnControl(aside);\n if (\n toggle?.dataset.workspaceDetailReopen === \"true\" &&\n returnControl &&\n (aside.contains(focused) || (focused === ownerDocument.body && aside.contains(lastFocus.get(root) ?? null)))\n ) {\n returnControl.focus({ preventScroll: true });\n } else 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 if (detailWaiting(aside) && !detailDrawer(aside)) {\n if (!followedInteraction || !snapshot?.chosen) return;\n if (aside.dataset.workspaceDetailChoice === \"request\" && !snapshot.item.matches(DETAIL_REQUEST_CONTROL_SELECTOR)) return;\n openDetailDrawer(aside);\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 // Passive hints and tooltips do not own J/K or F6. Keep Escape with an undismissed tooltip.\n if (event.key === \"Escape\" && ownerDocument.querySelector(\"[role='tooltip']:popover-open\")) return;\n if (ownerDocument.querySelector(\":popover-open:not(.k2b-moved-hint):not([role='tooltip'])\")) 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) || target.closest(DETAIL_TOGGLE_SELECTOR)))\n aside = openDetails(root).find(isVisible) ?? null;\n if (!aside && target === ownerDocument.body) {\n const open = allRoots().flatMap(openDetails).filter(isVisible);\n if (open.length === 1) aside = open[0]!;\n }\n const owningRoot = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!aside || !owningRoot || !isVisible(aside)) return;\n if (event.key === \"Escape\" && detailDrawer(aside)) {\n parkDetailDrawer(aside, true);\n syncDetailRequestControls();\n event.preventDefault();\n return;\n }\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 chosen: 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))\n parkDetailDrawer(drag.aside, drag.aside.contains(ownerDocument.activeElement));\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 if (phonePage(aside)) 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 || phonePage(aside) || !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 && phonePage(aside)) 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 (wide?.matches && detailDrawer(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 onPanelDoubleClick = (event: Event) => {\n const handle = resizeHandle(event);\n const root = handle?.closest<HTMLElement>(ROOT_SELECTOR);\n const kind = handle ? resizeKind(handle) : null;\n if (!handle || !root || !kind || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n if (active) return;\n if (kind === \"sidebar\") {\n const { sidebarWidth: _width, sidebarCollapsed: _collapsed, ...remaining } = layoutState;\n layoutState = remaining;\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"drawer\" ? \"drawerHeights\" : \"detailWidths\";\n const widths = { ...layoutState[key] };\n delete widths[panelId(handle)];\n layoutState = { ...layoutState, [key]: widths };\n }\n const regions = resetRegions.get(root) ?? new Map<string, ResetRegion>();\n regions.set(resizeVariable(handle, kind), {\n kind,\n id: panelId(handle),\n configuration: handle,\n });\n resetRegions.set(root, regions);\n writeState();\n if (kind === \"sidebar\" || kind === \"pane\") reconcilePanes(root, layoutState);\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n };\n\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n type ResetRegion = {\n kind: AppWorkspaceResizeKind;\n id: string;\n configuration: HTMLElement;\n };\n const resetRegions = new WeakMap<HTMLElement, Map<string, ResetRegion>>();\n const resizeVariable = (handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? \"--k2b-workspace-sidebar-width\" : appWorkspacePanelVariable(kind, panelId(handle));\n const defaultSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n readAppWorkspaceWidth(handle.dataset.workspaceDefaultSize) ??\n (kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_DEFAULT\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_DEFAULT\n : kind === \"drawer\"\n ? APP_WORKSPACE_DRAWER_DEFAULT\n : APP_WORKSPACE_DETAIL_DEFAULT);\n const restoreResetDefaults = (root: HTMLElement) => {\n for (const [variable, region] of resetRegions.get(root) ?? []) {\n const { kind, id } = region;\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarWidth\n : layoutState[kind === \"pane\" ? \"paneWidths\" : kind === \"drawer\" ? \"drawerHeights\" : \"detailWidths\"]?.[id];\n if (persisted !== undefined || (kind === \"sidebar\" && layoutState.sidebarCollapsed)) continue;\n const handle = rootElements(root, HANDLE_SELECTOR).find((handle) => resizeKind(handle) === kind && panelId(handle) === id);\n // Keep the latest handle's configuration across unmounts. Limits still\n // measure today's workspace, so a missing handle cannot freeze its fit.\n if (handle) region.configuration = handle;\n const spec = defaultSize(region.configuration, kind);\n // Store the configured default, not a temporary fit. CSS/relayout owns\n // the available space, so a numeric level can grow back when room returns.\n if (typeof spec === \"number\") {\n // Sidebar and drawer have no CSS fit. Keep their configured default\n // in the map, but render within today's bounds and recover it later.\n if (kind === \"sidebar\" || kind === \"drawer\") {\n const { min, max } = sizeLimits(root, region.configuration, kind);\n root.style.setProperty(variable, `${clamp(spec, min, max)}px`);\n } else root.style.setProperty(variable, `${spec}px`);\n } else {\n root.style.removeProperty(variable);\n if (getComputedStyle(root).getPropertyValue(variable).trim()) root.style.setProperty(variable, \"initial\");\n }\n if (kind === \"sidebar\") delete root.dataset.sidebarCollapsed;\n }\n };\n const writeState = () => {\n options.writeState?.(layoutState);\n // Keep reset defaults through reactive writes and temporary handle unmounts,\n // without saving a width that would mask a changed application default.\n for (const root of roots()) {\n if (!workspaceResizable(root)) continue;\n restoreResetDefaults(root);\n reconcilePanes(root, layoutState);\n }\n };\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 const root = workspaceRoot(handle);\n if (root) resetRegions.get(root)?.delete(resizeVariable(handle, kind));\n writeState();\n };\n\n // A level resize starts from what is on screen. When the stored widths do\n // not fit beside the flexible level, CSS shrinks the resizable levels (a\n // level without a separator does not shrink), so a step from a shrunk width\n // would land on a preference that shrinks again and jump. The visible\n // resizable levels therefore take their rendered widths as preferences when\n // a step really moves; then they fit, and the step moves exactly by its\n // size. All widths are measured before any is written, because each write\n // reflows the others.\n const settleLevels = (root: HTMLElement, handle: HTMLElement) => {\n const main = handle.closest<HTMLElement>(\".k2b-app-workspace__main\");\n if (!main?.hasAttribute(\"data-workspace-levels\")) return;\n const widths = Array.from(main.querySelectorAll<HTMLElement>(HANDLE_SELECTOR))\n .filter((other) => other.closest(\".k2b-app-workspace__main\") === main && resizeKind(other) === \"pane\")\n .flatMap((other) => {\n const panel = controlledPanel(root, other);\n return isVisible(panel) && !flexibleLevel(panel) && panel.dataset.workspaceResizable === \"true\"\n ? [{ id: panelId(other), width: Math.round(elementSize(panel, \"pane\")) }]\n : [];\n });\n for (const { id, width } of widths) {\n if (layoutState.paneWidths?.[id] === width) continue;\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", id), `${width}px`);\n layoutState = { ...layoutState, paneWidths: { ...layoutState.paneWidths, [id]: width } };\n }\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 const requested = active.startSize + (client - active.startClient) * active.direction;\n // A press without movement, or a drag that the limits stop, changes no\n // level preference, also not a sibling's.\n if (!active.moved && client !== active.startClient && active.kind === \"pane\" && levelsMain(active.handle)) {\n const { min, max } = sizeLimits(active.root, active.handle, \"pane\");\n if (clamp(requested, min, max) === Math.round(currentSize(active.root, active.handle, \"pane\"))) return;\n settleLevels(active.root, active.handle);\n }\n active.moved ||= client !== active.startClient;\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 if (\n event.key === \"Enter\" &&\n !event.defaultPrevented &&\n !event.isComposing &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !active\n ) {\n event.preventDefault();\n onPanelDoubleClick(event);\n return;\n }\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 if (kind === \"pane\" && levelsMain(handle)) {\n // A step that the limits stop changes no preference, also not a sibling's.\n if (clamp(requested, min, max) === Math.round(current)) return;\n settleLevels(root, handle);\n }\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 // Remember only attributes we own; application-set inert survives every transition.\n const phonePageInerted = new Set<HTMLElement>();\n const syncPhonePages = () => {\n const regions = new Set<HTMLElement>();\n if (phone?.matches) {\n for (const root of allRoots()) {\n if (!root.isConnected) continue;\n for (const aside of openDetails(root).filter(phonePage)) {\n for (let node: HTMLElement | null = aside; node && node !== root; node = node.parentElement) {\n const parent: HTMLElement | null = node.parentElement;\n if (parent) overlayRegions(parent, aside).forEach((region) => regions.add(region));\n }\n }\n }\n }\n phonePageInerted.forEach((region) => {\n if (regions.has(region)) return;\n region.removeAttribute(\"inert\");\n phonePageInerted.delete(region);\n });\n regions.forEach((region) => {\n if (region.hasAttribute(\"inert\")) return;\n region.setAttribute(\"inert\", \"\");\n phonePageInerted.add(region);\n });\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\" ? !wide?.matches || !detailDrawer(detailDrag.aside) : !phone?.matches))\n 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 restoreResetDefaults(root);\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, { reserveMainMinimum: false });\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 };\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 = () => {\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n // Reconciling can restore a drawer's persisted width; its trail space follows.\n for (const root of allRoots()) for (const aside of rootElements(root, DETAIL_DRAWER_SELECTOR)) syncDetailDrawerSpace(aside);\n });\n };\n const onResize = () => {\n syncHostState();\n scheduleReconcile();\n };\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n syncHostState();\n scheduleReconcile();\n });\n // A host can change its width while a workspace with a fixed width keeps\n // its own, so the controller also watches each root's nearest named host.\n const observedHosts = new Set<Element>();\n // Found once per root: reading styles on every mutation would cost a style pass.\n const rootHosts = new WeakMap<HTMLElement, Element | null>();\n const hostOf = (root: HTMLElement) => {\n if (rootHosts.has(root)) return rootHosts.get(root)!;\n let host: Element | null = null;\n for (let element = root.parentElement; element && !host; element = element.parentElement)\n if (getComputedStyle(element).containerName.split(/\\s+/).includes(\"k2b-app-area\")) host = element;\n rootHosts.set(root, host);\n return host;\n };\n const syncObservedRoots = () => {\n const hosts = new Set(\n allRoots()\n .map(hostOf)\n .filter((host): host is Element => host !== null),\n );\n observedHosts.forEach((host) => {\n if (hosts.has(host)) return;\n resizeObserver?.unobserve(host);\n observedHosts.delete(host);\n });\n hosts.forEach((host) => {\n if (observedHosts.has(host)) return;\n observedHosts.add(host);\n resizeObserver?.observe(host);\n });\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 (\n records.some(\n (record) =>\n record.type === \"childList\" ||\n [\"hidden\", \"aria-controls\", \"aria-expanded\", \"data-workspace-detail-drawer\"].includes(record.attributeName ?? \"\"),\n )\n )\n syncDetailRequestControls();\n syncPhonePages();\n if (pendingTitle && (pendingTitle.aside.hidden || !pendingTitle.aside.isConnected)) cancelTitle();\n if (\n pendingDetail &&\n (!canOpenPendingDetail(pendingDetail.aside) || !pendingDetail.snapshot.chosen || !pendingDetail.snapshot.item.isConnected)\n )\n cancelPendingDetail();\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.attributeName === \"hidden\" &&\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 // A new width token or a removed panel can end waiting without any box resizing.\n if (\n records.some(\n (record) =>\n record.type === \"childList\" || record.attributeName === \"data-width\" || record.attributeName === \"data-workspace-main-min\",\n )\n )\n syncHostState();\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(\"focusout\", onDetailControlFocusOut, true);\n ownerDocument.addEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"keydown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"click\", onDetailRequestClick, true);\n ownerDocument.addEventListener(\"click\", onChoiceClick, true);\n ownerDocument.addEventListener(\"keyup\", endActivation, true);\n ownerDocument.addEventListener(\"pointerup\", endActivation, true);\n ownerDocument.addEventListener(\"pointercancel\", cancelActivation, 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\", onPanelDoubleClick);\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 phone?.addEventListener(\"change\", syncHostState);\n phone?.addEventListener(\"change\", syncPhonePages);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncPhonePages();\n syncObservedRoots();\n syncDetailRequestControls();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [\n \"hidden\",\n \"aria-controls\",\n \"aria-expanded\",\n \"data-workspace-detail-drawer\",\n \"data-workspace-level-shown\",\n \"data-width\",\n \"data-workspace-main-min\",\n \"data-workspace-default-size\",\n ],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n phonePageInerted.forEach((region) => region.removeAttribute(\"inert\"));\n phonePageInerted.clear();\n phone?.removeEventListener(\"change\", syncPhonePages);\n cancelTitle();\n cancelPendingDetail();\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(\"focusout\", onDetailControlFocusOut, true);\n detailControlFocus = null;\n ownerDocument.removeEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"keydown\", cancelTitleOnInteraction, true);\n clearActivation();\n ownerDocument.removeEventListener(\"click\", onChoiceClick, true);\n ownerDocument.removeEventListener(\"keyup\", endActivation, true);\n ownerDocument.removeEventListener(\"pointerup\", endActivation, true);\n ownerDocument.removeEventListener(\"pointercancel\", cancelActivation, 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\", onPanelDoubleClick);\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 if (hostSyncFrame !== null) cancelAnimationFrame(hostSyncFrame);\n mutationObserver?.disconnect();\n detailRequestExpanded.forEach((state, control) => restoreDetailRequestExpanded(control, state));\n detailRequestExpanded.clear();\n ownerDocument.removeEventListener(\"click\", onDetailRequestClick, true);\n resizeObserver?.disconnect();\n observedRoots.clear();\n observedHosts.clear();\n closeOverlay(\"none\");\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"click\", onClick as EventListener);\n ownerDocument.removeEventListener(\"keydown\", onOverlayKeyDown);\n phone?.removeEventListener(\"change\", syncHostState);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn 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 { prefersReducedMotion } from \"../motion\";\nimport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\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 { readAppWorkspaceWidth, resolveAppWorkspaceWidth } from \"./app-workspace-width\";\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\",\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]\";\nconst DETAIL_TOGGLE_SELECTOR = \"[data-app-workspace-detail-toggle]\";\nconst DETAIL_DRAWER_SELECTOR = '.k2b-app-workspace__detail[data-workspace-detail-drawer=\"open\"]';\nconst cssState = (element: HTMLElement, name: string) => getComputedStyle(element).getPropertyValue(name).trim();\nconst detailWaiting = (aside: HTMLElement) => cssState(aside, \"--k2b-workspace-detail-waiting\") === \"1\";\nconst detailDrawer = (aside: HTMLElement) => aside.dataset.workspaceDetailDrawer === \"open\";\nconst detailToggle = (aside: HTMLElement) => {\n const root = workspaceRoot(aside);\n return rootElements(root ?? aside, DETAIL_TOGGLE_SELECTOR).find((toggle) => toggle.getAttribute(\"aria-controls\") === aside.id);\n};\n// The trail's registered property accepts a length, not the drawer's percentage\n// cap. Only a user-opened drawer needs this measurement; the first frame stays CSS-owned.\nconst detailDrawerContent = (aside: HTMLElement) => aside.closest<HTMLElement>(\".k2b-app-workspace__content\");\nconst syncDetailDrawerSpace = (aside: HTMLElement) =>\n detailDrawerContent(aside)?.style.setProperty(\"--k2b-detail-space\", `${aside.getBoundingClientRect().width}px`);\nconst parkDetailDrawer = (aside: HTMLElement, focus = false) => {\n if (!detailDrawer(aside)) return;\n delete aside.dataset.workspaceDetailDrawer;\n detailDrawerContent(aside)?.style.removeProperty(\"--k2b-detail-space\");\n const toggle = detailToggle(aside);\n toggle?.setAttribute(\"aria-expanded\", \"false\");\n if (focus) detailReturnControl(aside)?.focus({ preventScroll: true });\n};\n\n/** Parks open waiting-detail drawers; focus follows only when it was inside one. */\nexport const parkWorkspaceDetailDrawers = (root: ParentNode = document): void => {\n for (const aside of root.querySelectorAll<HTMLElement>(DETAIL_DRAWER_SELECTOR))\n parkDetailDrawer(aside, aside.contains(aside.ownerDocument.activeElement));\n};\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 ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\n/** Controls inside a selected row that act on their own instead of choosing the row. */\nconst NESTED_CONTROL_SELECTOR =\n \"[aria-expanded], [aria-haspopup]:not([aria-haspopup='false']), [aria-pressed], [role='checkbox'], [role='switch'], [role='menuitem'], input, select, textarea, summary\";\nconst DETAIL_REQUEST_CONTROL_SELECTOR = \"[aria-pressed], [aria-expanded], [aria-controls]\";\nconst SELECTION_MARK_SELECTOR =\n '[aria-selected=\"true\"], [aria-current]:not([aria-current=\"false\"]):not([aria-current=\"date\"]):not([aria-current=\"time\"]), [data-selected=\"true\"]';\n// Calendar day marks select a date range, not the Detail's subject.\nconst IGNORED_SELECTION_MARK_SELECTOR = \"[data-calendar-day-key]\";\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 sidebarForm = (root: HTMLElement) => cssState(sidebarElement(root) ?? root, \"--k2b-workspace-sidebar-form\");\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.Sidebar` to show again; its `onHiddenChange` decides. */\nexport const APP_WORKSPACE_SIDEBAR_SHOW_EVENT = \"k2b-app-workspace-sidebar-show\";\n/** Asks the owning Detail to reopen its current available object. */\nexport const APP_WORKSPACE_DETAIL_OPEN_EVENT = \"k2b-app-workspace-detail-open\";\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\");\n// A pane-bound head can be absent on a phone. The visible control in Main\n// that names this same detail remains its return target, within the same root.\nconst detailReturnControl = (aside: HTMLElement) => {\n const root = workspaceRoot(aside);\n if (!root) return undefined;\n const shared = detailToggle(aside);\n if (isVisible(shared ?? null) && shared && !shared.matches(\":disabled\")) return shared;\n return rootElements(root, DETAIL_REQUEST_CONTROL_SELECTOR).find(\n (control) =>\n control.matches(FOCUSABLE_SELECTOR) &&\n !aside.contains(control) &&\n !control.matches(\":disabled, [inert]\") &&\n !control.closest(\"[inert]\") &&\n control.getAttribute(\"aria-controls\")?.split(/\\s+/).includes(aside.id) &&\n control.getClientRects().length > 0,\n );\n};\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 flexibleLevel = (pane: HTMLElement) => {\n if (!pane.hasAttribute(\"data-workspace-level\")) return false;\n const root = workspaceRoot(pane);\n const widthClass = root ? cssState(root, \"--k2b-workspace-level-class\") : \"\";\n return Boolean(widthClass && pane.dataset.workspaceLevelLast?.split(\" \").includes(widthClass));\n};\n/** How much more than Main's default minimum the filling last level declares, such as a wide list. */\nconst flexibleLevelExtra = (main: HTMLElement | null) => {\n const level = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\":scope > [data-workspace-level]\")).find(\n (pane) => flexibleLevel(pane) && isVisible(pane),\n )\n : undefined;\n const minimum = level ? Number.parseFloat(getComputedStyle(level).getPropertyValue(\"--k2b-workspace-level-min\")) : Number.NaN;\n return Number.isFinite(minimum) ? Math.max(0, minimum - APP_WORKSPACE_MAIN_MIN) : 0;\n};\nconst levelsMain = (handle: HTMLElement) => handle.closest(\".k2b-app-workspace__main\")?.hasAttribute(\"data-workspace-levels\") ?? false;\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const panel = kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle);\n return (\n panel?.dataset.workspaceResizable === \"true\" &&\n (!panel.hasAttribute(\"data-workspace-level\") || (isVisible(panel) && isVisible(handle) && !flexibleLevel(panel)))\n );\n};\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, reserveMainMinimum = true) => {\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) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n !flexibleLevel(pane) &&\n isVisible(pane),\n )\n : [];\n const separatorSize =\n kind === \"pane\" && main\n ? Array.from(main.querySelectorAll<HTMLElement>(`.k2b-app-workspace__resize${HANDLE_SELECTOR}`))\n .filter(\n (separator) =>\n separator.closest(\".k2b-app-workspace__main\") === main && resizeKind(separator) === \"pane\" && isVisible(separator),\n )\n .reduce((total, separator) => {\n const style = getComputedStyle(separator);\n return (\n total +\n Math.max(\n 0,\n separator.getBoundingClientRect().width +\n (Number.parseFloat(style.marginLeft) || 0) +\n (Number.parseFloat(style.marginRight) || 0),\n )\n );\n }, 0)\n : 0;\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 const mainSpec = readAppWorkspaceWidth(mainElement(root)?.dataset.workspaceMainMin);\n const mainMinValue = cssState(root, \"--k2b-workspace-main-min\");\n const mainMin =\n typeof mainSpec === \"object\"\n ? resolveAppWorkspaceWidth(mainSpec, root.getBoundingClientRect().width)\n : mainMinValue.endsWith(\"px\")\n ? Number.parseFloat(mainMinValue)\n : APP_WORKSPACE_MAIN_MIN;\n const mainExtra = Math.max(0, (Number.isFinite(mainMin) ? mainMin : APP_WORKSPACE_MAIN_MIN) - APP_WORKSPACE_MAIN_MIN);\n const limits = 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 : kind === \"sidebar\"\n ? root.getBoundingClientRect().width - 2 * root.clientLeft\n : root.getBoundingClientRect().width,\n // Interactive sizing keeps Main's declared minimum beside the sidebar and the Detail.\n reservedSize:\n kind === \"sidebar\" && reserveMainMinimum\n ? mainExtra\n : kind === \"detail\"\n ? 8 + (reserveMainMinimum ? mainExtra : 0)\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0) +\n separatorSize +\n flexibleLevelExtra(main)\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n // Widths are applied as whole pixels; rounding up must not cross the fit boundary.\n return kind === \"sidebar\" ? { min: limits.min, max: Math.max(limits.min, Math.floor(limits.max)) } : limits;\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 applyRegionSize = (\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; reserveMainMinimum?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind, options.reserveMainMinimum);\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 // A restored width may require an overlay; the handle still advertises interactive limits.\n updateHandleValue(root, handle, kind, sidebar.width);\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 cssDefault: boolean;\n requested: number;\n configuredMin: 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 if (main.hasAttribute(\"data-workspace-levels\")) {\n // CSS owns the multi-level fit, including a flexible shown-last pane.\n // Keep preferences intact when the window temporarily has less room.\n for (const handle of handles) {\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 = active?.moved && active.handle === handle ? active.liveSize : layoutState.paneWidths?.[panelId(handle)];\n if (preferred !== undefined)\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), `${clamp(preferred, min, max)}px`);\n updateHandleValue(root, handle, \"pane\", currentSize(root, handle, \"pane\"));\n }\n return;\n }\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 spec = readAppWorkspaceWidth(handle.dataset.workspaceDefaultSize) ?? elementSize(panel, \"pane\");\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : layoutState.paneWidths?.[panelId(handle)];\n const cssDefault = preferred === undefined && typeof spec !== \"number\";\n if (cssDefault && root.style.getPropertyValue(appWorkspacePanelVariable(\"pane\", panelId(handle))))\n // Drop a previous live width (or an inherited SSR preference after reset).\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), \"initial\");\n // CSS has already applied this default and the pane-fit clamp, including\n // subpixels. Reserve exactly that box when fitting other preferences;\n // measuring must not turn a responsive default into a stored px width.\n const requested = preferred ?? resolveAppWorkspaceWidth(spec, root.getBoundingClientRect().width);\n const desired = cssDefault ? elementSize(panel, \"pane\") : clamp(requested, min, max);\n return [{ desired, handle, min: cssDefault ? desired : min, cssDefault, requested: clamp(requested, min, max), configuredMin: min }];\n });\n if (!fits.length) return;\n\n const budget = main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN - flexibleLevelExtra(main);\n // Each share default clamps only against Main, not its resizable or non-resizable siblings. When panes\n // together leave Main's primary region less than its minimum, fit them like stored widths, allowing subpixels.\n if (fits.reduce((total, fit) => total + fit.desired, 0) > budget + 0.5)\n for (const fit of fits) if (fit.cssDefault) Object.assign(fit, { cssDefault: false, desired: fit.requested, min: fit.configuredMin });\n const sizes = fitAppWorkspacePaneSizes(fits, budget);\n fits.forEach((fit, index) => {\n // Defaults stay CSS-owned; fit only saved or live preferences around them.\n if (!fit.cssDefault) 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\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 overlay sidebar opens over the work area when its column does not fit\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\n/**\n * A sidebar button tells whether its sidebar shows: as an open overlay where the sidebar is one, otherwise as a\n * column that is not hidden.\n */\nconst sidebarShown = (root: HTMLElement, sidebar: HTMLElement) =>\n sidebarForm(root) === \"overlay\" ? root.dataset.sidebarOverlay === \"open\" : !sidebar.hidden;\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 // 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 /** Every sidebar button, the workspace head's and an application's own, states whether its sidebar shows. */\n const syncSidebarToggles = () => {\n for (const toggle of eventRoot.querySelectorAll<HTMLElement>(TOGGLE_SELECTOR)) {\n const root = workspaceRoot(toggle);\n const sidebar = root ? sidebarElement(root) : null;\n if (!root || !sidebar) continue;\n // The head's button only opens the overlay; an application's button also shows and hides the column.\n const expanded = String(\n toggle.closest(\".k2b-app-workspace__head\") ? root.dataset.sidebarOverlay === \"open\" : sidebarShown(root, sidebar),\n );\n if (toggle.getAttribute(\"aria-expanded\") !== expanded) toggle.setAttribute(\"aria-expanded\", expanded);\n }\n };\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 syncSidebarToggles();\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 // Escape, the scrim or a chosen destination also close it: every sidebar button of the workspace says so.\n syncSidebarToggles();\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 detailButton = target?.closest<HTMLElement>(DETAIL_TOGGLE_SELECTOR);\n if (detailButton) {\n const root = workspaceRoot(detailButton);\n const aside = root ? controlledPanel(root, detailButton) : null;\n if (!aside || detailButton.matches(\":disabled\") || claimedToggleClicks.has(event)) return;\n const reopenable = aside.dataset.workspaceDetailReopen === \"true\";\n if (!reopenable && (aside.hidden || !detailWaiting(aside))) return;\n claimedToggleClicks.add(event);\n if (aside.hidden) {\n aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_OPEN_EVENT));\n // The app may reject opening (for example while navigating). Never\n // override hidden ourselves or reveal retained, unavailable contents.\n if (aside.hidden) return;\n if (wide?.matches && detailWaiting(aside)) openDetailDrawer(aside);\n if (event.detail === 0 || phone?.matches) requestTitle(aside);\n else detailButton.focus({ preventScroll: true });\n } else if (reopenable && (!wide?.matches || !detailWaiting(aside))) requestClose(aside);\n else if (detailDrawer(aside)) parkDetailDrawer(aside);\n else {\n openDetailDrawer(aside);\n if (event.detail === 0) requestTitle(aside);\n else detailButton.focus({ preventScroll: true });\n }\n syncDetailRequestControls();\n return;\n }\n const toggle = target?.closest<HTMLElement>(TOGGLE_SELECTOR);\n if (toggle) {\n if (claimedToggleClicks.has(event)) return;\n const root = workspaceRoot(toggle);\n const sidebar = root ? sidebarElement(root) : null;\n // A sidebar the person hid comes back first; where it is an overlay, it then opens.\n if (root && sidebar?.hidden && sidebarHideable(root)) {\n claimedToggleClicks.add(event);\n sidebar.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_SHOW_EVENT));\n ownerWindow.requestAnimationFrame(() => {\n const next = !sidebar.hidden && sidebarForm(root) === \"overlay\" ? overlayTarget(toggle) : null;\n if (next) openOverlay(next);\n syncSidebarToggles();\n });\n return;\n }\n const next = overlayTarget(toggle);\n if (!next) return;\n claimedToggleClicks.add(event);\n if (overlay?.sidebar === next.sidebar) closeOverlay(\"button\");\n else if (sidebarForm(next.root) === \"overlay\") openOverlay(next);\n // A column: an application's own button hides a sidebar it lets people hide.\n else if (sidebarHideable(next.root)) next.sidebar.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));\n syncSidebarToggles();\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 (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 (overlay && event.key === \"Escape\" && (overlay.sidebar.contains(target) || target === ownerDocument.body)) {\n event.preventDefault();\n closeOverlay(\"button\");\n return;\n }\n const aside = target.closest<HTMLElement>(detailSelector);\n const panel =\n overlay?.sidebar ?? (phone?.matches && aside && !aside.hidden && phonePage(aside) && eventRoot.contains(aside) ? aside : null);\n if (event.key !== \"Tab\") return;\n if (!panel) {\n // Focus outside an open phone page, on the body after a load or on chrome the page covers, enters the page.\n // Dialogs and popovers keep their own Tab order.\n const page = phone?.matches ? allRoots().flatMap(openDetails).find(phonePage) : undefined;\n if (!page || ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\") || target.closest(\"[popover]\")) return;\n if (target !== ownerDocument.body) {\n const rect = target.getBoundingClientRect();\n const hit = ownerDocument.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);\n if (hit && target.contains(hit)) return;\n }\n const stops = tabStopsIn(page);\n event.preventDefault();\n (event.shiftKey ? stops.at(-1) : stops[0])?.focus();\n return;\n }\n if (!panel.contains(target)) return;\n const stops = tabStopsIn(panel);\n const first = stops[0];\n const last = stops.at(-1);\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n // Focus can also rest on an element that is no tab stop, such as a title focused as the panel opened.\n const active = document.activeElement;\n const before = (element: Element | null, other: Element | null) =>\n Boolean(element && other && element.compareDocumentPosition(other) & Node.DOCUMENT_POSITION_FOLLOWING);\n if (event.shiftKey && !stops.some((stop) => before(stop, active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && !stops.some((stop) => before(active, stop))) {\n event.preventDefault();\n first.focus();\n }\n };\n // Whether each open detail waited at the last check, so a column that starts\n // waiting under focus hands that focus to its Details button.\n const detailWasWaiting = new WeakMap<HTMLElement, boolean>();\n const detailRequestExpanded = new Map<HTMLElement, { aside: HTMLElement; rendered: string | null; written: string }>();\n const restoreDetailRequestExpanded = (control: HTMLElement, state: { aside: HTMLElement; rendered: string | null; written: string }) => {\n // A newer application render already owns the current value.\n if (control.getAttribute(\"aria-expanded\") !== state.written) return;\n if (state.rendered === null) control.removeAttribute(\"aria-expanded\");\n else control.setAttribute(\"aria-expanded\", state.aside.hidden || !state.aside.isConnected ? \"false\" : state.rendered);\n };\n const requestedWaitingDetail = (control: HTMLElement) => {\n if (!wide?.matches || control.matches(DETAIL_TOGGLE_SELECTOR) || !eventRoot.contains(control)) return null;\n const root = workspaceRoot(control);\n const region = control.closest(\".k2b-app-workspace__main, .k2b-app-workspace__detail\");\n if (!root || !region || region.closest(ROOT_SELECTOR) !== root) return null;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n return rootElements(root, detailSelector).find((aside) => !aside.hidden && ids?.includes(aside.id) && detailWaiting(aside)) ?? null;\n };\n const syncDetailRequestControls = () => {\n for (const root of allRoots()) {\n for (const aside of rootElements(root, detailSelector)) {\n const toggle = detailToggle(aside);\n // The panel decides whether it reopens; its button may be the workspace's own or an application's.\n if (!toggle || aside.dataset.workspaceDetailReopen !== \"true\") continue;\n const expanded = !aside.hidden && (!wide?.matches || !detailWaiting(aside) || detailDrawer(aside));\n const value = String(expanded);\n if (toggle.getAttribute(\"aria-expanded\") !== value) toggle.setAttribute(\"aria-expanded\", value);\n }\n }\n const waitingControls = new Map<HTMLElement, HTMLElement>();\n for (const root of allRoots()) {\n const waitingDetails = wide?.matches\n ? rootElements(root, detailSelector).filter((aside) => !aside.hidden && detailWaiting(aside))\n : [];\n if (!waitingDetails.length) continue;\n // Only a control that names a Detail can request it.\n for (const control of rootElements(root, \"[aria-controls]\")) {\n if (control.matches(DETAIL_TOGGLE_SELECTOR) || !eventRoot.contains(control)) continue;\n const region = control.closest(\".k2b-app-workspace__main, .k2b-app-workspace__detail\");\n if (!region || region.closest(ROOT_SELECTOR) !== root) continue;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n const aside = waitingDetails.find((aside) => ids?.includes(aside.id));\n if (aside) waitingControls.set(control, aside);\n }\n }\n detailRequestExpanded.forEach((state, control) => {\n if (waitingControls.has(control)) return;\n restoreDetailRequestExpanded(control, state);\n detailRequestExpanded.delete(control);\n });\n waitingControls.forEach((aside, control) => {\n const current = control.getAttribute(\"aria-expanded\");\n const state = detailRequestExpanded.get(control);\n const written = String(detailDrawer(aside));\n // Keep the application's latest value to restore when waiting ends.\n const rendered = !state || current !== state.written ? current : state.rendered;\n detailRequestExpanded.set(control, { aside, rendered, written });\n if (current !== written) control.setAttribute(\"aria-expanded\", written);\n });\n };\n const onDetailRequestClick = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;\n const control = eventElement(event)?.closest<HTMLElement>(DETAIL_REQUEST_CONTROL_SELECTOR);\n const aside = control ? requestedWaitingDetail(control) : null;\n if (!control || !aside) return;\n // The application keeps its Detail open; only its waiting drawer changes.\n event.preventDefault();\n event.stopImmediatePropagation();\n cancelPendingDetail();\n cancelTitle();\n clearActivation();\n // A control inside the drawer leaves with it, so focus goes to Details.\n if (detailDrawer(aside)) parkDetailDrawer(aside, aside.contains(ownerDocument.activeElement));\n else {\n openDetailDrawer(aside);\n if (event.detail === 0) requestTitle(aside);\n else control.focus({ preventScroll: true });\n }\n syncDetailRequestControls();\n };\n const openDetailDrawer = (aside: HTMLElement) => {\n aside.dataset.workspaceDetailDrawer = \"open\";\n detailToggle(aside)?.setAttribute(\"aria-expanded\", \"true\");\n syncDetailDrawerSpace(aside);\n syncDetailRequestControls();\n };\n // A sidebar drag changes the room beside it without resizing the workspace,\n // so it rechecks waiting once per frame.\n let hostSyncFrame: number | null = null;\n const scheduleHostSync = () => {\n if (hostSyncFrame !== null) return;\n hostSyncFrame = requestAnimationFrame(() => {\n hostSyncFrame = null;\n syncHostState();\n });\n };\n const applySize = (...args: Parameters<typeof applyRegionSize>) => {\n const size = applyRegionSize(...args);\n if (args[2] === \"sidebar\") scheduleHostSync();\n return size;\n };\n // A responsive application control and the shared control can name the same\n // Detail. Remember actual focus, not an old selection, before CSS hides it.\n let detailControlFocus: { control: HTMLElement; aside: HTMLElement; root: HTMLElement } | null = null;\n const controlledDetail = (control: HTMLElement) => {\n if (!control.matches(FOCUSABLE_SELECTOR) || control.matches(HANDLE_SELECTOR) || !eventRoot.contains(control)) return null;\n const root = workspaceRoot(control);\n if (!root) return null;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n const aside = rootElements(root, detailSelector).find((aside) => ids?.includes(aside.id));\n return aside ? { control, aside, root } : null;\n };\n const detailControlVisible = (control: HTMLElement) =>\n control.isConnected && control.getClientRects().length > 0 && getComputedStyle(control).visibility === \"visible\";\n const detailControlUsable = (control: HTMLElement) =>\n detailControlVisible(control) &&\n !control.matches(\":disabled, [aria-disabled='true']\") &&\n !control.closest(\"[inert], [hidden], [aria-hidden='true']\");\n const onDetailControlFocusOut = () => {\n // Explicit blur of a visible control is not a responsive focus loss.\n if (detailControlFocus && detailControlVisible(detailControlFocus.control)) detailControlFocus = null;\n };\n const rescueDetailControlFocus = () => {\n const previous = detailControlFocus;\n if (!previous) return;\n const { control, aside, root } = previous;\n const active = ownerDocument.activeElement;\n if (\n !control.isConnected ||\n !aside.isConnected ||\n workspaceRoot(control) !== root ||\n workspaceRoot(aside) !== root ||\n (active !== ownerDocument.body && !control.contains(active))\n ) {\n detailControlFocus = null;\n return;\n }\n const shared = detailToggle(aside);\n if (\n shared &&\n aside.dataset.workspaceDetailReopen === \"true\" &&\n phone?.matches &&\n phonePage(aside) &&\n !aside.hidden &&\n !aside.contains(control)\n ) {\n // WebKit can update matchMedia after resize has already focused the now\n // visible application control. Move into the page before Main becomes inert.\n detailControlFocus = null;\n requestTitle(aside);\n return;\n }\n if (detailControlVisible(control)) return;\n detailControlFocus = null;\n if (!shared || aside.dataset.workspaceDetailReopen !== \"true\") {\n // Selection-only details keep their existing returning-column title target.\n if (control === shared && !aside.hidden && !detailWaiting(aside)) requestTitle(aside);\n return;\n }\n const candidates = shared ? [shared, ...rootElements(root, \"[aria-controls]\")] : rootElements(root, \"[aria-controls]\");\n const replacement = candidates.find(\n (candidate) => candidate !== control && detailControlUsable(candidate) && controlledDetail(candidate)?.aside === aside,\n );\n replacement?.focus({ preventScroll: true });\n };\n const syncHostState = () => {\n syncSidebarToggles();\n rescueDetailControlFocus();\n if (pendingDetail && !canOpenPendingDetail(pendingDetail.aside)) cancelPendingDetail();\n if (overlay && sidebarForm(overlay.root) !== \"overlay\") closeOverlay(\"none\");\n for (const root of allRoots()) {\n // A drawer removed with its panel leaves no space behind in Content.\n for (const content of rootElements(root, \".k2b-app-workspace__content\"))\n if (content.style.getPropertyValue(\"--k2b-detail-space\") && !content.querySelector(DETAIL_DRAWER_SELECTOR))\n content.style.removeProperty(\"--k2b-detail-space\");\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.hidden) {\n detailWasWaiting.delete(aside);\n parkDetailDrawer(aside);\n continue;\n }\n const waiting = detailWaiting(aside);\n const before = detailWasWaiting.get(aside);\n detailWasWaiting.set(aside, waiting);\n if (!waiting) {\n // Rescue focus only when the legacy waiting-only button disappears.\n // A persistent head control stays a valid focus target after resizing.\n const toggle = detailToggle(aside);\n const toggleFocused = toggle?.contains(ownerDocument.activeElement) ?? false;\n parkDetailDrawer(aside);\n if (toggle && toggleFocused && !isVisible(toggle)) focusTitle(aside);\n } else if (detailDrawer(aside)) syncDetailDrawerSpace(aside);\n else if (before !== true && aside.contains(ownerDocument.activeElement)) detailReturnControl(aside)?.focus({ preventScroll: true });\n }\n }\n syncDetailRequestControls();\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 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 /** Pointer, Enter/Space, or assistive activation chose an item outside text entry. */\n chosen: 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 // Native Enter/Space clicks and pointer clicks continue their initiating event.\n let activationItem: HTMLElement | null = null;\n let activationFrame: number | null = null;\n const clearActivation = () => {\n if (activationFrame !== null) cancelAnimationFrame(activationFrame);\n activationFrame = null;\n activationItem = null;\n };\n const endActivation = () => {\n if (!activationItem) return;\n // Space's native click follows keyup before the next frame.\n if (activationFrame !== null) cancelAnimationFrame(activationFrame);\n activationFrame = requestAnimationFrame(clearActivation);\n };\n const cancelActivation = () => {\n // A cancelled gesture must not open a Detail that appears later.\n if (lastChosen?.interaction === \"pointer\" && lastChosen.item === activationItem) {\n lastChosen.chosen = false;\n lastChosen = null;\n }\n clearActivation();\n };\n const onChoiceClick = (event: MouseEvent) => {\n const preceded = event.target instanceof Node && Boolean(activationItem?.contains(event.target));\n clearActivation();\n if (event.detail === 0 && !preceded) {\n cancelTitleOnInteraction(event);\n rememberInteraction(event);\n } else if (!(event.target instanceof Node && lastChosen?.item.contains(event.target))) cancelTitleOnInteraction(event);\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 // Collection rows with a roving tab index are items too, though no tab stops.\n const item = target.closest<HTMLElement>(`${FOCUSABLE_SELECTOR}, [tabindex]`);\n if (!main || !item || item === main || !main.contains(item) || item.closest(ROOT_SELECTOR) !== root) return;\n if (event instanceof KeyboardEvent && event.key !== \"Enter\" && event.key !== \" \") return;\n if (event.type === \"pointerdown\" || event.type === \"keydown\") activationItem = item;\n const assistive = event instanceof MouseEvent && event.type === \"click\" && event.detail === 0 && event.button === 0;\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 || assistive ? \"keyboard\" : \"pointer\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: true,\n // Text entry and focus alone do not choose an item.\n // A modified activation, such as Ctrl/Cmd-click opening a new tab, chooses nothing here.\n chosen:\n ((event instanceof PointerEvent && event.type === \"pointerdown\" && event.button === 0) ||\n event instanceof KeyboardEvent ||\n assistive) &&\n !(event instanceof MouseEvent || event instanceof KeyboardEvent\n ? event.ctrlKey || event.metaKey || event.shiftKey || event.altKey\n : false) &&\n // Space scrolls on native links; it does not activate them.\n !(\n event instanceof KeyboardEvent &&\n event.key === \" \" &&\n item.matches(\"a[href], area[href]\") &&\n (!item.hasAttribute(\"role\") || item.getAttribute(\"role\") === \"link\")\n ) &&\n !target.closest(KEY_OWNER_SELECTOR) &&\n !item.closest(\"[role='tab'], [role='tablist']\"),\n };\n refreshItem(snapshot);\n remembered.set(root, snapshot);\n if (snapshot.chosen) lastChosen = snapshot;\n if (snapshot.chosen) {\n const aside = openDetails(root).find(canOpenPendingDetail);\n if (aside) checkPendingDetail(root, aside, snapshot, event instanceof KeyboardEvent && event.key === \" \");\n }\n // Enter in an editor or a field types; only an item that chooses something moves on to its title.\n if (snapshot.chosen && snapshot.interaction === \"keyboard\") {\n const aside = openDetails(root).find((aside) => isVisible(aside) && (!detailWaiting(aside) || detailDrawer(aside)));\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 control = target.closest<HTMLElement>(\"[aria-controls]\");\n detailControlFocus = control ? controlledDetail(control) : null;\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 // The last choice in Main, until another interaction replaces it: a Detail\n // that opens later than that does not take the drawer or the focus.\n let lastChosen: RememberedItem | null = null;\n const cancelTitleOnInteraction = (event: Event) => {\n if (detailControlFocus && !(event.target instanceof Node && detailControlFocus.control.contains(event.target)))\n detailControlFocus = null;\n if (event.type === \"pointerdown\" || event.type === \"keydown\") clearActivation();\n if (lastChosen && !(event.target instanceof Node && lastChosen.item.contains(event.target))) {\n lastChosen.chosen = false;\n lastChosen = null;\n }\n if (\n pendingDetail &&\n // Native pointer focus on the chosen item continues its activation.\n !(event.type === \"focusin\" && event.target instanceof Node && pendingDetail.snapshot.item.contains(event.target))\n )\n cancelPendingDetail();\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 phonePage = (aside: HTMLElement) => aside.dataset.workspaceDetailPhone === \"page\";\n const setDetent = (aside: HTMLElement, full: boolean) => {\n if (phonePage(aside)) return;\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 || detailDrawer(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 // A moving Detail would cross a framed workspace's edge, so the workspace\n // clips while it slides (see the stylesheet).\n const slide = (root: HTMLElement, aside: HTMLElement) => {\n slides.get(root)?.();\n if (!root.hasAttribute(\"data-workspace-motion\") || prefersReducedMotion() || !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 if (phone?.matches && phonePage(aside)) return;\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 = prefersReducedMotion() ? \"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 let pendingDetail: { aside: HTMLElement; snapshot: RememberedItem; stop: () => void } | null = null;\n const canOpenPendingDetail = (aside: HTMLElement) =>\n aside.isConnected &&\n eventRoot.contains(aside) &&\n !aside.hidden &&\n detailWaiting(aside) &&\n !detailDrawer(aside) &&\n aside.dataset.workspaceDetailChoice !== \"request\";\n const cancelPendingDetail = () => {\n pendingDetail?.stop();\n pendingDetail = null;\n };\n // Check a completed choice after two frames. If its selection mark arrives\n // later, keep waiting until another interaction replaces the choice.\n const checkPendingDetail = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem, space = false) => {\n cancelPendingDetail();\n let frame: number | null = null;\n let observer: MutationObserver | null = null;\n const settle = () => {\n ownerDocument.removeEventListener(\"click\", onClick, true);\n ownerDocument.removeEventListener(\"keyup\", onKeyUp, true);\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n frame = requestAnimationFrame(() => {\n frame = null;\n const main = mainElement(root);\n if (\n !canOpenPendingDetail(aside) ||\n !snapshot.chosen ||\n !snapshot.item.isConnected ||\n !main?.contains(snapshot.item) ||\n snapshot.item.closest(ROOT_SELECTOR) !== root\n ) {\n cancelPendingDetail();\n return;\n }\n // ARIA marks, and `data-selected` as DataTable and Calendar mark their selection.\n let selected = snapshot.item.closest(SELECTION_MARK_SELECTOR);\n while (selected?.matches(IGNORED_SELECTION_MARK_SELECTOR))\n selected = selected.parentElement?.closest(SELECTION_MARK_SELECTOR) ?? null;\n if (!selected || selected === main || !main.contains(selected)) {\n if (!observer) {\n observer = new MutationObserver(settle);\n observer.observe(main, {\n subtree: true,\n attributes: true,\n attributeFilter: [\"aria-selected\", \"aria-current\", \"data-selected\"],\n });\n }\n return;\n }\n cancelPendingDetail();\n // A control inside a selected row that discloses, toggles, or opens\n // a menu does its own job and selects nothing.\n if (selected !== snapshot.item && snapshot.item.matches(NESTED_CONTROL_SELECTOR)) return;\n snapshot.fresh = false;\n openDetailDrawer(aside);\n revealItem(root, aside, snapshot);\n // The same item keeps its title; another one may still be loading,\n // so focus follows the title that replaces the current one.\n if (snapshot.interaction === \"keyboard\") {\n focusTitle(aside);\n requestTitle(aside, true);\n }\n });\n });\n };\n const onClick = (event: MouseEvent) => {\n if (event.button === 0 && event.target instanceof Node && snapshot.item.contains(event.target)) settle();\n else cancelPendingDetail();\n };\n // Space activates a button on release, so its check waits for keyup.\n const onKeyUp = (event: KeyboardEvent) => {\n if (event.key === \" \") settle();\n };\n const stop = () => {\n if (frame !== null) cancelAnimationFrame(frame);\n observer?.disconnect();\n ownerDocument.removeEventListener(\"click\", onClick, true);\n ownerDocument.removeEventListener(\"keyup\", onKeyUp, true);\n ownerDocument.removeEventListener(\"pointercancel\", cancelPendingDetail, true);\n };\n pendingDetail = { aside, snapshot, stop };\n ownerDocument.addEventListener(\"pointercancel\", cancelPendingDetail, true);\n if (space) ownerDocument.addEventListener(\"keyup\", onKeyUp, true);\n else if (snapshot.interaction === \"keyboard\") settle();\n else ownerDocument.addEventListener(\"click\", onClick, true);\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 (pendingDetail?.aside === aside) cancelPendingDetail();\n parkDetailDrawer(aside);\n if (pendingTitle?.aside === aside) cancelTitle();\n if (panelStep === aside) panelStep = null;\n if (root.hasAttribute(\"data-workspace-motion\") && !prefersReducedMotion() && 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 const toggle = detailToggle(aside);\n const returnControl = detailReturnControl(aside);\n if (\n toggle &&\n aside.dataset.workspaceDetailReopen === \"true\" &&\n returnControl &&\n (aside.contains(focused) || (focused === ownerDocument.body && aside.contains(lastFocus.get(root) ?? null)))\n ) {\n returnControl.focus({ preventScroll: true });\n } else 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 if (detailWaiting(aside) && !detailDrawer(aside)) {\n if (!followedInteraction || !snapshot?.chosen) return;\n if (aside.dataset.workspaceDetailChoice === \"request\" && !snapshot.item.matches(DETAIL_REQUEST_CONTROL_SELECTOR)) return;\n openDetailDrawer(aside);\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 // Passive hints and tooltips do not own J/K or F6. Keep Escape with an undismissed tooltip.\n if (event.key === \"Escape\" && ownerDocument.querySelector(\"[role='tooltip']:popover-open\")) return;\n if (ownerDocument.querySelector(\":popover-open:not(.k2b-moved-hint):not([role='tooltip'])\")) 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) || target.closest(DETAIL_TOGGLE_SELECTOR)))\n aside = openDetails(root).find(isVisible) ?? null;\n if (!aside && target === ownerDocument.body) {\n const open = allRoots().flatMap(openDetails).filter(isVisible);\n if (open.length === 1) aside = open[0]!;\n }\n const owningRoot = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!aside || !owningRoot || !isVisible(aside)) return;\n if (event.key === \"Escape\" && detailDrawer(aside)) {\n parkDetailDrawer(aside, true);\n syncDetailRequestControls();\n event.preventDefault();\n return;\n }\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 chosen: 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))\n parkDetailDrawer(drag.aside, drag.aside.contains(ownerDocument.activeElement));\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 if (phonePage(aside)) 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 || phonePage(aside) || !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 && phonePage(aside)) 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 (wide?.matches && detailDrawer(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 onPanelDoubleClick = (event: Event) => {\n const handle = resizeHandle(event);\n const root = handle?.closest<HTMLElement>(ROOT_SELECTOR);\n const kind = handle ? resizeKind(handle) : null;\n if (!handle || !root || !kind || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n if (active) return;\n if (kind === \"sidebar\") {\n const { sidebarWidth: _width, sidebarCollapsed: _collapsed, ...remaining } = layoutState;\n layoutState = remaining;\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"drawer\" ? \"drawerHeights\" : \"detailWidths\";\n const widths = { ...layoutState[key] };\n delete widths[panelId(handle)];\n layoutState = { ...layoutState, [key]: widths };\n }\n const regions = resetRegions.get(root) ?? new Map<string, ResetRegion>();\n regions.set(resizeVariable(handle, kind), {\n kind,\n id: panelId(handle),\n configuration: handle,\n });\n resetRegions.set(root, regions);\n writeState();\n if (kind === \"sidebar\" || kind === \"pane\") reconcilePanes(root, layoutState);\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n };\n\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n type ResetRegion = {\n kind: AppWorkspaceResizeKind;\n id: string;\n configuration: HTMLElement;\n };\n const resetRegions = new WeakMap<HTMLElement, Map<string, ResetRegion>>();\n const resizeVariable = (handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? \"--k2b-workspace-sidebar-width\" : appWorkspacePanelVariable(kind, panelId(handle));\n const defaultSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n readAppWorkspaceWidth(handle.dataset.workspaceDefaultSize) ??\n (kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_DEFAULT\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_DEFAULT\n : kind === \"drawer\"\n ? APP_WORKSPACE_DRAWER_DEFAULT\n : APP_WORKSPACE_DETAIL_DEFAULT);\n const restoreResetDefaults = (root: HTMLElement) => {\n for (const [variable, region] of resetRegions.get(root) ?? []) {\n const { kind, id } = region;\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarWidth\n : layoutState[kind === \"pane\" ? \"paneWidths\" : kind === \"drawer\" ? \"drawerHeights\" : \"detailWidths\"]?.[id];\n if (persisted !== undefined || (kind === \"sidebar\" && layoutState.sidebarCollapsed)) continue;\n const handle = rootElements(root, HANDLE_SELECTOR).find((handle) => resizeKind(handle) === kind && panelId(handle) === id);\n // Keep the latest handle's configuration across unmounts. Limits still\n // measure today's workspace, so a missing handle cannot freeze its fit.\n if (handle) region.configuration = handle;\n const spec = defaultSize(region.configuration, kind);\n // Store the configured default, not a temporary fit. CSS/relayout owns\n // the available space, so a numeric level can grow back when room returns.\n if (typeof spec === \"number\") {\n // Sidebar and drawer have no CSS fit. Keep their configured default\n // in the map, but render within today's bounds and recover it later.\n if (kind === \"sidebar\" || kind === \"drawer\") {\n const { min, max } = sizeLimits(root, region.configuration, kind);\n root.style.setProperty(variable, `${clamp(spec, min, max)}px`);\n } else root.style.setProperty(variable, `${spec}px`);\n } else {\n root.style.removeProperty(variable);\n if (getComputedStyle(root).getPropertyValue(variable).trim()) root.style.setProperty(variable, \"initial\");\n }\n if (kind === \"sidebar\") delete root.dataset.sidebarCollapsed;\n }\n };\n const writeState = () => {\n options.writeState?.(layoutState);\n // Keep reset defaults through reactive writes and temporary handle unmounts,\n // without saving a width that would mask a changed application default.\n for (const root of roots()) {\n if (!workspaceResizable(root)) continue;\n restoreResetDefaults(root);\n reconcilePanes(root, layoutState);\n }\n };\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 const root = workspaceRoot(handle);\n if (root) resetRegions.get(root)?.delete(resizeVariable(handle, kind));\n writeState();\n };\n\n // A level resize starts from what is on screen. When the stored widths do\n // not fit beside the flexible level, CSS shrinks the resizable levels (a\n // level without a separator does not shrink), so a step from a shrunk width\n // would land on a preference that shrinks again and jump. The visible\n // resizable levels therefore take their rendered widths as preferences when\n // a step really moves; then they fit, and the step moves exactly by its\n // size. All widths are measured before any is written, because each write\n // reflows the others.\n const settleLevels = (root: HTMLElement, handle: HTMLElement) => {\n const main = handle.closest<HTMLElement>(\".k2b-app-workspace__main\");\n if (!main?.hasAttribute(\"data-workspace-levels\")) return;\n const widths = Array.from(main.querySelectorAll<HTMLElement>(HANDLE_SELECTOR))\n .filter((other) => other.closest(\".k2b-app-workspace__main\") === main && resizeKind(other) === \"pane\")\n .flatMap((other) => {\n const panel = controlledPanel(root, other);\n return isVisible(panel) && !flexibleLevel(panel) && panel.dataset.workspaceResizable === \"true\"\n ? [{ id: panelId(other), width: Math.round(elementSize(panel, \"pane\")) }]\n : [];\n });\n for (const { id, width } of widths) {\n if (layoutState.paneWidths?.[id] === width) continue;\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", id), `${width}px`);\n layoutState = { ...layoutState, paneWidths: { ...layoutState.paneWidths, [id]: width } };\n }\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 const requested = active.startSize + (client - active.startClient) * active.direction;\n // A press without movement, or a drag that the limits stop, changes no\n // level preference, also not a sibling's.\n if (!active.moved && client !== active.startClient && active.kind === \"pane\" && levelsMain(active.handle)) {\n const { min, max } = sizeLimits(active.root, active.handle, \"pane\");\n if (clamp(requested, min, max) === Math.round(currentSize(active.root, active.handle, \"pane\"))) return;\n settleLevels(active.root, active.handle);\n }\n active.moved ||= client !== active.startClient;\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 if (\n event.key === \"Enter\" &&\n !event.defaultPrevented &&\n !event.isComposing &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !active\n ) {\n event.preventDefault();\n onPanelDoubleClick(event);\n return;\n }\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 if (kind === \"pane\" && levelsMain(handle)) {\n // A step that the limits stop changes no preference, also not a sibling's.\n if (clamp(requested, min, max) === Math.round(current)) return;\n settleLevels(root, handle);\n }\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 // Remember only attributes we own; application-set inert survives every transition.\n const phonePageInerted = new Set<HTMLElement>();\n const syncPhonePages = () => {\n const regions = new Set<HTMLElement>();\n if (phone?.matches) {\n for (const root of allRoots()) {\n if (!root.isConnected) continue;\n for (const aside of openDetails(root).filter(phonePage)) {\n for (let node: HTMLElement | null = aside; node && node !== root; node = node.parentElement) {\n const parent: HTMLElement | null = node.parentElement;\n if (parent) overlayRegions(parent, aside).forEach((region) => regions.add(region));\n }\n }\n }\n }\n phonePageInerted.forEach((region) => {\n if (regions.has(region)) return;\n region.removeAttribute(\"inert\");\n phonePageInerted.delete(region);\n });\n regions.forEach((region) => {\n if (region.hasAttribute(\"inert\")) return;\n region.setAttribute(\"inert\", \"\");\n phonePageInerted.add(region);\n });\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\" ? !wide?.matches || !detailDrawer(detailDrag.aside) : !phone?.matches))\n 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 restoreResetDefaults(root);\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, { reserveMainMinimum: false });\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 };\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 = () => {\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n // Reconciling can restore a drawer's persisted width; its trail space follows.\n for (const root of allRoots()) for (const aside of rootElements(root, DETAIL_DRAWER_SELECTOR)) syncDetailDrawerSpace(aside);\n });\n };\n const onResize = () => {\n syncHostState();\n scheduleReconcile();\n };\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n syncHostState();\n scheduleReconcile();\n });\n // A host can change its width while a workspace with a fixed width keeps\n // its own, so the controller also watches each root's nearest named host.\n const observedHosts = new Set<Element>();\n // Found once per root: reading styles on every mutation would cost a style pass.\n const rootHosts = new WeakMap<HTMLElement, Element | null>();\n const hostOf = (root: HTMLElement) => {\n if (rootHosts.has(root)) return rootHosts.get(root)!;\n let host: Element | null = null;\n for (let element = root.parentElement; element && !host; element = element.parentElement)\n if (getComputedStyle(element).containerName.split(/\\s+/).includes(\"k2b-app-area\")) host = element;\n rootHosts.set(root, host);\n return host;\n };\n const syncObservedRoots = () => {\n const hosts = new Set(\n allRoots()\n .map(hostOf)\n .filter((host): host is Element => host !== null),\n );\n observedHosts.forEach((host) => {\n if (hosts.has(host)) return;\n resizeObserver?.unobserve(host);\n observedHosts.delete(host);\n });\n hosts.forEach((host) => {\n if (observedHosts.has(host)) return;\n observedHosts.add(host);\n resizeObserver?.observe(host);\n });\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 (\n records.some(\n (record) =>\n record.type === \"childList\" ||\n [\"hidden\", \"aria-controls\", \"aria-expanded\", \"data-workspace-detail-drawer\"].includes(record.attributeName ?? \"\"),\n )\n )\n syncDetailRequestControls();\n // A sidebar shown or hidden, or a sidebar button added: the buttons state it.\n if (\n records.some(\n (record) =>\n (record.type === \"attributes\" &&\n record.attributeName === \"hidden\" &&\n record.target instanceof Element &&\n record.target.matches(\".k2b-app-workspace__sidebar\")) ||\n [...record.addedNodes].some(\n (node) => node instanceof Element && (node.matches(TOGGLE_SELECTOR) || node.querySelector(TOGGLE_SELECTOR)),\n ),\n )\n )\n syncSidebarToggles();\n syncPhonePages();\n if (pendingTitle && (pendingTitle.aside.hidden || !pendingTitle.aside.isConnected)) cancelTitle();\n if (\n pendingDetail &&\n (!canOpenPendingDetail(pendingDetail.aside) || !pendingDetail.snapshot.chosen || !pendingDetail.snapshot.item.isConnected)\n )\n cancelPendingDetail();\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.attributeName === \"hidden\" &&\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 // A new width token or a removed panel can end waiting without any box resizing.\n if (\n records.some(\n (record) =>\n record.type === \"childList\" || record.attributeName === \"data-width\" || record.attributeName === \"data-workspace-main-min\",\n )\n )\n syncHostState();\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(\"focusout\", onDetailControlFocusOut, true);\n ownerDocument.addEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"keydown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"click\", onDetailRequestClick, true);\n ownerDocument.addEventListener(\"click\", onChoiceClick, true);\n ownerDocument.addEventListener(\"keyup\", endActivation, true);\n ownerDocument.addEventListener(\"pointerup\", endActivation, true);\n ownerDocument.addEventListener(\"pointercancel\", cancelActivation, 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\", onPanelDoubleClick);\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 phone?.addEventListener(\"change\", syncHostState);\n phone?.addEventListener(\"change\", syncPhonePages);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncPhonePages();\n syncObservedRoots();\n syncDetailRequestControls();\n syncSidebarToggles();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [\n \"hidden\",\n \"aria-controls\",\n \"aria-expanded\",\n \"data-workspace-detail-drawer\",\n \"data-workspace-level-shown\",\n \"data-width\",\n \"data-workspace-main-min\",\n \"data-workspace-default-size\",\n ],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n phonePageInerted.forEach((region) => region.removeAttribute(\"inert\"));\n phonePageInerted.clear();\n phone?.removeEventListener(\"change\", syncPhonePages);\n cancelTitle();\n cancelPendingDetail();\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(\"focusout\", onDetailControlFocusOut, true);\n detailControlFocus = null;\n ownerDocument.removeEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"keydown\", cancelTitleOnInteraction, true);\n clearActivation();\n ownerDocument.removeEventListener(\"click\", onChoiceClick, true);\n ownerDocument.removeEventListener(\"keyup\", endActivation, true);\n ownerDocument.removeEventListener(\"pointerup\", endActivation, true);\n ownerDocument.removeEventListener(\"pointercancel\", cancelActivation, 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\", onPanelDoubleClick);\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 if (hostSyncFrame !== null) cancelAnimationFrame(hostSyncFrame);\n mutationObserver?.disconnect();\n detailRequestExpanded.forEach((state, control) => restoreDetailRequestExpanded(control, state));\n detailRequestExpanded.clear();\n ownerDocument.removeEventListener(\"click\", onDetailRequestClick, true);\n resizeObserver?.disconnect();\n observedRoots.clear();\n observedHosts.clear();\n closeOverlay(\"none\");\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"click\", onClick as EventListener);\n ownerDocument.removeEventListener(\"keydown\", onOverlayKeyDown);\n phone?.removeEventListener(\"change\", syncHostState);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}