@k2b/ui 0.29.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/README.md +2 -2
  2. package/dist/base.css +2 -2
  3. package/dist/browser/actions/Dropdown.js +6 -3
  4. package/dist/browser/actions/Dropdown.js.map +1 -1
  5. package/dist/browser/actions/FilterChip.js +137 -7
  6. package/dist/browser/actions/FilterChip.js.map +1 -1
  7. package/dist/browser/actions/SegmentedControl.js +5 -9
  8. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  9. package/dist/browser/actions/SpotlightSearch.js +6 -3
  10. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  11. package/dist/browser/actions/Tabs.js +5 -2
  12. package/dist/browser/actions/Tabs.js.map +1 -1
  13. package/dist/browser/actions/Toolbar.js +2 -0
  14. package/dist/browser/actions/Toolbar.js.map +1 -1
  15. package/dist/browser/actions/ViewTabs.js +294 -0
  16. package/dist/browser/actions/ViewTabs.js.map +1 -0
  17. package/dist/browser/actions/filter-messages.js +6 -2
  18. package/dist/browser/actions/filter-messages.js.map +1 -1
  19. package/dist/browser/actions/index.js +2 -1
  20. package/dist/browser/actions/index.js.map +1 -1
  21. package/dist/browser/chat/ChatComposer.js +1108 -604
  22. package/dist/browser/chat/ChatComposer.js.map +1 -1
  23. package/dist/browser/chat/ChatDecision.js +146 -84
  24. package/dist/browser/chat/ChatDecision.js.map +1 -1
  25. package/dist/browser/chat/ChatPrimitives.js +292 -159
  26. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  27. package/dist/browser/chat/chat-messages.js +8 -0
  28. package/dist/browser/chat/chat-messages.js.map +1 -1
  29. package/dist/browser/chat/command-search.js +26 -15
  30. package/dist/browser/chat/command-search.js.map +1 -1
  31. package/dist/browser/chat/index.js +4 -2
  32. package/dist/browser/chat/index.js.map +1 -1
  33. package/dist/browser/content/Calendar.js +143 -116
  34. package/dist/browser/content/Calendar.js.map +1 -1
  35. package/dist/browser/content/CalendarWeekView.js +291 -266
  36. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  37. package/dist/browser/content/DataTable.js +224 -155
  38. package/dist/browser/content/DataTable.js.map +1 -1
  39. package/dist/browser/content/MapAttribution.js +27 -0
  40. package/dist/browser/content/MapAttribution.js.map +1 -0
  41. package/dist/browser/content/MapView.js +553 -0
  42. package/dist/browser/content/MapView.js.map +1 -0
  43. package/dist/browser/content/MapViewFrame.js +395 -0
  44. package/dist/browser/content/MapViewFrame.js.map +1 -0
  45. package/dist/browser/content/data-table-messages.js +4 -2
  46. package/dist/browser/content/data-table-messages.js.map +1 -1
  47. package/dist/browser/content/index.js +5 -0
  48. package/dist/browser/content/index.js.map +1 -1
  49. package/dist/browser/content/map-palette.js +39 -0
  50. package/dist/browser/content/map-palette.js.map +1 -0
  51. package/dist/browser/content/map-style.js +276 -0
  52. package/dist/browser/content/map-style.js.map +1 -0
  53. package/dist/browser/content/map-view-geometry.js +269 -0
  54. package/dist/browser/content/map-view-geometry.js.map +1 -0
  55. package/dist/browser/content/map-view-live.js +28 -0
  56. package/dist/browser/content/map-view-live.js.map +1 -0
  57. package/dist/browser/content/map-view-messages.js +53 -0
  58. package/dist/browser/content/map-view-messages.js.map +1 -0
  59. package/dist/browser/content/map-view-types.js +2 -0
  60. package/dist/browser/content/map-view-types.js.map +1 -0
  61. package/dist/browser/content/map-view-worker.js +10 -0
  62. package/dist/browser/feedback/MovedHint.js +197 -0
  63. package/dist/browser/feedback/MovedHint.js.map +1 -0
  64. package/dist/browser/feedback/dialog-core.js +85 -9
  65. package/dist/browser/feedback/dialog-core.js.map +1 -1
  66. package/dist/browser/feedback/index.js +1 -0
  67. package/dist/browser/feedback/index.js.map +1 -1
  68. package/dist/browser/feedback/prompts.js +6 -1
  69. package/dist/browser/feedback/prompts.js.map +1 -1
  70. package/dist/browser/inputs/DatePicker.js +337 -212
  71. package/dist/browser/inputs/DatePicker.js.map +1 -1
  72. package/dist/browser/inputs/date-picker.js +59 -5
  73. package/dist/browser/inputs/date-picker.js.map +1 -1
  74. package/dist/browser/intl/messages.js +12 -0
  75. package/dist/browser/intl/messages.js.map +1 -1
  76. package/dist/browser/intl/weekend.js +39 -0
  77. package/dist/browser/intl/weekend.js.map +1 -0
  78. package/dist/browser/layout/AppOverview.js +0 -1
  79. package/dist/browser/layout/AppOverview.js.map +1 -1
  80. package/dist/browser/layout/AppWorkspace.js +701 -476
  81. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  82. package/dist/browser/layout/PageTitle.js +3 -2
  83. package/dist/browser/layout/PageTitle.js.map +1 -1
  84. package/dist/browser/layout/SettingsModal.js +2 -2
  85. package/dist/browser/layout/SettingsModal.js.map +1 -1
  86. package/dist/browser/layout/SidebarSwitcher.js +13 -12
  87. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  88. package/dist/browser/layout/TabBar.js +1 -1
  89. package/dist/browser/layout/TabBar.js.map +1 -1
  90. package/dist/browser/layout/app-host-width.js +44 -0
  91. package/dist/browser/layout/app-host-width.js.map +1 -0
  92. package/dist/browser/layout/app-workspace-controller.js +331 -45
  93. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  94. package/dist/browser/layout/app-workspace-width.js +26 -0
  95. package/dist/browser/layout/app-workspace-width.js.map +1 -0
  96. package/dist/browser/layout/index.js +2 -1
  97. package/dist/browser/layout/index.js.map +1 -1
  98. package/dist/browser/surfaces/Placeholder.js +36 -13
  99. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  100. package/dist/licenses/maplibre-gl.txt +116 -0
  101. package/dist/ssr/actions/Dropdown.js +5 -2
  102. package/dist/ssr/actions/Dropdown.js.map +1 -1
  103. package/dist/ssr/actions/FilterChip.js +59 -7
  104. package/dist/ssr/actions/FilterChip.js.map +1 -1
  105. package/dist/ssr/actions/SegmentedControl.js +1 -2
  106. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  107. package/dist/ssr/actions/SpotlightSearch.js +2 -2
  108. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  109. package/dist/ssr/actions/Tabs.js +2 -2
  110. package/dist/ssr/actions/Tabs.js.map +1 -1
  111. package/dist/ssr/actions/Toolbar.js +2 -0
  112. package/dist/ssr/actions/Toolbar.js.map +1 -1
  113. package/dist/ssr/actions/ViewTabs.js +211 -0
  114. package/dist/ssr/actions/ViewTabs.js.map +1 -0
  115. package/dist/ssr/actions/filter-messages.js +6 -2
  116. package/dist/ssr/actions/filter-messages.js.map +1 -1
  117. package/dist/ssr/actions/index.js +2 -1
  118. package/dist/ssr/actions/index.js.map +1 -1
  119. package/dist/ssr/chat/ChatComposer.js +546 -131
  120. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  121. package/dist/ssr/chat/ChatDecision.js +44 -19
  122. package/dist/ssr/chat/ChatDecision.js.map +1 -1
  123. package/dist/ssr/chat/ChatPrimitives.js +95 -24
  124. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  125. package/dist/ssr/chat/chat-messages.js +8 -0
  126. package/dist/ssr/chat/chat-messages.js.map +1 -1
  127. package/dist/ssr/chat/command-search.js +26 -15
  128. package/dist/ssr/chat/command-search.js.map +1 -1
  129. package/dist/ssr/chat/index.js +4 -2
  130. package/dist/ssr/chat/index.js.map +1 -1
  131. package/dist/ssr/content/Calendar.js +109 -100
  132. package/dist/ssr/content/Calendar.js.map +1 -1
  133. package/dist/ssr/content/CalendarWeekView.js +42 -28
  134. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  135. package/dist/ssr/content/DataTable.js +78 -31
  136. package/dist/ssr/content/DataTable.js.map +1 -1
  137. package/dist/ssr/content/MapAttribution.js +19 -0
  138. package/dist/ssr/content/MapAttribution.js.map +1 -0
  139. package/dist/ssr/content/MapView.js +474 -0
  140. package/dist/ssr/content/MapView.js.map +1 -0
  141. package/dist/ssr/content/MapViewFrame.js +193 -0
  142. package/dist/ssr/content/MapViewFrame.js.map +1 -0
  143. package/dist/ssr/content/data-table-messages.js +4 -2
  144. package/dist/ssr/content/data-table-messages.js.map +1 -1
  145. package/dist/ssr/content/index.js +5 -0
  146. package/dist/ssr/content/index.js.map +1 -1
  147. package/dist/ssr/content/map-palette.js +39 -0
  148. package/dist/ssr/content/map-palette.js.map +1 -0
  149. package/dist/ssr/content/map-style.js +276 -0
  150. package/dist/ssr/content/map-style.js.map +1 -0
  151. package/dist/ssr/content/map-view-geometry.js +269 -0
  152. package/dist/ssr/content/map-view-geometry.js.map +1 -0
  153. package/dist/ssr/content/map-view-live.js +1 -0
  154. package/dist/ssr/content/map-view-messages.js +53 -0
  155. package/dist/ssr/content/map-view-messages.js.map +1 -0
  156. package/dist/ssr/content/map-view-types.js +2 -0
  157. package/dist/ssr/content/map-view-types.js.map +1 -0
  158. package/dist/ssr/feedback/MovedHint.js +166 -0
  159. package/dist/ssr/feedback/MovedHint.js.map +1 -0
  160. package/dist/ssr/feedback/dialog-core.js +85 -9
  161. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  162. package/dist/ssr/feedback/index.js +1 -0
  163. package/dist/ssr/feedback/index.js.map +1 -1
  164. package/dist/ssr/feedback/prompts.js +6 -1
  165. package/dist/ssr/feedback/prompts.js.map +1 -1
  166. package/dist/ssr/inputs/DatePicker.js +138 -69
  167. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  168. package/dist/ssr/inputs/date-picker.js +59 -5
  169. package/dist/ssr/inputs/date-picker.js.map +1 -1
  170. package/dist/ssr/intl/messages.js +12 -0
  171. package/dist/ssr/intl/messages.js.map +1 -1
  172. package/dist/ssr/intl/weekend.js +39 -0
  173. package/dist/ssr/intl/weekend.js.map +1 -0
  174. package/dist/ssr/layout/AppOverview.js +0 -1
  175. package/dist/ssr/layout/AppOverview.js.map +1 -1
  176. package/dist/ssr/layout/AppWorkspace.js +216 -44
  177. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  178. package/dist/ssr/layout/PageTitle.js +3 -2
  179. package/dist/ssr/layout/PageTitle.js.map +1 -1
  180. package/dist/ssr/layout/SettingsModal.js +2 -2
  181. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  182. package/dist/ssr/layout/SidebarSwitcher.js +13 -12
  183. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  184. package/dist/ssr/layout/TabBar.js +1 -1
  185. package/dist/ssr/layout/TabBar.js.map +1 -1
  186. package/dist/ssr/layout/app-host-width.js +44 -0
  187. package/dist/ssr/layout/app-host-width.js.map +1 -0
  188. package/dist/ssr/layout/app-workspace-controller.js +331 -45
  189. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  190. package/dist/ssr/layout/app-workspace-width.js +26 -0
  191. package/dist/ssr/layout/app-workspace-width.js.map +1 -0
  192. package/dist/ssr/layout/index.js +2 -1
  193. package/dist/ssr/layout/index.js.map +1 -1
  194. package/dist/ssr/surfaces/Placeholder.js +24 -7
  195. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  196. package/dist/styles.css +1 -1
  197. package/dist/types/actions/Dropdown.d.ts +4 -0
  198. package/dist/types/actions/FilterChip.d.ts +22 -0
  199. package/dist/types/actions/ViewTabs.d.ts +30 -0
  200. package/dist/types/actions/filter-messages.d.ts +2 -0
  201. package/dist/types/actions/index.d.ts +4 -2
  202. package/dist/types/chat/ChatComposer.d.ts +52 -0
  203. package/dist/types/chat/ChatDecision.d.ts +18 -2
  204. package/dist/types/chat/ChatPrimitives.d.ts +10 -0
  205. package/dist/types/chat/chat-messages.d.ts +4 -0
  206. package/dist/types/chat/command-search.d.ts +2 -0
  207. package/dist/types/chat/index.d.ts +9 -8
  208. package/dist/types/content/DataTable.d.ts +3 -0
  209. package/dist/types/content/MapAttribution.d.ts +6 -0
  210. package/dist/types/content/MapView.d.ts +5 -0
  211. package/dist/types/content/MapViewFrame.d.ts +31 -0
  212. package/dist/types/content/data-table-messages.d.ts +1 -0
  213. package/dist/types/content/index.d.ts +6 -0
  214. package/dist/types/content/map-palette.d.ts +58 -0
  215. package/dist/types/content/map-style.d.ts +29 -0
  216. package/dist/types/content/map-view-geometry.d.ts +55 -0
  217. package/dist/types/content/map-view-live.d.ts +2 -0
  218. package/dist/types/content/map-view-messages.d.ts +21 -0
  219. package/dist/types/content/map-view-types.d.ts +61 -0
  220. package/dist/types/feedback/MovedHint.d.ts +25 -0
  221. package/dist/types/feedback/dialog-core.d.ts +6 -2
  222. package/dist/types/feedback/index.d.ts +2 -0
  223. package/dist/types/feedback/prompts.d.ts +2 -0
  224. package/dist/types/inputs/DatePicker.d.ts +7 -0
  225. package/dist/types/inputs/date-picker.d.ts +25 -1
  226. package/dist/types/intl/messages.d.ts +6 -0
  227. package/dist/types/intl/weekend.d.ts +12 -0
  228. package/dist/types/layout/AppWorkspace.d.ts +48 -8
  229. package/dist/types/layout/app-host-width.d.ts +6 -0
  230. package/dist/types/layout/app-workspace-width.d.ts +13 -0
  231. package/dist/types/layout/index.d.ts +3 -2
  232. package/dist/types/surfaces/Placeholder.d.ts +2 -1
  233. package/map-glyphs/IBM Plex Sans Medium/0-255.pbf +0 -0
  234. package/map-glyphs/IBM Plex Sans Medium/1024-1279.pbf +0 -0
  235. package/map-glyphs/IBM Plex Sans Medium/256-511.pbf +0 -0
  236. package/map-glyphs/IBM Plex Sans Medium/512-767.pbf +0 -0
  237. package/map-glyphs/IBM Plex Sans Medium/768-1023.pbf +0 -0
  238. package/map-glyphs/IBM Plex Sans Medium/7680-7935.pbf +0 -0
  239. package/map-glyphs/IBM Plex Sans Medium/8192-8447.pbf +0 -0
  240. package/map-glyphs/IBM Plex Sans Medium/8448-8703.pbf +0 -0
  241. package/map-glyphs/IBM Plex Sans Medium/8704-8959.pbf +0 -0
  242. package/map-glyphs/OFL.txt +93 -0
  243. package/package.json +11 -6
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\nimport { prefersReducedMotion } from \"../motion\";\nimport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n /** A hideable sidebar dragged below half its minimum previews the hidden state. */\n hiding: boolean;\n direction: 1 | -1;\n releaseTextSelection: () => void;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst TOGGLE_SELECTOR = \"[data-app-workspace-sidebar-toggle]\";\n/** Touch-tablet gestures remain viewport decisions. */\nconst TOUCH_DRAWER_QUERY = \"(min-width: 48rem) and (max-width: 63.999rem) and (pointer: coarse)\";\nconst DETAIL_TOGGLE_SELECTOR = \"[data-app-workspace-detail-toggle]\";\nconst DETAIL_DRAWER_SELECTOR = '.k2b-app-workspace__detail[data-workspace-detail-drawer=\"open\"]';\nconst cssState = (element: HTMLElement, name: string) => getComputedStyle(element).getPropertyValue(name).trim();\nconst detailWaiting = (aside: HTMLElement) => cssState(aside, \"--k2b-workspace-detail-waiting\") === \"1\";\nconst detailDrawer = (aside: HTMLElement) => aside.dataset.workspaceDetailDrawer === \"open\";\nconst detailToggle = (aside: HTMLElement) => {\n const root = workspaceRoot(aside);\n return rootElements(root ?? aside, DETAIL_TOGGLE_SELECTOR).find((toggle) => toggle.getAttribute(\"aria-controls\") === aside.id);\n};\n// The trail's registered property accepts a length, not the drawer's percentage\n// cap. Only a user-opened drawer needs this measurement; the first frame stays CSS-owned.\nconst detailDrawerContent = (aside: HTMLElement) => aside.closest<HTMLElement>(\".k2b-app-workspace__content\");\nconst syncDetailDrawerSpace = (aside: HTMLElement) =>\n detailDrawerContent(aside)?.style.setProperty(\"--k2b-detail-space\", `${aside.getBoundingClientRect().width}px`);\nconst parkDetailDrawer = (aside: HTMLElement, focus = false) => {\n if (!detailDrawer(aside)) return;\n delete aside.dataset.workspaceDetailDrawer;\n detailDrawerContent(aside)?.style.removeProperty(\"--k2b-detail-space\");\n const toggle = detailToggle(aside);\n toggle?.setAttribute(\"aria-expanded\", \"false\");\n if (focus) toggle?.focus({ preventScroll: true });\n};\n\n/** Parks open waiting-detail drawers; focus follows only when it was inside one. */\nexport const parkWorkspaceDetailDrawers = (root: ParentNode = document): void => {\n for (const aside of root.querySelectorAll<HTMLElement>(DETAIL_DRAWER_SELECTOR))\n parkDetailDrawer(aside, aside.contains(aside.ownerDocument.activeElement));\n};\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled]):not([type='hidden'])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n/** Text entry, menus, dialogs, and open popups keep their own keys. */\nconst KEY_OWNER_SELECTOR =\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='textbox'], [role='combobox'], [role='searchbox'], [role='spinbutton'], [role='menu'], [role='listbox'], [role='dialog'], dialog, [aria-haspopup]:not([aria-haspopup='false'])[aria-expanded='true']\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst sidebarHideable = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceHideable === \"true\";\n/**\n * Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop\n * stays application state, so the controller only requests the change.\n */\nexport const APP_WORKSPACE_SIDEBAR_HIDE_EVENT = \"k2b-app-workspace-sidebar-hide\";\n/** Asks the owning `AppWorkspace.Detail` to close; its `onClose` decides. */\nexport const APP_WORKSPACE_DETAIL_CLOSE_EVENT = \"k2b-app-workspace-detail-close\";\n/**\n * Asks the owning Detail to step by `detail.direction` (`-1` or `1`). It writes\n * the Main element showing the selection to `detail.item`, read synchronously\n * by the controller after dispatch.\n */\nexport const APP_WORKSPACE_DETAIL_STEP_EVENT = \"k2b-app-workspace-detail-step\";\nexport type AppWorkspaceDetailStep = { direction: 1 | -1; item?: HTMLElement };\nconst previewSidebarHidden = (root: HTMLElement, hidden: boolean) => {\n const sidebar = sidebarElement(root);\n if (!sidebar) return;\n if (hidden) sidebar.dataset.workspaceHidePreview = \"true\";\n else delete sidebar.dataset.workspaceHidePreview;\n};\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst flexibleLevel = (pane: HTMLElement) => {\n if (!pane.hasAttribute(\"data-workspace-level\")) return false;\n const root = workspaceRoot(pane);\n const widthClass = root ? cssState(root, \"--k2b-workspace-level-class\") : \"\";\n return Boolean(widthClass && pane.dataset.workspaceLevelLast?.split(\" \").includes(widthClass));\n};\nconst levelsMain = (handle: HTMLElement) => handle.closest(\".k2b-app-workspace__main\")?.hasAttribute(\"data-workspace-levels\") ?? false;\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const panel = kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle);\n return (\n panel?.dataset.workspaceResizable === \"true\" &&\n (!panel.hasAttribute(\"data-workspace-level\") || (isVisible(panel) && isVisible(handle) && !flexibleLevel(panel)))\n );\n};\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n !flexibleLevel(pane) &&\n isVisible(pane),\n )\n : [];\n const separatorSize =\n kind === \"pane\" && main\n ? Array.from(main.querySelectorAll<HTMLElement>(`.k2b-app-workspace__resize${HANDLE_SELECTOR}`))\n .filter(\n (separator) =>\n separator.closest(\".k2b-app-workspace__main\") === main && resizeKind(separator) === \"pane\" && isVisible(separator),\n )\n .reduce((total, separator) => {\n const style = getComputedStyle(separator);\n return (\n total +\n Math.max(\n 0,\n separator.getBoundingClientRect().width +\n (Number.parseFloat(style.marginLeft) || 0) +\n (Number.parseFloat(style.marginRight) || 0),\n )\n );\n }, 0)\n : 0;\n // Content ends before the detail track, so its width alone would shrink a\n // persisted panel again on every reconciliation. Measure from Content's\n // start to the workspace's inner end: this includes the detail column and\n // leaves out a desktop sidebar, while an overlay sidebar takes no width.\n const content = kind === \"detail\" ? controlled?.closest<HTMLElement>(\".k2b-app-workspace__content\") : null;\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : content\n ? root.getBoundingClientRect().right - root.clientLeft - content.getBoundingClientRect().left\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"detail\"\n ? 8\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0) + separatorSize\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 if (main.hasAttribute(\"data-workspace-levels\")) {\n // CSS owns the multi-level fit, including a flexible shown-last pane.\n // Keep preferences intact when the window temporarily has less room.\n for (const handle of handles) {\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred = active?.moved && active.handle === handle ? active.liveSize : layoutState.paneWidths?.[panelId(handle)];\n if (preferred !== undefined)\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), `${clamp(preferred, min, max)}px`);\n updateHandleValue(root, handle, \"pane\", currentSize(root, handle, \"pane\"));\n }\n return;\n }\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const 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\ntype OverlaySidebar = { root: HTMLElement; sidebar: HTMLElement; toggle: HTMLElement };\n/** An open overlay remembers the regions it made inert, so it leaves the application's own `inert` alone. */\ntype OpenOverlay = OverlaySidebar & { inerted: HTMLElement[] };\n\n/**\n * The elements Tab stops at, in order. A roving tab index, as in a tree, keeps\n * links and buttons at `tabindex=\"-1\"`; they take focus but are no stops.\n */\nconst tabStopsIn = (container: HTMLElement) =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (element) =>\n element.tabIndex >= 0 &&\n element.getClientRects().length > 0 &&\n !element.closest(\"[inert]\") &&\n getComputedStyle(element).visibility !== \"hidden\",\n );\n/** Several controllers can see one click on a nested workspace's button; the innermost one, which sees it first, owns it. */\nconst claimedToggleClicks = new WeakSet<Event>();\nconst claimedDetailGestures = new WeakSet<Event>();\n\n/**\n * The compact overlay: from 48 to 64 rem the sidebar opens over the work area\n * from the button in the workspace's head. While it is open the rest of\n * the workspace is inert, Tab stays in the sidebar, and Escape, the scrim,\n * choosing an item, hiding the sidebar, or leaving the width range close it\n * again. The state is one attribute on the workspace root, so server-rendered\n * and hydrated workspaces behave the same.\n */\nconst overlayTarget = (toggle: HTMLElement): OverlaySidebar | null => {\n const root = workspaceRoot(toggle);\n // The button belongs to its workspace's own sidebar. A sidebar rendered apart\n // from the head, for example in an island, can carry another id than the one\n // the head named, so the button learns the real one here.\n const sidebar = root ? sidebarElement(root) : null;\n if (!root || !sidebar || sidebar.hidden || sidebar.dataset.mobile === \"stacked\") return null;\n if (sidebar.id) toggle.setAttribute(\"aria-controls\", sidebar.id);\n return { root, sidebar, toggle };\n};\nconst overlayRegions = (root: HTMLElement, sidebar: HTMLElement) =>\n Array.from(root.children)\n .flatMap((child) =>\n child instanceof HTMLElement && (child.localName === \"solid-island\" || child.localName === \"solid-client\")\n ? Array.from(child.children)\n : [child],\n )\n .filter((child): child is HTMLElement => child instanceof HTMLElement && child !== sidebar && !child.contains(sidebar));\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n // A document has no owner document; an element root listens on its own.\n const ownerDocument = eventRoot.ownerDocument ?? document;\n const ownerWindow = ownerDocument.defaultView ?? window;\n let overlay: OpenOverlay | null = null;\n // A server-rendered head names the sidebar before the sidebar renders; the button learns its real id now.\n for (const toggle of eventRoot.querySelectorAll<HTMLElement>(TOGGLE_SELECTOR)) overlayTarget(toggle);\n const openOverlay = (target: OverlaySidebar) => {\n if (overlay) closeOverlay(\"none\");\n const inerted = overlayRegions(target.root, target.sidebar).filter((region) => !region.hasAttribute(\"inert\"));\n overlay = { ...target, inerted };\n target.root.dataset.sidebarOverlay = \"open\";\n target.toggle.setAttribute(\"aria-expanded\", \"true\");\n inerted.forEach((region) => region.setAttribute(\"inert\", \"\"));\n // Focus starts on the current destination, so the reader knows where they\n // are: on its own tab stop, or on the tree item around it.\n const current = target.sidebar.querySelector<HTMLElement>(\"[aria-current='page'], .is-active\");\n const stops = tabStopsIn(target.sidebar);\n const first =\n (current && (stops.find((element) => current.contains(element)) ?? stops.findLast((element) => element.contains(current)))) ??\n stops[0];\n if (first) first.focus();\n else {\n target.sidebar.tabIndex = -1;\n target.sidebar.focus();\n }\n };\n /**\n * `\"button\"` returns focus to the button. `\"kept\"` leaves it where it moved,\n * for example into a dialog an item opened, and only rescues focus that the\n * closing sidebar would hide. `\"none\"` moves nothing, for cleanup.\n */\n const closeOverlay = (focus: \"button\" | \"kept\" | \"none\") => {\n const closing = overlay;\n if (!closing) return;\n overlay = null;\n delete closing.root.dataset.sidebarOverlay;\n closing.toggle.setAttribute(\"aria-expanded\", \"false\");\n closing.inerted.forEach((region) => region.removeAttribute(\"inert\"));\n if (focus === \"none\") return;\n const active = document.activeElement;\n if (focus === \"button\" || !active || active === document.body || closing.sidebar.contains(active)) closing.toggle.focus();\n };\n const onClick = (event: MouseEvent) => {\n const target = eventElement(event);\n const detailButton = target?.closest<HTMLElement>(DETAIL_TOGGLE_SELECTOR);\n if (detailButton) {\n const root = workspaceRoot(detailButton);\n const aside = root ? controlledPanel(root, detailButton) : null;\n if (!aside || aside.hidden || !detailWaiting(aside) || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (detailDrawer(aside)) parkDetailDrawer(aside);\n else {\n aside.dataset.workspaceDetailDrawer = \"open\";\n detailButton.setAttribute(\"aria-expanded\", \"true\");\n syncDetailDrawerSpace(aside);\n if (event.detail === 0) requestTitle(aside);\n else detailButton.focus({ preventScroll: true });\n }\n return;\n }\n const toggle = target?.closest<HTMLElement>(TOGGLE_SELECTOR);\n if (toggle) {\n const next = overlayTarget(toggle);\n if (!next || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (overlay?.sidebar === next.sidebar) closeOverlay(\"button\");\n else if (cssState(next.root, \"--k2b-workspace-sidebar-form\") === \"overlay\") openOverlay(next);\n return;\n }\n if (!overlay || !target) return;\n // The scrim is the workspace root's own pseudo-element.\n if (target === overlay.root) {\n closeOverlay(\"button\");\n return;\n }\n // Choosing a destination closes the overlay: a link, or the button of a\n // row. A tree folder that only expands, a control that opens a popup or\n // expands something, such as a row's preview, and an item's own actions\n // keep it open.\n const control = target.closest<HTMLElement>(\"a[href], button\");\n if (!control || !overlay.sidebar.contains(control)) return;\n if (\n target.closest(\"[data-k2b-nav-tree-toggle]\") ||\n control.closest(\n \"[data-k2b-nav-tree-disclosure], .k2b-app-workspace__sidebar-item-action, .k2b-app-workspace__sidebar-item-actions\",\n ) ||\n control.matches(\"[aria-haspopup], [aria-expanded]\")\n )\n return;\n if (control.matches(\"a[href]\") || control.closest(ITEM_SELECTOR)) closeOverlay(\"kept\");\n };\n const onOverlayKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented) return;\n const target = eventElement(event);\n if (!target) return;\n // Escape also closes it when a click left focus on nothing, so on the body.\n if (overlay && event.key === \"Escape\" && (overlay.sidebar.contains(target) || target === ownerDocument.body)) {\n event.preventDefault();\n closeOverlay(\"button\");\n return;\n }\n const aside = target.closest<HTMLElement>(detailSelector);\n const panel =\n overlay?.sidebar ?? (phone?.matches && aside && !aside.hidden && phonePage(aside) && eventRoot.contains(aside) ? aside : null);\n if (event.key !== \"Tab\") return;\n if (!panel) {\n // Focus outside an open phone page, on the body after a load or on chrome the page covers, enters the page.\n // Dialogs and popovers keep their own Tab order.\n const page = phone?.matches ? allRoots().flatMap(openDetails).find(phonePage) : undefined;\n if (!page || ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\") || target.closest(\"[popover]\")) return;\n if (target !== ownerDocument.body) {\n const rect = target.getBoundingClientRect();\n const hit = ownerDocument.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);\n if (hit && target.contains(hit)) return;\n }\n const stops = tabStopsIn(page);\n event.preventDefault();\n (event.shiftKey ? stops.at(-1) : stops[0])?.focus();\n return;\n }\n if (!panel.contains(target)) return;\n const stops = tabStopsIn(panel);\n const first = stops[0];\n const last = stops.at(-1);\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n // Focus can also rest on an element that is no tab stop, such as a title focused as the panel opened.\n const active = document.activeElement;\n const before = (element: Element | null, other: Element | null) =>\n Boolean(element && other && element.compareDocumentPosition(other) & Node.DOCUMENT_POSITION_FOLLOWING);\n if (event.shiftKey && !stops.some((stop) => before(stop, active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && !stops.some((stop) => before(active, stop))) {\n event.preventDefault();\n first.focus();\n }\n };\n // Whether each open detail waited at the last check, so a column that starts\n // waiting under focus hands that focus to its Details button.\n const detailWasWaiting = new WeakMap<HTMLElement, boolean>();\n const syncHostState = () => {\n if (overlay && cssState(overlay.root, \"--k2b-workspace-sidebar-form\") !== \"overlay\") closeOverlay(\"none\");\n for (const root of allRoots()) {\n // A drawer removed with its panel leaves no space behind in Content.\n for (const content of rootElements(root, \".k2b-app-workspace__content\"))\n if (content.style.getPropertyValue(\"--k2b-detail-space\") && !content.querySelector(DETAIL_DRAWER_SELECTOR))\n content.style.removeProperty(\"--k2b-detail-space\");\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.hidden) {\n detailWasWaiting.delete(aside);\n parkDetailDrawer(aside);\n continue;\n }\n const waiting = detailWaiting(aside);\n const before = detailWasWaiting.get(aside);\n detailWasWaiting.set(aside, waiting);\n if (!waiting) {\n // The Details button hides with the waiting; its focus moves to the returning column's title.\n const toggleFocused = detailToggle(aside)?.contains(ownerDocument.activeElement) ?? false;\n parkDetailDrawer(aside);\n if (toggleFocused) focusTitle(aside);\n } else if (detailDrawer(aside)) syncDetailDrawerSpace(aside);\n else if (before !== true && aside.contains(ownerDocument.activeElement)) detailToggle(aside)?.focus({ preventScroll: true });\n }\n }\n };\n const phone = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(max-width: 47.999rem)\") : null;\n const wide = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(min-width: 48rem)\") : null;\n const touchDrawer = typeof window.matchMedia === \"function\" ? window.matchMedia(TOUCH_DRAWER_QUERY) : null;\n const detailSelector = \".k2b-app-workspace__detail\";\n const grabberSelector = \".k2b-app-workspace__detail-grabber\";\n type RememberedItem = {\n item: HTMLElement;\n cell: HTMLElement | null;\n interaction: \"pointer\" | \"keyboard\";\n scroller: HTMLElement | null;\n scrollTop: number;\n top: number;\n fresh: boolean;\n };\n const detailHidden = new WeakMap<HTMLElement, boolean>();\n const remembered = new WeakMap<HTMLElement, RememberedItem>();\n const lastFocus = new WeakMap<HTMLElement, Element>();\n const touchedDetails = new Set<HTMLElement>();\n // Only a panel blocks scrolling for its touch gestures; a document-wide\n // non-passive listener would make every scroll on the page wait for script.\n const touchMoveAsides = new Set<HTMLElement>();\n const titleTabIndices = new Set<HTMLElement>();\n const motionFrames = new Map<HTMLElement, number>();\n const pendingAnchors = new Map<HTMLElement, () => void>();\n const slides = new Map<HTMLElement, () => void>();\n const motionRoots = new Set<HTMLElement>();\n const revealFrames = new Map<HTMLElement, number>();\n const openDetails = (root: HTMLElement) => rootElements(root, detailSelector).filter((aside) => !aside.hidden);\n const closeControl = (aside: HTMLElement) =>\n Array.from(aside.querySelectorAll<HTMLElement>(\"[data-workspace-detail-close]\")).find(\n (control) => control.closest(detailSelector) === aside,\n );\n const closable = (aside: HTMLElement) => aside.hasAttribute(\"data-workspace-detail-closable\") || Boolean(closeControl(aside));\n const requestClose = (aside: HTMLElement) => {\n if (aside.hasAttribute(\"data-workspace-detail-closable\")) aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_CLOSE_EVENT));\n else closeControl(aside)?.click();\n };\n const scrollerOn = (axis: \"x\" | \"y\", target: Element, boundary: HTMLElement) => {\n for (let element: Element | null = target; element && boundary.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(axis === \"y\" ? getComputedStyle(element).overflowY : getComputedStyle(element).overflowX) &&\n (axis === \"y\" ? element.scrollHeight > element.clientHeight : element.scrollWidth > element.clientWidth)\n )\n return element;\n if (element === boundary) break;\n }\n return null;\n };\n const verticalScroller = (target: Element, boundary: HTMLElement) => scrollerOn(\"y\", target, boundary);\n const refreshItem = (snapshot: RememberedItem) => {\n snapshot.top = snapshot.item.getBoundingClientRect().top;\n snapshot.scrollTop = snapshot.scroller?.scrollTop ?? 0;\n };\n // A table row can exceed its scroller's width, so keep the clicked cell for horizontal reveal.\n const rememberInteraction = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n const previous = remembered.get(root);\n if (previous && openDetails(root).length) refreshItem(previous);\n const main = mainElement(root);\n const item = target.closest<HTMLElement>(FOCUSABLE_SELECTOR);\n if (!main || !item || !main.contains(item) || item.closest(ROOT_SELECTOR) !== root) return;\n if (event instanceof KeyboardEvent && event.key !== \"Enter\" && event.key !== \" \") return;\n const cell = target.closest<HTMLElement>(\"td, th\");\n const snapshot: RememberedItem = {\n item,\n cell: cell && main.contains(cell) && cell.closest(ROOT_SELECTOR) === root ? cell : null,\n interaction: event instanceof KeyboardEvent ? \"keyboard\" : \"pointer\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: true,\n };\n refreshItem(snapshot);\n remembered.set(root, snapshot);\n // Enter in an editor or a field types; only an item that chooses something moves on to its title.\n if (event instanceof KeyboardEvent && !target.closest(KEY_OWNER_SELECTOR)) {\n const aside = openDetails(root).find(isVisible);\n if (aside) requestTitle(aside, true);\n }\n };\n const onDetailFocusIn = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n lastFocus.set(root, target);\n const previous = remembered.get(root);\n // Pointer focus follows pointerdown; keeping that snapshot also keeps the\n // interaction that opened the panel rather than treating focus as a new one.\n if (previous?.item.contains(target)) {\n const main = mainElement(root);\n if (target !== previous.item && target instanceof HTMLElement && main) {\n previous.item = target;\n previous.scroller = verticalScroller(target, main);\n refreshItem(previous);\n }\n return;\n }\n rememberInteraction(event);\n };\n const titleIn = (aside: HTMLElement) => aside.querySelector<HTMLElement>(\"h1, h2, h3, [role='heading']\");\n let focusingTitle: HTMLElement | null = null;\n const focusTitle = (aside: HTMLElement) => {\n const title = titleIn(aside);\n if (!title) return false;\n if (!title.matches(FOCUSABLE_SELECTOR) && !title.hasAttribute(\"tabindex\")) {\n title.tabIndex = -1;\n titleTabIndices.add(title);\n }\n focusingTitle = title;\n try {\n title.focus({ preventScroll: true });\n } finally {\n focusingTitle = null;\n }\n return true;\n };\n let pendingTitle: { aside: HTMLElement; observer: MutationObserver } | null = null;\n const cancelTitle = () => {\n pendingTitle?.observer.disconnect();\n pendingTitle = null;\n };\n // A step from inside the panel can remove the focused element with the old\n // content, so focus falls to the body. The panel keeps owning the steps until\n // focus or a pointer goes elsewhere, so a quick second J still ends on the title.\n let panelStep: HTMLElement | null = null;\n const cancelTitleOnInteraction = (event: Event) => {\n if (event.type !== \"keydown\" && !(event.target instanceof Node && panelStep?.contains(event.target))) panelStep = null;\n if (event.type !== \"focusin\" || event.target !== focusingTitle) cancelTitle();\n };\n const requestTitle = (aside: HTMLElement, waitForChange = false) => {\n cancelTitle();\n if (aside.hidden || !aside.isConnected) return;\n if (!waitForChange && focusTitle(aside)) return;\n const previousTitle = titleIn(aside);\n const previousText = previousTitle?.textContent;\n // Loading fallbacks and selection changes can produce their heading after\n // the opening interaction. A later user action always takes precedence.\n const observer = new MutationObserver(() => {\n if (aside.hidden || !aside.isConnected) {\n cancelTitle();\n return;\n }\n const title = titleIn(aside);\n if (!title || (waitForChange && title === previousTitle && title.textContent === previousText)) return;\n cancelTitle();\n focusTitle(aside);\n });\n pendingTitle = { aside, observer };\n observer.observe(aside, { childList: true, subtree: true, characterData: true });\n // An element-scoped controller cannot see its own root leave the document.\n observer.observe(ownerDocument, { childList: true, subtree: true });\n };\n const phonePage = (aside: HTMLElement) => aside.dataset.workspaceDetailPhone === \"page\";\n const setDetent = (aside: HTMLElement, full: boolean) => {\n if (phonePage(aside)) return;\n touchedDetails.add(aside);\n if (full) aside.dataset.workspaceDetailSheet = \"full\";\n else delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", String(full));\n };\n const clearDrag = (aside: HTMLElement) => {\n aside.style.removeProperty(\"--k2b-workspace-detail-sheet-height\");\n aside.style.removeProperty(\"transform\");\n delete aside.dataset.workspaceDetailDragging;\n };\n const anchorItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem | undefined) => {\n if (!wide?.matches || (touchDrawer?.matches && closable(aside)) || detailDrawer(aside) || !snapshot?.item.isConnected) return;\n if (!mainElement(root)?.contains(snapshot.item) || snapshot.item.closest(ROOT_SELECTOR) !== root) return;\n const scroller = snapshot.scroller;\n if (scroller?.isConnected && scroller.scrollTop === snapshot.scrollTop)\n scroller.scrollTop += snapshot.item.getBoundingClientRect().top - snapshot.top;\n };\n // From 64 rem the workspace does not clip, so the panel's shadow shows on\n // every edge. A panel sliding in or out would cross a framed workspace's\n // edge, so the workspace clips while the panel moves (see the stylesheet).\n const slide = (root: HTMLElement, aside: HTMLElement) => {\n slides.get(root)?.();\n if (!root.hasAttribute(\"data-workspace-motion\") || prefersReducedMotion() || !wide?.matches) return;\n const end = () => {\n aside.removeEventListener(\"transitionend\", onEnd);\n aside.removeEventListener(\"transitioncancel\", onEnd);\n cancelAnimationFrame(frame);\n slides.delete(root);\n delete root.dataset.workspaceDetailSliding;\n };\n const onEnd = (event: TransitionEvent) => {\n if (event.target === aside && event.propertyName === \"transform\") end();\n };\n aside.addEventListener(\"transitionend\", onEnd);\n aside.addEventListener(\"transitioncancel\", onEnd);\n // A slow first frame must not end the clip early, so only a panel that\n // does not slide at all ends it in that frame.\n const frame = requestAnimationFrame(() => {\n const sliding = aside\n .getAnimations?.()\n .some((animation) => \"transitionProperty\" in animation && animation.transitionProperty === \"transform\");\n if (!sliding) end();\n });\n slides.set(root, end);\n root.dataset.workspaceDetailSliding = \"\";\n };\n const revealItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem) => {\n if (phone?.matches && phonePage(aside)) return;\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.set(\n root,\n requestAnimationFrame(() => {\n revealFrames.delete(root);\n if (\n !aside.hidden &&\n aside.isConnected &&\n snapshot.item.isConnected &&\n mainElement(root)?.contains(snapshot.item) &&\n snapshot.item.closest(ROOT_SELECTOR) === root\n ) {\n const behavior = prefersReducedMotion() ? \"auto\" : \"smooth\";\n const main = mainElement(root);\n const cell = snapshot.cell;\n const target = cell?.isConnected && main?.contains(cell) ? cell : snapshot.item;\n if (phone?.matches && main) {\n // The sheet covers Main's lower part, so the item ends 8px above it;\n // the other edges include the scroller's scroll padding, like scrollIntoView.\n const page = ownerDocument.scrollingElement;\n const vertical = verticalScroller(target, main) ?? page;\n const horizontal = scrollerOn(\"x\", target, main) ?? page;\n const bounds = (scroller: Element | null) => {\n if (!scroller || scroller === page) return null;\n const rect = scroller.getBoundingClientRect();\n const style = ownerWindow.getComputedStyle(scroller);\n const padding = (value: string) => Number.parseFloat(value) || 0;\n return {\n top: rect.top + padding(style.scrollPaddingTop),\n left: rect.left + padding(style.scrollPaddingLeft),\n right: rect.right - padding(style.scrollPaddingRight),\n };\n };\n const box = target.getBoundingClientRect();\n const top = Math.max(0, bounds(vertical)?.top ?? 0);\n const left = Math.max(0, bounds(horizontal)?.left ?? 0);\n const right = Math.min(ownerWindow.innerWidth, bounds(horizontal)?.right ?? Infinity);\n const dy = box.top < top ? box.top - top - 8 : Math.max(0, box.bottom - (ownerWindow.innerHeight - aside.offsetHeight) + 8);\n // As with scrollIntoView's \"nearest\", an item past both edges stays put\n // and one wider than the view keeps its start in view.\n const dx =\n box.left < left && box.right > right\n ? 0\n : box.left < left\n ? box.left - left - 8\n : box.right > right\n ? Math.min(box.right - right + 8, Math.max(0, box.left - left - 8))\n : 0;\n if (vertical && vertical === horizontal) {\n if (dy || dx) vertical.scrollBy({ top: dy, left: dx, behavior });\n } else {\n if (dy) vertical?.scrollBy({ top: dy, behavior });\n if (dx) horizontal?.scrollBy({ left: dx, behavior });\n }\n } else target.scrollIntoView({ block: \"nearest\", inline: \"nearest\", behavior });\n }\n }),\n );\n };\n const detailTransition = (aside: HTMLElement, wasHidden: boolean) => {\n const root = aside.closest<HTMLElement>(ROOT_SELECTOR);\n detailHidden.set(aside, Boolean(aside.hidden));\n if (!root || !observedRoots.has(root) || Boolean(aside.hidden) === wasHidden) return;\n pendingAnchors.get(root)?.();\n slide(root, aside);\n touchedDetails.add(aside);\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.delete(root);\n const snapshot = remembered.get(root);\n const followedInteraction = snapshot?.fresh ?? false;\n if (snapshot) snapshot.fresh = false;\n if (aside.hidden) {\n parkDetailDrawer(aside);\n if (pendingTitle?.aside === aside) cancelTitle();\n if (panelStep === aside) panelStep = null;\n if (root.hasAttribute(\"data-workspace-motion\") && !prefersReducedMotion() && wide?.matches) {\n // Closing holds the detail column until the slide ends; anchor after Main widens.\n const cancel = () => {\n root.removeEventListener(\"transitionend\", onTransitionEnd);\n clearTimeout(timer);\n pendingAnchors.delete(root);\n };\n const finish = () => {\n cancel();\n if (aside.hidden && aside.isConnected) anchorItem(root, aside, snapshot);\n };\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.target === root && event.propertyName === \"--k2b-workspace-detail-track\") finish();\n };\n const timer = setTimeout(finish, 300);\n root.addEventListener(\"transitionend\", onTransitionEnd);\n pendingAnchors.set(root, cancel);\n } else anchorItem(root, aside, snapshot);\n const focused = ownerDocument.activeElement;\n if (\n snapshot?.item.isConnected &&\n (aside.contains(lastFocus.get(root) ?? null) || aside.contains(focused) || focused === ownerDocument.body)\n )\n snapshot.item.focus({ preventScroll: true });\n clearDrag(aside);\n if (detailDrag?.aside === aside) finishDetailDrag(true);\n return;\n }\n if (detailWaiting(aside) && !detailDrawer(aside)) return;\n anchorItem(root, aside, snapshot);\n if (phone?.matches) setDetent(aside, false);\n if (followedInteraction && snapshot) {\n revealItem(root, aside, snapshot);\n if (snapshot.interaction === \"keyboard\" || phone?.matches) requestTitle(aside);\n }\n };\n const onDetailKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) return;\n const target = eventElement(event);\n if (!target || target.closest(KEY_OWNER_SELECTOR)) return;\n if (ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\")) return;\n try {\n if (ownerDocument.querySelector(\":popover-open\")) return;\n } catch {\n // Older engines have no popover selector; the other popup guards still apply.\n }\n const root = target.closest<HTMLElement>(ROOT_SELECTOR);\n let aside = target.closest<HTMLElement>(detailSelector);\n if (aside?.hidden || (aside && (!eventRoot.contains(aside) || aside.closest(ROOT_SELECTOR) !== root))) aside = null;\n if (!aside && root && observedRoots.has(root) && (mainElement(root)?.contains(target) || target.closest(DETAIL_TOGGLE_SELECTOR)))\n aside = openDetails(root).find(isVisible) ?? null;\n if (!aside && target === ownerDocument.body) {\n const open = allRoots().flatMap(openDetails).filter(isVisible);\n if (open.length === 1) aside = open[0]!;\n }\n const owningRoot = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!aside || !owningRoot || !isVisible(aside)) return;\n if (event.key === \"Escape\" && detailDrawer(aside)) {\n parkDetailDrawer(aside, true);\n event.preventDefault();\n return;\n }\n if (event.key === \"Escape\" && closable(aside)) requestClose(aside);\n else if (\n (event.key.toLowerCase() === \"j\" || event.key.toLowerCase() === \"k\") &&\n aside.hasAttribute(\"data-workspace-detail-steppable\")\n ) {\n const main = mainElement(owningRoot);\n const inMain = remembered.get(owningRoot)?.item.contains(target) || main?.contains(target);\n const inPanel = aside.contains(target) || (target === ownerDocument.body && panelStep === aside);\n panelStep = inPanel ? aside : null;\n const previousTitle = inPanel ? titleIn(aside) : null;\n const previousText = previousTitle?.textContent;\n const detail: AppWorkspaceDetailStep = { direction: event.key.toLowerCase() === \"j\" ? 1 : -1 };\n aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_STEP_EVENT, { detail }));\n const shown = detail.item;\n const item = shown instanceof HTMLElement && main?.contains(shown) && shown.closest(ROOT_SELECTOR) === owningRoot ? shown : null;\n if (item && main) {\n const snapshot: RememberedItem = {\n item,\n cell: null,\n interaction: \"keyboard\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: false,\n };\n refreshItem(snapshot);\n remembered.set(owningRoot, snapshot);\n revealItem(owningRoot, aside, snapshot);\n }\n const title = titleIn(aside);\n if (item && inMain) item.focus({ preventScroll: true });\n // A panel that swapped its title during the event has the new one now.\n else if (item && inPanel && title && (title !== previousTitle || title.textContent !== previousText)) focusTitle(aside);\n // This key's capture cancelled an earlier step's title request, so a\n // step from the body, even past the last item, asks again.\n else if (inPanel && (item || target === ownerDocument.body)) requestTitle(aside, Boolean(item));\n } else if (event.key === \"F6\") {\n if (aside.contains(target)) {\n const item = remembered.get(owningRoot)?.item;\n const main = mainElement(owningRoot);\n (item?.isConnected ? item : main ? tabStopsIn(main)[0] : null)?.focus({ preventScroll: true });\n } else focusTitle(aside);\n } else return;\n event.preventDefault();\n };\n\n type DetailDrag = {\n aside: HTMLElement;\n source: \"pointer\" | \"sheet\" | \"drawer\";\n target: Element;\n pointerId: number;\n startX: number;\n startY: number;\n startHeight: number;\n full: boolean;\n dx: number;\n dy: number;\n time: number;\n velocity: number;\n moved: boolean;\n releaseTextSelection?: () => void;\n };\n let detailDrag: DetailDrag | null = null;\n let detailDragFrame: number | null = null;\n let suppressedClick: HTMLElement | null = null;\n let suppressedClickTimer: ReturnType<typeof setTimeout> | null = null;\n const paintDetailDrag = () => {\n detailDragFrame = null;\n const drag = detailDrag;\n if (!drag?.moved) return;\n drag.aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(drag.aside);\n if (drag.source === \"drawer\") drag.aside.style.transform = `translateX(${Math.max(0, drag.dx)}px)`;\n else {\n const height = ownerWindow.innerHeight;\n drag.aside.style.setProperty(\n \"--k2b-workspace-detail-sheet-height\",\n `${clamp(drag.startHeight - drag.dy, 0, Math.max(0, height - 8))}px`,\n );\n }\n };\n const scheduleDetailDrag = () => {\n if (detailDragFrame === null) detailDragFrame = requestAnimationFrame(paintDetailDrag);\n };\n const finishDetailDrag = (cancelled: boolean) => {\n const drag = detailDrag;\n if (!drag) return;\n detailDrag = null;\n if (detailDragFrame !== null) cancelAnimationFrame(detailDragFrame);\n detailDragFrame = null;\n drag.releaseTextSelection?.();\n if (drag.source === \"pointer\") {\n if (drag.target instanceof HTMLElement && drag.target.hasPointerCapture?.(drag.pointerId))\n drag.target.releasePointerCapture(drag.pointerId);\n if (drag.moved) {\n suppressedClick = drag.aside;\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n suppressedClickTimer = setTimeout(() => {\n suppressedClick = null;\n suppressedClickTimer = null;\n }, 0);\n }\n }\n clearDrag(drag.aside);\n if (cancelled || !drag.moved) return;\n if (drag.source === \"drawer\") {\n if (drag.dx > 80 || (drag.dx > 30 && drag.velocity > 0.5)) requestClose(drag.aside);\n } else if (drag.dy > 60) {\n setDetent(drag.aside, false);\n if (!drag.full && closable(drag.aside)) requestClose(drag.aside);\n } else if (drag.dy < -60) setDetent(drag.aside, true);\n };\n const beginDetailDrag = (aside: HTMLElement, target: Element, source: DetailDrag[\"source\"], x: number, y: number, pointerId: number) => {\n detailDrag = {\n aside,\n target,\n source,\n pointerId,\n startX: x,\n startY: y,\n startHeight: aside.getBoundingClientRect().height,\n full: aside.dataset.workspaceDetailSheet === \"full\",\n dx: 0,\n dy: 0,\n time: performance.now(),\n velocity: 0,\n moved: false,\n };\n return detailDrag;\n };\n const onSheetPointerDown = (event: Event) => {\n if (!(event instanceof PointerEvent) || !phone?.matches || event.button !== 0 || !event.isPrimary || claimedDetailGestures.has(event))\n return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n if (phonePage(aside)) return;\n const grabber = target.closest<HTMLElement>(grabberSelector);\n if (\n !grabber &&\n (!target.closest(\".k2b-detail-panel__header\") ||\n target.closest(\"a, button, input, select, textarea, [role='button'], [contenteditable]:not([contenteditable='false'])\"))\n )\n return;\n claimedDetailGestures.add(event);\n if (detailDrag) finishDetailDrag(true);\n const drag = beginDetailDrag(aside, grabber ?? target, \"pointer\", event.clientX, event.clientY, event.pointerId);\n drag.releaseTextSelection = suppressTextSelection(event.pointerId);\n if (drag.target instanceof HTMLElement) drag.target.setPointerCapture?.(event.pointerId);\n aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(aside);\n };\n const onSheetPointerMove = (event: PointerEvent) => {\n const drag = detailDrag;\n if (!drag || drag.source !== \"pointer\" || drag.pointerId !== event.pointerId) return;\n drag.dy = event.clientY - drag.startY;\n drag.moved ||= Math.abs(drag.dy) > 4;\n if (drag.moved) scheduleDetailDrag();\n };\n const onSheetPointerEnd = (event: Event) => {\n if (!(event instanceof PointerEvent)) return;\n if (detailDrag?.source === \"pointer\" && detailDrag.pointerId === event.pointerId) finishDetailDrag(event.type !== \"pointerup\");\n };\n const onGrabberClick = (event: Event) => {\n const target = eventElement(event);\n const grabber = target?.closest(grabberSelector);\n const aside = grabber?.closest<HTMLElement>(detailSelector);\n if (!aside || aside.hidden || phonePage(aside) || !phone?.matches || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (suppressedClick === aside && event instanceof MouseEvent && event.detail !== 0) {\n event.preventDefault();\n suppressedClick = null;\n return;\n }\n setDetent(aside, aside.dataset.workspaceDetailSheet !== \"full\");\n };\n const ownsTouchGesture = (target: Element, aside: HTMLElement, source: \"sheet\" | \"drawer\") => {\n for (let element: Element | null = target; element && element !== aside; element = element.parentElement) {\n if (\n element.matches(\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='slider'], [draggable='true'], canvas\",\n )\n )\n return true;\n const action = getComputedStyle(element).getPropertyValue(\"touch-action\");\n const horizontal = /\\bpan-(x|left|right)\\b/.test(action);\n const vertical = /\\bpan-(y|up|down)\\b/.test(action);\n if (action.trim() === \"none\" || (source === \"drawer\" ? vertical && !horizontal : horizontal && !vertical)) return true;\n }\n return false;\n };\n const onDetailTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent) || event.touches.length !== 1) {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(true);\n return;\n }\n if (detailDrag || claimedDetailGestures.has(event)) return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const touch = event.touches[0];\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !touch || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n if (phone?.matches && phonePage(aside)) return;\n if (phone?.matches && (verticalScroller(target, aside) ?? aside).scrollTop <= 0) {\n if (!ownsTouchGesture(target, aside, \"sheet\"))\n beginDetailDrag(aside, target, \"sheet\", touch.clientX, touch.clientY, touch.identifier);\n } else if (touchDrawer?.matches && closable(aside)) {\n if (!ownsTouchGesture(target, aside, \"drawer\"))\n beginDetailDrag(aside, target, \"drawer\", touch.clientX, touch.clientY, touch.identifier);\n }\n if (detailDrag) claimedDetailGestures.add(event);\n };\n const onDetailTouchMove = (event: Event) => {\n const drag = detailDrag;\n if (!(event instanceof TouchEvent) || !drag || drag.source === \"pointer\") return;\n const touch = Array.from(event.touches).find((touch) => touch.identifier === drag.pointerId);\n if (!touch || event.touches.length !== 1) {\n finishDetailDrag(true);\n return;\n }\n const dx = touch.clientX - drag.startX;\n const dy = touch.clientY - drag.startY;\n const now = performance.now();\n drag.velocity = (dx - drag.dx) / Math.max(1, now - drag.time);\n drag.time = now;\n drag.dx = dx;\n drag.dy = dy;\n if (!drag.moved) {\n if (drag.source === \"sheet\") {\n if (dy < 0 || (verticalScroller(drag.target, drag.aside) ?? drag.aside).scrollTop > 0) {\n finishDetailDrag(true);\n return;\n }\n if (dy <= 4) return;\n } else {\n if (Math.max(Math.abs(dx), Math.abs(dy)) <= 8) return;\n if (dx <= Math.abs(dy)) {\n finishDetailDrag(true);\n return;\n }\n for (let element: Element | null = drag.target; element && drag.aside.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(getComputedStyle(element).overflowX) &&\n element.scrollWidth > element.clientWidth &&\n element.scrollLeft > 0\n ) {\n finishDetailDrag(true);\n return;\n }\n if (element === drag.aside) break;\n }\n }\n drag.moved = true;\n }\n event.preventDefault();\n scheduleDetailDrag();\n };\n const onDetailTouchEnd = (event: Event) => {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(event.type === \"touchcancel\");\n };\n const onPanelDoubleClick = (event: Event) => {\n const handle = resizeHandle(event);\n const root = handle?.closest<HTMLElement>(ROOT_SELECTOR);\n const kind = handle ? resizeKind(handle) : null;\n if (\n !handle ||\n !root ||\n (kind !== \"detail\" && kind !== \"pane\") ||\n !workspaceResizable(root) ||\n !controlsResizableRegion(root, handle, kind)\n )\n return;\n const key = kind === \"pane\" ? \"paneWidths\" : \"detailWidths\";\n const widths = { ...layoutState[key] };\n delete widths[panelId(handle)];\n layoutState = { ...layoutState, [key]: widths };\n const variable = appWorkspacePanelVariable(kind, panelId(handle));\n root.style.removeProperty(variable);\n // An SSR ancestor may still supply the old preference until the next request.\n if (getComputedStyle(root).getPropertyValue(variable).trim())\n root.style.setProperty(\n variable,\n `${numberData(handle, \"workspaceDefaultSize\", kind === \"pane\" ? APP_WORKSPACE_PANE_DEFAULT : APP_WORKSPACE_DETAIL_DEFAULT)}px`,\n );\n // The siblings fit again around the default width, also in a Main without levels.\n if (kind === \"pane\") reconcilePanes(root, layoutState);\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n options.writeState?.(layoutState);\n };\n\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n // A level resize starts from what is on screen. When the stored widths do\n // not fit beside the flexible level, CSS shrinks the resizable levels (a\n // level without a separator does not shrink), so a step from a shrunk width\n // would land on a preference that shrinks again and jump. The visible\n // resizable levels therefore take their rendered widths as preferences when\n // a step really moves; then they fit, and the step moves exactly by its\n // size. All widths are measured before any is written, because each write\n // reflows the others.\n const settleLevels = (root: HTMLElement, handle: HTMLElement) => {\n const main = handle.closest<HTMLElement>(\".k2b-app-workspace__main\");\n if (!main?.hasAttribute(\"data-workspace-levels\")) return;\n const widths = Array.from(main.querySelectorAll<HTMLElement>(HANDLE_SELECTOR))\n .filter((other) => other.closest(\".k2b-app-workspace__main\") === main && resizeKind(other) === \"pane\")\n .flatMap((other) => {\n const panel = controlledPanel(root, other);\n return isVisible(panel) && !flexibleLevel(panel) && panel.dataset.workspaceResizable === \"true\"\n ? [{ id: panelId(other), width: Math.round(elementSize(panel, \"pane\")) }]\n : [];\n });\n for (const { id, width } of widths) {\n if (layoutState.paneWidths?.[id] === width) continue;\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", id), `${width}px`);\n layoutState = { ...layoutState, paneWidths: { ...layoutState.paneWidths, [id]: width } };\n }\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n const requested = active.startSize + (client - active.startClient) * active.direction;\n // A press without movement, or a drag that the limits stop, changes no\n // level preference, also not a sibling's.\n if (!active.moved && client !== active.startClient && active.kind === \"pane\" && levelsMain(active.handle)) {\n const { min, max } = sizeLimits(active.root, active.handle, \"pane\");\n if (clamp(requested, min, max) === Math.round(currentSize(active.root, active.handle, \"pane\"))) return;\n settleLevels(active.root, active.handle);\n }\n active.moved ||= client !== active.startClient;\n // Below half the smallest visible width a hideable sidebar stays at its\n // minimum and previews hiding; dragging back out resumes the live width.\n const hiding =\n active.kind === \"sidebar\" && sidebarHideable(active.root) && requested < sizeLimits(active.root, active.handle, active.kind).min / 2;\n if (hiding !== active.hiding) {\n active.hiding = hiding;\n previewSidebarHidden(active.root, hiding);\n }\n if (!hiding)\n active.liveSize = applySize(active.root, active.handle, active.kind, requested, { snapSidebar: active.kind !== \"sidebar\" });\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.hiding) {\n // The request comes first, while the layout is still the one on screen,\n // so the host sees the sidebar disappear in a single change. The width\n // before the drag then stays the remembered width for the next time it\n // shows; a host that declines the request gets that width back.\n sidebarElement(finished.root)?.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));\n previewSidebarHidden(finished.root, false);\n applySize(finished.root, finished.handle, \"sidebar\", finished.startSize);\n } else if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n finished.releaseTextSelection();\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n hiding: false,\n direction: resizeDirection(handle, kind),\n releaseTextSelection: suppressTextSelection(event.pointerId),\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n if (kind === \"pane\" && levelsMain(handle)) {\n // A step that the limits stop changes no preference, also not a sibling's.\n if (clamp(requested, min, max) === Math.round(current)) return;\n settleLevels(root, handle);\n }\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n // Remember only attributes we own; application-set inert survives every transition.\n const phonePageInerted = new Set<HTMLElement>();\n const syncPhonePages = () => {\n const regions = new Set<HTMLElement>();\n if (phone?.matches) {\n for (const root of allRoots()) {\n if (!root.isConnected) continue;\n for (const aside of openDetails(root).filter(phonePage)) {\n for (let node: HTMLElement | null = aside; node && node !== root; node = node.parentElement) {\n const parent: HTMLElement | null = node.parentElement;\n if (parent) overlayRegions(parent, aside).forEach((region) => regions.add(region));\n }\n }\n }\n }\n phonePageInerted.forEach((region) => {\n if (regions.has(region)) return;\n region.removeAttribute(\"inert\");\n phonePageInerted.delete(region);\n });\n regions.forEach((region) => {\n if (region.hasAttribute(\"inert\")) return;\n region.setAttribute(\"inert\", \"\");\n phonePageInerted.add(region);\n });\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n if (detailDrag && (detailDrag.source === \"drawer\" ? !touchDrawer?.matches : !phone?.matches)) finishDetailDrag(true);\n allRoots().forEach((root) => {\n if (!phone?.matches) {\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.dataset.workspaceDetailSheet === \"full\") setDetent(aside, false);\n }\n }\n });\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = () => {\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n // Reconciling can restore a drawer's persisted width; its trail space follows.\n for (const root of allRoots()) for (const aside of rootElements(root, DETAIL_DRAWER_SELECTOR)) syncDetailDrawerSpace(aside);\n });\n };\n const onResize = () => {\n syncHostState();\n scheduleReconcile();\n };\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n syncHostState();\n scheduleReconcile();\n });\n // A host can change its width while a workspace with a fixed width keeps\n // its own, so the controller also watches each root's nearest named host.\n const observedHosts = new Set<Element>();\n // Found once per root: reading styles on every mutation would cost a style pass.\n const rootHosts = new WeakMap<HTMLElement, Element | null>();\n const hostOf = (root: HTMLElement) => {\n if (rootHosts.has(root)) return rootHosts.get(root)!;\n let host: Element | null = null;\n for (let element = root.parentElement; element && !host; element = element.parentElement)\n if (getComputedStyle(element).containerName.split(/\\s+/).includes(\"k2b-app-area\")) host = element;\n rootHosts.set(root, host);\n return host;\n };\n const syncObservedRoots = () => {\n const hosts = new Set(\n allRoots()\n .map(hostOf)\n .filter((host): host is Element => host !== null),\n );\n observedHosts.forEach((host) => {\n if (hosts.has(host)) return;\n resizeObserver?.unobserve(host);\n observedHosts.delete(host);\n });\n hosts.forEach((host) => {\n if (observedHosts.has(host)) return;\n observedHosts.add(host);\n resizeObserver?.observe(host);\n });\n for (const elements of [touchedDetails, titleTabIndices, motionRoots]) {\n elements.forEach((element) => {\n if (!element.isConnected) elements.delete(element);\n });\n }\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n pendingAnchors.get(root)?.();\n slides.get(root)?.();\n resizeObserver?.unobserve(root);\n const frame = motionFrames.get(root);\n if (frame !== undefined) cancelAnimationFrame(frame);\n motionFrames.delete(root);\n observedRoots.delete(root);\n }\n });\n touchMoveAsides.forEach((aside) => {\n if (aside.isConnected) return;\n aside.removeEventListener(\"touchmove\", onDetailTouchMove);\n touchMoveAsides.delete(aside);\n });\n next.forEach((root) => {\n rootElements(root, detailSelector).forEach((aside) => {\n if (!detailHidden.has(aside)) detailHidden.set(aside, Boolean(aside.hidden));\n if (touchMoveAsides.has(aside)) return;\n aside.addEventListener(\"touchmove\", onDetailTouchMove, { passive: false });\n touchMoveAsides.add(aside);\n });\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver?.observe(root);\n if (!root.hasAttribute(\"data-workspace-motion\")) {\n motionRoots.add(root);\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.delete(root);\n if (observedRoots.has(root)) root.dataset.workspaceMotion = \"true\";\n }),\n );\n }),\n );\n }\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n syncPhonePages();\n if (pendingTitle && (pendingTitle.aside.hidden || !pendingTitle.aside.isConnected)) cancelTitle();\n // Hiding or removing the sidebar, or its button, ends the overlay.\n if (overlay && (overlay.sidebar.hidden || !overlay.sidebar.isConnected || !overlay.toggle.isConnected)) closeOverlay(\"kept\");\n const details = new Set<HTMLElement>();\n for (const record of records) {\n if (\n record.type === \"attributes\" &&\n record.attributeName === \"hidden\" &&\n record.target instanceof HTMLElement &&\n record.target.matches(detailSelector) &&\n !details.has(record.target)\n ) {\n details.add(record.target);\n detailTransition(record.target, detailHidden.get(record.target) ?? record.oldValue !== null);\n }\n }\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n // A new width token or a removed panel can end waiting without any box resizing.\n if (records.some((record) => record.type === \"childList\" || record.attributeName === \"data-width\")) syncHostState();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"click\", onClick as EventListener);\n ownerDocument.addEventListener(\"keydown\", onOverlayKeyDown);\n ownerWindow.addEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.addEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"keydown\", cancelTitleOnInteraction, true);\n eventRoot.addEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.addEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.addEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.addEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.addEventListener(\"click\", onGrabberClick);\n eventRoot.addEventListener(\"dblclick\", onPanelDoubleClick);\n window.addEventListener(\"pointermove\", onSheetPointerMove);\n window.addEventListener(\"pointerup\", onSheetPointerEnd);\n window.addEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.addEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.addEventListener(\"touchstart\", onDetailTouchStart, { passive: true });\n eventRoot.addEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.addEventListener(\"touchcancel\", onDetailTouchEnd);\n phone?.addEventListener(\"change\", syncHostState);\n phone?.addEventListener(\"change\", syncPhonePages);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncPhonePages();\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [\"hidden\", \"data-workspace-level-shown\", \"data-width\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n phonePageInerted.forEach((region) => region.removeAttribute(\"inert\"));\n phonePageInerted.clear();\n phone?.removeEventListener(\"change\", syncPhonePages);\n cancelTitle();\n pendingAnchors.forEach((cancel) => cancel());\n slides.forEach((end) => end());\n stopScrollFades();\n finishDetailDrag(true);\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n motionFrames.forEach(cancelAnimationFrame);\n revealFrames.forEach(cancelAnimationFrame);\n motionRoots.forEach((root) => delete root.dataset.workspaceMotion);\n touchedDetails.forEach((aside) => {\n clearDrag(aside);\n delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", \"false\");\n });\n titleTabIndices.forEach((title) => title.removeAttribute(\"tabindex\"));\n ownerWindow.removeEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.removeEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"keydown\", cancelTitleOnInteraction, true);\n eventRoot.removeEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.removeEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.removeEventListener(\"click\", onGrabberClick);\n eventRoot.removeEventListener(\"dblclick\", onPanelDoubleClick);\n window.removeEventListener(\"pointermove\", onSheetPointerMove);\n window.removeEventListener(\"pointerup\", onSheetPointerEnd);\n window.removeEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"touchstart\", onDetailTouchStart);\n touchMoveAsides.forEach((aside) => aside.removeEventListener(\"touchmove\", onDetailTouchMove));\n eventRoot.removeEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.removeEventListener(\"touchcancel\", onDetailTouchEnd);\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n observedHosts.clear();\n closeOverlay(\"none\");\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"click\", onClick as EventListener);\n ownerDocument.removeEventListener(\"keydown\", onOverlayKeyDown);\n phone?.removeEventListener(\"change\", syncHostState);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\nimport { prefersReducedMotion } from \"../motion\";\nimport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nimport { readAppWorkspaceWidth, resolveAppWorkspaceWidth } from \"./app-workspace-width\";\nimport { installScrollFades } from \"./scroll-fade\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n /** A hideable sidebar dragged below half its minimum previews the hidden state. */\n hiding: boolean;\n direction: 1 | -1;\n releaseTextSelection: () => void;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst TOGGLE_SELECTOR = \"[data-app-workspace-sidebar-toggle]\";\nconst DETAIL_TOGGLE_SELECTOR = \"[data-app-workspace-detail-toggle]\";\nconst DETAIL_DRAWER_SELECTOR = '.k2b-app-workspace__detail[data-workspace-detail-drawer=\"open\"]';\nconst cssState = (element: HTMLElement, name: string) => getComputedStyle(element).getPropertyValue(name).trim();\nconst detailWaiting = (aside: HTMLElement) => cssState(aside, \"--k2b-workspace-detail-waiting\") === \"1\";\nconst detailDrawer = (aside: HTMLElement) => aside.dataset.workspaceDetailDrawer === \"open\";\nconst detailToggle = (aside: HTMLElement) => {\n const root = workspaceRoot(aside);\n return rootElements(root ?? aside, DETAIL_TOGGLE_SELECTOR).find((toggle) => toggle.getAttribute(\"aria-controls\") === aside.id);\n};\n// The trail's registered property accepts a length, not the drawer's percentage\n// cap. Only a user-opened drawer needs this measurement; the first frame stays CSS-owned.\nconst detailDrawerContent = (aside: HTMLElement) => aside.closest<HTMLElement>(\".k2b-app-workspace__content\");\nconst syncDetailDrawerSpace = (aside: HTMLElement) =>\n detailDrawerContent(aside)?.style.setProperty(\"--k2b-detail-space\", `${aside.getBoundingClientRect().width}px`);\nconst parkDetailDrawer = (aside: HTMLElement, focus = false) => {\n if (!detailDrawer(aside)) return;\n delete aside.dataset.workspaceDetailDrawer;\n detailDrawerContent(aside)?.style.removeProperty(\"--k2b-detail-space\");\n const toggle = detailToggle(aside);\n toggle?.setAttribute(\"aria-expanded\", \"false\");\n if (focus) toggle?.focus({ preventScroll: true });\n};\n\n/** Parks open waiting-detail drawers; focus follows only when it was inside one. */\nexport const parkWorkspaceDetailDrawers = (root: ParentNode = document): void => {\n for (const aside of root.querySelectorAll<HTMLElement>(DETAIL_DRAWER_SELECTOR))\n parkDetailDrawer(aside, aside.contains(aside.ownerDocument.activeElement));\n};\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled]):not([type='hidden'])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n/** Text entry, menus, dialogs, and open popups keep their own keys. */\nconst KEY_OWNER_SELECTOR =\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='textbox'], [role='combobox'], [role='searchbox'], [role='spinbutton'], [role='menu'], [role='listbox'], [role='dialog'], dialog, [aria-haspopup]:not([aria-haspopup='false'])[aria-expanded='true']\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\n/** Controls inside a selected row that act on their own instead of choosing the row. */\nconst NESTED_CONTROL_SELECTOR =\n \"[aria-expanded], [aria-haspopup]:not([aria-haspopup='false']), [aria-pressed], [role='checkbox'], [role='switch'], [role='menuitem'], input, select, textarea, summary\";\nconst DETAIL_REQUEST_CONTROL_SELECTOR = \"[aria-pressed], [aria-expanded], [aria-controls]\";\nconst SELECTION_MARK_SELECTOR =\n '[aria-selected=\"true\"], [aria-current]:not([aria-current=\"false\"]):not([aria-current=\"date\"]):not([aria-current=\"time\"]), [data-selected=\"true\"]';\n// Calendar day marks select a date range, not the Detail's subject.\nconst IGNORED_SELECTION_MARK_SELECTOR = \"[data-calendar-day-key]\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst sidebarForm = (root: HTMLElement) => cssState(sidebarElement(root) ?? root, \"--k2b-workspace-sidebar-form\");\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst sidebarHideable = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceHideable === \"true\";\n/**\n * Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop\n * stays application state, so the controller only requests the change.\n */\nexport const APP_WORKSPACE_SIDEBAR_HIDE_EVENT = \"k2b-app-workspace-sidebar-hide\";\n/** Asks the owning `AppWorkspace.Detail` to close; its `onClose` decides. */\nexport const APP_WORKSPACE_DETAIL_CLOSE_EVENT = \"k2b-app-workspace-detail-close\";\n/**\n * Asks the owning Detail to step by `detail.direction` (`-1` or `1`). It writes\n * the Main element showing the selection to `detail.item`, read synchronously\n * by the controller after dispatch.\n */\nexport const APP_WORKSPACE_DETAIL_STEP_EVENT = \"k2b-app-workspace-detail-step\";\nexport type AppWorkspaceDetailStep = { direction: 1 | -1; item?: HTMLElement };\nconst previewSidebarHidden = (root: HTMLElement, hidden: boolean) => {\n const sidebar = sidebarElement(root);\n if (!sidebar) return;\n if (hidden) sidebar.dataset.workspaceHidePreview = \"true\";\n else delete sidebar.dataset.workspaceHidePreview;\n};\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst flexibleLevel = (pane: HTMLElement) => {\n if (!pane.hasAttribute(\"data-workspace-level\")) return false;\n const root = workspaceRoot(pane);\n const widthClass = root ? cssState(root, \"--k2b-workspace-level-class\") : \"\";\n return Boolean(widthClass && pane.dataset.workspaceLevelLast?.split(\" \").includes(widthClass));\n};\nconst levelsMain = (handle: HTMLElement) => handle.closest(\".k2b-app-workspace__main\")?.hasAttribute(\"data-workspace-levels\") ?? false;\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const panel = kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle);\n return (\n panel?.dataset.workspaceResizable === \"true\" &&\n (!panel.hasAttribute(\"data-workspace-level\") || (isVisible(panel) && isVisible(handle) && !flexibleLevel(panel)))\n );\n};\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind, reserveMainMinimum = true) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n !flexibleLevel(pane) &&\n isVisible(pane),\n )\n : [];\n const separatorSize =\n kind === \"pane\" && main\n ? Array.from(main.querySelectorAll<HTMLElement>(`.k2b-app-workspace__resize${HANDLE_SELECTOR}`))\n .filter(\n (separator) =>\n separator.closest(\".k2b-app-workspace__main\") === main && resizeKind(separator) === \"pane\" && isVisible(separator),\n )\n .reduce((total, separator) => {\n const style = getComputedStyle(separator);\n return (\n total +\n Math.max(\n 0,\n separator.getBoundingClientRect().width +\n (Number.parseFloat(style.marginLeft) || 0) +\n (Number.parseFloat(style.marginRight) || 0),\n )\n );\n }, 0)\n : 0;\n // Content ends before the detail track, so its width alone would shrink a\n // persisted panel again on every reconciliation. Measure from Content's\n // start to the workspace's inner end: this includes the detail column and\n // leaves out a desktop sidebar, while an overlay sidebar takes no width.\n const content = kind === \"detail\" ? controlled?.closest<HTMLElement>(\".k2b-app-workspace__content\") : null;\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n const mainSpec = readAppWorkspaceWidth(mainElement(root)?.dataset.workspaceMainMin);\n const mainMinValue = cssState(root, \"--k2b-workspace-main-min\");\n const mainMin =\n typeof mainSpec === \"object\"\n ? resolveAppWorkspaceWidth(mainSpec, root.getBoundingClientRect().width)\n : mainMinValue.endsWith(\"px\")\n ? Number.parseFloat(mainMinValue)\n : APP_WORKSPACE_MAIN_MIN;\n const mainExtra = Math.max(0, (Number.isFinite(mainMin) ? mainMin : APP_WORKSPACE_MAIN_MIN) - APP_WORKSPACE_MAIN_MIN);\n const limits = appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : content\n ? root.getBoundingClientRect().right - root.clientLeft - content.getBoundingClientRect().left\n : kind === \"sidebar\"\n ? root.getBoundingClientRect().width - 2 * root.clientLeft\n : root.getBoundingClientRect().width,\n // Interactive sizing keeps Main's declared minimum beside the sidebar and the Detail.\n reservedSize:\n kind === \"sidebar\" && reserveMainMinimum\n ? mainExtra\n : kind === \"detail\"\n ? 8 + (reserveMainMinimum ? mainExtra : 0)\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0) + separatorSize\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n // Widths are applied as whole pixels; rounding up must not cross the fit boundary.\n return kind === \"sidebar\" ? { min: limits.min, max: Math.max(limits.min, Math.floor(limits.max)) } : limits;\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applyRegionSize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean; reserveMainMinimum?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind, options.reserveMainMinimum);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n // A restored width may require an overlay; the handle still advertises interactive limits.\n updateHandleValue(root, handle, kind, sidebar.width);\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n cssDefault: boolean;\n requested: number;\n configuredMin: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n if (main.hasAttribute(\"data-workspace-levels\")) {\n // CSS owns the multi-level fit, including a flexible shown-last pane.\n // Keep preferences intact when the window temporarily has less room.\n for (const handle of handles) {\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred = active?.moved && active.handle === handle ? active.liveSize : layoutState.paneWidths?.[panelId(handle)];\n if (preferred !== undefined)\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), `${clamp(preferred, min, max)}px`);\n updateHandleValue(root, handle, \"pane\", currentSize(root, handle, \"pane\"));\n }\n return;\n }\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const spec = readAppWorkspaceWidth(handle.dataset.workspaceDefaultSize) ?? elementSize(panel, \"pane\");\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : layoutState.paneWidths?.[panelId(handle)];\n const cssDefault = preferred === undefined && typeof spec !== \"number\";\n if (cssDefault && root.style.getPropertyValue(appWorkspacePanelVariable(\"pane\", panelId(handle))))\n // Drop a previous live width (or an inherited SSR preference after reset).\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(handle)), \"initial\");\n // CSS has already applied this default and the pane-fit clamp, including\n // subpixels. Reserve exactly that box when fitting other preferences;\n // measuring must not turn a responsive default into a stored px width.\n const requested = preferred ?? resolveAppWorkspaceWidth(spec, root.getBoundingClientRect().width);\n const desired = cssDefault ? elementSize(panel, \"pane\") : clamp(requested, min, max);\n return [{ desired, handle, min: cssDefault ? desired : min, cssDefault, requested: clamp(requested, min, max), configuredMin: min }];\n });\n if (!fits.length) return;\n\n const budget = main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN;\n // Each share default clamps only against Main, not its resizable or non-resizable siblings. When panes\n // together leave Main's primary region less than its minimum, fit them like stored widths, allowing subpixels.\n if (fits.reduce((total, fit) => total + fit.desired, 0) > budget + 0.5)\n for (const fit of fits) if (fit.cssDefault) Object.assign(fit, { cssDefault: false, desired: fit.requested, min: fit.configuredMin });\n const sizes = fitAppWorkspacePaneSizes(fits, budget);\n fits.forEach((fit, index) => {\n // Defaults stay CSS-owned; fit only saved or live preferences around them.\n if (!fit.cssDefault) root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\ntype OverlaySidebar = { root: HTMLElement; sidebar: HTMLElement; toggle: HTMLElement };\n/** An open overlay remembers the regions it made inert, so it leaves the application's own `inert` alone. */\ntype OpenOverlay = OverlaySidebar & { inerted: HTMLElement[] };\n\n/**\n * The elements Tab stops at, in order. A roving tab index, as in a tree, keeps\n * links and buttons at `tabindex=\"-1\"`; they take focus but are no stops.\n */\nconst tabStopsIn = (container: HTMLElement) =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (element) =>\n element.tabIndex >= 0 &&\n element.getClientRects().length > 0 &&\n !element.closest(\"[inert]\") &&\n getComputedStyle(element).visibility !== \"hidden\",\n );\n/** Several controllers can see one click on a nested workspace's button; the innermost one, which sees it first, owns it. */\nconst claimedToggleClicks = new WeakSet<Event>();\nconst claimedDetailGestures = new WeakSet<Event>();\n\n/**\n * The overlay sidebar opens over the work area when its column does not fit\n * from the button in the workspace's head. While it is open the rest of\n * the workspace is inert, Tab stays in the sidebar, and Escape, the scrim,\n * choosing an item, hiding the sidebar, or leaving the width range close it\n * again. The state is one attribute on the workspace root, so server-rendered\n * and hydrated workspaces behave the same.\n */\nconst overlayTarget = (toggle: HTMLElement): OverlaySidebar | null => {\n const root = workspaceRoot(toggle);\n // The button belongs to its workspace's own sidebar. A sidebar rendered apart\n // from the head, for example in an island, can carry another id than the one\n // the head named, so the button learns the real one here.\n const sidebar = root ? sidebarElement(root) : null;\n if (!root || !sidebar || sidebar.hidden || sidebar.dataset.mobile === \"stacked\") return null;\n if (sidebar.id) toggle.setAttribute(\"aria-controls\", sidebar.id);\n return { root, sidebar, toggle };\n};\nconst overlayRegions = (root: HTMLElement, sidebar: HTMLElement) =>\n Array.from(root.children)\n .flatMap((child) =>\n child instanceof HTMLElement && (child.localName === \"solid-island\" || child.localName === \"solid-client\")\n ? Array.from(child.children)\n : [child],\n )\n .filter((child): child is HTMLElement => child instanceof HTMLElement && child !== sidebar && !child.contains(sidebar));\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n // A document has no owner document; an element root listens on its own.\n const ownerDocument = eventRoot.ownerDocument ?? document;\n const ownerWindow = ownerDocument.defaultView ?? window;\n let overlay: OpenOverlay | null = null;\n // A server-rendered head names the sidebar before the sidebar renders; the button learns its real id now.\n for (const toggle of eventRoot.querySelectorAll<HTMLElement>(TOGGLE_SELECTOR)) overlayTarget(toggle);\n const openOverlay = (target: OverlaySidebar) => {\n if (overlay) closeOverlay(\"none\");\n const inerted = overlayRegions(target.root, target.sidebar).filter((region) => !region.hasAttribute(\"inert\"));\n overlay = { ...target, inerted };\n target.root.dataset.sidebarOverlay = \"open\";\n target.toggle.setAttribute(\"aria-expanded\", \"true\");\n inerted.forEach((region) => region.setAttribute(\"inert\", \"\"));\n // Focus starts on the current destination, so the reader knows where they\n // are: on its own tab stop, or on the tree item around it.\n const current = target.sidebar.querySelector<HTMLElement>(\"[aria-current='page'], .is-active\");\n const stops = tabStopsIn(target.sidebar);\n const first =\n (current && (stops.find((element) => current.contains(element)) ?? stops.findLast((element) => element.contains(current)))) ??\n stops[0];\n if (first) first.focus();\n else {\n target.sidebar.tabIndex = -1;\n target.sidebar.focus();\n }\n };\n /**\n * `\"button\"` returns focus to the button. `\"kept\"` leaves it where it moved,\n * for example into a dialog an item opened, and only rescues focus that the\n * closing sidebar would hide. `\"none\"` moves nothing, for cleanup.\n */\n const closeOverlay = (focus: \"button\" | \"kept\" | \"none\") => {\n const closing = overlay;\n if (!closing) return;\n overlay = null;\n delete closing.root.dataset.sidebarOverlay;\n closing.toggle.setAttribute(\"aria-expanded\", \"false\");\n closing.inerted.forEach((region) => region.removeAttribute(\"inert\"));\n if (focus === \"none\") return;\n const active = document.activeElement;\n if (focus === \"button\" || !active || active === document.body || closing.sidebar.contains(active)) closing.toggle.focus();\n };\n const onClick = (event: MouseEvent) => {\n const target = eventElement(event);\n const detailButton = target?.closest<HTMLElement>(DETAIL_TOGGLE_SELECTOR);\n if (detailButton) {\n const root = workspaceRoot(detailButton);\n const aside = root ? controlledPanel(root, detailButton) : null;\n if (!aside || aside.hidden || !detailWaiting(aside) || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (detailDrawer(aside)) parkDetailDrawer(aside);\n else {\n openDetailDrawer(aside);\n if (event.detail === 0) requestTitle(aside);\n else detailButton.focus({ preventScroll: true });\n }\n syncDetailRequestControls();\n return;\n }\n const toggle = target?.closest<HTMLElement>(TOGGLE_SELECTOR);\n if (toggle) {\n const next = overlayTarget(toggle);\n if (!next || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (overlay?.sidebar === next.sidebar) closeOverlay(\"button\");\n else if (sidebarForm(next.root) === \"overlay\") openOverlay(next);\n return;\n }\n if (!overlay || !target) return;\n // The scrim is the workspace root's own pseudo-element.\n if (target === overlay.root) {\n closeOverlay(\"button\");\n return;\n }\n // Choosing a destination closes the overlay: a link, or the button of a\n // row. A tree folder that only expands, a control that opens a popup or\n // expands something, such as a row's preview, and an item's own actions\n // keep it open.\n const control = target.closest<HTMLElement>(\"a[href], button\");\n if (!control || !overlay.sidebar.contains(control)) return;\n if (\n target.closest(\"[data-k2b-nav-tree-toggle]\") ||\n control.closest(\n \"[data-k2b-nav-tree-disclosure], .k2b-app-workspace__sidebar-item-action, .k2b-app-workspace__sidebar-item-actions\",\n ) ||\n control.matches(\"[aria-haspopup], [aria-expanded]\")\n )\n return;\n if (control.matches(\"a[href]\") || control.closest(ITEM_SELECTOR)) closeOverlay(\"kept\");\n };\n const onOverlayKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented) return;\n const target = eventElement(event);\n if (!target) return;\n // Escape also closes it when a click left focus on nothing, so on the body.\n if (overlay && event.key === \"Escape\" && (overlay.sidebar.contains(target) || target === ownerDocument.body)) {\n event.preventDefault();\n closeOverlay(\"button\");\n return;\n }\n const aside = target.closest<HTMLElement>(detailSelector);\n const panel =\n overlay?.sidebar ?? (phone?.matches && aside && !aside.hidden && phonePage(aside) && eventRoot.contains(aside) ? aside : null);\n if (event.key !== \"Tab\") return;\n if (!panel) {\n // Focus outside an open phone page, on the body after a load or on chrome the page covers, enters the page.\n // Dialogs and popovers keep their own Tab order.\n const page = phone?.matches ? allRoots().flatMap(openDetails).find(phonePage) : undefined;\n if (!page || ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\") || target.closest(\"[popover]\")) return;\n if (target !== ownerDocument.body) {\n const rect = target.getBoundingClientRect();\n const hit = ownerDocument.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);\n if (hit && target.contains(hit)) return;\n }\n const stops = tabStopsIn(page);\n event.preventDefault();\n (event.shiftKey ? stops.at(-1) : stops[0])?.focus();\n return;\n }\n if (!panel.contains(target)) return;\n const stops = tabStopsIn(panel);\n const first = stops[0];\n const last = stops.at(-1);\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n // Focus can also rest on an element that is no tab stop, such as a title focused as the panel opened.\n const active = document.activeElement;\n const before = (element: Element | null, other: Element | null) =>\n Boolean(element && other && element.compareDocumentPosition(other) & Node.DOCUMENT_POSITION_FOLLOWING);\n if (event.shiftKey && !stops.some((stop) => before(stop, active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && !stops.some((stop) => before(active, stop))) {\n event.preventDefault();\n first.focus();\n }\n };\n // Whether each open detail waited at the last check, so a column that starts\n // waiting under focus hands that focus to its Details button.\n const detailWasWaiting = new WeakMap<HTMLElement, boolean>();\n const detailRequestExpanded = new Map<HTMLElement, { aside: HTMLElement; rendered: string | null; written: string }>();\n const restoreDetailRequestExpanded = (control: HTMLElement, state: { aside: HTMLElement; rendered: string | null; written: string }) => {\n // A newer application render already owns the current value.\n if (control.getAttribute(\"aria-expanded\") !== state.written) return;\n if (state.rendered === null) control.removeAttribute(\"aria-expanded\");\n else control.setAttribute(\"aria-expanded\", state.aside.hidden || !state.aside.isConnected ? \"false\" : state.rendered);\n };\n const requestedWaitingDetail = (control: HTMLElement) => {\n if (!wide?.matches || control.matches(DETAIL_TOGGLE_SELECTOR) || !eventRoot.contains(control)) return null;\n const root = workspaceRoot(control);\n const region = control.closest(\".k2b-app-workspace__main, .k2b-app-workspace__detail\");\n if (!root || !region || region.closest(ROOT_SELECTOR) !== root) return null;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n return rootElements(root, detailSelector).find((aside) => !aside.hidden && ids?.includes(aside.id) && detailWaiting(aside)) ?? null;\n };\n const syncDetailRequestControls = () => {\n const waitingControls = new Map<HTMLElement, HTMLElement>();\n for (const root of allRoots()) {\n const waitingDetails = wide?.matches\n ? rootElements(root, detailSelector).filter((aside) => !aside.hidden && detailWaiting(aside))\n : [];\n if (!waitingDetails.length) continue;\n // Only a control that names a Detail can request it.\n for (const control of rootElements(root, \"[aria-controls]\")) {\n if (control.matches(DETAIL_TOGGLE_SELECTOR) || !eventRoot.contains(control)) continue;\n const region = control.closest(\".k2b-app-workspace__main, .k2b-app-workspace__detail\");\n if (!region || region.closest(ROOT_SELECTOR) !== root) continue;\n const ids = control.getAttribute(\"aria-controls\")?.split(/\\s+/);\n const aside = waitingDetails.find((aside) => ids?.includes(aside.id));\n if (aside) waitingControls.set(control, aside);\n }\n }\n detailRequestExpanded.forEach((state, control) => {\n if (waitingControls.has(control)) return;\n restoreDetailRequestExpanded(control, state);\n detailRequestExpanded.delete(control);\n });\n waitingControls.forEach((aside, control) => {\n const current = control.getAttribute(\"aria-expanded\");\n const state = detailRequestExpanded.get(control);\n const written = String(detailDrawer(aside));\n // Keep the application's latest value to restore when waiting ends.\n const rendered = !state || current !== state.written ? current : state.rendered;\n detailRequestExpanded.set(control, { aside, rendered, written });\n if (current !== written) control.setAttribute(\"aria-expanded\", written);\n });\n };\n const onDetailRequestClick = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;\n const control = eventElement(event)?.closest<HTMLElement>(DETAIL_REQUEST_CONTROL_SELECTOR);\n const aside = control ? requestedWaitingDetail(control) : null;\n if (!control || !aside) return;\n // The application keeps its Detail open; only its waiting drawer changes.\n event.preventDefault();\n event.stopImmediatePropagation();\n cancelPendingDetail();\n cancelTitle();\n clearActivation();\n // A control inside the drawer leaves with it, so focus goes to Details.\n if (detailDrawer(aside)) parkDetailDrawer(aside, aside.contains(ownerDocument.activeElement));\n else {\n openDetailDrawer(aside);\n if (event.detail === 0) requestTitle(aside);\n else control.focus({ preventScroll: true });\n }\n syncDetailRequestControls();\n };\n const openDetailDrawer = (aside: HTMLElement) => {\n aside.dataset.workspaceDetailDrawer = \"open\";\n detailToggle(aside)?.setAttribute(\"aria-expanded\", \"true\");\n syncDetailDrawerSpace(aside);\n syncDetailRequestControls();\n };\n // A sidebar drag changes the room beside it without resizing the workspace,\n // so it rechecks waiting once per frame.\n let hostSyncFrame: number | null = null;\n const scheduleHostSync = () => {\n if (hostSyncFrame !== null) return;\n hostSyncFrame = requestAnimationFrame(() => {\n hostSyncFrame = null;\n syncHostState();\n });\n };\n const applySize = (...args: Parameters<typeof applyRegionSize>) => {\n const size = applyRegionSize(...args);\n if (args[2] === \"sidebar\") scheduleHostSync();\n return size;\n };\n const syncHostState = () => {\n if (pendingDetail && !canOpenPendingDetail(pendingDetail.aside)) cancelPendingDetail();\n if (overlay && sidebarForm(overlay.root) !== \"overlay\") closeOverlay(\"none\");\n for (const root of allRoots()) {\n // A drawer removed with its panel leaves no space behind in Content.\n for (const content of rootElements(root, \".k2b-app-workspace__content\"))\n if (content.style.getPropertyValue(\"--k2b-detail-space\") && !content.querySelector(DETAIL_DRAWER_SELECTOR))\n content.style.removeProperty(\"--k2b-detail-space\");\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.hidden) {\n detailWasWaiting.delete(aside);\n parkDetailDrawer(aside);\n continue;\n }\n const waiting = detailWaiting(aside);\n const before = detailWasWaiting.get(aside);\n detailWasWaiting.set(aside, waiting);\n if (!waiting) {\n // The Details button hides with the waiting; its focus moves to the returning column's title.\n const toggleFocused = detailToggle(aside)?.contains(ownerDocument.activeElement) ?? false;\n parkDetailDrawer(aside);\n if (toggleFocused) focusTitle(aside);\n } else if (detailDrawer(aside)) syncDetailDrawerSpace(aside);\n else if (before !== true && aside.contains(ownerDocument.activeElement)) detailToggle(aside)?.focus({ preventScroll: true });\n }\n }\n syncDetailRequestControls();\n };\n const phone = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(max-width: 47.999rem)\") : null;\n const wide = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(min-width: 48rem)\") : null;\n const detailSelector = \".k2b-app-workspace__detail\";\n const grabberSelector = \".k2b-app-workspace__detail-grabber\";\n type RememberedItem = {\n item: HTMLElement;\n cell: HTMLElement | null;\n interaction: \"pointer\" | \"keyboard\";\n scroller: HTMLElement | null;\n scrollTop: number;\n top: number;\n fresh: boolean;\n /** Pointer, Enter/Space, or assistive activation chose an item outside text entry. */\n chosen: boolean;\n };\n const detailHidden = new WeakMap<HTMLElement, boolean>();\n const remembered = new WeakMap<HTMLElement, RememberedItem>();\n const lastFocus = new WeakMap<HTMLElement, Element>();\n const touchedDetails = new Set<HTMLElement>();\n // Only a panel blocks scrolling for its touch gestures; a document-wide\n // non-passive listener would make every scroll on the page wait for script.\n const touchMoveAsides = new Set<HTMLElement>();\n const titleTabIndices = new Set<HTMLElement>();\n const motionFrames = new Map<HTMLElement, number>();\n const pendingAnchors = new Map<HTMLElement, () => void>();\n const slides = new Map<HTMLElement, () => void>();\n const motionRoots = new Set<HTMLElement>();\n const revealFrames = new Map<HTMLElement, number>();\n const openDetails = (root: HTMLElement) => rootElements(root, detailSelector).filter((aside) => !aside.hidden);\n const closeControl = (aside: HTMLElement) =>\n Array.from(aside.querySelectorAll<HTMLElement>(\"[data-workspace-detail-close]\")).find(\n (control) => control.closest(detailSelector) === aside,\n );\n const closable = (aside: HTMLElement) => aside.hasAttribute(\"data-workspace-detail-closable\") || Boolean(closeControl(aside));\n const requestClose = (aside: HTMLElement) => {\n if (aside.hasAttribute(\"data-workspace-detail-closable\")) aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_CLOSE_EVENT));\n else closeControl(aside)?.click();\n };\n const scrollerOn = (axis: \"x\" | \"y\", target: Element, boundary: HTMLElement) => {\n for (let element: Element | null = target; element && boundary.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(axis === \"y\" ? getComputedStyle(element).overflowY : getComputedStyle(element).overflowX) &&\n (axis === \"y\" ? element.scrollHeight > element.clientHeight : element.scrollWidth > element.clientWidth)\n )\n return element;\n if (element === boundary) break;\n }\n return null;\n };\n const verticalScroller = (target: Element, boundary: HTMLElement) => scrollerOn(\"y\", target, boundary);\n const refreshItem = (snapshot: RememberedItem) => {\n snapshot.top = snapshot.item.getBoundingClientRect().top;\n snapshot.scrollTop = snapshot.scroller?.scrollTop ?? 0;\n };\n // Native Enter/Space clicks and pointer clicks continue their initiating event.\n let activationItem: HTMLElement | null = null;\n let activationFrame: number | null = null;\n const clearActivation = () => {\n if (activationFrame !== null) cancelAnimationFrame(activationFrame);\n activationFrame = null;\n activationItem = null;\n };\n const endActivation = () => {\n if (!activationItem) return;\n // Space's native click follows keyup before the next frame.\n if (activationFrame !== null) cancelAnimationFrame(activationFrame);\n activationFrame = requestAnimationFrame(clearActivation);\n };\n const cancelActivation = () => {\n // A cancelled gesture must not open a Detail that appears later.\n if (lastChosen?.interaction === \"pointer\" && lastChosen.item === activationItem) {\n lastChosen.chosen = false;\n lastChosen = null;\n }\n clearActivation();\n };\n const onChoiceClick = (event: MouseEvent) => {\n const preceded = event.target instanceof Node && Boolean(activationItem?.contains(event.target));\n clearActivation();\n if (event.detail === 0 && !preceded) {\n cancelTitleOnInteraction(event);\n rememberInteraction(event);\n } else if (!(event.target instanceof Node && lastChosen?.item.contains(event.target))) cancelTitleOnInteraction(event);\n };\n // A table row can exceed its scroller's width, so keep the clicked cell for horizontal reveal.\n const rememberInteraction = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n const previous = remembered.get(root);\n if (previous && openDetails(root).length) refreshItem(previous);\n const main = mainElement(root);\n // Collection rows with a roving tab index are items too, though no tab stops.\n const item = target.closest<HTMLElement>(`${FOCUSABLE_SELECTOR}, [tabindex]`);\n if (!main || !item || item === main || !main.contains(item) || item.closest(ROOT_SELECTOR) !== root) return;\n if (event instanceof KeyboardEvent && event.key !== \"Enter\" && event.key !== \" \") return;\n if (event.type === \"pointerdown\" || event.type === \"keydown\") activationItem = item;\n const assistive = event instanceof MouseEvent && event.type === \"click\" && event.detail === 0 && event.button === 0;\n const cell = target.closest<HTMLElement>(\"td, th\");\n const snapshot: RememberedItem = {\n item,\n cell: cell && main.contains(cell) && cell.closest(ROOT_SELECTOR) === root ? cell : null,\n interaction: event instanceof KeyboardEvent || assistive ? \"keyboard\" : \"pointer\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: true,\n // Text entry and focus alone do not choose an item.\n // A modified activation, such as Ctrl/Cmd-click opening a new tab, chooses nothing here.\n chosen:\n ((event instanceof PointerEvent && event.type === \"pointerdown\" && event.button === 0) ||\n event instanceof KeyboardEvent ||\n assistive) &&\n !(event instanceof MouseEvent || event instanceof KeyboardEvent\n ? event.ctrlKey || event.metaKey || event.shiftKey || event.altKey\n : false) &&\n // Space scrolls on native links; it does not activate them.\n !(\n event instanceof KeyboardEvent &&\n event.key === \" \" &&\n item.matches(\"a[href], area[href]\") &&\n (!item.hasAttribute(\"role\") || item.getAttribute(\"role\") === \"link\")\n ) &&\n !target.closest(KEY_OWNER_SELECTOR) &&\n !item.closest(\"[role='tab'], [role='tablist']\"),\n };\n refreshItem(snapshot);\n remembered.set(root, snapshot);\n if (snapshot.chosen) lastChosen = snapshot;\n if (snapshot.chosen) {\n const aside = openDetails(root).find(canOpenPendingDetail);\n if (aside) checkPendingDetail(root, aside, snapshot, event instanceof KeyboardEvent && event.key === \" \");\n }\n // Enter in an editor or a field types; only an item that chooses something moves on to its title.\n if (snapshot.chosen && snapshot.interaction === \"keyboard\") {\n const aside = openDetails(root).find((aside) => isVisible(aside) && (!detailWaiting(aside) || detailDrawer(aside)));\n if (aside) requestTitle(aside, true);\n }\n };\n const onDetailFocusIn = (event: Event) => {\n const target = eventElement(event);\n const root = target?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !root || !observedRoots.has(root)) return;\n lastFocus.set(root, target);\n const previous = remembered.get(root);\n // Pointer focus follows pointerdown; keeping that snapshot also keeps the\n // interaction that opened the panel rather than treating focus as a new one.\n if (previous?.item.contains(target)) {\n const main = mainElement(root);\n if (target !== previous.item && target instanceof HTMLElement && main) {\n previous.item = target;\n previous.scroller = verticalScroller(target, main);\n refreshItem(previous);\n }\n return;\n }\n rememberInteraction(event);\n };\n const titleIn = (aside: HTMLElement) => aside.querySelector<HTMLElement>(\"h1, h2, h3, [role='heading']\");\n let focusingTitle: HTMLElement | null = null;\n const focusTitle = (aside: HTMLElement) => {\n const title = titleIn(aside);\n if (!title) return false;\n if (!title.matches(FOCUSABLE_SELECTOR) && !title.hasAttribute(\"tabindex\")) {\n title.tabIndex = -1;\n titleTabIndices.add(title);\n }\n focusingTitle = title;\n try {\n title.focus({ preventScroll: true });\n } finally {\n focusingTitle = null;\n }\n return true;\n };\n let pendingTitle: { aside: HTMLElement; observer: MutationObserver } | null = null;\n const cancelTitle = () => {\n pendingTitle?.observer.disconnect();\n pendingTitle = null;\n };\n // A step from inside the panel can remove the focused element with the old\n // content, so focus falls to the body. The panel keeps owning the steps until\n // focus or a pointer goes elsewhere, so a quick second J still ends on the title.\n let panelStep: HTMLElement | null = null;\n // The last choice in Main, until another interaction replaces it: a Detail\n // that opens later than that does not take the drawer or the focus.\n let lastChosen: RememberedItem | null = null;\n const cancelTitleOnInteraction = (event: Event) => {\n if (event.type === \"pointerdown\" || event.type === \"keydown\") clearActivation();\n if (lastChosen && !(event.target instanceof Node && lastChosen.item.contains(event.target))) {\n lastChosen.chosen = false;\n lastChosen = null;\n }\n if (\n pendingDetail &&\n // Native pointer focus on the chosen item continues its activation.\n !(event.type === \"focusin\" && event.target instanceof Node && pendingDetail.snapshot.item.contains(event.target))\n )\n cancelPendingDetail();\n if (event.type !== \"keydown\" && !(event.target instanceof Node && panelStep?.contains(event.target))) panelStep = null;\n if (event.type !== \"focusin\" || event.target !== focusingTitle) cancelTitle();\n };\n const requestTitle = (aside: HTMLElement, waitForChange = false) => {\n cancelTitle();\n if (aside.hidden || !aside.isConnected) return;\n if (!waitForChange && focusTitle(aside)) return;\n const previousTitle = titleIn(aside);\n const previousText = previousTitle?.textContent;\n // Loading fallbacks and selection changes can produce their heading after\n // the opening interaction. A later user action always takes precedence.\n const observer = new MutationObserver(() => {\n if (aside.hidden || !aside.isConnected) {\n cancelTitle();\n return;\n }\n const title = titleIn(aside);\n if (!title || (waitForChange && title === previousTitle && title.textContent === previousText)) return;\n cancelTitle();\n focusTitle(aside);\n });\n pendingTitle = { aside, observer };\n observer.observe(aside, { childList: true, subtree: true, characterData: true });\n // An element-scoped controller cannot see its own root leave the document.\n observer.observe(ownerDocument, { childList: true, subtree: true });\n };\n const phonePage = (aside: HTMLElement) => aside.dataset.workspaceDetailPhone === \"page\";\n const setDetent = (aside: HTMLElement, full: boolean) => {\n if (phonePage(aside)) return;\n touchedDetails.add(aside);\n if (full) aside.dataset.workspaceDetailSheet = \"full\";\n else delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", String(full));\n };\n const clearDrag = (aside: HTMLElement) => {\n aside.style.removeProperty(\"--k2b-workspace-detail-sheet-height\");\n aside.style.removeProperty(\"transform\");\n delete aside.dataset.workspaceDetailDragging;\n };\n const anchorItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem | undefined) => {\n if (!wide?.matches || detailDrawer(aside) || !snapshot?.item.isConnected) return;\n if (!mainElement(root)?.contains(snapshot.item) || snapshot.item.closest(ROOT_SELECTOR) !== root) return;\n const scroller = snapshot.scroller;\n if (scroller?.isConnected && scroller.scrollTop === snapshot.scrollTop)\n scroller.scrollTop += snapshot.item.getBoundingClientRect().top - snapshot.top;\n };\n // A moving Detail would cross a framed workspace's edge, so the workspace\n // clips while it slides (see the stylesheet).\n const slide = (root: HTMLElement, aside: HTMLElement) => {\n slides.get(root)?.();\n if (!root.hasAttribute(\"data-workspace-motion\") || prefersReducedMotion() || !wide?.matches) return;\n const end = () => {\n aside.removeEventListener(\"transitionend\", onEnd);\n aside.removeEventListener(\"transitioncancel\", onEnd);\n cancelAnimationFrame(frame);\n slides.delete(root);\n delete root.dataset.workspaceDetailSliding;\n };\n const onEnd = (event: TransitionEvent) => {\n if (event.target === aside && event.propertyName === \"transform\") end();\n };\n aside.addEventListener(\"transitionend\", onEnd);\n aside.addEventListener(\"transitioncancel\", onEnd);\n // A slow first frame must not end the clip early, so only a panel that\n // does not slide at all ends it in that frame.\n const frame = requestAnimationFrame(() => {\n const sliding = aside\n .getAnimations?.()\n .some((animation) => \"transitionProperty\" in animation && animation.transitionProperty === \"transform\");\n if (!sliding) end();\n });\n slides.set(root, end);\n root.dataset.workspaceDetailSliding = \"\";\n };\n const revealItem = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem) => {\n if (phone?.matches && phonePage(aside)) return;\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.set(\n root,\n requestAnimationFrame(() => {\n revealFrames.delete(root);\n if (\n !aside.hidden &&\n aside.isConnected &&\n snapshot.item.isConnected &&\n mainElement(root)?.contains(snapshot.item) &&\n snapshot.item.closest(ROOT_SELECTOR) === root\n ) {\n const behavior = prefersReducedMotion() ? \"auto\" : \"smooth\";\n const main = mainElement(root);\n const cell = snapshot.cell;\n const target = cell?.isConnected && main?.contains(cell) ? cell : snapshot.item;\n if (phone?.matches && main) {\n // The sheet covers Main's lower part, so the item ends 8px above it;\n // the other edges include the scroller's scroll padding, like scrollIntoView.\n const page = ownerDocument.scrollingElement;\n const vertical = verticalScroller(target, main) ?? page;\n const horizontal = scrollerOn(\"x\", target, main) ?? page;\n const bounds = (scroller: Element | null) => {\n if (!scroller || scroller === page) return null;\n const rect = scroller.getBoundingClientRect();\n const style = ownerWindow.getComputedStyle(scroller);\n const padding = (value: string) => Number.parseFloat(value) || 0;\n return {\n top: rect.top + padding(style.scrollPaddingTop),\n left: rect.left + padding(style.scrollPaddingLeft),\n right: rect.right - padding(style.scrollPaddingRight),\n };\n };\n const box = target.getBoundingClientRect();\n const top = Math.max(0, bounds(vertical)?.top ?? 0);\n const left = Math.max(0, bounds(horizontal)?.left ?? 0);\n const right = Math.min(ownerWindow.innerWidth, bounds(horizontal)?.right ?? Infinity);\n const dy = box.top < top ? box.top - top - 8 : Math.max(0, box.bottom - (ownerWindow.innerHeight - aside.offsetHeight) + 8);\n // As with scrollIntoView's \"nearest\", an item past both edges stays put\n // and one wider than the view keeps its start in view.\n const dx =\n box.left < left && box.right > right\n ? 0\n : box.left < left\n ? box.left - left - 8\n : box.right > right\n ? Math.min(box.right - right + 8, Math.max(0, box.left - left - 8))\n : 0;\n if (vertical && vertical === horizontal) {\n if (dy || dx) vertical.scrollBy({ top: dy, left: dx, behavior });\n } else {\n if (dy) vertical?.scrollBy({ top: dy, behavior });\n if (dx) horizontal?.scrollBy({ left: dx, behavior });\n }\n } else target.scrollIntoView({ block: \"nearest\", inline: \"nearest\", behavior });\n }\n }),\n );\n };\n let pendingDetail: { aside: HTMLElement; snapshot: RememberedItem; stop: () => void } | null = null;\n const canOpenPendingDetail = (aside: HTMLElement) =>\n aside.isConnected &&\n eventRoot.contains(aside) &&\n !aside.hidden &&\n detailWaiting(aside) &&\n !detailDrawer(aside) &&\n aside.dataset.workspaceDetailChoice !== \"request\";\n const cancelPendingDetail = () => {\n pendingDetail?.stop();\n pendingDetail = null;\n };\n // Check a completed choice after two frames. If its selection mark arrives\n // later, keep waiting until another interaction replaces the choice.\n const checkPendingDetail = (root: HTMLElement, aside: HTMLElement, snapshot: RememberedItem, space = false) => {\n cancelPendingDetail();\n let frame: number | null = null;\n let observer: MutationObserver | null = null;\n const settle = () => {\n ownerDocument.removeEventListener(\"click\", onClick, true);\n ownerDocument.removeEventListener(\"keyup\", onKeyUp, true);\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n frame = requestAnimationFrame(() => {\n frame = null;\n const main = mainElement(root);\n if (\n !canOpenPendingDetail(aside) ||\n !snapshot.chosen ||\n !snapshot.item.isConnected ||\n !main?.contains(snapshot.item) ||\n snapshot.item.closest(ROOT_SELECTOR) !== root\n ) {\n cancelPendingDetail();\n return;\n }\n // ARIA marks, and `data-selected` as DataTable and Calendar mark their selection.\n let selected = snapshot.item.closest(SELECTION_MARK_SELECTOR);\n while (selected?.matches(IGNORED_SELECTION_MARK_SELECTOR))\n selected = selected.parentElement?.closest(SELECTION_MARK_SELECTOR) ?? null;\n if (!selected || selected === main || !main.contains(selected)) {\n if (!observer) {\n observer = new MutationObserver(settle);\n observer.observe(main, {\n subtree: true,\n attributes: true,\n attributeFilter: [\"aria-selected\", \"aria-current\", \"data-selected\"],\n });\n }\n return;\n }\n cancelPendingDetail();\n // A control inside a selected row that discloses, toggles, or opens\n // a menu does its own job and selects nothing.\n if (selected !== snapshot.item && snapshot.item.matches(NESTED_CONTROL_SELECTOR)) return;\n snapshot.fresh = false;\n openDetailDrawer(aside);\n revealItem(root, aside, snapshot);\n // The same item keeps its title; another one may still be loading,\n // so focus follows the title that replaces the current one.\n if (snapshot.interaction === \"keyboard\") {\n focusTitle(aside);\n requestTitle(aside, true);\n }\n });\n });\n };\n const onClick = (event: MouseEvent) => {\n if (event.button === 0 && event.target instanceof Node && snapshot.item.contains(event.target)) settle();\n else cancelPendingDetail();\n };\n // Space activates a button on release, so its check waits for keyup.\n const onKeyUp = (event: KeyboardEvent) => {\n if (event.key === \" \") settle();\n };\n const stop = () => {\n if (frame !== null) cancelAnimationFrame(frame);\n observer?.disconnect();\n ownerDocument.removeEventListener(\"click\", onClick, true);\n ownerDocument.removeEventListener(\"keyup\", onKeyUp, true);\n ownerDocument.removeEventListener(\"pointercancel\", cancelPendingDetail, true);\n };\n pendingDetail = { aside, snapshot, stop };\n ownerDocument.addEventListener(\"pointercancel\", cancelPendingDetail, true);\n if (space) ownerDocument.addEventListener(\"keyup\", onKeyUp, true);\n else if (snapshot.interaction === \"keyboard\") settle();\n else ownerDocument.addEventListener(\"click\", onClick, true);\n };\n const detailTransition = (aside: HTMLElement, wasHidden: boolean) => {\n const root = aside.closest<HTMLElement>(ROOT_SELECTOR);\n detailHidden.set(aside, Boolean(aside.hidden));\n if (!root || !observedRoots.has(root) || Boolean(aside.hidden) === wasHidden) return;\n pendingAnchors.get(root)?.();\n slide(root, aside);\n touchedDetails.add(aside);\n const pending = revealFrames.get(root);\n if (pending !== undefined) cancelAnimationFrame(pending);\n revealFrames.delete(root);\n const snapshot = remembered.get(root);\n const followedInteraction = snapshot?.fresh ?? false;\n if (snapshot) snapshot.fresh = false;\n if (aside.hidden) {\n if (pendingDetail?.aside === aside) cancelPendingDetail();\n parkDetailDrawer(aside);\n if (pendingTitle?.aside === aside) cancelTitle();\n if (panelStep === aside) panelStep = null;\n if (root.hasAttribute(\"data-workspace-motion\") && !prefersReducedMotion() && wide?.matches) {\n // Closing holds the detail column until the slide ends; anchor after Main widens.\n const cancel = () => {\n root.removeEventListener(\"transitionend\", onTransitionEnd);\n clearTimeout(timer);\n pendingAnchors.delete(root);\n };\n const finish = () => {\n cancel();\n if (aside.hidden && aside.isConnected) anchorItem(root, aside, snapshot);\n };\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.target === root && event.propertyName === \"--k2b-workspace-detail-track\") finish();\n };\n const timer = setTimeout(finish, 300);\n root.addEventListener(\"transitionend\", onTransitionEnd);\n pendingAnchors.set(root, cancel);\n } else anchorItem(root, aside, snapshot);\n const focused = ownerDocument.activeElement;\n if (\n snapshot?.item.isConnected &&\n (aside.contains(lastFocus.get(root) ?? null) || aside.contains(focused) || focused === ownerDocument.body)\n )\n snapshot.item.focus({ preventScroll: true });\n clearDrag(aside);\n if (detailDrag?.aside === aside) finishDetailDrag(true);\n return;\n }\n if (detailWaiting(aside) && !detailDrawer(aside)) {\n if (!followedInteraction || !snapshot?.chosen) return;\n if (aside.dataset.workspaceDetailChoice === \"request\" && !snapshot.item.matches(DETAIL_REQUEST_CONTROL_SELECTOR)) return;\n openDetailDrawer(aside);\n }\n anchorItem(root, aside, snapshot);\n if (phone?.matches) setDetent(aside, false);\n if (followedInteraction && snapshot) {\n revealItem(root, aside, snapshot);\n if (snapshot.interaction === \"keyboard\" || phone?.matches) requestTitle(aside);\n }\n };\n const onDetailKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) return;\n const target = eventElement(event);\n if (!target || target.closest(KEY_OWNER_SELECTOR)) return;\n if (ownerDocument.querySelector(\"dialog[open], [aria-modal='true']\")) return;\n try {\n // A passive hint does not own the keyboard.\n if (ownerDocument.querySelector(\":popover-open:not(.k2b-moved-hint)\")) return;\n } catch {\n // Older engines have no popover selector; the other popup guards still apply.\n }\n const root = target.closest<HTMLElement>(ROOT_SELECTOR);\n let aside = target.closest<HTMLElement>(detailSelector);\n if (aside?.hidden || (aside && (!eventRoot.contains(aside) || aside.closest(ROOT_SELECTOR) !== root))) aside = null;\n if (!aside && root && observedRoots.has(root) && (mainElement(root)?.contains(target) || target.closest(DETAIL_TOGGLE_SELECTOR)))\n aside = openDetails(root).find(isVisible) ?? null;\n if (!aside && target === ownerDocument.body) {\n const open = allRoots().flatMap(openDetails).filter(isVisible);\n if (open.length === 1) aside = open[0]!;\n }\n const owningRoot = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!aside || !owningRoot || !isVisible(aside)) return;\n if (event.key === \"Escape\" && detailDrawer(aside)) {\n parkDetailDrawer(aside, true);\n syncDetailRequestControls();\n event.preventDefault();\n return;\n }\n if (event.key === \"Escape\" && closable(aside)) requestClose(aside);\n else if (\n (event.key.toLowerCase() === \"j\" || event.key.toLowerCase() === \"k\") &&\n aside.hasAttribute(\"data-workspace-detail-steppable\")\n ) {\n const main = mainElement(owningRoot);\n const inMain = remembered.get(owningRoot)?.item.contains(target) || main?.contains(target);\n const inPanel = aside.contains(target) || (target === ownerDocument.body && panelStep === aside);\n panelStep = inPanel ? aside : null;\n const previousTitle = inPanel ? titleIn(aside) : null;\n const previousText = previousTitle?.textContent;\n const detail: AppWorkspaceDetailStep = { direction: event.key.toLowerCase() === \"j\" ? 1 : -1 };\n aside.dispatchEvent(new CustomEvent(APP_WORKSPACE_DETAIL_STEP_EVENT, { detail }));\n const shown = detail.item;\n const item = shown instanceof HTMLElement && main?.contains(shown) && shown.closest(ROOT_SELECTOR) === owningRoot ? shown : null;\n if (item && main) {\n const snapshot: RememberedItem = {\n item,\n cell: null,\n interaction: \"keyboard\",\n scroller: verticalScroller(item, main),\n scrollTop: 0,\n top: 0,\n fresh: false,\n chosen: false,\n };\n refreshItem(snapshot);\n remembered.set(owningRoot, snapshot);\n revealItem(owningRoot, aside, snapshot);\n }\n const title = titleIn(aside);\n if (item && inMain) item.focus({ preventScroll: true });\n // A panel that swapped its title during the event has the new one now.\n else if (item && inPanel && title && (title !== previousTitle || title.textContent !== previousText)) focusTitle(aside);\n // This key's capture cancelled an earlier step's title request, so a\n // step from the body, even past the last item, asks again.\n else if (inPanel && (item || target === ownerDocument.body)) requestTitle(aside, Boolean(item));\n } else if (event.key === \"F6\") {\n if (aside.contains(target)) {\n const item = remembered.get(owningRoot)?.item;\n const main = mainElement(owningRoot);\n (item?.isConnected ? item : main ? tabStopsIn(main)[0] : null)?.focus({ preventScroll: true });\n } else focusTitle(aside);\n } else return;\n event.preventDefault();\n };\n\n type DetailDrag = {\n aside: HTMLElement;\n source: \"pointer\" | \"sheet\" | \"drawer\";\n target: Element;\n pointerId: number;\n startX: number;\n startY: number;\n startHeight: number;\n full: boolean;\n dx: number;\n dy: number;\n time: number;\n velocity: number;\n moved: boolean;\n releaseTextSelection?: () => void;\n };\n let detailDrag: DetailDrag | null = null;\n let detailDragFrame: number | null = null;\n let suppressedClick: HTMLElement | null = null;\n let suppressedClickTimer: ReturnType<typeof setTimeout> | null = null;\n const paintDetailDrag = () => {\n detailDragFrame = null;\n const drag = detailDrag;\n if (!drag?.moved) return;\n drag.aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(drag.aside);\n if (drag.source === \"drawer\") drag.aside.style.transform = `translateX(${Math.max(0, drag.dx)}px)`;\n else {\n const height = ownerWindow.innerHeight;\n drag.aside.style.setProperty(\n \"--k2b-workspace-detail-sheet-height\",\n `${clamp(drag.startHeight - drag.dy, 0, Math.max(0, height - 8))}px`,\n );\n }\n };\n const scheduleDetailDrag = () => {\n if (detailDragFrame === null) detailDragFrame = requestAnimationFrame(paintDetailDrag);\n };\n const finishDetailDrag = (cancelled: boolean) => {\n const drag = detailDrag;\n if (!drag) return;\n detailDrag = null;\n if (detailDragFrame !== null) cancelAnimationFrame(detailDragFrame);\n detailDragFrame = null;\n drag.releaseTextSelection?.();\n if (drag.source === \"pointer\") {\n if (drag.target instanceof HTMLElement && drag.target.hasPointerCapture?.(drag.pointerId))\n drag.target.releasePointerCapture(drag.pointerId);\n if (drag.moved) {\n suppressedClick = drag.aside;\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n suppressedClickTimer = setTimeout(() => {\n suppressedClick = null;\n suppressedClickTimer = null;\n }, 0);\n }\n }\n clearDrag(drag.aside);\n if (cancelled || !drag.moved) return;\n if (drag.source === \"drawer\") {\n if (drag.dx > 80 || (drag.dx > 30 && drag.velocity > 0.5))\n parkDetailDrawer(drag.aside, drag.aside.contains(ownerDocument.activeElement));\n } else if (drag.dy > 60) {\n setDetent(drag.aside, false);\n if (!drag.full && closable(drag.aside)) requestClose(drag.aside);\n } else if (drag.dy < -60) setDetent(drag.aside, true);\n };\n const beginDetailDrag = (aside: HTMLElement, target: Element, source: DetailDrag[\"source\"], x: number, y: number, pointerId: number) => {\n detailDrag = {\n aside,\n target,\n source,\n pointerId,\n startX: x,\n startY: y,\n startHeight: aside.getBoundingClientRect().height,\n full: aside.dataset.workspaceDetailSheet === \"full\",\n dx: 0,\n dy: 0,\n time: performance.now(),\n velocity: 0,\n moved: false,\n };\n return detailDrag;\n };\n const onSheetPointerDown = (event: Event) => {\n if (!(event instanceof PointerEvent) || !phone?.matches || event.button !== 0 || !event.isPrimary || claimedDetailGestures.has(event))\n return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n if (phonePage(aside)) return;\n const grabber = target.closest<HTMLElement>(grabberSelector);\n if (\n !grabber &&\n (!target.closest(\".k2b-detail-panel__header\") ||\n target.closest(\"a, button, input, select, textarea, [role='button'], [contenteditable]:not([contenteditable='false'])\"))\n )\n return;\n claimedDetailGestures.add(event);\n if (detailDrag) finishDetailDrag(true);\n const drag = beginDetailDrag(aside, grabber ?? target, \"pointer\", event.clientX, event.clientY, event.pointerId);\n drag.releaseTextSelection = suppressTextSelection(event.pointerId);\n if (drag.target instanceof HTMLElement) drag.target.setPointerCapture?.(event.pointerId);\n aside.dataset.workspaceDetailDragging = \"true\";\n touchedDetails.add(aside);\n };\n const onSheetPointerMove = (event: PointerEvent) => {\n const drag = detailDrag;\n if (!drag || drag.source !== \"pointer\" || drag.pointerId !== event.pointerId) return;\n drag.dy = event.clientY - drag.startY;\n drag.moved ||= Math.abs(drag.dy) > 4;\n if (drag.moved) scheduleDetailDrag();\n };\n const onSheetPointerEnd = (event: Event) => {\n if (!(event instanceof PointerEvent)) return;\n if (detailDrag?.source === \"pointer\" && detailDrag.pointerId === event.pointerId) finishDetailDrag(event.type !== \"pointerup\");\n };\n const onGrabberClick = (event: Event) => {\n const target = eventElement(event);\n const grabber = target?.closest(grabberSelector);\n const aside = grabber?.closest<HTMLElement>(detailSelector);\n if (!aside || aside.hidden || phonePage(aside) || !phone?.matches || claimedToggleClicks.has(event)) return;\n claimedToggleClicks.add(event);\n if (suppressedClick === aside && event instanceof MouseEvent && event.detail !== 0) {\n event.preventDefault();\n suppressedClick = null;\n return;\n }\n setDetent(aside, aside.dataset.workspaceDetailSheet !== \"full\");\n };\n const ownsTouchGesture = (target: Element, aside: HTMLElement, source: \"sheet\" | \"drawer\") => {\n for (let element: Element | null = target; element && element !== aside; element = element.parentElement) {\n if (\n element.matches(\n \"input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='slider'], [draggable='true'], canvas\",\n )\n )\n return true;\n const action = getComputedStyle(element).getPropertyValue(\"touch-action\");\n const horizontal = /\\bpan-(x|left|right)\\b/.test(action);\n const vertical = /\\bpan-(y|up|down)\\b/.test(action);\n if (action.trim() === \"none\" || (source === \"drawer\" ? vertical && !horizontal : horizontal && !vertical)) return true;\n }\n return false;\n };\n const onDetailTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent) || event.touches.length !== 1) {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(true);\n return;\n }\n if (detailDrag || claimedDetailGestures.has(event)) return;\n const target = eventElement(event);\n const aside = target?.closest<HTMLElement>(detailSelector);\n const touch = event.touches[0];\n const root = aside?.closest<HTMLElement>(ROOT_SELECTOR);\n if (!target || !aside || !root || aside.hidden || !touch || !observedRoots.has(root) || target.closest(ROOT_SELECTOR) !== root) return;\n if (phone?.matches && phonePage(aside)) return;\n if (phone?.matches && (verticalScroller(target, aside) ?? aside).scrollTop <= 0) {\n if (!ownsTouchGesture(target, aside, \"sheet\"))\n beginDetailDrag(aside, target, \"sheet\", touch.clientX, touch.clientY, touch.identifier);\n } else if (wide?.matches && detailDrawer(aside)) {\n if (!ownsTouchGesture(target, aside, \"drawer\"))\n beginDetailDrag(aside, target, \"drawer\", touch.clientX, touch.clientY, touch.identifier);\n }\n if (detailDrag) claimedDetailGestures.add(event);\n };\n const onDetailTouchMove = (event: Event) => {\n const drag = detailDrag;\n if (!(event instanceof TouchEvent) || !drag || drag.source === \"pointer\") return;\n const touch = Array.from(event.touches).find((touch) => touch.identifier === drag.pointerId);\n if (!touch || event.touches.length !== 1) {\n finishDetailDrag(true);\n return;\n }\n const dx = touch.clientX - drag.startX;\n const dy = touch.clientY - drag.startY;\n const now = performance.now();\n drag.velocity = (dx - drag.dx) / Math.max(1, now - drag.time);\n drag.time = now;\n drag.dx = dx;\n drag.dy = dy;\n if (!drag.moved) {\n if (drag.source === \"sheet\") {\n if (dy < 0 || (verticalScroller(drag.target, drag.aside) ?? drag.aside).scrollTop > 0) {\n finishDetailDrag(true);\n return;\n }\n if (dy <= 4) return;\n } else {\n if (Math.max(Math.abs(dx), Math.abs(dy)) <= 8) return;\n if (dx <= Math.abs(dy)) {\n finishDetailDrag(true);\n return;\n }\n for (let element: Element | null = drag.target; element && drag.aside.contains(element); element = element.parentElement) {\n if (\n element instanceof HTMLElement &&\n /^(auto|scroll)$/.test(getComputedStyle(element).overflowX) &&\n element.scrollWidth > element.clientWidth &&\n element.scrollLeft > 0\n ) {\n finishDetailDrag(true);\n return;\n }\n if (element === drag.aside) break;\n }\n }\n drag.moved = true;\n }\n event.preventDefault();\n scheduleDetailDrag();\n };\n const onDetailTouchEnd = (event: Event) => {\n if (detailDrag && detailDrag.source !== \"pointer\") finishDetailDrag(event.type === \"touchcancel\");\n };\n const onPanelDoubleClick = (event: Event) => {\n const handle = resizeHandle(event);\n const root = handle?.closest<HTMLElement>(ROOT_SELECTOR);\n const kind = handle ? resizeKind(handle) : null;\n if (\n !handle ||\n !root ||\n (kind !== \"detail\" && kind !== \"pane\") ||\n !workspaceResizable(root) ||\n !controlsResizableRegion(root, handle, kind)\n )\n return;\n const key = kind === \"pane\" ? \"paneWidths\" : \"detailWidths\";\n const widths = { ...layoutState[key] };\n delete widths[panelId(handle)];\n layoutState = { ...layoutState, [key]: widths };\n const variable = appWorkspacePanelVariable(kind, panelId(handle));\n root.style.removeProperty(variable);\n // An SSR ancestor may still supply the old preference until the next request.\n if (getComputedStyle(root).getPropertyValue(variable).trim()) {\n const spec =\n readAppWorkspaceWidth(handle.dataset.workspaceDefaultSize) ??\n (kind === \"pane\" ? APP_WORKSPACE_PANE_DEFAULT : APP_WORKSPACE_DETAIL_DEFAULT);\n // A share must resolve at the pane, where the workspace length exists.\n // `initial` clears an inherited SSR preference and restores its CSS fallback.\n root.style.setProperty(variable, typeof spec === \"number\" ? `${spec}px` : \"initial\");\n }\n // The siblings fit again around the default width, also in a Main without levels.\n if (kind === \"pane\") reconcilePanes(root, layoutState);\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n options.writeState?.(layoutState);\n };\n\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n // A level resize starts from what is on screen. When the stored widths do\n // not fit beside the flexible level, CSS shrinks the resizable levels (a\n // level without a separator does not shrink), so a step from a shrunk width\n // would land on a preference that shrinks again and jump. The visible\n // resizable levels therefore take their rendered widths as preferences when\n // a step really moves; then they fit, and the step moves exactly by its\n // size. All widths are measured before any is written, because each write\n // reflows the others.\n const settleLevels = (root: HTMLElement, handle: HTMLElement) => {\n const main = handle.closest<HTMLElement>(\".k2b-app-workspace__main\");\n if (!main?.hasAttribute(\"data-workspace-levels\")) return;\n const widths = Array.from(main.querySelectorAll<HTMLElement>(HANDLE_SELECTOR))\n .filter((other) => other.closest(\".k2b-app-workspace__main\") === main && resizeKind(other) === \"pane\")\n .flatMap((other) => {\n const panel = controlledPanel(root, other);\n return isVisible(panel) && !flexibleLevel(panel) && panel.dataset.workspaceResizable === \"true\"\n ? [{ id: panelId(other), width: Math.round(elementSize(panel, \"pane\")) }]\n : [];\n });\n for (const { id, width } of widths) {\n if (layoutState.paneWidths?.[id] === width) continue;\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", id), `${width}px`);\n layoutState = { ...layoutState, paneWidths: { ...layoutState.paneWidths, [id]: width } };\n }\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n const requested = active.startSize + (client - active.startClient) * active.direction;\n // A press without movement, or a drag that the limits stop, changes no\n // level preference, also not a sibling's.\n if (!active.moved && client !== active.startClient && active.kind === \"pane\" && levelsMain(active.handle)) {\n const { min, max } = sizeLimits(active.root, active.handle, \"pane\");\n if (clamp(requested, min, max) === Math.round(currentSize(active.root, active.handle, \"pane\"))) return;\n settleLevels(active.root, active.handle);\n }\n active.moved ||= client !== active.startClient;\n // Below half the smallest visible width a hideable sidebar stays at its\n // minimum and previews hiding; dragging back out resumes the live width.\n const hiding =\n active.kind === \"sidebar\" && sidebarHideable(active.root) && requested < sizeLimits(active.root, active.handle, active.kind).min / 2;\n if (hiding !== active.hiding) {\n active.hiding = hiding;\n previewSidebarHidden(active.root, hiding);\n }\n if (!hiding)\n active.liveSize = applySize(active.root, active.handle, active.kind, requested, { snapSidebar: active.kind !== \"sidebar\" });\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.hiding) {\n // The request comes first, while the layout is still the one on screen,\n // so the host sees the sidebar disappear in a single change. The width\n // before the drag then stays the remembered width for the next time it\n // shows; a host that declines the request gets that width back.\n sidebarElement(finished.root)?.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));\n previewSidebarHidden(finished.root, false);\n applySize(finished.root, finished.handle, \"sidebar\", finished.startSize);\n } else if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n finished.releaseTextSelection();\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n hiding: false,\n direction: resizeDirection(handle, kind),\n releaseTextSelection: suppressTextSelection(event.pointerId),\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n if (kind === \"pane\" && levelsMain(handle)) {\n // A step that the limits stop changes no preference, also not a sibling's.\n if (clamp(requested, min, max) === Math.round(current)) return;\n settleLevels(root, handle);\n }\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n // Remember only attributes we own; application-set inert survives every transition.\n const phonePageInerted = new Set<HTMLElement>();\n const syncPhonePages = () => {\n const regions = new Set<HTMLElement>();\n if (phone?.matches) {\n for (const root of allRoots()) {\n if (!root.isConnected) continue;\n for (const aside of openDetails(root).filter(phonePage)) {\n for (let node: HTMLElement | null = aside; node && node !== root; node = node.parentElement) {\n const parent: HTMLElement | null = node.parentElement;\n if (parent) overlayRegions(parent, aside).forEach((region) => regions.add(region));\n }\n }\n }\n }\n phonePageInerted.forEach((region) => {\n if (regions.has(region)) return;\n region.removeAttribute(\"inert\");\n phonePageInerted.delete(region);\n });\n regions.forEach((region) => {\n if (region.hasAttribute(\"inert\")) return;\n region.setAttribute(\"inert\", \"\");\n phonePageInerted.add(region);\n });\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n if (detailDrag && (detailDrag.source === \"drawer\" ? !wide?.matches || !detailDrawer(detailDrag.aside) : !phone?.matches))\n finishDetailDrag(true);\n allRoots().forEach((root) => {\n if (!phone?.matches) {\n for (const aside of rootElements(root, detailSelector)) {\n if (aside.dataset.workspaceDetailSheet === \"full\") setDetent(aside, false);\n }\n }\n });\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted, { reserveMainMinimum: false });\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = () => {\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n // Reconciling can restore a drawer's persisted width; its trail space follows.\n for (const root of allRoots()) for (const aside of rootElements(root, DETAIL_DRAWER_SELECTOR)) syncDetailDrawerSpace(aside);\n });\n };\n const onResize = () => {\n syncHostState();\n scheduleReconcile();\n };\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n syncHostState();\n scheduleReconcile();\n });\n // A host can change its width while a workspace with a fixed width keeps\n // its own, so the controller also watches each root's nearest named host.\n const observedHosts = new Set<Element>();\n // Found once per root: reading styles on every mutation would cost a style pass.\n const rootHosts = new WeakMap<HTMLElement, Element | null>();\n const hostOf = (root: HTMLElement) => {\n if (rootHosts.has(root)) return rootHosts.get(root)!;\n let host: Element | null = null;\n for (let element = root.parentElement; element && !host; element = element.parentElement)\n if (getComputedStyle(element).containerName.split(/\\s+/).includes(\"k2b-app-area\")) host = element;\n rootHosts.set(root, host);\n return host;\n };\n const syncObservedRoots = () => {\n const hosts = new Set(\n allRoots()\n .map(hostOf)\n .filter((host): host is Element => host !== null),\n );\n observedHosts.forEach((host) => {\n if (hosts.has(host)) return;\n resizeObserver?.unobserve(host);\n observedHosts.delete(host);\n });\n hosts.forEach((host) => {\n if (observedHosts.has(host)) return;\n observedHosts.add(host);\n resizeObserver?.observe(host);\n });\n for (const elements of [touchedDetails, titleTabIndices, motionRoots]) {\n elements.forEach((element) => {\n if (!element.isConnected) elements.delete(element);\n });\n }\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n pendingAnchors.get(root)?.();\n slides.get(root)?.();\n resizeObserver?.unobserve(root);\n const frame = motionFrames.get(root);\n if (frame !== undefined) cancelAnimationFrame(frame);\n motionFrames.delete(root);\n observedRoots.delete(root);\n }\n });\n touchMoveAsides.forEach((aside) => {\n if (aside.isConnected) return;\n aside.removeEventListener(\"touchmove\", onDetailTouchMove);\n touchMoveAsides.delete(aside);\n });\n next.forEach((root) => {\n rootElements(root, detailSelector).forEach((aside) => {\n if (!detailHidden.has(aside)) detailHidden.set(aside, Boolean(aside.hidden));\n if (touchMoveAsides.has(aside)) return;\n aside.addEventListener(\"touchmove\", onDetailTouchMove, { passive: false });\n touchMoveAsides.add(aside);\n });\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver?.observe(root);\n if (!root.hasAttribute(\"data-workspace-motion\")) {\n motionRoots.add(root);\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.set(\n root,\n requestAnimationFrame(() => {\n motionFrames.delete(root);\n if (observedRoots.has(root)) root.dataset.workspaceMotion = \"true\";\n }),\n );\n }),\n );\n }\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"childList\" ||\n [\"hidden\", \"aria-controls\", \"aria-expanded\", \"data-workspace-detail-drawer\"].includes(record.attributeName ?? \"\"),\n )\n )\n syncDetailRequestControls();\n syncPhonePages();\n if (pendingTitle && (pendingTitle.aside.hidden || !pendingTitle.aside.isConnected)) cancelTitle();\n if (\n pendingDetail &&\n (!canOpenPendingDetail(pendingDetail.aside) || !pendingDetail.snapshot.chosen || !pendingDetail.snapshot.item.isConnected)\n )\n cancelPendingDetail();\n // Hiding or removing the sidebar, or its button, ends the overlay.\n if (overlay && (overlay.sidebar.hidden || !overlay.sidebar.isConnected || !overlay.toggle.isConnected)) closeOverlay(\"kept\");\n const details = new Set<HTMLElement>();\n for (const record of records) {\n if (\n record.type === \"attributes\" &&\n record.attributeName === \"hidden\" &&\n record.target instanceof HTMLElement &&\n record.target.matches(detailSelector) &&\n !details.has(record.target)\n ) {\n details.add(record.target);\n detailTransition(record.target, detailHidden.get(record.target) ?? record.oldValue !== null);\n }\n }\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n // A new width token or a removed panel can end waiting without any box resizing.\n if (\n records.some(\n (record) =>\n record.type === \"childList\" || record.attributeName === \"data-width\" || record.attributeName === \"data-workspace-main-min\",\n )\n )\n syncHostState();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"click\", onClick as EventListener);\n ownerDocument.addEventListener(\"keydown\", onOverlayKeyDown);\n ownerWindow.addEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.addEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"keydown\", cancelTitleOnInteraction, true);\n ownerDocument.addEventListener(\"click\", onDetailRequestClick, true);\n ownerDocument.addEventListener(\"click\", onChoiceClick, true);\n ownerDocument.addEventListener(\"keyup\", endActivation, true);\n ownerDocument.addEventListener(\"pointerup\", endActivation, true);\n ownerDocument.addEventListener(\"pointercancel\", cancelActivation, true);\n eventRoot.addEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.addEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.addEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.addEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.addEventListener(\"click\", onGrabberClick);\n eventRoot.addEventListener(\"dblclick\", onPanelDoubleClick);\n window.addEventListener(\"pointermove\", onSheetPointerMove);\n window.addEventListener(\"pointerup\", onSheetPointerEnd);\n window.addEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.addEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.addEventListener(\"touchstart\", onDetailTouchStart, { passive: true });\n eventRoot.addEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.addEventListener(\"touchcancel\", onDetailTouchEnd);\n phone?.addEventListener(\"change\", syncHostState);\n phone?.addEventListener(\"change\", syncPhonePages);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncPhonePages();\n syncObservedRoots();\n syncDetailRequestControls();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [\n \"hidden\",\n \"aria-controls\",\n \"aria-expanded\",\n \"data-workspace-detail-drawer\",\n \"data-workspace-level-shown\",\n \"data-width\",\n \"data-workspace-main-min\",\n \"data-workspace-default-size\",\n ],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n phonePageInerted.forEach((region) => region.removeAttribute(\"inert\"));\n phonePageInerted.clear();\n phone?.removeEventListener(\"change\", syncPhonePages);\n cancelTitle();\n cancelPendingDetail();\n pendingAnchors.forEach((cancel) => cancel());\n slides.forEach((end) => end());\n stopScrollFades();\n finishDetailDrag(true);\n if (suppressedClickTimer !== null) clearTimeout(suppressedClickTimer);\n motionFrames.forEach(cancelAnimationFrame);\n revealFrames.forEach(cancelAnimationFrame);\n motionRoots.forEach((root) => delete root.dataset.workspaceMotion);\n touchedDetails.forEach((aside) => {\n clearDrag(aside);\n delete aside.dataset.workspaceDetailSheet;\n aside.querySelector(grabberSelector)?.setAttribute(\"aria-pressed\", \"false\");\n });\n titleTabIndices.forEach((title) => title.removeAttribute(\"tabindex\"));\n ownerWindow.removeEventListener(\"keydown\", onDetailKeyDown);\n ownerDocument.removeEventListener(\"focusin\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"pointerdown\", cancelTitleOnInteraction, true);\n ownerDocument.removeEventListener(\"keydown\", cancelTitleOnInteraction, true);\n clearActivation();\n ownerDocument.removeEventListener(\"click\", onChoiceClick, true);\n ownerDocument.removeEventListener(\"keyup\", endActivation, true);\n ownerDocument.removeEventListener(\"pointerup\", endActivation, true);\n ownerDocument.removeEventListener(\"pointercancel\", cancelActivation, true);\n eventRoot.removeEventListener(\"pointerdown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"keydown\", rememberInteraction, true);\n eventRoot.removeEventListener(\"focusin\", onDetailFocusIn);\n eventRoot.removeEventListener(\"pointerdown\", onSheetPointerDown);\n eventRoot.removeEventListener(\"click\", onGrabberClick);\n eventRoot.removeEventListener(\"dblclick\", onPanelDoubleClick);\n window.removeEventListener(\"pointermove\", onSheetPointerMove);\n window.removeEventListener(\"pointerup\", onSheetPointerEnd);\n window.removeEventListener(\"pointercancel\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"lostpointercapture\", onSheetPointerEnd);\n eventRoot.removeEventListener(\"touchstart\", onDetailTouchStart);\n touchMoveAsides.forEach((aside) => aside.removeEventListener(\"touchmove\", onDetailTouchMove));\n eventRoot.removeEventListener(\"touchend\", onDetailTouchEnd);\n eventRoot.removeEventListener(\"touchcancel\", onDetailTouchEnd);\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n if (hostSyncFrame !== null) cancelAnimationFrame(hostSyncFrame);\n mutationObserver?.disconnect();\n detailRequestExpanded.forEach((state, control) => restoreDetailRequestExpanded(control, state));\n detailRequestExpanded.clear();\n ownerDocument.removeEventListener(\"click\", onDetailRequestClick, true);\n resizeObserver?.disconnect();\n observedRoots.clear();\n observedHosts.clear();\n closeOverlay(\"none\");\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"click\", onClick as EventListener);\n ownerDocument.removeEventListener(\"keydown\", onOverlayKeyDown);\n phone?.removeEventListener(\"change\", syncHostState);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}