@k2b/ui 0.10.0 → 0.11.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.
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import {\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n direction: 1 | -1;\n previousUserSelect: string;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n const details = rootElements(root, \".k2b-app-workspace__detail\").filter(isVisible);\n const sidebarWidth = elementSize(sidebarElement(root), \"sidebar\");\n const otherDetailWidth = details.reduce((total, detail) => total + (detail === controlled ? 0 : elementSize(detail, \"detail\")), 0);\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"sidebar\"\n ? otherDetailWidth\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : kind === \"detail\"\n ? sidebarWidth + otherDetailWidth\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate. A revealed row action\n * pads the label's fading end, so the text is measured against the content box.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const style = getComputedStyle(label);\n const width = label.clientWidth - (Number.parseFloat(style.paddingLeft) || 0) - (Number.parseFloat(style.paddingRight) || 0);\n const overflow = Math.max(0, text.scrollWidth - width);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n active.liveSize = applySize(\n active.root,\n active.handle,\n active.kind,\n active.startSize + (client - active.startClient) * active.direction,\n { snapSidebar: active.kind !== \"sidebar\" },\n );\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.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 document.body.style.userSelect = finished.previousUserSelect;\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 direction: resizeDirection(handle, kind),\n previousUserSelect: document.body.style.userSelect,\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n document.body.style.userSelect = \"none\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n if (!resizeObserver) return;\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n resizeObserver.unobserve(root);\n observedRoots.delete(root);\n }\n });\n next.forEach((root) => {\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver.observe(root);\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 const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n stopScrollFades();\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import {\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n /** A hideable sidebar dragged below half its minimum previews the hidden state. */\n hiding: boolean;\n direction: 1 | -1;\n previousUserSelect: string;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst sidebarHideable = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceHideable === \"true\";\n/**\n * Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop\n * stays application state, so the controller only requests the change.\n */\nexport const APP_WORKSPACE_SIDEBAR_HIDE_EVENT = \"k2b-app-workspace-sidebar-hide\";\nconst previewSidebarHidden = (root: HTMLElement, hidden: boolean) => {\n const sidebar = sidebarElement(root);\n if (!sidebar) return;\n if (hidden) sidebar.dataset.workspaceHidePreview = \"true\";\n else delete sidebar.dataset.workspaceHidePreview;\n};\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n const details = rootElements(root, \".k2b-app-workspace__detail\").filter(isVisible);\n const sidebarWidth = elementSize(sidebarElement(root), \"sidebar\");\n const otherDetailWidth = details.reduce((total, detail) => total + (detail === controlled ? 0 : elementSize(detail, \"detail\")), 0);\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"sidebar\"\n ? otherDetailWidth\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : kind === \"detail\"\n ? sidebarWidth + otherDetailWidth\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate. A revealed row action\n * pads the label's fading end, so the text is measured against the content box.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const style = getComputedStyle(label);\n const width = label.clientWidth - (Number.parseFloat(style.paddingLeft) || 0) - (Number.parseFloat(style.paddingRight) || 0);\n const overflow = Math.max(0, text.scrollWidth - width);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n const requested = active.startSize + (client - active.startClient) * active.direction;\n // Below half the smallest visible width a hideable sidebar stays at its\n // minimum and previews hiding; dragging back out resumes the live width.\n const hiding =\n active.kind === \"sidebar\" && sidebarHideable(active.root) && requested < sizeLimits(active.root, active.handle, active.kind).min / 2;\n if (hiding !== active.hiding) {\n active.hiding = hiding;\n previewSidebarHidden(active.root, hiding);\n }\n if (!hiding)\n active.liveSize = applySize(active.root, active.handle, active.kind, requested, { snapSidebar: active.kind !== \"sidebar\" });\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.hiding) {\n // The request comes first, while the layout is still the one on screen,\n // so the host sees the sidebar disappear in a single change. The width\n // before the drag then stays the remembered width for the next time it\n // shows; a host that declines the request gets that width back.\n sidebarElement(finished.root)?.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));\n previewSidebarHidden(finished.root, false);\n applySize(finished.root, finished.handle, \"sidebar\", finished.startSize);\n } else if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n document.body.style.userSelect = finished.previousUserSelect;\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 previousUserSelect: document.body.style.userSelect,\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n document.body.style.userSelect = \"none\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n if (!resizeObserver) return;\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n resizeObserver.unobserve(root);\n observedRoots.delete(root);\n }\n });\n next.forEach((root) => {\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver.observe(root);\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 const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n stopScrollFades();\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"AAAA,SACE,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,+BAA+B,EAC/B,yBAAyB,EACzB,yBAAyB,EAGzB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,gCAAgC,EAChC,+BAA+B,EAC/B,uBAAuB,EACvB,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAS,kBAAkB,QAAQ,eAAe;AAuBlD,MAAM,eAAe,GAAG,6BAA6B;AACrD,MAAM,aAAa,GAAG,0BAA0B;AAChD,MAAM,sBAAsB,GAAG,CAC7B,aAAa,EACb,6BAA6B,EAC7B,+BAA+B,EAC/B,4BAA4B,EAC5B,4BAA4B,EAC5B,eAAe,CAChB,CAAC,IAAI,CAAC,GAAG,CAAC;AACX,MAAM,cAAc,GAAG,6DAA6D;AACpF,MAAM,mBAAmB,GAAG,6CAA6C;AACzE,MAAM,aAAa,GAAG,kCAAkC;AACxD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1G,MAAM,YAAY,GAAI,KAAY,IAAM,KAAK,CAAC,MAAM,YAAY,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAK;AAC9F,MAAM,YAAY,GAAI,KAAY,IAAK,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAc,eAAe,CAAC,IAAI,IAAI;AACzG,MAAM,UAAU,GAAI,MAAmB,IAAoC;EACzE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB;EAC/C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;AAC3G,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,MAAmB,EAAE,IAA4B,KACxE,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,KAAK,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACnG,MAAM,aAAa,GAAI,MAAmB,IAAK,MAAM,CAAC,OAAO,CAAc,aAAa,CAAC;AACzF,MAAM,kBAAkB,GAAI,IAAiB,IAAK,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,OAAO;AAC7F,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAE,QAAgB,KACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAE,OAAO,IAAK,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AACvH,MAAM,cAAc,GAAI,IAAiB,IAAK,YAAY,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAC1G,MAAM,WAAW,GAAI,IAAiB,IAAK,YAAY,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AACpG,MAAM,kBAAkB,GAAI,IAAiB,IAAK,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,oBAAoB,KAAK,MAAM;AAC/G,MAAM,eAAe,GAAI,IAAiB,IAAK,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,iBAAiB,KAAK,MAAM;AACzG;AACA;AACA;AACA;AACA,OAAO,MAAM,gCAAgC,GAAG,gCAAgC;AAChF,MAAM,oBAAoB,GAAG,CAAC,IAAiB,EAAE,MAAe,KAAK;EACnE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC;EACpC,IAAI,CAAC,OAAO,EAAE;EACd,IAAI,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,oBAAoB,GAAG,MAAM,CAAC,KACrD,OAAO,OAAO,CAAC,OAAO,CAAC,oBAAoB;AAClD,CAAC;AACD,MAAM,SAAS,GAAI,OAA2B,IAC5C,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC;AACrF,MAAM,WAAW,GAAG,CAAC,OAA2B,EAAE,IAA4B,KAAK;EACjF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;EACjC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;EAC5C,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;AACrD,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,IAAiB,EAAE,MAAmB,KAAK;EAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC;EACrD,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI;EAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;EAC/C,OAAO,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI;AAC9D,CAAC;AACD,MAAM,uBAAuB,GAAG,CAAC,IAAiB,EAAE,MAAmB,EAAE,IAA4B,KACnG,CAAC,IAAI,KAAK,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,kBAAkB,KAAK,MAAM;AACpH,MAAM,OAAO,GAAI,MAAmB,IAAK,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC,IAAI,SAAS;AAC3H,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,GAAqE,EAAE,QAAgB,KAAK;EACnI,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;EACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ;AAClD,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,MAAmB,EAAE,IAA4B,KAAK;EAC3F,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC;EAChD,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,GAAG,MAAM,CAAC,OAAO,CAAc,0BAA0B,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;EAC1G,MAAM,KAAK,GAAG,IAAI,GACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,+BAA+B,CAAC,CAAC,CAAC,MAAM,CACnF,IAAI,IAAK,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,IAAI,CACzH,CAAC,GACD,EAAE;EACN,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;EAClF,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;EACjE,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;EAClI,MAAM,UAAU,GACd,IAAI,KAAK,SAAS,GACd,yBAAyB,GACzB,IAAI,KAAK,MAAM,GACb,sBAAsB,GACtB,IAAI,KAAK,QAAQ,GACf,wBAAwB,GACxB,wBAAwB;EAClC,MAAM,UAAU,GACd,IAAI,KAAK,SAAS,GACd,yBAAyB,GACzB,IAAI,KAAK,MAAM,GACb,sBAAsB,GACtB,IAAI,KAAK,QAAQ,GACf,wBAAwB,GACxB,wBAAwB;EAClC,OAAO,wBAAwB,CAAC;IAC9B,IAAI;IACJ,aAAa,EACX,IAAI,KAAK,QAAQ,GACb,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,GACnC,IAAI,KAAK,MAAM,IAAI,IAAI,GACrB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,GAClC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK;IAC1C,YAAY,EACV,IAAI,KAAK,SAAS,GACd,gBAAgB,GAChB,IAAI,KAAK,MAAM,GACb,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAC/F,IAAI,KAAK,QAAQ,GACf,YAAY,GAAG,gBAAgB,GAC/B,CAAC;IACX,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,CAAC;IACvD,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,CAAC;IACvD,kBAAkB,EAAE,IAAI,KAAK,SAAS,IAAI,kBAAkB,CAAC,IAAI;EACnE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,MAAmB,EAAE,IAA4B,KACvF,IAAI,KAAK,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;AAEjH,MAAM,iBAAiB,GAAG,CACxB,IAAiB,EACjB,MAAmB,EACnB,IAA4B,EAC5B,IAAY,EACZ,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KACpC;EACH,MAAM;IAAE,GAAG;IAAE;EAAI,CAAC,GAAG,MAAM;EAC3B,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;EACjD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;EACjD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,SAAS,GAAG,CAChB,IAAiB,EACjB,MAAmB,EACnB,IAA4B,EAC5B,aAAqB;AACrB;AACF;AACA;AACA;AACA;AACA;AACE,OAAkC,GAAG,CAAC,CAAC,KACpC;EACH,MAAM;IAAE,GAAG;IAAE;EAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;EACnD,IAAI,IAAI,KAAK,SAAS,EAAE;IACtB,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC5C,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,KAAK,KAAK,GACzB;MAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC;MAAE,SAAS,EAAE,iCAAiC,CAAC,aAAa,EAAE,WAAW;IAAE,CAAC,GACnH,+BAA+B,CAAC,aAAa,EAAE,GAAG,EAAE,WAAW,CAAC;IACtE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7E;IACA;IACA,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,KACzD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB;IACzC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE;MAAE,GAAG;MAAE;IAAI,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC,KAAK;EACtB;EACA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC;EAC3C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;EACrF,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;IAAE,GAAG;IAAE;EAAI,CAAC,CAAC;EACzD,OAAO,IAAI;AACb,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,CAAC,IAAiB,EAAE,WAAoC,EAAE,MAA2B,GAAG,IAAI,KAAK;EACtH,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;EAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;EAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,MAAM,CACvD,MAAM,IAAK,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAC3F,CAAC;EACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;EAErB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAE,MAAM,IAAK,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;EAClG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,+BAA+B,CAAC,CAAC,CAC/F,MAAM,CACJ,IAAI,IACH,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,KAAK,IAAI,IACjD,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IACtC,SAAS,CAAC,IAAI,CAAC,IACf,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CACxB,CAAC,CACA,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;EAChE,MAAM,IAAe,GAAG,OAAO,CAAC,OAAO,CAAE,MAAM,IAAK;IAClD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;IAChC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;IACzF,MAAM,SAAS,GACb,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,GACvF,MAAM,CAAC,QAAQ,GACd,WAAW,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,sBAAsB,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAE;IAC3H,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;IAC1C,OAAO,CAAC;MAAE,OAAO;MAAE,MAAM;MAAE;IAAI,CAAC,CAAC;EACnC,CAAC,CAAC;EACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EAElB,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,GAAG,sBAAsB,CAAC;EACtH,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;IAC3B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;EACrG,CAAC,CAAC;EACF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC,CAAC;AAC1F,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAI,KAAkB,IAAK;EAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAc,mBAAmB,CAAC;EAClE,IAAI,CAAC,IAAI,EAAE;EACX,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;EACrC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;EAC5H,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;EACtD,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,GAAG,QAAQ,IAAI,CAAC;EACxE,IAAI,QAAQ,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,KAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ;AACpC,CAAC;AAED,OAAO,MAAM,6BAA6B,GAAG,CAAC,OAAsC,GAAG,CAAC,CAAC,KAAmB;EAC1G,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ;EAC1C,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC;EACrD,IAAI,WAAW,GAAG,gCAAgC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE;EAAW,CAAC;EACpG,IAAI,MAA2B,GAAG,IAAI;EACtC,IAAI,WAA0B,GAAG,IAAI;EACrC,IAAI,aAA4B,GAAG,IAAI;EAEvC,MAAM,WAAW,GAAG,CAAC,MAAmB,EAAE,IAA4B,EAAE,IAAY,KAAK;IACvF,IAAI,IAAI,KAAK,SAAS,EAAE;MACtB,MAAM,SAAS,GAAG,IAAI,KAAK,+BAA+B;MAC1D,WAAW,GAAG;QACZ,GAAG,WAAW;QACd,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,YAAY,GAAG,IAAI;QACzD,gBAAgB,EAAE;MACpB,CAAC;IACH,CAAC,MAAM;MACL,MAAM,GAAG,GAAG,IAAI,KAAK,MAAM,GAAG,YAAY,GAAG,IAAI,KAAK,QAAQ,GAAG,cAAc,GAAG,eAAe;MACjG,WAAW,GAAG;QAAE,GAAG,WAAW;QAAE,CAAC,GAAG,GAAG;UAAE,GAAG,WAAW,CAAC,GAAG,CAAC;UAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;QAAK;MAAE,CAAC;IAC3F;IACA,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC;EACnC,CAAC;EAED,MAAM,gBAAgB,GAAG,MAAM;IAC7B,IAAI,WAAW,KAAK,IAAI,EAAE;MACxB,oBAAoB,CAAC,WAAW,CAAC;MACjC,WAAW,GAAG,IAAI;IACpB;IACA,IAAI,CAAC,MAAM,IAAI,aAAa,KAAK,IAAI,EAAE;IACvC,MAAM,MAAM,GAAG,aAAa;IAC5B,aAAa,GAAG,IAAI;IACpB,MAAM,CAAC,KAAK,KAAK,MAAM,KAAK,MAAM,CAAC,WAAW;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS;IACrF;IACA;IACA,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACtI,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;MAC5B,MAAM,CAAC,MAAM,GAAG,MAAM;MACtB,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IAC3C;IACA,IAAI,CAAC,MAAM,EACT,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE;MAAE,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK;IAAU,CAAC,CAAC;IAC7H,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC;EAC7G,CAAC;EACD,MAAM,aAAa,GAAI,KAAmB,IAAK;IAC7C,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;IACrD,aAAa,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IACxE,IAAI,WAAW,KAAK,IAAI,EAAE;IAC1B,WAAW,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;EACvD,CAAC;EACD,MAAM,UAAU,GAAI,KAAa,IAAK;IACpC,IAAI,CAAC,MAAM,IAAK,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,SAAU,EAAE;IACxF,gBAAgB,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,MAAM;IACvB,MAAM,GAAG,IAAI;IACb,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB;IAClD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB;IACpD,IAAI,QAAQ,CAAC,MAAM,EAAE;MACnB;MACA;MACA;MACA;MACA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,WAAW,CAAC,gCAAgC,CAAC,CAAC;MAC/F,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;MAC1C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC1E,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,EAAE;MACzB;MACA;MACA;MACA;MACA;MACA,MAAM,IAAI,GACR,QAAQ,CAAC,IAAI,KAAK,MAAM,GAAG,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;MAC5H,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;MACjD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC5E;IACA,IAAI,QAAQ,CAAC,MAAM,CAAC,iBAAiB,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtH,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,kBAAkB;IAC5D,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC;IACxD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC;IACnD,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,UAAU,CAAC;IACvD,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC;EAChD,CAAC;EACD,MAAM,aAAa,GAAI,KAAmB,IAAK;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI;IAC/C,MAAM,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAClD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAC9H;IACF,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,UAAU,CAAC,CAAC;IACZ,aAAa,GAAG,IAAI;IACpB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;IACjD,MAAM,GAAG;MACP,MAAM;MACN,IAAI;MACJ,IAAI;MACJ,SAAS,EAAE,KAAK,CAAC,SAAS;MAC1B,WAAW,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;MAC9D,SAAS;MACT,QAAQ,EAAE,SAAS;MACnB,KAAK,EAAE,KAAK;MACZ,MAAM,EAAE,KAAK;MACb,SAAS,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC;MACxC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,qBAAqB,GAAG,IAAI;IACzC,MAAM,CAAC,OAAO,CAAC,qBAAqB,GAAG,MAAM;IAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;IACvC,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3C,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC;IACrD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC;IAChD,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,UAAU,CAAC;IACpD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;EAC7C,CAAC;EACD,MAAM,SAAS,GAAI,KAAoB,IAAK;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI;IAC/C,MAAM,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAClD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAC5G,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/C,MAAM;MAAE,GAAG;MAAE;IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;IACnD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC;IACpC,IAAI,SAAwB,GAAG,IAAI;IACnC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC;IAC/C,MAAM,kBAAkB,GAAG,IAAI,KAAK,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC;IACzE,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,KACrC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,SAAS,GAAG,GAAG;IAC7C;IACA;IAAA,KACK,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,KACzF,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS;IAC/F;IACA;IACA;IACA;IAAA,KACK,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EACrD,SAAS,GAAG,kBAAkB,IAAI,OAAO,IAAI,yBAAyB,GAAG,+BAA+B,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,KACnI,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EACtD,SAAS,GACP,kBAAkB,IAAI,OAAO,IAAI,+BAA+B,GAC3D,WAAW,CAAC,YAAY,IAAI,yBAAyB,GACtD,OAAO,GAAG,IAAI,GAAG,SAAS;IAClC,IAAI,SAAS,KAAK,IAAI,EAAE;IACxB,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC;EAChF,CAAC;EAED,MAAM,QAAQ,GAAG,MAAM;IACrB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAc,aAAa,CAAC,CAAC;IACjF,OAAO,SAAS,YAAY,WAAW,IAAI,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM;EAC/G,CAAC;EACD,MAAM,KAAK,GAAG,MAAM;IAClB;IACA;IACA;IACA,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAE,IAAI,IAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;EACzH,CAAC;EACD,MAAM,SAAS,GAAG,MAAM;IACtB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAE,IAAI,IAAK;MACxB;MACA;MACA;MACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;MAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC;MACnD;MACA;MACA;MACA,OAAO,CACJ,MAAM,CAAE,MAAM,IAAK,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CACjD,OAAO,CAAE,MAAM,IAAK;QACnB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAC3D,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;UAC7F,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;YAAE,WAAW,EAAE,IAAI,KAAK;UAAU,CAAC,CAAC;UACnF;QACF;QACA,MAAM,SAAS,GACb,IAAI,KAAK,SAAS,GACd,WAAW,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,IAAI,CAAC,GACtD,+BAA+B,GAC/B,WAAW,CAAC,YAAY,GAC1B,IAAI,KAAK,QAAQ,GACf,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAC3C,WAAW,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,KACjE,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;MAC7E,CAAC,CAAC;MACJ,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1E,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;EACE,MAAM,SAAS,GAAI,KAAiB,IAAK;IACvC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI;IAC/C,MAAM,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAClD,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;MACzE,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE;IACA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAc,aAAa,CAAC,EAAE,aAAa,CAAc,cAAc,CAAC;IAClH,IAAI,KAAK,EAAE,qBAAqB,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;EAC7D,CAAC;;EAED;EACA;EACA,MAAM,aAAa,GAAI,KAAmB,IAAK;IAC7C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAc,cAAc,CAAC;IACvE,IAAI,CAAC,KAAK,IAAK,KAAK,CAAC,aAAa,YAAY,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAE,EAAE;IAC5F,qBAAqB,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;EAClD,CAAC;;EAED;EACA;EACA,MAAM,mBAAmB,GAAG,MAAM;IAChC,SAAS,CAAC,gBAAgB,CAAc,cAAc,CAAC,CAAC,OAAO,CAAE,KAAK,IAAK;MACzE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ;MAC7B,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,8BAA8B,CAAC;IAC5D,CAAC,CAAC;EACJ,CAAC;;EAED;EACA;EACA;EACA,IAAI,cAA6B,GAAG,IAAI;EACxC,MAAM,iBAAiB,GAAG,CAAC,WAAW,GAAG,KAAK,KAAK;IACjD,IAAI,WAAW,EAAE,mBAAmB,CAAC,CAAC;IACtC,IAAI,cAAc,KAAK,IAAI,EAAE;IAC7B,cAAc,GAAG,qBAAqB,CAAC,MAAM;MAC3C,cAAc,GAAG,IAAI;MACrB,SAAS,CAAC,CAAC;IACb,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC;EAE9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAc,CAAC;EAC5C,MAAM,cAAc,GAClB,OAAO,cAAc,KAAK,WAAW,GACjC,IAAI,GACJ,IAAI,cAAc,CAAC,MAAM;IACvB,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC,CAAC;EACR,MAAM,iBAAiB,GAAG,MAAM;IAC9B,IAAI,CAAC,cAAc,EAAE;IACrB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChC,aAAa,CAAC,OAAO,CAAE,IAAI,IAAK;MAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnB,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;QAC9B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;MAC5B;IACF,CAAC,CAAC;IACF,IAAI,CAAC,OAAO,CAAE,IAAI,IAAK;MACrB,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;MAC7B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,UAAU,GAAI,IAAU,IAC5B,IAAI,YAAY,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC;EAC1H,MAAM,gBAAgB,GACpB,OAAO,gBAAgB,KAAK,WAAW,GACnC,IAAI,GACJ,IAAI,gBAAgB,CAAE,OAAO,IAAK;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAE,MAAM,IAClC,MAAM,CAAC,IAAI,KAAK,YAAY,GACxB,MAAM,CAAC,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,GACjF,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAC5F,CAAC;IACD,IAAI,CAAC,OAAO,EAAE;IACd,iBAAiB,CAAC,CAAC;IACnB,iBAAiB,CAAC,CAAC;EACrB,CAAC,CAAC;EAER,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAA8B,CAAC;EACzE,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAA0B,CAAC;EACjE,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAA0B,CAAC;EACjE,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAA8B,CAAC;EACzE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;EAC3C,iBAAiB,CAAC,CAAC;EACnB,gBAAgB,EAAE,OAAO,CAAC,SAAS,EAAE;IACnC,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,CAAC,QAAQ,CAAC;IAC3B,SAAS,EAAE,IAAI;IACf,OAAO,EAAE;EACX,CAAC,CAAC;EACF,iBAAiB,CAAC,CAAC;EACnB,OAAO,MAAM;IACX,eAAe,CAAC,CAAC;IACjB;IACA;IACA,UAAU,CAAC,CAAC;IACZ,IAAI,cAAc,KAAK,IAAI,EAAE,oBAAoB,CAAC,cAAc,CAAC;IACjE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC9B,cAAc,EAAE,UAAU,CAAC,CAAC;IAC5B,aAAa,CAAC,KAAK,CAAC,CAAC;IACrB,SAAS,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAA8B,CAAC;IAC5E,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAA0B,CAAC;IACpE,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAA0B,CAAC;IACpE,SAAS,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAA8B,CAAC;IAC5E,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;EAChD,CAAC;AACH,CAAC","ignoreList":[]}
@@ -322,14 +322,14 @@ export function createHoverPreview(options = {}) {
322
322
  leave,
323
323
  focusOut,
324
324
  toggled: visible => {
325
- if (!visible) {
326
- // Light dismissal by the browser: an outside click or another popover.
325
+ // Light dismissal by the browser: an outside click or another popover.
326
+ // The event of a close this controller made itself arrives later, when
327
+ // the pointer may already wait on the next anchor; that delay stays.
328
+ if (!visible && open()) {
327
329
  clear();
328
330
  pinned = undefined;
329
- if (open()) {
330
- setOpen(false);
331
- listen(false);
332
- }
331
+ setOpen(false);
332
+ listen(false);
333
333
  }
334
334
  options.onOpenChange?.(visible);
335
335
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["feedback/HoverPreview.tsx"],"sourcesContent":["import { type Accessor, createEffect, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { positionTooltipSurface } from \"./tooltip-position\";\n\n/** A resting pointer moving from one anchor to another swaps the card this fast. */\nconst SWAP_DELAY = 90;\n/** Grace period for the pointer to travel from an anchor into the card. */\nconst CLOSE_DELAY = 180;\n/** Distance to the region and to the boundary edges. */\nconst GAP = 8;\n/** Keys the wiring between a controller and its `<HoverPreview>`. */\nconst INTERNALS = Symbol(\"k2b-hover-preview\");\n\n/**\n * Where the card opens. By default it opens to the right of its anchor,\n * centered on it or aligned with its bottom edge, and flips or clamps to stay\n * in the viewport. With `beside`, it opens right of that region, such as a list\n * column, top-aligned with the anchor and clamped into `within` (default: the\n * viewport); when the card does not fit there, it does not open at all.\n */\nexport type HoverPreviewPlacement =\n | { align?: \"center\" | \"end\" }\n | { beside: () => HTMLElement | null | undefined; within?: () => HTMLElement | null | undefined };\n\nexport type HoverPreviewOptions<T> = {\n /** Milliseconds a resting mouse waits on an anchor before the card opens. Defaults to 250. */\n openDelay?: number;\n /**\n * How keyboard users open the card: `\"space\"` (default) toggles it with Space\n * on the focused anchor and leaves focus there; `\"focus\"` opens it after the\n * open delay whenever an anchor receives focus.\n */\n keyboard?: \"space\" | \"focus\";\n placement?: HoverPreviewPlacement;\n /** Anchors whose value is disabled open no card; an open card closes once its value becomes disabled. */\n disabled?: (value: T) => boolean;\n /** Runs whenever the card opens or closes, including light dismissal by the browser. */\n onOpenChange?: (open: boolean) => void;\n};\n\nexport type HoverPreviewController<T> = {\n /** Id of the card element, for `aria-controls`. */\n readonly id: string;\n /**\n * Registers an anchor element for `value`; use the result as a `ref`.\n * `trigger` is the control that toggles the card for this anchor; Escape\n * returns focus there when focus is inside the card. Defaults to the anchor.\n */\n anchor: (value: T, trigger?: () => HTMLElement | null | undefined) => (element: HTMLElement) => void;\n /** The value whose card is open, or `undefined` while closed. */\n active: Accessor<T | undefined>;\n /** Opens the card for `value` at once and moves focus into it, or closes it when it is already pinned open. */\n toggle: (value: T) => void;\n /** Closes the card; it reopens for the same anchor only after the pointer left it. */\n close: () => void;\n /** Wiring for `<HoverPreview>`; not part of the public contract. */\n readonly [INTERNALS]: Internals<T>;\n};\n\ntype Anchor<T> = { value: T; element: HTMLElement; trigger?: () => HTMLElement | null | undefined };\n\ntype Internals<T> = {\n current: Accessor<Anchor<T> | undefined>;\n bind: (surface: HTMLElement) => void;\n enterSurface: () => void;\n leave: () => void;\n focusOut: (event: FocusEvent) => void;\n toggled: (open: boolean) => void;\n};\n\n/** Elements that use Space themselves; Space on them never toggles the card. */\nconst OWNS_SPACE = [\n \"button, input, select, textarea, summary, [contenteditable]:not([contenteditable='false'])\",\n ...[\"button\", \"checkbox\", \"switch\", \"radio\", \"option\", \"menuitem\", \"menuitemcheckbox\", \"menuitemradio\", \"tab\", \"treeitem\"].map(\n (role) => `[role='${role}']`,\n ),\n].join(\", \");\n\n/** Open light-dismiss popovers, such as a menu or a date picker, close when another one opens. */\nconst AUTO_POPOVER = \":is([popover=''], [popover='auto' i]):popover-open\";\n\n/**\n * Creates the behavior of one hover preview card shared by a group of anchors,\n * such as the rows of a list. Render the card with `<HoverPreview preview={…}>`.\n */\nexport function createHoverPreview<T>(options: HoverPreviewOptions<T> = {}): HoverPreviewController<T> {\n const id = `k2b-hover-preview-${createUniqueId()}`;\n const anchors = new Set<Anchor<T>>();\n const [current, setCurrent] = createSignal<Anchor<T>>();\n const [open, setOpen] = createSignal(false);\n let surface: HTMLElement | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n /** The anchor whose open delay runs while the card is closed. */\n let pending: Anchor<T> | undefined;\n /** The anchor that Space or `toggle()` opened the card for; only it outlasts the pointer leaving. */\n let pinned: Anchor<T> | undefined;\n let dismissed: Anchor<T> | undefined;\n let ring = true;\n let observer: ResizeObserver | undefined;\n\n const placement = (): HoverPreviewPlacement => options.placement ?? {};\n const region = () => {\n const value = placement();\n return \"beside\" in value ? value : undefined;\n };\n const focusTarget = (anchor: Anchor<T>) => anchor.trigger?.() ?? anchor.element;\n const anchorOf = (node: Node) => [...anchors].find((anchor) => anchor.element.contains(node));\n const clear = () => {\n clearTimeout(timer);\n timer = undefined;\n if (pending && !open()) document.removeEventListener(\"keydown\", escape);\n pending = undefined;\n };\n /** A passive card never closes a menu or another popover someone opened on purpose. */\n const blocked = () =>\n [...document.querySelectorAll(AUTO_POPOVER)].some((popover) => popover !== surface && !(surface && popover.contains(surface)));\n\n /** The boundary rectangle, never larger than the viewport. */\n const bounds = (within: Element | null | undefined) => {\n const rect = within?.getBoundingClientRect();\n return {\n top: Math.max(0, rect?.top ?? 0),\n right: Math.min(window.innerWidth, rect?.right ?? window.innerWidth),\n bottom: Math.min(window.innerHeight, rect?.bottom ?? window.innerHeight),\n };\n };\n /** Room right of the region for the card plus a gap on both sides. Works while the card is hidden. */\n const hasRoom = () => {\n const beside = region();\n if (!beside || !surface) return true;\n const area = beside.beside()?.getBoundingClientRect();\n if (!area) return false;\n const width = surface.getBoundingClientRect().width || Number.parseFloat(getComputedStyle(surface).width) || 0;\n return bounds(beside.within?.()).right - area.right >= width + 2 * GAP;\n };\n const position = () => {\n const anchor = current();\n if (!surface || !anchor) return;\n const beside = region();\n if (beside) {\n const area = beside.beside()?.getBoundingClientRect() ?? anchor.element.getBoundingClientRect();\n const box = bounds(beside.within?.());\n const height = surface.getBoundingClientRect().height;\n const top = anchor.element.getBoundingClientRect().top;\n surface.style.left = `${Math.round(area.right + GAP)}px`;\n surface.style.top = `${Math.round(Math.max(box.top + GAP, Math.min(top, box.bottom - height - GAP)))}px`;\n return;\n }\n positionTooltipSurface(surface, anchor.element, \"right\");\n const value = placement();\n if (!(\"beside\" in value) && value.align === \"end\") {\n const height = surface.getBoundingClientRect().height;\n const bottom = anchor.element.getBoundingClientRect().bottom;\n surface.style.top = `${Math.round(Math.max(8, Math.min(bottom - height, window.innerHeight - height - 8)))}px`;\n }\n };\n\n const escape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n if (!open()) {\n // Escape during the open delay works as if the card had opened and closed.\n if (pending) dismissed = pending;\n clear();\n return;\n }\n // Focus in the card goes back to the trigger: handled here, so the browser\n // neither returns it itself nor lights the ring for this key. A card the\n // pointer opened leaves the key to other handlers, such as an open modeless dialog.\n if (surface?.contains(document.activeElement)) event.preventDefault();\n dismiss();\n };\n // A card beside a region belongs to a row of a scrolling list: once the list\n // scrolls, another row sits under the pointer, so the card closes. A card\n // beside its anchor follows it.\n const scroll = (event: Event) => {\n const target = event.target;\n if (!region()) return position();\n if (!(target instanceof Node) || surface?.contains(target)) return;\n const anchor = current();\n if (!anchor || target.contains(anchor.element)) hide();\n };\n const resize = () => {\n if (hasRoom()) position();\n else hide();\n };\n const listen = (on: boolean) => {\n if (on) {\n document.addEventListener(\"keydown\", escape);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", resize);\n return;\n }\n document.removeEventListener(\"keydown\", escape);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", resize);\n };\n\n const hide = () => {\n clear();\n pinned = undefined;\n if (!open()) return;\n setOpen(false);\n listen(false);\n try {\n surface?.hidePopover();\n } catch {\n // The card may already be disconnected during cleanup.\n }\n };\n const dismiss = () => {\n const anchor = current();\n dismissed = anchor;\n // Before hiding, so the popover does not return focus on its own.\n if (anchor && surface?.contains(document.activeElement)) returnFocus(focusTarget(anchor), ring);\n hide();\n };\n /**\n * Opens the card for `anchor` or moves it there; `pin` keeps it open after\n * the pointer leaves. Moving the card to another anchor drops an earlier pin.\n * Returns whether it is open for `anchor`.\n */\n const show = (anchor: Anchor<T>, pin: boolean): boolean => {\n clear();\n if (!surface || dismissed === anchor) return false;\n if (options.disabled?.(anchor.value) || !hasRoom()) {\n hide();\n return false;\n }\n if (!open() || current() !== anchor) {\n ring = ringOnReturn(focusTarget(anchor));\n setCurrent(anchor);\n if (!open()) {\n try {\n surface.showPopover();\n } catch {\n return false;\n }\n setOpen(true);\n listen(true);\n }\n position();\n pinned = undefined;\n }\n if (pin) pinned = anchor;\n return true;\n };\n /** Shows `anchor` after `delay`; a keyboard swap (`follow`) carries an existing pin along. */\n const schedule = (anchor: Anchor<T>, delay: number, follow = false) => {\n clear();\n if (!open()) {\n pending = anchor;\n document.addEventListener(\"keydown\", escape);\n }\n timer = setTimeout(() => {\n if (open()) show(anchor, follow && pinned !== undefined);\n else if (blocked()) clear();\n else show(anchor, false);\n }, delay);\n };\n const leave = () => {\n clear();\n dismissed = undefined;\n if (pinned && pinned === current()) return;\n timer = setTimeout(() => {\n // Focus holds the card open inside it, and on the anchor where focus opens it.\n const focused = document.activeElement;\n const held = surface?.contains(focused) || (options.keyboard === \"focus\" && current()?.element.contains(focused));\n if (!held) hide();\n }, CLOSE_DELAY);\n };\n const focusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (next instanceof Node && (surface?.contains(next) || anchorOf(next))) return;\n pinned = undefined;\n leave();\n };\n\n createEffect(() => {\n const anchor = current();\n if (open() && anchor && options.disabled?.(anchor.value)) hide();\n });\n // Only an open card holds global listeners, so a server render that\n // disposes the controller touches no browser globals.\n onCleanup(() => {\n hide();\n observer?.disconnect();\n });\n\n const anchor =\n (value: T, trigger?: () => HTMLElement | null | undefined) =>\n (element: HTMLElement): void => {\n const entry: Anchor<T> = { value, element, trigger };\n anchors.add(entry);\n const pointerEnter = (event: PointerEvent) => {\n // Touch and pen have no resting hover; the card stays a mouse affordance.\n if (event.pointerType !== \"mouse\") return;\n clear();\n if ((open() && current() === entry) || dismissed === entry) return;\n schedule(entry, open() ? SWAP_DELAY : (options.openDelay ?? 250));\n };\n // The open delay counts from the moment the mouse rests. An open card\n // swaps on entering another anchor and ignores movement inside it.\n const pointerMove = (event: PointerEvent) => {\n if (event.pointerType === \"mouse\" && !open() && dismissed !== entry) schedule(entry, options.openDelay ?? 250);\n };\n // A press acts on the row, such as opening it or its menu; a card about to open stays closed.\n const pointerDown = () => clear();\n const focusIn = () => {\n if (open()) {\n if (current() === entry) clear();\n else schedule(entry, SWAP_DELAY, true);\n return;\n }\n clear();\n if (options.keyboard === \"focus\" && dismissed !== entry) schedule(entry, options.openDelay ?? 250);\n };\n const keyDown = (event: KeyboardEvent) => {\n if (options.keyboard === \"focus\" || event.key !== \" \" || event.defaultPrevented) return;\n // Shift+Space keeps scrolling up; other modifiers belong to shortcuts.\n if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) return;\n if (event.target instanceof Element && event.target.matches(OWNS_SPACE)) return;\n event.preventDefault();\n // A held key toggles once; its repeats only keep the page from scrolling.\n if (event.repeat) return;\n if (open() && current() === entry) {\n dismiss();\n return;\n }\n dismissed = undefined;\n show(entry, true);\n };\n element.addEventListener(\"pointerenter\", pointerEnter);\n element.addEventListener(\"pointermove\", pointerMove);\n element.addEventListener(\"pointerdown\", pointerDown);\n element.addEventListener(\"pointerleave\", leave);\n element.addEventListener(\"focusin\", focusIn);\n element.addEventListener(\"focusout\", focusOut);\n element.addEventListener(\"keydown\", keyDown);\n onCleanup(() => {\n anchors.delete(entry);\n if (current() === entry) hide();\n element.removeEventListener(\"pointerenter\", pointerEnter);\n element.removeEventListener(\"pointermove\", pointerMove);\n element.removeEventListener(\"pointerdown\", pointerDown);\n element.removeEventListener(\"pointerleave\", leave);\n element.removeEventListener(\"focusin\", focusIn);\n element.removeEventListener(\"focusout\", focusOut);\n element.removeEventListener(\"keydown\", keyDown);\n });\n };\n\n return {\n id,\n anchor,\n active: () => (open() ? current()?.value : undefined),\n toggle: (value) => {\n const entry = [...anchors].find((candidate) => candidate.value === value);\n if (!entry || !surface) return;\n clear();\n if (open() && pinned === entry && current() === entry) {\n dismiss();\n return;\n }\n // A hover may have opened the card before this click or key press pinned it.\n ring = ringOnReturn(focusTarget(entry));\n dismissed = undefined;\n if (show(entry, true)) surface.focus();\n },\n close: dismiss,\n [INTERNALS]: {\n current,\n bind: (element) => {\n surface = element;\n observer = new ResizeObserver(() => {\n if (open()) position();\n });\n observer.observe(element);\n },\n enterSurface: clear,\n leave,\n focusOut,\n toggled: (visible) => {\n if (!visible) {\n // Light dismissal by the browser: an outside click or another popover.\n clear();\n pinned = undefined;\n if (open()) {\n setOpen(false);\n listen(false);\n }\n }\n options.onOpenChange?.(visible);\n },\n },\n };\n}\n\nexport type HoverPreviewProps<T> = {\n preview: HoverPreviewController<T>;\n /** Accessible name of the card. */\n label: string;\n /** `\"content\"` (default) sizes the card to its content up to 32rem; `\"fixed\"` keeps one 22rem × 20rem box for every anchor. */\n size?: \"content\" | \"fixed\";\n class?: string;\n /** Plain content stays mounted while the card is closed; a function renders the open anchor's value. */\n children: JSX.Element | ((value: T) => JSX.Element);\n};\n\n/**\n * A non-modal card that opens beside the anchor a resting mouse points at.\n * Native popover owns the top layer and light dismissal.\n */\nexport function HoverPreview<T>(props: HoverPreviewProps<T>): JSX.Element {\n const state = props.preview[INTERNALS];\n let surface!: HTMLDivElement;\n onMount(() => state.bind(surface));\n const content = () => {\n const children = props.children;\n if (typeof children !== \"function\") return children;\n return (\n <Show when={state.current()} keyed>\n {(anchor) => children(anchor.value)}\n </Show>\n );\n };\n return (\n <div\n ref={surface}\n id={props.preview.id}\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.label}\n tabIndex={-1}\n class={props.class ? `k2b-hover-preview ${props.class}` : \"k2b-hover-preview\"}\n data-size={props.size ?? \"content\"}\n onPointerEnter={() => state.enterSurface()}\n onPointerLeave={() => state.leave()}\n on:focusout={(event) => state.focusOut(event)}\n onToggle={(event) => state.toggled(event.newState === \"open\")}\n >\n {content()}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["feedback/HoverPreview.tsx"],"sourcesContent":["import { type Accessor, createEffect, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { positionTooltipSurface } from \"./tooltip-position\";\n\n/** A resting pointer moving from one anchor to another swaps the card this fast. */\nconst SWAP_DELAY = 90;\n/** Grace period for the pointer to travel from an anchor into the card. */\nconst CLOSE_DELAY = 180;\n/** Distance to the region and to the boundary edges. */\nconst GAP = 8;\n/** Keys the wiring between a controller and its `<HoverPreview>`. */\nconst INTERNALS = Symbol(\"k2b-hover-preview\");\n\n/**\n * Where the card opens. By default it opens to the right of its anchor,\n * centered on it or aligned with its bottom edge, and flips or clamps to stay\n * in the viewport. With `beside`, it opens right of that region, such as a list\n * column, top-aligned with the anchor and clamped into `within` (default: the\n * viewport); when the card does not fit there, it does not open at all.\n */\nexport type HoverPreviewPlacement =\n | { align?: \"center\" | \"end\" }\n | { beside: () => HTMLElement | null | undefined; within?: () => HTMLElement | null | undefined };\n\nexport type HoverPreviewOptions<T> = {\n /** Milliseconds a resting mouse waits on an anchor before the card opens. Defaults to 250. */\n openDelay?: number;\n /**\n * How keyboard users open the card: `\"space\"` (default) toggles it with Space\n * on the focused anchor and leaves focus there; `\"focus\"` opens it after the\n * open delay whenever an anchor receives focus.\n */\n keyboard?: \"space\" | \"focus\";\n placement?: HoverPreviewPlacement;\n /** Anchors whose value is disabled open no card; an open card closes once its value becomes disabled. */\n disabled?: (value: T) => boolean;\n /** Runs whenever the card opens or closes, including light dismissal by the browser. */\n onOpenChange?: (open: boolean) => void;\n};\n\nexport type HoverPreviewController<T> = {\n /** Id of the card element, for `aria-controls`. */\n readonly id: string;\n /**\n * Registers an anchor element for `value`; use the result as a `ref`.\n * `trigger` is the control that toggles the card for this anchor; Escape\n * returns focus there when focus is inside the card. Defaults to the anchor.\n */\n anchor: (value: T, trigger?: () => HTMLElement | null | undefined) => (element: HTMLElement) => void;\n /** The value whose card is open, or `undefined` while closed. */\n active: Accessor<T | undefined>;\n /** Opens the card for `value` at once and moves focus into it, or closes it when it is already pinned open. */\n toggle: (value: T) => void;\n /** Closes the card; it reopens for the same anchor only after the pointer left it. */\n close: () => void;\n /** Wiring for `<HoverPreview>`; not part of the public contract. */\n readonly [INTERNALS]: Internals<T>;\n};\n\ntype Anchor<T> = { value: T; element: HTMLElement; trigger?: () => HTMLElement | null | undefined };\n\ntype Internals<T> = {\n current: Accessor<Anchor<T> | undefined>;\n bind: (surface: HTMLElement) => void;\n enterSurface: () => void;\n leave: () => void;\n focusOut: (event: FocusEvent) => void;\n toggled: (open: boolean) => void;\n};\n\n/** Elements that use Space themselves; Space on them never toggles the card. */\nconst OWNS_SPACE = [\n \"button, input, select, textarea, summary, [contenteditable]:not([contenteditable='false'])\",\n ...[\"button\", \"checkbox\", \"switch\", \"radio\", \"option\", \"menuitem\", \"menuitemcheckbox\", \"menuitemradio\", \"tab\", \"treeitem\"].map(\n (role) => `[role='${role}']`,\n ),\n].join(\", \");\n\n/** Open light-dismiss popovers, such as a menu or a date picker, close when another one opens. */\nconst AUTO_POPOVER = \":is([popover=''], [popover='auto' i]):popover-open\";\n\n/**\n * Creates the behavior of one hover preview card shared by a group of anchors,\n * such as the rows of a list. Render the card with `<HoverPreview preview={…}>`.\n */\nexport function createHoverPreview<T>(options: HoverPreviewOptions<T> = {}): HoverPreviewController<T> {\n const id = `k2b-hover-preview-${createUniqueId()}`;\n const anchors = new Set<Anchor<T>>();\n const [current, setCurrent] = createSignal<Anchor<T>>();\n const [open, setOpen] = createSignal(false);\n let surface: HTMLElement | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n /** The anchor whose open delay runs while the card is closed. */\n let pending: Anchor<T> | undefined;\n /** The anchor that Space or `toggle()` opened the card for; only it outlasts the pointer leaving. */\n let pinned: Anchor<T> | undefined;\n let dismissed: Anchor<T> | undefined;\n let ring = true;\n let observer: ResizeObserver | undefined;\n\n const placement = (): HoverPreviewPlacement => options.placement ?? {};\n const region = () => {\n const value = placement();\n return \"beside\" in value ? value : undefined;\n };\n const focusTarget = (anchor: Anchor<T>) => anchor.trigger?.() ?? anchor.element;\n const anchorOf = (node: Node) => [...anchors].find((anchor) => anchor.element.contains(node));\n const clear = () => {\n clearTimeout(timer);\n timer = undefined;\n if (pending && !open()) document.removeEventListener(\"keydown\", escape);\n pending = undefined;\n };\n /** A passive card never closes a menu or another popover someone opened on purpose. */\n const blocked = () =>\n [...document.querySelectorAll(AUTO_POPOVER)].some((popover) => popover !== surface && !(surface && popover.contains(surface)));\n\n /** The boundary rectangle, never larger than the viewport. */\n const bounds = (within: Element | null | undefined) => {\n const rect = within?.getBoundingClientRect();\n return {\n top: Math.max(0, rect?.top ?? 0),\n right: Math.min(window.innerWidth, rect?.right ?? window.innerWidth),\n bottom: Math.min(window.innerHeight, rect?.bottom ?? window.innerHeight),\n };\n };\n /** Room right of the region for the card plus a gap on both sides. Works while the card is hidden. */\n const hasRoom = () => {\n const beside = region();\n if (!beside || !surface) return true;\n const area = beside.beside()?.getBoundingClientRect();\n if (!area) return false;\n const width = surface.getBoundingClientRect().width || Number.parseFloat(getComputedStyle(surface).width) || 0;\n return bounds(beside.within?.()).right - area.right >= width + 2 * GAP;\n };\n const position = () => {\n const anchor = current();\n if (!surface || !anchor) return;\n const beside = region();\n if (beside) {\n const area = beside.beside()?.getBoundingClientRect() ?? anchor.element.getBoundingClientRect();\n const box = bounds(beside.within?.());\n const height = surface.getBoundingClientRect().height;\n const top = anchor.element.getBoundingClientRect().top;\n surface.style.left = `${Math.round(area.right + GAP)}px`;\n surface.style.top = `${Math.round(Math.max(box.top + GAP, Math.min(top, box.bottom - height - GAP)))}px`;\n return;\n }\n positionTooltipSurface(surface, anchor.element, \"right\");\n const value = placement();\n if (!(\"beside\" in value) && value.align === \"end\") {\n const height = surface.getBoundingClientRect().height;\n const bottom = anchor.element.getBoundingClientRect().bottom;\n surface.style.top = `${Math.round(Math.max(8, Math.min(bottom - height, window.innerHeight - height - 8)))}px`;\n }\n };\n\n const escape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n if (!open()) {\n // Escape during the open delay works as if the card had opened and closed.\n if (pending) dismissed = pending;\n clear();\n return;\n }\n // Focus in the card goes back to the trigger: handled here, so the browser\n // neither returns it itself nor lights the ring for this key. A card the\n // pointer opened leaves the key to other handlers, such as an open modeless dialog.\n if (surface?.contains(document.activeElement)) event.preventDefault();\n dismiss();\n };\n // A card beside a region belongs to a row of a scrolling list: once the list\n // scrolls, another row sits under the pointer, so the card closes. A card\n // beside its anchor follows it.\n const scroll = (event: Event) => {\n const target = event.target;\n if (!region()) return position();\n if (!(target instanceof Node) || surface?.contains(target)) return;\n const anchor = current();\n if (!anchor || target.contains(anchor.element)) hide();\n };\n const resize = () => {\n if (hasRoom()) position();\n else hide();\n };\n const listen = (on: boolean) => {\n if (on) {\n document.addEventListener(\"keydown\", escape);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", resize);\n return;\n }\n document.removeEventListener(\"keydown\", escape);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", resize);\n };\n\n const hide = () => {\n clear();\n pinned = undefined;\n if (!open()) return;\n setOpen(false);\n listen(false);\n try {\n surface?.hidePopover();\n } catch {\n // The card may already be disconnected during cleanup.\n }\n };\n const dismiss = () => {\n const anchor = current();\n dismissed = anchor;\n // Before hiding, so the popover does not return focus on its own.\n if (anchor && surface?.contains(document.activeElement)) returnFocus(focusTarget(anchor), ring);\n hide();\n };\n /**\n * Opens the card for `anchor` or moves it there; `pin` keeps it open after\n * the pointer leaves. Moving the card to another anchor drops an earlier pin.\n * Returns whether it is open for `anchor`.\n */\n const show = (anchor: Anchor<T>, pin: boolean): boolean => {\n clear();\n if (!surface || dismissed === anchor) return false;\n if (options.disabled?.(anchor.value) || !hasRoom()) {\n hide();\n return false;\n }\n if (!open() || current() !== anchor) {\n ring = ringOnReturn(focusTarget(anchor));\n setCurrent(anchor);\n if (!open()) {\n try {\n surface.showPopover();\n } catch {\n return false;\n }\n setOpen(true);\n listen(true);\n }\n position();\n pinned = undefined;\n }\n if (pin) pinned = anchor;\n return true;\n };\n /** Shows `anchor` after `delay`; a keyboard swap (`follow`) carries an existing pin along. */\n const schedule = (anchor: Anchor<T>, delay: number, follow = false) => {\n clear();\n if (!open()) {\n pending = anchor;\n document.addEventListener(\"keydown\", escape);\n }\n timer = setTimeout(() => {\n if (open()) show(anchor, follow && pinned !== undefined);\n else if (blocked()) clear();\n else show(anchor, false);\n }, delay);\n };\n const leave = () => {\n clear();\n dismissed = undefined;\n if (pinned && pinned === current()) return;\n timer = setTimeout(() => {\n // Focus holds the card open inside it, and on the anchor where focus opens it.\n const focused = document.activeElement;\n const held = surface?.contains(focused) || (options.keyboard === \"focus\" && current()?.element.contains(focused));\n if (!held) hide();\n }, CLOSE_DELAY);\n };\n const focusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (next instanceof Node && (surface?.contains(next) || anchorOf(next))) return;\n pinned = undefined;\n leave();\n };\n\n createEffect(() => {\n const anchor = current();\n if (open() && anchor && options.disabled?.(anchor.value)) hide();\n });\n // Only an open card holds global listeners, so a server render that\n // disposes the controller touches no browser globals.\n onCleanup(() => {\n hide();\n observer?.disconnect();\n });\n\n const anchor =\n (value: T, trigger?: () => HTMLElement | null | undefined) =>\n (element: HTMLElement): void => {\n const entry: Anchor<T> = { value, element, trigger };\n anchors.add(entry);\n const pointerEnter = (event: PointerEvent) => {\n // Touch and pen have no resting hover; the card stays a mouse affordance.\n if (event.pointerType !== \"mouse\") return;\n clear();\n if ((open() && current() === entry) || dismissed === entry) return;\n schedule(entry, open() ? SWAP_DELAY : (options.openDelay ?? 250));\n };\n // The open delay counts from the moment the mouse rests. An open card\n // swaps on entering another anchor and ignores movement inside it.\n const pointerMove = (event: PointerEvent) => {\n if (event.pointerType === \"mouse\" && !open() && dismissed !== entry) schedule(entry, options.openDelay ?? 250);\n };\n // A press acts on the row, such as opening it or its menu; a card about to open stays closed.\n const pointerDown = () => clear();\n const focusIn = () => {\n if (open()) {\n if (current() === entry) clear();\n else schedule(entry, SWAP_DELAY, true);\n return;\n }\n clear();\n if (options.keyboard === \"focus\" && dismissed !== entry) schedule(entry, options.openDelay ?? 250);\n };\n const keyDown = (event: KeyboardEvent) => {\n if (options.keyboard === \"focus\" || event.key !== \" \" || event.defaultPrevented) return;\n // Shift+Space keeps scrolling up; other modifiers belong to shortcuts.\n if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) return;\n if (event.target instanceof Element && event.target.matches(OWNS_SPACE)) return;\n event.preventDefault();\n // A held key toggles once; its repeats only keep the page from scrolling.\n if (event.repeat) return;\n if (open() && current() === entry) {\n dismiss();\n return;\n }\n dismissed = undefined;\n show(entry, true);\n };\n element.addEventListener(\"pointerenter\", pointerEnter);\n element.addEventListener(\"pointermove\", pointerMove);\n element.addEventListener(\"pointerdown\", pointerDown);\n element.addEventListener(\"pointerleave\", leave);\n element.addEventListener(\"focusin\", focusIn);\n element.addEventListener(\"focusout\", focusOut);\n element.addEventListener(\"keydown\", keyDown);\n onCleanup(() => {\n anchors.delete(entry);\n if (current() === entry) hide();\n element.removeEventListener(\"pointerenter\", pointerEnter);\n element.removeEventListener(\"pointermove\", pointerMove);\n element.removeEventListener(\"pointerdown\", pointerDown);\n element.removeEventListener(\"pointerleave\", leave);\n element.removeEventListener(\"focusin\", focusIn);\n element.removeEventListener(\"focusout\", focusOut);\n element.removeEventListener(\"keydown\", keyDown);\n });\n };\n\n return {\n id,\n anchor,\n active: () => (open() ? current()?.value : undefined),\n toggle: (value) => {\n const entry = [...anchors].find((candidate) => candidate.value === value);\n if (!entry || !surface) return;\n clear();\n if (open() && pinned === entry && current() === entry) {\n dismiss();\n return;\n }\n // A hover may have opened the card before this click or key press pinned it.\n ring = ringOnReturn(focusTarget(entry));\n dismissed = undefined;\n if (show(entry, true)) surface.focus();\n },\n close: dismiss,\n [INTERNALS]: {\n current,\n bind: (element) => {\n surface = element;\n observer = new ResizeObserver(() => {\n if (open()) position();\n });\n observer.observe(element);\n },\n enterSurface: clear,\n leave,\n focusOut,\n toggled: (visible) => {\n // Light dismissal by the browser: an outside click or another popover.\n // The event of a close this controller made itself arrives later, when\n // the pointer may already wait on the next anchor; that delay stays.\n if (!visible && open()) {\n clear();\n pinned = undefined;\n setOpen(false);\n listen(false);\n }\n options.onOpenChange?.(visible);\n },\n },\n };\n}\n\nexport type HoverPreviewProps<T> = {\n preview: HoverPreviewController<T>;\n /** Accessible name of the card. */\n label: string;\n /** `\"content\"` (default) sizes the card to its content up to 32rem; `\"fixed\"` keeps one 22rem × 20rem box for every anchor. */\n size?: \"content\" | \"fixed\";\n class?: string;\n /** Plain content stays mounted while the card is closed; a function renders the open anchor's value. */\n children: JSX.Element | ((value: T) => JSX.Element);\n};\n\n/**\n * A non-modal card that opens beside the anchor a resting mouse points at.\n * Native popover owns the top layer and light dismissal.\n */\nexport function HoverPreview<T>(props: HoverPreviewProps<T>): JSX.Element {\n const state = props.preview[INTERNALS];\n let surface!: HTMLDivElement;\n onMount(() => state.bind(surface));\n const content = () => {\n const children = props.children;\n if (typeof children !== \"function\") return children;\n return (\n <Show when={state.current()} keyed>\n {(anchor) => children(anchor.value)}\n </Show>\n );\n };\n return (\n <div\n ref={surface}\n id={props.preview.id}\n popover=\"auto\"\n role=\"dialog\"\n aria-label={props.label}\n tabIndex={-1}\n class={props.class ? `k2b-hover-preview ${props.class}` : \"k2b-hover-preview\"}\n data-size={props.size ?? \"content\"}\n onPointerEnter={() => state.enterSurface()}\n onPointerLeave={() => state.leave()}\n on:focusout={(event) => state.focusOut(event)}\n onToggle={(event) => state.toggled(event.newState === \"open\")}\n >\n {content()}\n </div>\n );\n}\n"],"mappings":";;;;;AAAA,SAAwB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAY,SAAS,EAAE,OAAO,EAAE,IAAI,QAAQ,UAAU;AACxH,SAAS,WAAW,EAAE,YAAY,QAAQ,0BAA0B;AACpE,SAAS,sBAAsB,QAAQ,oBAAoB;;AAE3D;AACA,MAAM,UAAU,GAAG,EAAE;AACrB;AACA,MAAM,WAAW,GAAG,GAAG;AACvB;AACA,MAAM,GAAG,GAAG,CAAC;AACb;AACA,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAmDA;AACA,MAAM,UAAU,GAAG,CACjB,4FAA4F,EAC5F,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,GAAG,CAC3H,IAAI,IAAK,UAAU,IAAI,IAC1B,CAAC,CACF,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEZ;AACA,MAAM,YAAY,GAAG,oDAAoD;;AAEzE;AACA;AACA;AACA;AACA,OAAO,SAAS,kBAAkB,CAAI,OAA+B,GAAG,CAAC,CAAC,EAA6B;EACrG,MAAM,EAAE,GAAG,qBAAqB,cAAc,CAAC,CAAC,EAAE;EAClD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAY,CAAC;EACpC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAY,CAAC;EACvD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC3C,IAAI,OAAgC;EACpC,IAAI,KAAgD;EACpD;EACA,IAAI,OAA8B;EAClC;EACA,IAAI,MAA6B;EACjC,IAAI,SAAgC;EACpC,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,QAAoC;EAExC,MAAM,SAAS,GAAG,MAA6B,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;EACtE,MAAM,MAAM,GAAG,MAAM;IACnB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,OAAO,QAAQ,IAAI,KAAK,GAAG,KAAK,GAAG,SAAS;EAC9C,CAAC;EACD,MAAM,WAAW,GAAI,MAAiB,IAAK,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO;EAC/E,MAAM,QAAQ,GAAI,IAAU,IAAK,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAE,MAAM,IAAK,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAC7F,MAAM,KAAK,GAAG,MAAM;IAClB,YAAY,CAAC,KAAK,CAAC;IACnB,KAAK,GAAG,SAAS;IACjB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC;IACvE,OAAO,GAAG,SAAS;EACrB,CAAC;EACD;EACA,MAAM,OAAO,GAAG,MACd,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAE,OAAO,IAAK,OAAO,KAAK,OAAO,IAAI,EAAE,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;EAEhI;EACA,MAAM,MAAM,GAAI,MAAkC,IAAK;IACrD,MAAM,IAAI,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC5C,OAAO;MACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;MAChC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC;MACpE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,WAAW;IACzE,CAAC;EACH,CAAC;EACD;EACA,MAAM,OAAO,GAAG,MAAM;IACpB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9G,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG;EACxE,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;IACvB,IAAI,MAAM,EAAE;MACV,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;MAC/F,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;MACrC,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM;MACrD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG;MACtD,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI;MACxD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI;MACxG;IACF;IACA,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;MACjD,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM;MACrD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM;MAC5D,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;IAChH;EACF,CAAC;EAED,MAAM,MAAM,GAAI,KAAoB,IAAK;IACvC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;IAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;MACX;MACA,IAAI,OAAO,EAAE,SAAS,GAAG,OAAO;MAChC,KAAK,CAAC,CAAC;MACP;IACF;IACA;IACA;IACA;IACA,IAAI,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACrE,OAAO,CAAC,CAAC;EACX,CAAC;EACD;EACA;EACA;EACA,MAAM,MAAM,GAAI,KAAY,IAAK;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;IAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,IAAI,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;EACxD,CAAC;EACD,MAAM,MAAM,GAAG,MAAM;IACnB,IAAI,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KACrB,IAAI,CAAC,CAAC;EACb,CAAC;EACD,MAAM,MAAM,GAAI,EAAW,IAAK;IAC9B,IAAI,EAAE,EAAE;MACN,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC;MAC5C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;MAC/C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;MACzC;IACF;IACA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC;IAC/C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAClD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;EAC9C,CAAC;EAED,MAAM,IAAI,GAAG,MAAM;IACjB,KAAK,CAAC,CAAC;IACP,MAAM,GAAG,SAAS;IAClB,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;IACb,OAAO,CAAC,KAAK,CAAC;IACd,MAAM,CAAC,KAAK,CAAC;IACb,IAAI;MACF,OAAO,EAAE,WAAW,CAAC,CAAC;IACxB,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC;EACD,MAAM,OAAO,GAAG,MAAM;IACpB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC;IACxB,SAAS,GAAG,MAAM;IAClB;IACA,IAAI,MAAM,IAAI,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;IAC/F,IAAI,CAAC,CAAC;EACR,CAAC;EACD;AACF;AACA;AACA;AACA;EACE,MAAM,IAAI,GAAG,CAAC,MAAiB,EAAE,GAAY,KAAc;IACzD,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,MAAM,EAAE,OAAO,KAAK;IAClD,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;MAClD,IAAI,CAAC,CAAC;MACN,OAAO,KAAK;IACd;IACA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,MAAM,EAAE;MACnC,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;MACxC,UAAU,CAAC,MAAM,CAAC;MAClB,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;QACX,IAAI;UACF,OAAO,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC,MAAM;UACN,OAAO,KAAK;QACd;QACA,OAAO,CAAC,IAAI,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;MACd;MACA,QAAQ,CAAC,CAAC;MACV,MAAM,GAAG,SAAS;IACpB;IACA,IAAI,GAAG,EAAE,MAAM,GAAG,MAAM;IACxB,OAAO,IAAI;EACb,CAAC;EACD;EACA,MAAM,QAAQ,GAAG,CAAC,MAAiB,EAAE,KAAa,EAAE,MAAM,GAAG,KAAK,KAAK;IACrE,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;MACX,OAAO,GAAG,MAAM;MAChB,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC;IAC9C;IACA,KAAK,GAAG,UAAU,CAAC,MAAM;MACvB,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,KACpD,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KACvB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;IAC1B,CAAC,EAAE,KAAK,CAAC;EACX,CAAC;EACD,MAAM,KAAK,GAAG,MAAM;IAClB,KAAK,CAAC,CAAC;IACP,SAAS,GAAG,SAAS;IACrB,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE;IACpC,KAAK,GAAG,UAAU,CAAC,MAAM;MACvB;MACA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa;MACtC,MAAM,IAAI,GAAG,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAE;MACjH,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,WAAW,CAAC;EACjB,CAAC;EACD,MAAM,QAAQ,GAAI,KAAiB,IAAK;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa;IAChC,IAAI,IAAI,YAAY,IAAI,KAAK,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;IACzE,MAAM,GAAG,SAAS;IAClB,KAAK,CAAC,CAAC;EACT,CAAC;EAED,YAAY,CAAC,MAAM;IACjB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;EAClE,CAAC,CAAC;EACF;EACA;EACA,SAAS,CAAC,MAAM;IACd,IAAI,CAAC,CAAC;IACN,QAAQ,EAAE,UAAU,CAAC,CAAC;EACxB,CAAC,CAAC;EAEF,MAAM,MAAM,GACV,CAAC,KAAQ,EAAE,OAA8C,KACxD,OAAoB,IAAW;IAC9B,MAAM,KAAgB,GAAG;MAAE,KAAK;MAAE,OAAO;MAAE;IAAQ,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAClB,MAAM,YAAY,GAAI,KAAmB,IAAK;MAC5C;MACA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;MACnC,KAAK,CAAC,CAAC;MACP,IAAK,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,IAAK,SAAS,KAAK,KAAK,EAAE;MAC5D,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,UAAU,GAAI,OAAO,CAAC,SAAS,IAAI,GAAI,CAAC;IACnE,CAAC;IACD;IACA;IACA,MAAM,WAAW,GAAI,KAAmB,IAAK;MAC3C,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,KAAK,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAChH,CAAC;IACD;IACA,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM;MACpB,IAAI,IAAI,CAAC,CAAC,EAAE;QACV,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC;QACtC;MACF;MACA,KAAK,CAAC,CAAC;MACP,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IACpG,CAAC;IACD,MAAM,OAAO,GAAI,KAAoB,IAAK;MACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAE;MACjF;MACA,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;MACtE,IAAI,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;MACzE,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB;MACA,IAAI,KAAK,CAAC,MAAM,EAAE;MAClB,IAAI,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE;QACjC,OAAO,CAAC,CAAC;QACT;MACF;MACA,SAAS,GAAG,SAAS;MACrB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC;IACtD,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC;IACpD,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC;IACpD,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC;IAC/C,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5C,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9C,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5C,SAAS,CAAC,MAAM;MACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;MACrB,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC;MAC/B,OAAO,CAAC,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC;MACzD,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,WAAW,CAAC;MACvD,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,WAAW,CAAC;MACvD,OAAO,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC;MAClD,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;MAC/C,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC;MACjD,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;IACjD,CAAC,CAAC;EACJ,CAAC;EAEH,OAAO;IACL,EAAE;IACF,MAAM;IACN,MAAM,EAAE,MAAO,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,SAAU;IACrD,MAAM,EAAG,KAAK,IAAK;MACjB,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAE,SAAS,IAAK,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC;MACzE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;MACxB,KAAK,CAAC,CAAC;MACP,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE;QACrD,OAAO,CAAC,CAAC;QACT;MACF;MACA;MACA,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;MACvC,SAAS,GAAG,SAAS;MACrB,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,EAAE,OAAO;IACd,CAAC,SAAS,GAAG;MACX,OAAO;MACP,IAAI,EAAG,OAAO,IAAK;QACjB,OAAO,GAAG,OAAO;QACjB,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM;UAClC,IAAI,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;MAC3B,CAAC;MACD,YAAY,EAAE,KAAK;MACnB,KAAK;MACL,QAAQ;MACR,OAAO,EAAG,OAAO,IAAK;QACpB;QACA;QACA;QACA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,EAAE;UACtB,KAAK,CAAC,CAAC;UACP,MAAM,GAAG,SAAS;UAClB,OAAO,CAAC,KAAK,CAAC;UACd,MAAM,CAAC,KAAK,CAAC;QACf;QACA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;MACjC;IACF;EACF,CAAC;AACH;AAaA;AACA;AACA;AACA;AACA,OAAO,SAAS,YAAY,CAAI,KAA2B,EAAe;EACxE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;EACtC,IAAI,OAAwB;EAC5B,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAClC,MAAM,OAAO,GAAG,MAAM;IACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC/B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,OAAO,QAAQ;IACnD,yBACG,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,OAAO,CAAC,CAAC;MAAA;MAAE,KAAK;MAAA,UAC9B,MAAM,IAAK,QAAQ,CAAC,MAAM,CAAC,KAAK;IAAC;EAGzC,CAAC;EACD,mDAGQ,KAAK,CAAC,OAAO,CAAC,EAAE,uDAGR,KAAK,CAAC,KAAK,yCAEhB,KAAK,CAAC,KAAK,GAAG,8BAAqB,KAAK,CAAC,KAAK,SAAE,GAAG,mBAAmB,gDAClE,KAAK,CAAC,IAAI,IAAI,SAAS,0BAMjC,OAAO,CAAC,CAAC;AAGhB","ignoreList":[]}