@forgeax/interface 0.4.1

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 (963) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +111 -0
  4. package/dist/package/browser/App.css +192 -0
  5. package/dist/package/browser/App.d.ts +11 -0
  6. package/dist/package/browser/App.js +11 -0
  7. package/dist/package/browser/ApplicationDetachedShell.d.ts +13 -0
  8. package/dist/package/browser/ApplicationDetachedShell.js +10 -0
  9. package/dist/package/browser/ApplicationShell.d.ts +19 -0
  10. package/dist/package/browser/ApplicationShell.js +62 -0
  11. package/dist/package/browser/app-kit.d.ts +1 -0
  12. package/dist/package/browser/app-kit.js +4 -0
  13. package/dist/package/browser/appHostBootstrap.d.ts +16 -0
  14. package/dist/package/browser/appHostBootstrap.js +145 -0
  15. package/dist/package/browser/application.d.ts +35 -0
  16. package/dist/package/browser/application.js +64 -0
  17. package/dist/package/browser/assets/icons/agent-icon.png +0 -0
  18. package/dist/package/browser/assets/icons/at.svg +3 -0
  19. package/dist/package/browser/assets/icons/chevron-collapse.svg +3 -0
  20. package/dist/package/browser/assets/icons/chevron-expand.svg +3 -0
  21. package/dist/package/browser/assets/icons/chevron-up.svg +3 -0
  22. package/dist/package/browser/assets/icons/close-x.svg +3 -0
  23. package/dist/package/browser/assets/icons/close.svg +3 -0
  24. package/dist/package/browser/assets/icons/copy.svg +4 -0
  25. package/dist/package/browser/assets/icons/edit.svg +3 -0
  26. package/dist/package/browser/assets/icons/fullscreen.svg +3 -0
  27. package/dist/package/browser/assets/icons/pause.svg +4 -0
  28. package/dist/package/browser/assets/icons/play.svg +3 -0
  29. package/dist/package/browser/assets/icons/select.svg +3 -0
  30. package/dist/package/browser/assets/icons/sendMessage-enable.svg +4 -0
  31. package/dist/package/browser/assets/icons/sendMessage.svg +4 -0
  32. package/dist/package/browser/assets/icons/status-done.svg +11 -0
  33. package/dist/package/browser/assets/icons/status-running.svg +10 -0
  34. package/dist/package/browser/assets/icons/status-waiting.svg +10 -0
  35. package/dist/package/browser/assets/icons/tool-execute-script.svg +3 -0
  36. package/dist/package/browser/assets/icons/tool-other.svg +10 -0
  37. package/dist/package/browser/assets/icons/tool-read-file.svg +3 -0
  38. package/dist/package/browser/assets/icons/tool-resource-search.svg +3 -0
  39. package/dist/package/browser/assets/icons/tool-task-todo.svg +4 -0
  40. package/dist/package/browser/assets/icons/tool-write-file.svg +3 -0
  41. package/dist/package/browser/boot/SettingsSection.d.ts +14 -0
  42. package/dist/package/browser/boot/SettingsSection.js +82 -0
  43. package/dist/package/browser/boot/broadcast.d.ts +2 -0
  44. package/dist/package/browser/boot/broadcast.js +32 -0
  45. package/dist/package/browser/boot/driver.d.ts +22 -0
  46. package/dist/package/browser/boot/driver.js +47 -0
  47. package/dist/package/browser/boot/store.d.ts +29 -0
  48. package/dist/package/browser/boot/store.js +114 -0
  49. package/dist/package/browser/boot/themes.d.ts +19 -0
  50. package/dist/package/browser/boot/themes.js +21 -0
  51. package/dist/package/browser/boot/types.d.ts +22 -0
  52. package/dist/package/browser/boot/types.js +30 -0
  53. package/dist/package/browser/brand/BrandProvider.d.ts +19 -0
  54. package/dist/package/browser/brand/BrandProvider.js +35 -0
  55. package/dist/package/browser/brand/index.d.ts +4 -0
  56. package/dist/package/browser/brand/index.js +3 -0
  57. package/dist/package/browser/brand/runtime.d.ts +17 -0
  58. package/dist/package/browser/brand/runtime.js +71 -0
  59. package/dist/package/browser/brand/types.d.ts +77 -0
  60. package/dist/package/browser/brand/types.js +9 -0
  61. package/dist/package/browser/components/ActivityRail/ActivityRail.css +294 -0
  62. package/dist/package/browser/components/ActivityRail/ActivityRail.d.ts +2 -0
  63. package/dist/package/browser/components/ActivityRail/ActivityRail.js +164 -0
  64. package/dist/package/browser/components/ActivityRail/activity-rail-model.d.ts +18 -0
  65. package/dist/package/browser/components/ActivityRail/activity-rail-model.js +144 -0
  66. package/dist/package/browser/components/AgentAvatar/AgentAvatar.d.ts +17 -0
  67. package/dist/package/browser/components/AgentAvatar/AgentAvatar.js +50 -0
  68. package/dist/package/browser/components/BuildBadge/BuildBadge.d.ts +1 -0
  69. package/dist/package/browser/components/BuildBadge/BuildBadge.js +279 -0
  70. package/dist/package/browser/components/Bus/BusAdminPanel.css +2425 -0
  71. package/dist/package/browser/components/Bus/BusAdminPanel.d.ts +2 -0
  72. package/dist/package/browser/components/Bus/BusAdminPanel.js +1385 -0
  73. package/dist/package/browser/components/Bus/CapabilityOverview.d.ts +3 -0
  74. package/dist/package/browser/components/Bus/CapabilityOverview.js +50 -0
  75. package/dist/package/browser/components/ChatColumn/ChatColumn.d.ts +2 -0
  76. package/dist/package/browser/components/ChatColumn/ChatColumn.js +18 -0
  77. package/dist/package/browser/components/ChatColumn/SessionTabStrip.d.ts +1 -0
  78. package/dist/package/browser/components/ChatColumn/SessionTabStrip.js +103 -0
  79. package/dist/package/browser/components/ChatColumn/useChatWidth.d.ts +5 -0
  80. package/dist/package/browser/components/ChatColumn/useChatWidth.js +13 -0
  81. package/dist/package/browser/components/CommandPalette/CommandPalette.css +199 -0
  82. package/dist/package/browser/components/CommandPalette/CommandPalette.d.ts +2 -0
  83. package/dist/package/browser/components/CommandPalette/CommandPalette.js +242 -0
  84. package/dist/package/browser/components/Confirm/ConfirmDialog.d.ts +2 -0
  85. package/dist/package/browser/components/Confirm/ConfirmDialog.js +113 -0
  86. package/dist/package/browser/components/ContextMenu/ContextMenu.d.ts +10 -0
  87. package/dist/package/browser/components/ContextMenu/ContextMenu.js +218 -0
  88. package/dist/package/browser/components/ContextMenu/menuRegistry.d.ts +18 -0
  89. package/dist/package/browser/components/ContextMenu/menuRegistry.js +152 -0
  90. package/dist/package/browser/components/DetachedSurface.d.ts +20 -0
  91. package/dist/package/browser/components/DetachedSurface.js +102 -0
  92. package/dist/package/browser/components/DockShell/DockPanelHost.d.ts +4 -0
  93. package/dist/package/browser/components/DockShell/DockPanelHost.js +7 -0
  94. package/dist/package/browser/components/DockShell/DockRegion.d.ts +7 -0
  95. package/dist/package/browser/components/DockShell/DockRegion.js +315 -0
  96. package/dist/package/browser/components/DockShell/DockShell.css +1018 -0
  97. package/dist/package/browser/components/DockShell/DockTab.d.ts +3 -0
  98. package/dist/package/browser/components/DockShell/DockTab.js +139 -0
  99. package/dist/package/browser/components/DockShell/ExtensionHostPanel.d.ts +9 -0
  100. package/dist/package/browser/components/DockShell/ExtensionHostPanel.js +68 -0
  101. package/dist/package/browser/components/DockShell/ExtensionRuntimeFrame.d.ts +14 -0
  102. package/dist/package/browser/components/DockShell/ExtensionRuntimeFrame.js +56 -0
  103. package/dist/package/browser/components/DockShell/PanelWindowingBoundary.d.ts +6 -0
  104. package/dist/package/browser/components/DockShell/PanelWindowingBoundary.js +9 -0
  105. package/dist/package/browser/components/DockShell/chatDockAnimation.d.ts +45 -0
  106. package/dist/package/browser/components/DockShell/chatDockAnimation.js +101 -0
  107. package/dist/package/browser/components/DockShell/chatDockFullscreen.d.ts +17 -0
  108. package/dist/package/browser/components/DockShell/chatDockFullscreen.js +22 -0
  109. package/dist/package/browser/components/DockShell/chatDockLayout.d.ts +10 -0
  110. package/dist/package/browser/components/DockShell/chatDockLayout.js +11 -0
  111. package/dist/package/browser/components/DockShell/compact-empty-dock-groups.d.ts +16 -0
  112. package/dist/package/browser/components/DockShell/compact-empty-dock-groups.js +28 -0
  113. package/dist/package/browser/components/DockShell/crossInstanceDrop.d.ts +1 -0
  114. package/dist/package/browser/components/DockShell/crossInstanceDrop.js +1 -0
  115. package/dist/package/browser/components/DockShell/dockResetEpoch.d.ts +2 -0
  116. package/dist/package/browser/components/DockShell/dockResetEpoch.js +13 -0
  117. package/dist/package/browser/components/DockShell/dockTitle.d.ts +12 -0
  118. package/dist/package/browser/components/DockShell/dockTitle.js +36 -0
  119. package/dist/package/browser/components/DockShell/dockviewRegistry.d.ts +1 -0
  120. package/dist/package/browser/components/DockShell/dockviewRegistry.js +1 -0
  121. package/dist/package/browser/components/DockShell/edgeDrawer.d.ts +24 -0
  122. package/dist/package/browser/components/DockShell/edgeDrawer.js +1144 -0
  123. package/dist/package/browser/components/DockShell/edgePinStore.d.ts +12 -0
  124. package/dist/package/browser/components/DockShell/edgePinStore.js +37 -0
  125. package/dist/package/browser/components/DockShell/extension-editor-bridge.d.ts +13 -0
  126. package/dist/package/browser/components/DockShell/extension-editor-bridge.js +100 -0
  127. package/dist/package/browser/components/DockShell/extension-runtime-selection.d.ts +8 -0
  128. package/dist/package/browser/components/DockShell/extension-runtime-selection.js +6 -0
  129. package/dist/package/browser/components/DockShell/extensionRuntime.d.ts +17 -0
  130. package/dist/package/browser/components/DockShell/extensionRuntime.js +84 -0
  131. package/dist/package/browser/components/DockShell/footer-panel-visibility.d.ts +7 -0
  132. package/dist/package/browser/components/DockShell/footer-panel-visibility.js +43 -0
  133. package/dist/package/browser/components/DockShell/footer-panels.d.ts +2 -0
  134. package/dist/package/browser/components/DockShell/footer-panels.js +7 -0
  135. package/dist/package/browser/components/DockShell/panelRegistry.d.ts +37 -0
  136. package/dist/package/browser/components/DockShell/panelRegistry.js +126 -0
  137. package/dist/package/browser/components/DockShell/panelRenderers.d.ts +325 -0
  138. package/dist/package/browser/components/DockShell/panelRenderers.js +25 -0
  139. package/dist/package/browser/components/DockShell/panelTabCommands.d.ts +18 -0
  140. package/dist/package/browser/components/DockShell/panelTabCommands.js +133 -0
  141. package/dist/package/browser/components/DockShell/panelWindowing.d.ts +32 -0
  142. package/dist/package/browser/components/DockShell/panelWindowing.js +42 -0
  143. package/dist/package/browser/components/DockShell/regions.d.ts +1 -0
  144. package/dist/package/browser/components/DockShell/regions.js +1 -0
  145. package/dist/package/browser/components/DockShell/resolveRegion.d.ts +1 -0
  146. package/dist/package/browser/components/DockShell/resolveRegion.js +1 -0
  147. package/dist/package/browser/components/DockShell/sanitizeDockLayout.d.ts +3 -0
  148. package/dist/package/browser/components/DockShell/sanitizeDockLayout.js +46 -0
  149. package/dist/package/browser/components/DockShell/sideEdgeMove.d.ts +1 -0
  150. package/dist/package/browser/components/DockShell/sideEdgeMove.js +1 -0
  151. package/dist/package/browser/components/DockShell/studioTabMenuProvider.d.ts +13 -0
  152. package/dist/package/browser/components/DockShell/studioTabMenuProvider.js +39 -0
  153. package/dist/package/browser/components/DockShell/tabContextMenu.d.ts +29 -0
  154. package/dist/package/browser/components/DockShell/tabContextMenu.js +68 -0
  155. package/dist/package/browser/components/DockShell/ueDrag/controller.d.ts +80 -0
  156. package/dist/package/browser/components/DockShell/ueDrag/controller.js +785 -0
  157. package/dist/package/browser/components/DockShell/ueDrag/geometry.d.ts +94 -0
  158. package/dist/package/browser/components/DockShell/ueDrag/geometry.js +217 -0
  159. package/dist/package/browser/components/DockShell/ueDrag/overlay.d.ts +32 -0
  160. package/dist/package/browser/components/DockShell/ueDrag/overlay.js +206 -0
  161. package/dist/package/browser/components/DockShell/ueDrag/ueDrag.css +199 -0
  162. package/dist/package/browser/components/DockShell/useAuxBarWidth.d.ts +5 -0
  163. package/dist/package/browser/components/DockShell/useAuxBarWidth.js +13 -0
  164. package/dist/package/browser/components/Drawer/DrawerHostView.css +143 -0
  165. package/dist/package/browser/components/Drawer/DrawerHostView.d.ts +19 -0
  166. package/dist/package/browser/components/Drawer/DrawerHostView.js +93 -0
  167. package/dist/package/browser/components/Drawer/DrawerLauncher.d.ts +12 -0
  168. package/dist/package/browser/components/Drawer/DrawerLauncher.js +22 -0
  169. package/dist/package/browser/components/Drawer/useDrawerStore.d.ts +15 -0
  170. package/dist/package/browser/components/Drawer/useDrawerStore.js +80 -0
  171. package/dist/package/browser/components/ErrorBoundary.d.ts +55 -0
  172. package/dist/package/browser/components/ErrorBoundary.js +131 -0
  173. package/dist/package/browser/components/ExtensionHost/ExtensionIframeHost.d.ts +28 -0
  174. package/dist/package/browser/components/ExtensionHost/ExtensionIframeHost.js +179 -0
  175. package/dist/package/browser/components/ExtensionHost/NativeExtensionHost.d.ts +14 -0
  176. package/dist/package/browser/components/ExtensionHost/NativeExtensionHost.js +152 -0
  177. package/dist/package/browser/components/Feedback/FeedbackPanel.css +640 -0
  178. package/dist/package/browser/components/Feedback/FeedbackPanel.d.ts +8 -0
  179. package/dist/package/browser/components/Feedback/FeedbackPanel.js +118 -0
  180. package/dist/package/browser/components/Feedback/PassiveFeedback.css +179 -0
  181. package/dist/package/browser/components/Feedback/PassiveFeedback.d.ts +2 -0
  182. package/dist/package/browser/components/Feedback/PassiveFeedback.js +218 -0
  183. package/dist/package/browser/components/Feedback/collect.d.ts +15 -0
  184. package/dist/package/browser/components/Feedback/collect.js +80 -0
  185. package/dist/package/browser/components/Feedback/store.d.ts +61 -0
  186. package/dist/package/browser/components/Feedback/store.js +174 -0
  187. package/dist/package/browser/components/LangSwitcher/LangSwitcher.css +78 -0
  188. package/dist/package/browser/components/LangSwitcher/LangSwitcher.d.ts +14 -0
  189. package/dist/package/browser/components/LangSwitcher/LangSwitcher.js +44 -0
  190. package/dist/package/browser/components/MainArea/ConsolePanel.d.ts +1 -0
  191. package/dist/package/browser/components/MainArea/ConsolePanel.js +16 -0
  192. package/dist/package/browser/components/MainArea/MainArea.css +2130 -0
  193. package/dist/package/browser/components/MainArea/MainArea.d.ts +2 -0
  194. package/dist/package/browser/components/MainArea/MainArea.js +20 -0
  195. package/dist/package/browser/components/MainArea/StandaloneExtensionIframe.d.ts +25 -0
  196. package/dist/package/browser/components/MainArea/StandaloneExtensionIframe.js +155 -0
  197. package/dist/package/browser/components/MainArea/SurfacePanels.d.ts +3 -0
  198. package/dist/package/browser/components/MainArea/SurfacePanels.js +27 -0
  199. package/dist/package/browser/components/MainArea/TelemetryViewer.css +122 -0
  200. package/dist/package/browser/components/MainArea/TelemetryViewer.d.ts +36 -0
  201. package/dist/package/browser/components/MainArea/TelemetryViewer.js +116 -0
  202. package/dist/package/browser/components/MenuBar/MenuBar.css +186 -0
  203. package/dist/package/browser/components/MenuBar/MenuBar.d.ts +27 -0
  204. package/dist/package/browser/components/MenuBar/MenuBar.js +286 -0
  205. package/dist/package/browser/components/MenuBar/index.d.ts +1 -0
  206. package/dist/package/browser/components/MenuBar/index.js +1 -0
  207. package/dist/package/browser/components/MenuBar/menubar-open-state.d.ts +8 -0
  208. package/dist/package/browser/components/MenuBar/menubar-open-state.js +11 -0
  209. package/dist/package/browser/components/MenuBar/menubar-surface.d.ts +30 -0
  210. package/dist/package/browser/components/MenuBar/menubar-surface.js +201 -0
  211. package/dist/package/browser/components/ModelPicker/index.d.ts +1 -0
  212. package/dist/package/browser/components/ModelPicker/index.js +1 -0
  213. package/dist/package/browser/components/ModelPicker/useModelCatalog.d.ts +22 -0
  214. package/dist/package/browser/components/ModelPicker/useModelCatalog.js +100 -0
  215. package/dist/package/browser/components/Onboarding/ConnectModelPrompt.d.ts +2 -0
  216. package/dist/package/browser/components/Onboarding/ConnectModelPrompt.js +40 -0
  217. package/dist/package/browser/components/Onboarding/Onboarding.css +232 -0
  218. package/dist/package/browser/components/Onboarding/OnboardingController.d.ts +10 -0
  219. package/dist/package/browser/components/Onboarding/OnboardingController.js +549 -0
  220. package/dist/package/browser/components/Onboarding/connect-selection.d.ts +17 -0
  221. package/dist/package/browser/components/Onboarding/connect-selection.js +18 -0
  222. package/dist/package/browser/components/Onboarding/home-transition.d.ts +9 -0
  223. package/dist/package/browser/components/Onboarding/home-transition.js +20 -0
  224. package/dist/package/browser/components/Onboarding/index.d.ts +4 -0
  225. package/dist/package/browser/components/Onboarding/index.js +3 -0
  226. package/dist/package/browser/components/Onboarding/prepareTourShell.d.ts +5 -0
  227. package/dist/package/browser/components/Onboarding/prepareTourShell.js +11 -0
  228. package/dist/package/browser/components/Onboarding/project-name.d.ts +17 -0
  229. package/dist/package/browser/components/Onboarding/project-name.js +29 -0
  230. package/dist/package/browser/components/Onboarding/types.d.ts +31 -0
  231. package/dist/package/browser/components/Onboarding/types.js +77 -0
  232. package/dist/package/browser/components/PageTabs/PageTabStrip.css +221 -0
  233. package/dist/package/browser/components/PageTabs/PageTabStrip.d.ts +3 -0
  234. package/dist/package/browser/components/PageTabs/PageTabStrip.js +214 -0
  235. package/dist/package/browser/components/PageTabs/openablePageTypes.d.ts +9 -0
  236. package/dist/package/browser/components/PageTabs/openablePageTypes.js +13 -0
  237. package/dist/package/browser/components/PanelShell/PanelShell.css +517 -0
  238. package/dist/package/browser/components/PanelShell/PanelShell.d.ts +7 -0
  239. package/dist/package/browser/components/PanelShell/PanelShell.js +459 -0
  240. package/dist/package/browser/components/Resize/ResizeHandle.d.ts +1 -0
  241. package/dist/package/browser/components/Resize/ResizeHandle.js +1 -0
  242. package/dist/package/browser/components/SceneBackground/SceneBackground.d.ts +2 -0
  243. package/dist/package/browser/components/SceneBackground/SceneBackground.js +5 -0
  244. package/dist/package/browser/components/SchemaForm/SchemaForm.css +138 -0
  245. package/dist/package/browser/components/SchemaForm/SchemaForm.d.ts +17 -0
  246. package/dist/package/browser/components/SchemaForm/SchemaForm.js +86 -0
  247. package/dist/package/browser/components/SchemaForm/schema-form-utils.d.ts +30 -0
  248. package/dist/package/browser/components/SchemaForm/schema-form-utils.js +51 -0
  249. package/dist/package/browser/components/SettingsPrimitives.d.ts +24 -0
  250. package/dist/package/browser/components/SettingsPrimitives.js +145 -0
  251. package/dist/package/browser/components/Sidebar/BusHealthLamp.d.ts +1 -0
  252. package/dist/package/browser/components/Sidebar/BusHealthLamp.js +72 -0
  253. package/dist/package/browser/components/Sidebar/FilesPanel.d.ts +1 -0
  254. package/dist/package/browser/components/Sidebar/FilesPanel.js +234 -0
  255. package/dist/package/browser/components/Sidebar/Sidebar.css +1393 -0
  256. package/dist/package/browser/components/Sidebar/Sidebar.d.ts +3 -0
  257. package/dist/package/browser/components/Sidebar/Sidebar.js +8 -0
  258. package/dist/package/browser/components/Sidebar/sidebar-types.d.ts +18 -0
  259. package/dist/package/browser/components/Sidebar/sidebar-types.js +1 -0
  260. package/dist/package/browser/components/SlotDebugOverlay/SlotDebugOverlay.d.ts +1 -0
  261. package/dist/package/browser/components/SlotDebugOverlay/SlotDebugOverlay.js +1 -0
  262. package/dist/package/browser/components/SlotDebugOverlay/hashHue.d.ts +1 -0
  263. package/dist/package/browser/components/SlotDebugOverlay/hashHue.js +1 -0
  264. package/dist/package/browser/components/SlotDebugOverlay/index.d.ts +1 -0
  265. package/dist/package/browser/components/SlotDebugOverlay/index.js +1 -0
  266. package/dist/package/browser/components/SlotDebugOverlay/isSlotDebugEnabled.d.ts +1 -0
  267. package/dist/package/browser/components/SlotDebugOverlay/isSlotDebugEnabled.js +1 -0
  268. package/dist/package/browser/components/StatusBar/FatalBanner.d.ts +25 -0
  269. package/dist/package/browser/components/StatusBar/FatalBanner.js +52 -0
  270. package/dist/package/browser/components/StatusBar/GlobalStatusBar.css +304 -0
  271. package/dist/package/browser/components/StatusBar/InfoPanel.css +174 -0
  272. package/dist/package/browser/components/StatusBar/InfoPanel.d.ts +19 -0
  273. package/dist/package/browser/components/StatusBar/InfoPanel.js +128 -0
  274. package/dist/package/browser/components/StatusBar/StatusChip.css +52 -0
  275. package/dist/package/browser/components/StatusBar/StatusChip.d.ts +40 -0
  276. package/dist/package/browser/components/StatusBar/StatusChip.js +13 -0
  277. package/dist/package/browser/components/StatusBar/StripHostView.d.ts +2 -0
  278. package/dist/package/browser/components/StatusBar/StripHostView.js +91 -0
  279. package/dist/package/browser/components/StatusBar/StripPopover.css +58 -0
  280. package/dist/package/browser/components/StatusBar/StripPopover.d.ts +16 -0
  281. package/dist/package/browser/components/StatusBar/StripPopover.js +15 -0
  282. package/dist/package/browser/components/StatusBar/feeds/PulseFeeds.d.ts +16 -0
  283. package/dist/package/browser/components/StatusBar/feeds/PulseFeeds.js +88 -0
  284. package/dist/package/browser/components/StatusBar/footer/CheckpointsDrawer.d.ts +4 -0
  285. package/dist/package/browser/components/StatusBar/footer/CheckpointsDrawer.js +77 -0
  286. package/dist/package/browser/components/StatusBar/footer/DiagnosticsPopover.d.ts +4 -0
  287. package/dist/package/browser/components/StatusBar/footer/DiagnosticsPopover.js +108 -0
  288. package/dist/package/browser/components/StatusBar/footer/EventsDrawer.d.ts +14 -0
  289. package/dist/package/browser/components/StatusBar/footer/EventsDrawer.js +25 -0
  290. package/dist/package/browser/components/StatusBar/footer/ForgeaxBuildPopover.d.ts +4 -0
  291. package/dist/package/browser/components/StatusBar/footer/ForgeaxBuildPopover.js +62 -0
  292. package/dist/package/browser/components/StatusBar/footer/footer.css +178 -0
  293. package/dist/package/browser/components/StatusBar/healthBridge.d.ts +38 -0
  294. package/dist/package/browser/components/StatusBar/healthBridge.js +245 -0
  295. package/dist/package/browser/components/StatusBar/healthStore.d.ts +80 -0
  296. package/dist/package/browser/components/StatusBar/healthStore.js +129 -0
  297. package/dist/package/browser/components/StatusBar/useStatusItem.d.ts +10 -0
  298. package/dist/package/browser/components/StatusBar/useStatusItem.js +35 -0
  299. package/dist/package/browser/components/Surfaces/SurfaceKeepAlive.css +34 -0
  300. package/dist/package/browser/components/Surfaces/SurfaceKeepAliveLayer.d.ts +3 -0
  301. package/dist/package/browser/components/Surfaces/SurfaceKeepAliveLayer.js +218 -0
  302. package/dist/package/browser/components/Surfaces/SurfaceOverlay.css +160 -0
  303. package/dist/package/browser/components/Surfaces/SurfaceOverlay.d.ts +9 -0
  304. package/dist/package/browser/components/Surfaces/SurfaceOverlay.js +144 -0
  305. package/dist/package/browser/components/TopBar/AndroidPackageDialog.d.ts +23 -0
  306. package/dist/package/browser/components/TopBar/AndroidPackageDialog.js +115 -0
  307. package/dist/package/browser/components/TopBar/FsBrowser.css +156 -0
  308. package/dist/package/browser/components/TopBar/FsBrowser.d.ts +8 -0
  309. package/dist/package/browser/components/TopBar/FsBrowser.js +93 -0
  310. package/dist/package/browser/components/TopBar/GameSwitcher.d.ts +29 -0
  311. package/dist/package/browser/components/TopBar/GameSwitcher.js +157 -0
  312. package/dist/package/browser/components/TopBar/IosPackageDialog.d.ts +23 -0
  313. package/dist/package/browser/components/TopBar/IosPackageDialog.js +115 -0
  314. package/dist/package/browser/components/TopBar/ProjectSwitcher.d.ts +3 -0
  315. package/dist/package/browser/components/TopBar/ProjectSwitcher.js +41 -0
  316. package/dist/package/browser/components/TopBar/PublishOnboarding.css +133 -0
  317. package/dist/package/browser/components/TopBar/PublishOnboarding.d.ts +10 -0
  318. package/dist/package/browser/components/TopBar/PublishOnboarding.js +144 -0
  319. package/dist/package/browser/components/TopBar/SessionSwitcher.d.ts +2 -0
  320. package/dist/package/browser/components/TopBar/SessionSwitcher.js +124 -0
  321. package/dist/package/browser/components/TopBar/TopBar.css +1672 -0
  322. package/dist/package/browser/components/TopBar/TopBar.d.ts +2 -0
  323. package/dist/package/browser/components/TopBar/TopBar.js +606 -0
  324. package/dist/package/browser/components/TopBar/publish-options.d.ts +20 -0
  325. package/dist/package/browser/components/TopBar/publish-options.js +28 -0
  326. package/dist/package/browser/components/TourOverlay/TourOverlay.css +122 -0
  327. package/dist/package/browser/components/TourOverlay/TourOverlay.d.ts +26 -0
  328. package/dist/package/browser/components/TourOverlay/TourOverlay.js +233 -0
  329. package/dist/package/browser/components/TourOverlay/index.d.ts +2 -0
  330. package/dist/package/browser/components/TourOverlay/index.js +1 -0
  331. package/dist/package/browser/components/ownership.d.ts +7 -0
  332. package/dist/package/browser/components/ownership.js +7 -0
  333. package/dist/package/browser/components/ui/SearchableMenu.css +143 -0
  334. package/dist/package/browser/components/ui/SearchableMenu.d.ts +30 -0
  335. package/dist/package/browser/components/ui/SearchableMenu.js +40 -0
  336. package/dist/package/browser/components/ui/alert-dialog.d.ts +20 -0
  337. package/dist/package/browser/components/ui/alert-dialog.js +38 -0
  338. package/dist/package/browser/components/ui/button.d.ts +11 -0
  339. package/dist/package/browser/components/ui/button.js +33 -0
  340. package/dist/package/browser/components/ui/checkbox.d.ts +4 -0
  341. package/dist/package/browser/components/ui/checkbox.js +8 -0
  342. package/dist/package/browser/components/ui/command.d.ts +74 -0
  343. package/dist/package/browser/components/ui/command.js +20 -0
  344. package/dist/package/browser/components/ui/dialog.d.ts +21 -0
  345. package/dist/package/browser/components/ui/dialog.js +34 -0
  346. package/dist/package/browser/components/ui/dropdown-menu.d.ts +18 -0
  347. package/dist/package/browser/components/ui/dropdown-menu.js +30 -0
  348. package/dist/package/browser/components/ui/input.d.ts +3 -0
  349. package/dist/package/browser/components/ui/input.js +8 -0
  350. package/dist/package/browser/components/ui/label.d.ts +4 -0
  351. package/dist/package/browser/components/ui/label.js +7 -0
  352. package/dist/package/browser/components/ui/popover.d.ts +7 -0
  353. package/dist/package/browser/components/ui/popover.js +10 -0
  354. package/dist/package/browser/components/ui/select.d.ts +11 -0
  355. package/dist/package/browser/components/ui/select.js +31 -0
  356. package/dist/package/browser/components/ui/tabs.d.ts +7 -0
  357. package/dist/package/browser/components/ui/tabs.js +12 -0
  358. package/dist/package/browser/components/ui/textarea.d.ts +3 -0
  359. package/dist/package/browser/components/ui/textarea.js +8 -0
  360. package/dist/package/browser/components/ui/tooltip.d.ts +7 -0
  361. package/dist/package/browser/components/ui/tooltip.js +10 -0
  362. package/dist/package/browser/core/app-shell/catalog-page-extensions.d.ts +28 -0
  363. package/dist/package/browser/core/app-shell/catalog-page-extensions.js +234 -0
  364. package/dist/package/browser/core/app-shell/derive-panel-renderers.d.ts +2 -0
  365. package/dist/package/browser/core/app-shell/derive-panel-renderers.js +17 -0
  366. package/dist/package/browser/core/app-shell/host.d.ts +31 -0
  367. package/dist/package/browser/core/app-shell/host.js +188 -0
  368. package/dist/package/browser/core/app-shell/index.d.ts +7 -0
  369. package/dist/package/browser/core/app-shell/index.js +8 -0
  370. package/dist/package/browser/core/app-shell/logger.d.ts +2 -0
  371. package/dist/package/browser/core/app-shell/logger.js +6 -0
  372. package/dist/package/browser/core/app-shell/ownership.d.ts +7 -0
  373. package/dist/package/browser/core/app-shell/ownership.js +7 -0
  374. package/dist/package/browser/core/app-shell/react/HostProvider.d.ts +10 -0
  375. package/dist/package/browser/core/app-shell/react/HostProvider.js +35 -0
  376. package/dist/package/browser/core/app-shell/surface-extension.d.ts +17 -0
  377. package/dist/package/browser/core/app-shell/surface-extension.js +33 -0
  378. package/dist/package/browser/core/app-shell/types.d.ts +176 -0
  379. package/dist/package/browser/core/app-shell/types.js +1 -0
  380. package/dist/package/browser/core/contextual-keybindings.d.ts +71 -0
  381. package/dist/package/browser/core/contextual-keybindings.js +198 -0
  382. package/dist/package/browser/core/extension-foundation/bus.d.ts +2 -0
  383. package/dist/package/browser/core/extension-foundation/bus.js +3 -0
  384. package/dist/package/browser/core/extension-foundation/capabilities.d.ts +2 -0
  385. package/dist/package/browser/core/extension-foundation/capabilities.js +3 -0
  386. package/dist/package/browser/core/extension-foundation/commands.d.ts +2 -0
  387. package/dist/package/browser/core/extension-foundation/commands.js +3 -0
  388. package/dist/package/browser/core/extension-foundation/context-keys.d.ts +2 -0
  389. package/dist/package/browser/core/extension-foundation/context-keys.js +3 -0
  390. package/dist/package/browser/core/extension-foundation/contribution-registry.d.ts +2 -0
  391. package/dist/package/browser/core/extension-foundation/contribution-registry.js +3 -0
  392. package/dist/package/browser/core/extension-foundation/errors.d.ts +2 -0
  393. package/dist/package/browser/core/extension-foundation/errors.js +3 -0
  394. package/dist/package/browser/core/extension-foundation/index.d.ts +8 -0
  395. package/dist/package/browser/core/extension-foundation/index.js +9 -0
  396. package/dist/package/browser/core/extension-foundation/loader.d.ts +2 -0
  397. package/dist/package/browser/core/extension-foundation/loader.js +3 -0
  398. package/dist/package/browser/core/extension-foundation/storage.d.ts +2 -0
  399. package/dist/package/browser/core/extension-foundation/storage.js +3 -0
  400. package/dist/package/browser/core/extension-foundation/types.d.ts +2 -0
  401. package/dist/package/browser/core/extension-foundation/types.js +1 -0
  402. package/dist/package/browser/core/extensions/builtin-commands.d.ts +2 -0
  403. package/dist/package/browser/core/extensions/builtin-commands.js +256 -0
  404. package/dist/package/browser/core/extensions/builtin-menus.d.ts +2 -0
  405. package/dist/package/browser/core/extensions/builtin-menus.js +252 -0
  406. package/dist/package/browser/core/extensions/chrome-drawer.d.ts +3 -0
  407. package/dist/package/browser/core/extensions/chrome-drawer.js +45 -0
  408. package/dist/package/browser/core/extensions/chrome-statusbar.d.ts +6 -0
  409. package/dist/package/browser/core/extensions/chrome-statusbar.js +26 -0
  410. package/dist/package/browser/core/extensions/detached-agents-browser.d.ts +3 -0
  411. package/dist/package/browser/core/extensions/detached-agents-browser.js +9 -0
  412. package/dist/package/browser/core/extensions/detached-files-browser.d.ts +3 -0
  413. package/dist/package/browser/core/extensions/detached-files-browser.js +6 -0
  414. package/dist/package/browser/core/extensions/editor-commands.d.ts +2 -0
  415. package/dist/package/browser/core/extensions/editor-commands.js +182 -0
  416. package/dist/package/browser/core/extensions/foundation-bus.d.ts +2 -0
  417. package/dist/package/browser/core/extensions/foundation-bus.js +3 -0
  418. package/dist/package/browser/core/extensions/foundation-commands.d.ts +2 -0
  419. package/dist/package/browser/core/extensions/foundation-commands.js +6 -0
  420. package/dist/package/browser/core/extensions/foundation-storage.d.ts +2 -0
  421. package/dist/package/browser/core/extensions/foundation-storage.js +3 -0
  422. package/dist/package/browser/core/extensions/host-commands.d.ts +18 -0
  423. package/dist/package/browser/core/extensions/host-commands.js +52 -0
  424. package/dist/package/browser/core/extensions/observability.d.ts +14 -0
  425. package/dist/package/browser/core/extensions/observability.js +18 -0
  426. package/dist/package/browser/core/extensions/panels-chat.d.ts +2 -0
  427. package/dist/package/browser/core/extensions/panels-chat.js +41 -0
  428. package/dist/package/browser/core/extensions/panels-editor.d.ts +8 -0
  429. package/dist/package/browser/core/extensions/panels-editor.js +26 -0
  430. package/dist/package/browser/core/extensions/panels-viewport.d.ts +2 -0
  431. package/dist/package/browser/core/extensions/panels-viewport.js +20 -0
  432. package/dist/package/browser/core/extensions/session-client.d.ts +29 -0
  433. package/dist/package/browser/core/extensions/session-client.js +42 -0
  434. package/dist/package/browser/core/extensions/slots-corner-agent-picker.d.ts +5 -0
  435. package/dist/package/browser/core/extensions/slots-corner-agent-picker.js +6 -0
  436. package/dist/package/browser/core/extensions/slots-main-area-body.d.ts +3 -0
  437. package/dist/package/browser/core/extensions/slots-main-area-body.js +6 -0
  438. package/dist/package/browser/core/extensions/slots-sidebar-agents.d.ts +3 -0
  439. package/dist/package/browser/core/extensions/slots-sidebar-agents.js +6 -0
  440. package/dist/package/browser/core/extensions/studio-domain-clients.d.ts +12 -0
  441. package/dist/package/browser/core/extensions/studio-domain-clients.js +15 -0
  442. package/dist/package/browser/core/extensions/surfaces-scene-editor.d.ts +3 -0
  443. package/dist/package/browser/core/extensions/surfaces-scene-editor.js +6 -0
  444. package/dist/package/browser/core/extensions/trajectory.d.ts +2 -0
  445. package/dist/package/browser/core/extensions/trajectory.js +50 -0
  446. package/dist/package/browser/core/page-navigation.d.ts +1 -0
  447. package/dist/package/browser/core/page-navigation.js +1 -0
  448. package/dist/package/browser/core/page-platform/activity.d.ts +4 -0
  449. package/dist/package/browser/core/page-platform/activity.js +46 -0
  450. package/dist/package/browser/core/page-platform/dockview-layout.d.ts +7 -0
  451. package/dist/package/browser/core/page-platform/dockview-layout.js +63 -0
  452. package/dist/package/browser/core/page-platform/index.d.ts +8 -0
  453. package/dist/package/browser/core/page-platform/index.js +8 -0
  454. package/dist/package/browser/core/page-platform/layout-store.d.ts +18 -0
  455. package/dist/package/browser/core/page-platform/layout-store.js +54 -0
  456. package/dist/package/browser/core/page-platform/page-dirty-probe.d.ts +1 -0
  457. package/dist/package/browser/core/page-platform/page-dirty-probe.js +4 -0
  458. package/dist/package/browser/core/page-platform/registry.d.ts +3 -0
  459. package/dist/package/browser/core/page-platform/registry.js +194 -0
  460. package/dist/package/browser/core/page-platform/resource-editor.d.ts +3 -0
  461. package/dist/package/browser/core/page-platform/resource-editor.js +74 -0
  462. package/dist/package/browser/core/page-platform/session.d.ts +10 -0
  463. package/dist/package/browser/core/page-platform/session.js +327 -0
  464. package/dist/package/browser/core/page-platform/types.d.ts +242 -0
  465. package/dist/package/browser/core/page-platform/types.js +10 -0
  466. package/dist/package/browser/core/panels/context-expression.d.ts +1 -0
  467. package/dist/package/browser/core/panels/context-expression.js +1 -0
  468. package/dist/package/browser/core/panels/drawer.d.ts +23 -0
  469. package/dist/package/browser/core/panels/drawer.js +1 -0
  470. package/dist/package/browser/core/panels/index.d.ts +7 -0
  471. package/dist/package/browser/core/panels/index.js +7 -0
  472. package/dist/package/browser/core/panels/panel-action-registry.d.ts +6 -0
  473. package/dist/package/browser/core/panels/panel-action-registry.js +62 -0
  474. package/dist/package/browser/core/panels/panel-control-registry.d.ts +6 -0
  475. package/dist/package/browser/core/panels/panel-control-registry.js +54 -0
  476. package/dist/package/browser/core/panels/resolve-panel-action-state.d.ts +10 -0
  477. package/dist/package/browser/core/panels/resolve-panel-action-state.js +9 -0
  478. package/dist/package/browser/core/panels/strip.d.ts +40 -0
  479. package/dist/package/browser/core/panels/strip.js +1 -0
  480. package/dist/package/browser/core/panels/types.d.ts +143 -0
  481. package/dist/package/browser/core/panels/types.js +1 -0
  482. package/dist/package/browser/i18n/index.d.ts +50 -0
  483. package/dist/package/browser/i18n/index.js +207 -0
  484. package/dist/package/browser/i18n/locales/en.json +1959 -0
  485. package/dist/package/browser/i18n/locales/zh.json +1959 -0
  486. package/dist/package/browser/index.d.ts +2 -0
  487. package/dist/package/browser/index.js +2 -0
  488. package/dist/package/browser/lib/a11y-summary.d.ts +17 -0
  489. package/dist/package/browser/lib/a11y-summary.js +66 -0
  490. package/dist/package/browser/lib/action-dom-discovery.d.ts +2 -0
  491. package/dist/package/browser/lib/action-dom-discovery.js +84 -0
  492. package/dist/package/browser/lib/action-registry.d.ts +94 -0
  493. package/dist/package/browser/lib/action-registry.js +210 -0
  494. package/dist/package/browser/lib/aegis.d.ts +40 -0
  495. package/dist/package/browser/lib/aegis.js +230 -0
  496. package/dist/package/browser/lib/agent-catalog-url.d.ts +9 -0
  497. package/dist/package/browser/lib/agent-catalog-url.js +24 -0
  498. package/dist/package/browser/lib/agent-cli-provider.d.ts +10 -0
  499. package/dist/package/browser/lib/agent-cli-provider.js +81 -0
  500. package/dist/package/browser/lib/ai-intents.d.ts +30 -0
  501. package/dist/package/browser/lib/ai-intents.js +52 -0
  502. package/dist/package/browser/lib/broadcast-stream.d.ts +17 -0
  503. package/dist/package/browser/lib/broadcast-stream.js +163 -0
  504. package/dist/package/browser/lib/browser-prefs-sync.d.ts +16 -0
  505. package/dist/package/browser/lib/browser-prefs-sync.js +151 -0
  506. package/dist/package/browser/lib/builtin-actions.d.ts +2 -0
  507. package/dist/package/browser/lib/builtin-actions.js +558 -0
  508. package/dist/package/browser/lib/bus.d.ts +25 -0
  509. package/dist/package/browser/lib/bus.js +71 -0
  510. package/dist/package/browser/lib/checkpoint-api.d.ts +54 -0
  511. package/dist/package/browser/lib/checkpoint-api.js +41 -0
  512. package/dist/package/browser/lib/cli-providers.d.ts +33 -0
  513. package/dist/package/browser/lib/cli-providers.js +61 -0
  514. package/dist/package/browser/lib/command-palette-store.d.ts +5 -0
  515. package/dist/package/browser/lib/command-palette-store.js +22 -0
  516. package/dist/package/browser/lib/composer-bridge.d.ts +103 -0
  517. package/dist/package/browser/lib/composer-bridge.js +448 -0
  518. package/dist/package/browser/lib/dashboard-api.d.ts +104 -0
  519. package/dist/package/browser/lib/dashboard-api.js +125 -0
  520. package/dist/package/browser/lib/deep-link-bus.d.ts +10 -0
  521. package/dist/package/browser/lib/deep-link-bus.js +35 -0
  522. package/dist/package/browser/lib/dialog.d.ts +40 -0
  523. package/dist/package/browser/lib/dialog.js +103 -0
  524. package/dist/package/browser/lib/editor-facts-bus.d.ts +27 -0
  525. package/dist/package/browser/lib/editor-facts-bus.js +25 -0
  526. package/dist/package/browser/lib/extension-api.d.ts +140 -0
  527. package/dist/package/browser/lib/extension-api.js +90 -0
  528. package/dist/package/browser/lib/file-activity-stream.d.ts +54 -0
  529. package/dist/package/browser/lib/file-activity-stream.js +123 -0
  530. package/dist/package/browser/lib/file-family.d.ts +15 -0
  531. package/dist/package/browser/lib/file-family.js +25 -0
  532. package/dist/package/browser/lib/game-templates.d.ts +7 -0
  533. package/dist/package/browser/lib/game-templates.js +15 -0
  534. package/dist/package/browser/lib/global-shortcuts.d.ts +121 -0
  535. package/dist/package/browser/lib/global-shortcuts.js +551 -0
  536. package/dist/package/browser/lib/logSink.d.ts +16 -0
  537. package/dist/package/browser/lib/logSink.js +128 -0
  538. package/dist/package/browser/lib/lucide-icon.d.ts +5 -0
  539. package/dist/package/browser/lib/lucide-icon.js +20 -0
  540. package/dist/package/browser/lib/menu-registry.d.ts +113 -0
  541. package/dist/package/browser/lib/menu-registry.js +197 -0
  542. package/dist/package/browser/lib/model-config.d.ts +89 -0
  543. package/dist/package/browser/lib/model-config.js +72 -0
  544. package/dist/package/browser/lib/model-prefs.d.ts +5 -0
  545. package/dist/package/browser/lib/model-prefs.js +53 -0
  546. package/dist/package/browser/lib/model-route/index.d.ts +81 -0
  547. package/dist/package/browser/lib/model-route/index.js +175 -0
  548. package/dist/package/browser/lib/narrative-copilot.d.ts +20 -0
  549. package/dist/package/browser/lib/narrative-copilot.js +105 -0
  550. package/dist/package/browser/lib/native-menu-bridge.d.ts +37 -0
  551. package/dist/package/browser/lib/native-menu-bridge.js +151 -0
  552. package/dist/package/browser/lib/page-tab-icons.d.ts +21 -0
  553. package/dist/package/browser/lib/page-tab-icons.js +64 -0
  554. package/dist/package/browser/lib/panel-tab-icons.d.ts +21 -0
  555. package/dist/package/browser/lib/panel-tab-icons.js +49 -0
  556. package/dist/package/browser/lib/passive-feedback.d.ts +50 -0
  557. package/dist/package/browser/lib/passive-feedback.js +171 -0
  558. package/dist/package/browser/lib/perception-stream.d.ts +27 -0
  559. package/dist/package/browser/lib/perception-stream.js +42 -0
  560. package/dist/package/browser/lib/platform/index.d.ts +14 -0
  561. package/dist/package/browser/lib/platform/index.js +13 -0
  562. package/dist/package/browser/lib/platform/runtime.d.ts +22 -0
  563. package/dist/package/browser/lib/platform/runtime.js +42 -0
  564. package/dist/package/browser/lib/platform/shell-adapter.d.ts +24 -0
  565. package/dist/package/browser/lib/platform/shell-adapter.js +74 -0
  566. package/dist/package/browser/lib/platform/surface-windowing.d.ts +4 -0
  567. package/dist/package/browser/lib/platform/surface-windowing.js +16 -0
  568. package/dist/package/browser/lib/platform/surface.d.ts +13 -0
  569. package/dist/package/browser/lib/platform/surface.js +27 -0
  570. package/dist/package/browser/lib/platform/use-surface-windowing.d.ts +1 -0
  571. package/dist/package/browser/lib/platform/use-surface-windowing.js +6 -0
  572. package/dist/package/browser/lib/platform/window-manager.d.ts +2 -0
  573. package/dist/package/browser/lib/platform/window-manager.js +82 -0
  574. package/dist/package/browser/lib/project-context.d.ts +4 -0
  575. package/dist/package/browser/lib/project-context.js +42 -0
  576. package/dist/package/browser/lib/project.d.ts +5 -0
  577. package/dist/package/browser/lib/project.js +8 -0
  578. package/dist/package/browser/lib/recent-games.d.ts +24 -0
  579. package/dist/package/browser/lib/recent-games.js +50 -0
  580. package/dist/package/browser/lib/repair-builtin-menus.d.ts +6 -0
  581. package/dist/package/browser/lib/repair-builtin-menus.js +18 -0
  582. package/dist/package/browser/lib/reply-language.d.ts +9 -0
  583. package/dist/package/browser/lib/reply-language.js +11 -0
  584. package/dist/package/browser/lib/resilient-polling.d.ts +9 -0
  585. package/dist/package/browser/lib/resilient-polling.js +16 -0
  586. package/dist/package/browser/lib/session-time.d.ts +8 -0
  587. package/dist/package/browser/lib/session-time.js +40 -0
  588. package/dist/package/browser/lib/shell-live-data.d.ts +12 -0
  589. package/dist/package/browser/lib/shell-live-data.js +66 -0
  590. package/dist/package/browser/lib/sse.d.ts +5 -0
  591. package/dist/package/browser/lib/sse.js +42 -0
  592. package/dist/package/browser/lib/storageKeys.d.ts +70 -0
  593. package/dist/package/browser/lib/storageKeys.js +89 -0
  594. package/dist/package/browser/lib/surface-store.d.ts +38 -0
  595. package/dist/package/browser/lib/surface-store.js +62 -0
  596. package/dist/package/browser/lib/surface.d.ts +56 -0
  597. package/dist/package/browser/lib/surface.js +225 -0
  598. package/dist/package/browser/lib/surfaceAnchors.d.ts +16 -0
  599. package/dist/package/browser/lib/surfaceAnchors.js +76 -0
  600. package/dist/package/browser/lib/surfaceKeepAliveLayout.d.ts +7 -0
  601. package/dist/package/browser/lib/surfaceKeepAliveLayout.js +12 -0
  602. package/dist/package/browser/lib/telemetry-test-prelude.d.ts +0 -0
  603. package/dist/package/browser/lib/telemetry-test-prelude.js +14 -0
  604. package/dist/package/browser/lib/text-edit-actions.d.ts +14 -0
  605. package/dist/package/browser/lib/text-edit-actions.js +184 -0
  606. package/dist/package/browser/lib/trace.d.ts +34 -0
  607. package/dist/package/browser/lib/trace.js +273 -0
  608. package/dist/package/browser/lib/trustedOrigins.d.ts +4 -0
  609. package/dist/package/browser/lib/trustedOrigins.js +36 -0
  610. package/dist/package/browser/lib/ui-action-highlight.d.ts +2 -0
  611. package/dist/package/browser/lib/ui-action-highlight.js +93 -0
  612. package/dist/package/browser/lib/ui-bridge.d.ts +2 -0
  613. package/dist/package/browser/lib/ui-bridge.js +224 -0
  614. package/dist/package/browser/lib/ui-screenshot.d.ts +31 -0
  615. package/dist/package/browser/lib/ui-screenshot.js +155 -0
  616. package/dist/package/browser/lib/ui-trajectory.d.ts +47 -0
  617. package/dist/package/browser/lib/ui-trajectory.js +99 -0
  618. package/dist/package/browser/lib/use-bus-snapshot.d.ts +3 -0
  619. package/dist/package/browser/lib/use-bus-snapshot.js +13 -0
  620. package/dist/package/browser/lib/use-extension-manifest.d.ts +19 -0
  621. package/dist/package/browser/lib/use-extension-manifest.js +67 -0
  622. package/dist/package/browser/lib/useConfirmToast.d.ts +26 -0
  623. package/dist/package/browser/lib/useConfirmToast.js +120 -0
  624. package/dist/package/browser/lib/utils.d.ts +2 -0
  625. package/dist/package/browser/lib/utils.js +5 -0
  626. package/dist/package/browser/lib/vag-action-bridge.d.ts +2 -0
  627. package/dist/package/browser/lib/vag-action-bridge.js +130 -0
  628. package/dist/package/browser/main.d.ts +1 -0
  629. package/dist/package/browser/main.js +157 -0
  630. package/dist/package/browser/store-parts/domain-clients.d.ts +149 -0
  631. package/dist/package/browser/store-parts/domain-clients.js +17 -0
  632. package/dist/package/browser/store-parts/observability.d.ts +4 -0
  633. package/dist/package/browser/store-parts/observability.js +35 -0
  634. package/dist/package/browser/store-parts/persistence.d.ts +40 -0
  635. package/dist/package/browser/store-parts/persistence.js +245 -0
  636. package/dist/package/browser/store-parts/session-client.d.ts +73 -0
  637. package/dist/package/browser/store-parts/session-client.js +17 -0
  638. package/dist/package/browser/store-parts/session-pick.d.ts +8 -0
  639. package/dist/package/browser/store-parts/session-pick.js +21 -0
  640. package/dist/package/browser/store-parts/shell.d.ts +5 -0
  641. package/dist/package/browser/store-parts/shell.js +37 -0
  642. package/dist/package/browser/store.d.ts +455 -0
  643. package/dist/package/browser/store.js +890 -0
  644. package/dist/package/browser/styles/forgeax-preview/agent-avatar.css +69 -0
  645. package/dist/package/browser/styles/forgeax-preview/aliases.css +21 -0
  646. package/dist/package/browser/styles/forgeax-preview/chat-popover.css +141 -0
  647. package/dist/package/browser/styles/forgeax-preview/chat-session.css +896 -0
  648. package/dist/package/browser/styles/forgeax-preview/composer-port.css +531 -0
  649. package/dist/package/browser/styles/forgeax-preview/design-tokens.css +25 -0
  650. package/dist/package/browser/styles/forgeax-preview/index.css +9 -0
  651. package/dist/package/browser/styles/forgeax-preview/scene-fx.css +117 -0
  652. package/dist/package/browser/styles/forgeax-preview/shell-layout.css +280 -0
  653. package/dist/package/browser/styles/forgeax-preview/shell-skin.css +128 -0
  654. package/dist/package/browser/styles/foundation.tokens.json +2755 -0
  655. package/dist/package/browser/styles/global.css +196 -0
  656. package/dist/package/browser/styles/motion.css +558 -0
  657. package/dist/package/browser/styles/plugin-token-bridge.css +19 -0
  658. package/dist/package/browser/styles/primitive.css +197 -0
  659. package/dist/package/browser/styles/semantic.tokens.json +1524 -0
  660. package/dist/package/browser/styles/tokens.css +304 -0
  661. package/dist/package/node/App.js +11 -0
  662. package/dist/package/node/ApplicationDetachedShell.js +10 -0
  663. package/dist/package/node/ApplicationShell.js +62 -0
  664. package/dist/package/node/app-kit.js +4 -0
  665. package/dist/package/node/appHostBootstrap.js +145 -0
  666. package/dist/package/node/application.js +64 -0
  667. package/dist/package/node/boot/SettingsSection.js +82 -0
  668. package/dist/package/node/boot/broadcast.js +32 -0
  669. package/dist/package/node/boot/driver.js +47 -0
  670. package/dist/package/node/boot/store.js +114 -0
  671. package/dist/package/node/boot/themes.js +21 -0
  672. package/dist/package/node/boot/types.js +30 -0
  673. package/dist/package/node/brand/BrandProvider.js +35 -0
  674. package/dist/package/node/brand/index.js +3 -0
  675. package/dist/package/node/brand/runtime.js +71 -0
  676. package/dist/package/node/brand/types.js +9 -0
  677. package/dist/package/node/components/ActivityRail/ActivityRail.js +164 -0
  678. package/dist/package/node/components/ActivityRail/activity-rail-model.js +144 -0
  679. package/dist/package/node/components/AgentAvatar/AgentAvatar.js +50 -0
  680. package/dist/package/node/components/BuildBadge/BuildBadge.js +279 -0
  681. package/dist/package/node/components/Bus/BusAdminPanel.js +1385 -0
  682. package/dist/package/node/components/Bus/CapabilityOverview.js +50 -0
  683. package/dist/package/node/components/ChatColumn/ChatColumn.js +18 -0
  684. package/dist/package/node/components/ChatColumn/SessionTabStrip.js +103 -0
  685. package/dist/package/node/components/ChatColumn/useChatWidth.js +13 -0
  686. package/dist/package/node/components/CommandPalette/CommandPalette.js +242 -0
  687. package/dist/package/node/components/Confirm/ConfirmDialog.js +113 -0
  688. package/dist/package/node/components/ContextMenu/ContextMenu.js +218 -0
  689. package/dist/package/node/components/ContextMenu/menuRegistry.js +152 -0
  690. package/dist/package/node/components/DetachedSurface.js +102 -0
  691. package/dist/package/node/components/DockShell/DockPanelHost.js +7 -0
  692. package/dist/package/node/components/DockShell/DockRegion.js +315 -0
  693. package/dist/package/node/components/DockShell/DockTab.js +139 -0
  694. package/dist/package/node/components/DockShell/ExtensionHostPanel.js +68 -0
  695. package/dist/package/node/components/DockShell/ExtensionRuntimeFrame.js +56 -0
  696. package/dist/package/node/components/DockShell/PanelWindowingBoundary.js +9 -0
  697. package/dist/package/node/components/DockShell/chatDockAnimation.js +101 -0
  698. package/dist/package/node/components/DockShell/chatDockFullscreen.js +22 -0
  699. package/dist/package/node/components/DockShell/chatDockLayout.js +11 -0
  700. package/dist/package/node/components/DockShell/compact-empty-dock-groups.js +28 -0
  701. package/dist/package/node/components/DockShell/crossInstanceDrop.js +1 -0
  702. package/dist/package/node/components/DockShell/dockResetEpoch.js +13 -0
  703. package/dist/package/node/components/DockShell/dockTitle.js +36 -0
  704. package/dist/package/node/components/DockShell/dockviewRegistry.js +1 -0
  705. package/dist/package/node/components/DockShell/edgeDrawer.js +1144 -0
  706. package/dist/package/node/components/DockShell/edgePinStore.js +37 -0
  707. package/dist/package/node/components/DockShell/extension-editor-bridge.js +100 -0
  708. package/dist/package/node/components/DockShell/extension-runtime-selection.js +6 -0
  709. package/dist/package/node/components/DockShell/extensionRuntime.js +84 -0
  710. package/dist/package/node/components/DockShell/footer-panel-visibility.js +43 -0
  711. package/dist/package/node/components/DockShell/footer-panels.js +7 -0
  712. package/dist/package/node/components/DockShell/panelRegistry.js +126 -0
  713. package/dist/package/node/components/DockShell/panelRenderers.js +25 -0
  714. package/dist/package/node/components/DockShell/panelTabCommands.js +133 -0
  715. package/dist/package/node/components/DockShell/panelWindowing.js +42 -0
  716. package/dist/package/node/components/DockShell/regions.js +1 -0
  717. package/dist/package/node/components/DockShell/resolveRegion.js +1 -0
  718. package/dist/package/node/components/DockShell/sanitizeDockLayout.js +46 -0
  719. package/dist/package/node/components/DockShell/sideEdgeMove.js +1 -0
  720. package/dist/package/node/components/DockShell/studioTabMenuProvider.js +39 -0
  721. package/dist/package/node/components/DockShell/tabContextMenu.js +68 -0
  722. package/dist/package/node/components/DockShell/ueDrag/controller.js +785 -0
  723. package/dist/package/node/components/DockShell/ueDrag/geometry.js +217 -0
  724. package/dist/package/node/components/DockShell/ueDrag/overlay.js +206 -0
  725. package/dist/package/node/components/DockShell/useAuxBarWidth.js +13 -0
  726. package/dist/package/node/components/Drawer/DrawerHostView.js +93 -0
  727. package/dist/package/node/components/Drawer/DrawerLauncher.js +22 -0
  728. package/dist/package/node/components/Drawer/useDrawerStore.js +80 -0
  729. package/dist/package/node/components/ErrorBoundary.js +131 -0
  730. package/dist/package/node/components/ExtensionHost/ExtensionIframeHost.js +179 -0
  731. package/dist/package/node/components/ExtensionHost/NativeExtensionHost.js +152 -0
  732. package/dist/package/node/components/Feedback/FeedbackPanel.js +118 -0
  733. package/dist/package/node/components/Feedback/PassiveFeedback.js +218 -0
  734. package/dist/package/node/components/Feedback/collect.js +80 -0
  735. package/dist/package/node/components/Feedback/store.js +174 -0
  736. package/dist/package/node/components/LangSwitcher/LangSwitcher.js +44 -0
  737. package/dist/package/node/components/MainArea/ConsolePanel.js +16 -0
  738. package/dist/package/node/components/MainArea/MainArea.js +20 -0
  739. package/dist/package/node/components/MainArea/StandaloneExtensionIframe.js +155 -0
  740. package/dist/package/node/components/MainArea/SurfacePanels.js +27 -0
  741. package/dist/package/node/components/MainArea/TelemetryViewer.js +116 -0
  742. package/dist/package/node/components/MenuBar/MenuBar.js +286 -0
  743. package/dist/package/node/components/MenuBar/index.js +1 -0
  744. package/dist/package/node/components/MenuBar/menubar-open-state.js +11 -0
  745. package/dist/package/node/components/MenuBar/menubar-surface.js +201 -0
  746. package/dist/package/node/components/ModelPicker/index.js +1 -0
  747. package/dist/package/node/components/ModelPicker/useModelCatalog.js +100 -0
  748. package/dist/package/node/components/Onboarding/ConnectModelPrompt.js +40 -0
  749. package/dist/package/node/components/Onboarding/OnboardingController.js +549 -0
  750. package/dist/package/node/components/Onboarding/connect-selection.js +18 -0
  751. package/dist/package/node/components/Onboarding/home-transition.js +20 -0
  752. package/dist/package/node/components/Onboarding/index.js +3 -0
  753. package/dist/package/node/components/Onboarding/prepareTourShell.js +11 -0
  754. package/dist/package/node/components/Onboarding/project-name.js +29 -0
  755. package/dist/package/node/components/Onboarding/types.js +77 -0
  756. package/dist/package/node/components/PageTabs/PageTabStrip.js +214 -0
  757. package/dist/package/node/components/PageTabs/openablePageTypes.js +13 -0
  758. package/dist/package/node/components/PanelShell/PanelShell.js +459 -0
  759. package/dist/package/node/components/Resize/ResizeHandle.js +1 -0
  760. package/dist/package/node/components/SceneBackground/SceneBackground.js +5 -0
  761. package/dist/package/node/components/SchemaForm/SchemaForm.js +86 -0
  762. package/dist/package/node/components/SchemaForm/schema-form-utils.js +51 -0
  763. package/dist/package/node/components/SettingsPrimitives.js +145 -0
  764. package/dist/package/node/components/Sidebar/BusHealthLamp.js +72 -0
  765. package/dist/package/node/components/Sidebar/FilesPanel.js +234 -0
  766. package/dist/package/node/components/Sidebar/Sidebar.js +8 -0
  767. package/dist/package/node/components/Sidebar/sidebar-types.js +1 -0
  768. package/dist/package/node/components/SlotDebugOverlay/SlotDebugOverlay.js +1 -0
  769. package/dist/package/node/components/SlotDebugOverlay/hashHue.js +1 -0
  770. package/dist/package/node/components/SlotDebugOverlay/index.js +1 -0
  771. package/dist/package/node/components/SlotDebugOverlay/isSlotDebugEnabled.js +1 -0
  772. package/dist/package/node/components/StatusBar/FatalBanner.js +52 -0
  773. package/dist/package/node/components/StatusBar/InfoPanel.js +128 -0
  774. package/dist/package/node/components/StatusBar/StatusChip.js +13 -0
  775. package/dist/package/node/components/StatusBar/StripHostView.js +91 -0
  776. package/dist/package/node/components/StatusBar/StripPopover.js +15 -0
  777. package/dist/package/node/components/StatusBar/feeds/PulseFeeds.js +88 -0
  778. package/dist/package/node/components/StatusBar/footer/CheckpointsDrawer.js +77 -0
  779. package/dist/package/node/components/StatusBar/footer/DiagnosticsPopover.js +108 -0
  780. package/dist/package/node/components/StatusBar/footer/EventsDrawer.js +25 -0
  781. package/dist/package/node/components/StatusBar/footer/ForgeaxBuildPopover.js +62 -0
  782. package/dist/package/node/components/StatusBar/healthBridge.js +245 -0
  783. package/dist/package/node/components/StatusBar/healthStore.js +129 -0
  784. package/dist/package/node/components/StatusBar/useStatusItem.js +35 -0
  785. package/dist/package/node/components/Surfaces/SurfaceKeepAliveLayer.js +218 -0
  786. package/dist/package/node/components/Surfaces/SurfaceOverlay.js +144 -0
  787. package/dist/package/node/components/TopBar/AndroidPackageDialog.js +115 -0
  788. package/dist/package/node/components/TopBar/FsBrowser.js +93 -0
  789. package/dist/package/node/components/TopBar/GameSwitcher.js +157 -0
  790. package/dist/package/node/components/TopBar/IosPackageDialog.js +115 -0
  791. package/dist/package/node/components/TopBar/ProjectSwitcher.js +41 -0
  792. package/dist/package/node/components/TopBar/PublishOnboarding.js +144 -0
  793. package/dist/package/node/components/TopBar/SessionSwitcher.js +124 -0
  794. package/dist/package/node/components/TopBar/TopBar.js +606 -0
  795. package/dist/package/node/components/TopBar/publish-options.js +28 -0
  796. package/dist/package/node/components/TourOverlay/TourOverlay.js +233 -0
  797. package/dist/package/node/components/TourOverlay/index.js +1 -0
  798. package/dist/package/node/components/ownership.js +7 -0
  799. package/dist/package/node/components/ui/SearchableMenu.js +40 -0
  800. package/dist/package/node/components/ui/alert-dialog.js +38 -0
  801. package/dist/package/node/components/ui/button.js +33 -0
  802. package/dist/package/node/components/ui/checkbox.js +8 -0
  803. package/dist/package/node/components/ui/command.js +20 -0
  804. package/dist/package/node/components/ui/dialog.js +34 -0
  805. package/dist/package/node/components/ui/dropdown-menu.js +30 -0
  806. package/dist/package/node/components/ui/input.js +8 -0
  807. package/dist/package/node/components/ui/label.js +7 -0
  808. package/dist/package/node/components/ui/popover.js +10 -0
  809. package/dist/package/node/components/ui/select.js +31 -0
  810. package/dist/package/node/components/ui/tabs.js +12 -0
  811. package/dist/package/node/components/ui/textarea.js +8 -0
  812. package/dist/package/node/components/ui/tooltip.js +10 -0
  813. package/dist/package/node/core/app-shell/catalog-page-extensions.js +234 -0
  814. package/dist/package/node/core/app-shell/derive-panel-renderers.js +17 -0
  815. package/dist/package/node/core/app-shell/host.js +188 -0
  816. package/dist/package/node/core/app-shell/index.js +8 -0
  817. package/dist/package/node/core/app-shell/logger.js +6 -0
  818. package/dist/package/node/core/app-shell/ownership.js +7 -0
  819. package/dist/package/node/core/app-shell/react/HostProvider.js +35 -0
  820. package/dist/package/node/core/app-shell/surface-extension.js +33 -0
  821. package/dist/package/node/core/app-shell/types.js +1 -0
  822. package/dist/package/node/core/contextual-keybindings.js +198 -0
  823. package/dist/package/node/core/extension-foundation/bus.js +3 -0
  824. package/dist/package/node/core/extension-foundation/capabilities.js +3 -0
  825. package/dist/package/node/core/extension-foundation/commands.js +3 -0
  826. package/dist/package/node/core/extension-foundation/context-keys.js +3 -0
  827. package/dist/package/node/core/extension-foundation/contribution-registry.js +3 -0
  828. package/dist/package/node/core/extension-foundation/errors.js +3 -0
  829. package/dist/package/node/core/extension-foundation/index.js +9 -0
  830. package/dist/package/node/core/extension-foundation/loader.js +3 -0
  831. package/dist/package/node/core/extension-foundation/storage.js +3 -0
  832. package/dist/package/node/core/extension-foundation/types.js +1 -0
  833. package/dist/package/node/core/extensions/builtin-commands.js +256 -0
  834. package/dist/package/node/core/extensions/builtin-menus.js +252 -0
  835. package/dist/package/node/core/extensions/chrome-drawer.js +45 -0
  836. package/dist/package/node/core/extensions/chrome-statusbar.js +26 -0
  837. package/dist/package/node/core/extensions/detached-agents-browser.js +9 -0
  838. package/dist/package/node/core/extensions/detached-files-browser.js +6 -0
  839. package/dist/package/node/core/extensions/editor-commands.js +182 -0
  840. package/dist/package/node/core/extensions/foundation-bus.js +3 -0
  841. package/dist/package/node/core/extensions/foundation-commands.js +6 -0
  842. package/dist/package/node/core/extensions/foundation-storage.js +3 -0
  843. package/dist/package/node/core/extensions/host-commands.js +52 -0
  844. package/dist/package/node/core/extensions/observability.js +18 -0
  845. package/dist/package/node/core/extensions/panels-chat.js +41 -0
  846. package/dist/package/node/core/extensions/panels-editor.js +26 -0
  847. package/dist/package/node/core/extensions/panels-viewport.js +20 -0
  848. package/dist/package/node/core/extensions/session-client.js +42 -0
  849. package/dist/package/node/core/extensions/slots-corner-agent-picker.js +6 -0
  850. package/dist/package/node/core/extensions/slots-main-area-body.js +6 -0
  851. package/dist/package/node/core/extensions/slots-sidebar-agents.js +6 -0
  852. package/dist/package/node/core/extensions/studio-domain-clients.js +15 -0
  853. package/dist/package/node/core/extensions/surfaces-scene-editor.js +6 -0
  854. package/dist/package/node/core/extensions/trajectory.js +50 -0
  855. package/dist/package/node/core/page-navigation.js +1 -0
  856. package/dist/package/node/core/page-platform/activity.js +46 -0
  857. package/dist/package/node/core/page-platform/dockview-layout.js +63 -0
  858. package/dist/package/node/core/page-platform/index.js +8 -0
  859. package/dist/package/node/core/page-platform/layout-store.js +54 -0
  860. package/dist/package/node/core/page-platform/page-dirty-probe.js +4 -0
  861. package/dist/package/node/core/page-platform/registry.js +194 -0
  862. package/dist/package/node/core/page-platform/resource-editor.js +74 -0
  863. package/dist/package/node/core/page-platform/session.js +327 -0
  864. package/dist/package/node/core/page-platform/types.js +10 -0
  865. package/dist/package/node/core/panels/context-expression.js +1 -0
  866. package/dist/package/node/core/panels/drawer.js +1 -0
  867. package/dist/package/node/core/panels/index.js +7 -0
  868. package/dist/package/node/core/panels/panel-action-registry.js +62 -0
  869. package/dist/package/node/core/panels/panel-control-registry.js +54 -0
  870. package/dist/package/node/core/panels/resolve-panel-action-state.js +9 -0
  871. package/dist/package/node/core/panels/strip.js +1 -0
  872. package/dist/package/node/core/panels/types.js +1 -0
  873. package/dist/package/node/i18n/index.js +207 -0
  874. package/dist/package/node/i18n/locales/en.json +1959 -0
  875. package/dist/package/node/i18n/locales/zh.json +1959 -0
  876. package/dist/package/node/index.js +2 -0
  877. package/dist/package/node/lib/a11y-summary.js +66 -0
  878. package/dist/package/node/lib/action-dom-discovery.js +84 -0
  879. package/dist/package/node/lib/action-registry.js +210 -0
  880. package/dist/package/node/lib/aegis.js +230 -0
  881. package/dist/package/node/lib/agent-catalog-url.js +24 -0
  882. package/dist/package/node/lib/agent-cli-provider.js +81 -0
  883. package/dist/package/node/lib/ai-intents.js +52 -0
  884. package/dist/package/node/lib/broadcast-stream.js +163 -0
  885. package/dist/package/node/lib/browser-prefs-sync.js +151 -0
  886. package/dist/package/node/lib/builtin-actions.js +558 -0
  887. package/dist/package/node/lib/bus.js +71 -0
  888. package/dist/package/node/lib/checkpoint-api.js +41 -0
  889. package/dist/package/node/lib/cli-providers.js +61 -0
  890. package/dist/package/node/lib/command-palette-store.js +22 -0
  891. package/dist/package/node/lib/composer-bridge.js +448 -0
  892. package/dist/package/node/lib/dashboard-api.js +125 -0
  893. package/dist/package/node/lib/deep-link-bus.js +35 -0
  894. package/dist/package/node/lib/dialog.js +103 -0
  895. package/dist/package/node/lib/editor-facts-bus.js +25 -0
  896. package/dist/package/node/lib/extension-api.js +90 -0
  897. package/dist/package/node/lib/file-activity-stream.js +123 -0
  898. package/dist/package/node/lib/file-family.js +25 -0
  899. package/dist/package/node/lib/game-templates.js +15 -0
  900. package/dist/package/node/lib/global-shortcuts.js +551 -0
  901. package/dist/package/node/lib/logSink.js +128 -0
  902. package/dist/package/node/lib/lucide-icon.js +20 -0
  903. package/dist/package/node/lib/menu-registry.js +197 -0
  904. package/dist/package/node/lib/model-config.js +72 -0
  905. package/dist/package/node/lib/model-prefs.js +53 -0
  906. package/dist/package/node/lib/model-route/index.js +175 -0
  907. package/dist/package/node/lib/narrative-copilot.js +105 -0
  908. package/dist/package/node/lib/native-menu-bridge.js +151 -0
  909. package/dist/package/node/lib/page-tab-icons.js +64 -0
  910. package/dist/package/node/lib/panel-tab-icons.js +49 -0
  911. package/dist/package/node/lib/passive-feedback.js +171 -0
  912. package/dist/package/node/lib/perception-stream.js +42 -0
  913. package/dist/package/node/lib/platform/index.js +13 -0
  914. package/dist/package/node/lib/platform/runtime.js +42 -0
  915. package/dist/package/node/lib/platform/shell-adapter.js +74 -0
  916. package/dist/package/node/lib/platform/surface-windowing.js +16 -0
  917. package/dist/package/node/lib/platform/surface.js +27 -0
  918. package/dist/package/node/lib/platform/use-surface-windowing.js +6 -0
  919. package/dist/package/node/lib/platform/window-manager.js +82 -0
  920. package/dist/package/node/lib/project-context.js +42 -0
  921. package/dist/package/node/lib/project.js +8 -0
  922. package/dist/package/node/lib/recent-games.js +50 -0
  923. package/dist/package/node/lib/repair-builtin-menus.js +18 -0
  924. package/dist/package/node/lib/reply-language.js +11 -0
  925. package/dist/package/node/lib/resilient-polling.js +16 -0
  926. package/dist/package/node/lib/session-time.js +40 -0
  927. package/dist/package/node/lib/shell-live-data.js +66 -0
  928. package/dist/package/node/lib/sse.js +42 -0
  929. package/dist/package/node/lib/storageKeys.js +89 -0
  930. package/dist/package/node/lib/surface-store.js +62 -0
  931. package/dist/package/node/lib/surface.js +225 -0
  932. package/dist/package/node/lib/surfaceAnchors.js +76 -0
  933. package/dist/package/node/lib/surfaceKeepAliveLayout.js +12 -0
  934. package/dist/package/node/lib/telemetry-test-prelude.js +14 -0
  935. package/dist/package/node/lib/text-edit-actions.js +184 -0
  936. package/dist/package/node/lib/trace.js +273 -0
  937. package/dist/package/node/lib/trustedOrigins.js +36 -0
  938. package/dist/package/node/lib/ui-action-highlight.js +93 -0
  939. package/dist/package/node/lib/ui-bridge.js +224 -0
  940. package/dist/package/node/lib/ui-screenshot.js +155 -0
  941. package/dist/package/node/lib/ui-trajectory.js +99 -0
  942. package/dist/package/node/lib/use-bus-snapshot.js +13 -0
  943. package/dist/package/node/lib/use-extension-manifest.js +67 -0
  944. package/dist/package/node/lib/useConfirmToast.js +120 -0
  945. package/dist/package/node/lib/utils.js +5 -0
  946. package/dist/package/node/lib/vag-action-bridge.js +130 -0
  947. package/dist/package/node/main.js +157 -0
  948. package/dist/package/node/store-parts/domain-clients.js +17 -0
  949. package/dist/package/node/store-parts/observability.js +35 -0
  950. package/dist/package/node/store-parts/persistence.js +245 -0
  951. package/dist/package/node/store-parts/session-client.js +17 -0
  952. package/dist/package/node/store-parts/session-pick.js +21 -0
  953. package/dist/package/node/store-parts/shell.js +37 -0
  954. package/dist/package/node/store.js +890 -0
  955. package/dist/package/node/styles/foundation.tokens.json +2755 -0
  956. package/dist/package/node/styles/semantic.tokens.json +1524 -0
  957. package/dist/package/packages/design/styles/fx-bridge.css +25 -0
  958. package/dist/package/packages/design/styles/primitive.css +199 -0
  959. package/dist/package/packages/design/styles/semantic.css +262 -0
  960. package/dist/package/packages/design/theme.d.ts +15 -0
  961. package/dist/package/packages/design/theme.js +31 -0
  962. package/dist/package/packages/design/tokens.css +14 -0
  963. package/package.json +145 -0
@@ -0,0 +1,1144 @@
1
+ import { OWNED_INTERACTION_SURFACE_SELECTOR, createCoalescedFrameTaskLifecycle, createReplaceableObservationSetLifecycle, isDismissExemptInteractionTarget, installActivePanelObservation, installBoundedFrameRetryLifecycle, installCaptureInteractionObservation, installCustomEventObservation, installDragPresenceLifecycle, installLayoutFromJsonObservation, installOutsideDismissLifecycle, installPanelMembershipObservation, installPointerDragSession, installViewportResizeObservation, installWillDropObservation, } from '@forgeax/app-shell/react';
2
+ import { installDockLayoutObservation } from '@forgeax/app-shell/dock';
3
+ import { FOOTER_PANEL_ID_LIST } from './footer-panels';
4
+ import { isFooterPanelUserVisible, registerFooterPanelEnsure } from './footer-panel-visibility';
5
+ import { clearEdgePins, EDGE_PIN_CLASS, pinnedPanelIdIn, setEdgePin } from './edgePinStore';
6
+ const OPEN_CLASS = 'fx-edge-drawer-open';
7
+ export const EDGE_DRAWER_SURFACE_BLOCK_CLASS = 'fx-edge-drawer-visible';
8
+ /** Toggled to (re)start the wipe-in animation — on first open AND on same-strip tab switch. */
9
+ const ANIM_CLASS = 'fx-edge-drawer-animating';
10
+ const EDGE_POSITIONS = ['left', 'right', 'top', 'bottom'];
11
+ const EDGE_DRAWER_DISMISS_EXEMPT_SELECTORS = [
12
+ '.forgeax-ctx-menu-panel',
13
+ '.dv-context-menu',
14
+ ];
15
+ /**
16
+ * Publish foreground drawer ownership to portal-mounted surfaces. The live
17
+ * viewport sits outside Dockview's stacking tree, so z-index alone cannot make
18
+ * every relocated edge drawer win hit testing consistently.
19
+ */
20
+ export function setEdgeDrawerSurfaceInteractionBlocked(root, blocked) {
21
+ root.classList.toggle(EDGE_DRAWER_SURFACE_BLOCK_CLASS, blocked);
22
+ }
23
+ /**
24
+ * Portalled controls do not participate in the drawer element's DOM subtree.
25
+ * They must opt into this interaction-surface contract when they belong to the
26
+ * active drawer; the app context menu keeps its legacy class for the same
27
+ * reason, and dockview's own tab menu (`.dv-context-menu`, mounted into the
28
+ * shell's popover anchor) is the same case one layer down — it acts ON the
29
+ * drawer's tab, so picking an item must not first collapse the drawer.
30
+ */
31
+ export function isEdgeDrawerDismissExemptTarget(target) {
32
+ return isDismissExemptInteractionTarget(target, EDGE_DRAWER_DISMISS_EXEMPT_SELECTORS);
33
+ }
34
+ /** Slots always registered so root-edge drop / "Move to Side" work even when
35
+ * the default layout keeps panels in the grid (no edgeGroups in JSON). */
36
+ const ENSURED_EDGE_SLOTS = ['left', 'right', 'bottom'];
37
+ /** All edge groups, including EMPTY ones (zero panels). Must walk `api.groups`
38
+ * — collecting via panels misses strips whose last tab was closed, which is
39
+ * exactly when we need to hide them. */
40
+ function edgeGroups(api) {
41
+ return api.groups.filter((group) => group.api.location.type === 'edge');
42
+ }
43
+ /** The edge group whose element contains `el`, if any. */
44
+ function edgeGroupFromElement(api, el) {
45
+ return edgeGroups(api).find((group) => group.element.contains(el));
46
+ }
47
+ /**
48
+ * Install the drawer behaviour for every edge group under `root`. Returns a
49
+ * disposer that removes all listeners and closes any open drawer. Idempotent to
50
+ * call once per DockviewApi (wire it from DockRegion.onReady, push the disposer
51
+ * into onReadyCleanupsRef).
52
+ */
53
+ export function installEdgeDrawer(api, root) {
54
+ let openGroup = null;
55
+ let preserveNextActiveTabClick = false;
56
+ const syncSurfaceInteractionBlock = () => {
57
+ if (typeof document === 'undefined')
58
+ return;
59
+ setEdgeDrawerSurfaceInteractionBlocked(document.documentElement, openGroup !== null);
60
+ };
61
+ const hasOwnedInteractionSurface = () => typeof document !== 'undefined'
62
+ && document.querySelector(OWNED_INTERACTION_SURFACE_SELECTOR) !== null;
63
+ // UE: pin is per-TAB, and at most ONE pin per edge group (mutual exclusion).
64
+ // State lives in edgePinStore so DockTab can RENDER the toggle; this module
65
+ // owns the rules and the click that flips it.
66
+ const pinnedPanelId = (group) => pinnedPanelIdIn(group.id);
67
+ const findPanel = (group, id) => group.panels.find((p) => p.id === id);
68
+ const activeIsPinned = (group) => {
69
+ const active = group.activePanel;
70
+ return !!active && pinnedPanelId(group) === active.id;
71
+ };
72
+ const edgeOf = (group) => {
73
+ const cl = group.element.classList;
74
+ if (cl.contains('dv-groupview-header-right'))
75
+ return 'right';
76
+ if (cl.contains('dv-groupview-header-top'))
77
+ return 'top';
78
+ if (cl.contains('dv-groupview-header-bottom'))
79
+ return 'bottom';
80
+ return 'left';
81
+ };
82
+ const isHoriz = (e) => e === 'left' || e === 'right';
83
+ // The var that carries the user-dragged drawer size for a given edge.
84
+ const sizeVar = (e) => isHoriz(e) ? '--fx-edge-drawer-width' : '--fx-edge-drawer-height';
85
+ const readSize = (group, e) => {
86
+ const n = parseFloat(group.element.style.getPropertyValue(sizeVar(e)));
87
+ return Number.isFinite(n) ? n : 300;
88
+ };
89
+ // ── Bottom edge ↔ footer merge ──────────────────────────────────────────
90
+ // The bottom edge strip is RELOCATED (DOM move) into the StatusBar footer
91
+ // host so its tabs share the footer row with the status items. The move keeps
92
+ // the real dockview tab element (native drag in/out, native drop targets),
93
+ // so we only re-anchor the drawer + re-scope our own listeners. Left/right
94
+ // strips stay in place under `root`.
95
+ let bottomStripEl = null;
96
+ // Identity of the group whose strip is currently relocated. fromJSON /
97
+ // rebuilds DISPOSE the bottom group and create a fresh one; the tracked
98
+ // bottomStripEl then points at a detached (empty) strip. Comparing group ids
99
+ // lets relocate tell "same group, already moved" (reuse bottomStripEl) from
100
+ // "new group" (must grab the new group's live strip, never the stale one).
101
+ let bottomGroupId = null;
102
+ const footerHost = () => document.querySelector('[data-fx-dock-bottom-host]');
103
+ // When a fresh bottom group exists but its header isn't built yet, relocate
104
+ // bails; this bounded next-frame nudge re-tries until the strip is ready
105
+ // (reset on any successful relocate) so we never stall on the stale strip.
106
+ let bailFrames = 0;
107
+ const footerRelocationFrame = createCoalescedFrameTaskLifecycle({
108
+ task: () => relocateBottomStrip(),
109
+ });
110
+ const scheduleRelocate = footerRelocationFrame.schedule;
111
+ // The element that actually holds a group's `.dv-tab`s: the relocated footer
112
+ // container for the bottom edge, else the group element itself.
113
+ const tabsRootOf = (group) => edgeOf(group) === 'bottom' && bottomStripEl ? bottomStripEl : group.element;
114
+ // ── Footer-anchored drop overlays for the relocated bottom strip ─────────
115
+ // Each tab's Droptarget paints its receive-highlight / reorder line into
116
+ // `group.model.dropTargetContainer` — by default `rootDropTargetContainer`,
117
+ // anchored to the dockview shell element. Our bottom strip is relocated into
118
+ // the footer (OUTSIDE the shell), so that anchor can't cover it: drags over
119
+ // the footer tabs showed no highlight and reorder had no indicator. dockview
120
+ // supports a PER-GROUP drop-target container (the same pattern it uses for
121
+ // popout windows). Its `DropTargetAnchorContainer` class is internal /
122
+ // unexported, so we hand the bottom group a shim with the exact
123
+ // `{ disabled, model }` shape droptarget.ts consumes, mounting overlays into
124
+ // a viewport-fixed host so `renderAnchoredOverlay` positions them at the
125
+ // footer tabs' real coordinates.
126
+ let dropAnchorHost = null;
127
+ let dropAnchorModel;
128
+ const ensureDropAnchorHost = () => {
129
+ if (dropAnchorHost)
130
+ return dropAnchorHost;
131
+ const host = document.createElement('div');
132
+ host.className = 'fx-edge-drop-anchor-host';
133
+ document.body.appendChild(host);
134
+ dropAnchorHost = host;
135
+ return host;
136
+ };
137
+ // Force-remove any live footer drop overlay. dockview only calls the shim's
138
+ // clear() when the bottom group is the ACTUAL drop target; dragging a bottom
139
+ // tab OUT to another group drops elsewhere, so the bottom tab's droptarget
140
+ // only sees dragleave (which, with an override target, intentionally does NOT
141
+ // clear) — leaving a stale lime rectangle in the footer. Driven by the global
142
+ // dragover watcher below (during the drag) and the dragend/drop backstop.
143
+ const clearDropAnchor = () => {
144
+ if (!dropAnchorModel)
145
+ return;
146
+ try {
147
+ dropAnchorModel.root.parentElement?.removeChild(dropAnchorModel.root);
148
+ }
149
+ catch { /* noop */ }
150
+ dropAnchorModel = undefined;
151
+ };
152
+ const bottomDropContainer = {
153
+ get disabled() { return false; },
154
+ set disabled(_v) { },
155
+ get model() {
156
+ const host = ensureDropAnchorHost();
157
+ return {
158
+ clear: () => {
159
+ dropAnchorModel?.root.parentElement?.removeChild(dropAnchorModel.root);
160
+ dropAnchorModel = undefined;
161
+ },
162
+ exists: () => !!dropAnchorModel,
163
+ getElements: () => {
164
+ if (dropAnchorModel) {
165
+ dropAnchorModel.changed = false;
166
+ return dropAnchorModel;
167
+ }
168
+ const root = document.createElement('div');
169
+ root.className = 'dv-drop-target-container';
170
+ const overlay = document.createElement('div');
171
+ overlay.className = 'dv-drop-target-anchor';
172
+ overlay.style.visibility = 'hidden';
173
+ root.appendChild(overlay);
174
+ host.appendChild(root);
175
+ dropAnchorModel = { root, overlay, changed: true };
176
+ return dropAnchorModel;
177
+ },
178
+ };
179
+ },
180
+ dispose: () => {
181
+ dropAnchorHost?.remove();
182
+ dropAnchorHost = null;
183
+ dropAnchorModel = undefined;
184
+ },
185
+ };
186
+ const attachBottomDropContainer = (group) => {
187
+ try {
188
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
189
+ const model = group.model;
190
+ if (model && model.dropTargetContainer !== bottomDropContainer) {
191
+ model.dropTargetContainer = bottomDropContainer;
192
+ }
193
+ }
194
+ catch { /* dockview internals moved — footer drop keeps working sans overlay */ }
195
+ };
196
+ let drawerPortalHost = null;
197
+ let portaledFlyout = null;
198
+ const FLYOUT_CLASS = 'fx-edge-drawer-flyout';
199
+ const PORTAL_HOST_CLASS = 'fx-edge-drawer-portal-host';
200
+ const DRAWER_VAR_NAMES = [
201
+ '--fx-edge-drawer-width',
202
+ '--fx-edge-drawer-height',
203
+ '--fx-edge-drawer-left',
204
+ '--fx-edge-drawer-right',
205
+ '--fx-edge-drawer-top',
206
+ '--fx-edge-drawer-bottom',
207
+ '--fx-edge-strip-top',
208
+ '--fx-edge-strip-left',
209
+ '--fx-edge-strip-height',
210
+ '--fx-edge-strip-width',
211
+ ];
212
+ const EDGE_HEADER_CLASSES = [
213
+ 'dv-groupview-header-left',
214
+ 'dv-groupview-header-right',
215
+ 'dv-groupview-header-top',
216
+ 'dv-groupview-header-bottom',
217
+ ];
218
+ const ensureDrawerPortalHost = () => {
219
+ if (drawerPortalHost)
220
+ return drawerPortalHost;
221
+ const host = document.createElement('div');
222
+ host.className = PORTAL_HOST_CLASS;
223
+ document.body.appendChild(host);
224
+ drawerPortalHost = host;
225
+ return host;
226
+ };
227
+ const disposeDrawerPortalHost = () => {
228
+ drawerPortalHost?.remove();
229
+ drawerPortalHost = null;
230
+ portaledFlyout = null;
231
+ };
232
+ const contentContainerOf = (group) => group.element.querySelector(':scope > .dv-content-container');
233
+ const copyDrawerVars = (from, to) => {
234
+ for (const name of DRAWER_VAR_NAMES) {
235
+ const val = from.getPropertyValue(name);
236
+ if (val)
237
+ to.style.setProperty(name, val);
238
+ else
239
+ to.style.removeProperty(name);
240
+ }
241
+ };
242
+ const syncFlyoutDirectionClasses = (group, flyout) => {
243
+ for (const cls of EDGE_HEADER_CLASSES) {
244
+ flyout.classList.toggle(cls, group.element.classList.contains(cls));
245
+ }
246
+ };
247
+ const restoreDrawerFlyout = (group) => {
248
+ const flyout = portaledFlyout ?? contentContainerOf(group);
249
+ if (flyout) {
250
+ flyout.classList.remove(FLYOUT_CLASS, ANIM_CLASS);
251
+ for (const cls of EDGE_HEADER_CLASSES)
252
+ flyout.classList.remove(cls);
253
+ group.element.appendChild(flyout);
254
+ }
255
+ if (grip.parentElement !== group.element)
256
+ group.element.appendChild(grip);
257
+ portaledFlyout = null;
258
+ if (drawerPortalHost) {
259
+ for (const name of DRAWER_VAR_NAMES)
260
+ drawerPortalHost.style.removeProperty(name);
261
+ drawerPortalHost.replaceChildren();
262
+ }
263
+ };
264
+ const portalDrawerFlyout = (group) => {
265
+ const flyout = contentContainerOf(group);
266
+ if (!flyout)
267
+ return;
268
+ const host = ensureDrawerPortalHost();
269
+ flyout.classList.add(FLYOUT_CLASS);
270
+ syncFlyoutDirectionClasses(group, flyout);
271
+ copyDrawerVars(group.element.style, host);
272
+ portaledFlyout = flyout;
273
+ host.appendChild(flyout);
274
+ host.appendChild(grip);
275
+ };
276
+ const isInsideOpenDrawer = (target) => {
277
+ if (!target || !openGroup)
278
+ return false;
279
+ if (openGroup.element.contains(target))
280
+ return true;
281
+ // The bottom strip is relocated to the footer, outside the group and flyout.
282
+ if (bottomStripEl?.contains(target))
283
+ return true;
284
+ if (portaledFlyout?.contains(target))
285
+ return true;
286
+ if (grip.contains(target))
287
+ return true;
288
+ return false;
289
+ };
290
+ // Our own resize handle — a thin fixed bar riding the drawer's far edge. Native
291
+ // dockview resize is a splitview sash that would push the grid, which we forbid;
292
+ // dragging this grip only rewrites the CSS size var, so the overlay grows/shrinks
293
+ // without ever touching the collapsed splitview cell. One grip is reused for the
294
+ // single drawer that can be open at a time; while open it is portalled to
295
+ // `.fx-edge-drawer-portal-host` so the flyout paints above the keep-alive viewport.
296
+ const grip = document.createElement('div');
297
+ grip.className = 'fx-edge-drawer-grip';
298
+ // Anchor the fixed flyout to the strip's inner edge. Left/right strips grow
299
+ // horizontally (drawer to the strip's right/left); top/bottom grow vertically.
300
+ const position = (group) => {
301
+ const s = group.element.style;
302
+ // Bottom edge is footer-merged: the strip lives in the StatusBar, so anchor
303
+ // the drawer to span the content column (group.element still reports that
304
+ // width) and rise UP from the footer's top edge — not from the collapsed
305
+ // splitview cell.
306
+ if (edgeOf(group) === 'bottom') {
307
+ const gr = group.element.getBoundingClientRect();
308
+ const footer = footerHost()?.closest('.global-status-bar');
309
+ const footerTop = footer ? footer.getBoundingClientRect().top : window.innerHeight;
310
+ s.setProperty('--fx-edge-strip-left', `${gr.left}px`);
311
+ s.setProperty('--fx-edge-strip-width', `${gr.width}px`);
312
+ s.setProperty('--fx-edge-drawer-bottom', `${window.innerHeight - footerTop}px`);
313
+ if (openGroup === group && drawerPortalHost)
314
+ copyDrawerVars(s, drawerPortalHost);
315
+ positionGrip(group);
316
+ return;
317
+ }
318
+ const r = group.element.getBoundingClientRect();
319
+ s.setProperty('--fx-edge-drawer-left', `${r.right}px`);
320
+ s.setProperty('--fx-edge-drawer-right', `${window.innerWidth - r.left}px`);
321
+ s.setProperty('--fx-edge-drawer-top', `${r.bottom}px`);
322
+ s.setProperty('--fx-edge-drawer-bottom', `${window.innerHeight - r.top}px`);
323
+ s.setProperty('--fx-edge-strip-top', `${r.top}px`);
324
+ s.setProperty('--fx-edge-strip-left', `${r.left}px`);
325
+ s.setProperty('--fx-edge-strip-height', `${r.height}px`);
326
+ s.setProperty('--fx-edge-strip-width', `${r.width}px`);
327
+ if (openGroup === group && drawerPortalHost)
328
+ copyDrawerVars(s, drawerPortalHost);
329
+ positionGrip(group);
330
+ };
331
+ // Park the grip on the drawer's outer edge (the edge away from the strip),
332
+ // spanning the drawer's cross axis. Tracks the live strip rect + size var.
333
+ const positionGrip = (group) => {
334
+ const e = edgeOf(group);
335
+ const r = group.element.getBoundingClientRect();
336
+ const size = readSize(group, e);
337
+ const g = grip.style;
338
+ g.position = 'fixed';
339
+ // Match the drawer's cross-axis inset (DockShell.css --fx-edge-drawer-inset)
340
+ // so the resize grip rides the flyout's edge, not the full strip span.
341
+ const INSET = 6;
342
+ if (e === 'left') {
343
+ g.top = `${r.top + INSET}px`;
344
+ g.height = `${r.height - 2 * INSET}px`;
345
+ g.left = `${r.right + size - 3}px`;
346
+ g.width = '6px';
347
+ g.cursor = 'ew-resize';
348
+ }
349
+ else if (e === 'right') {
350
+ g.top = `${r.top + INSET}px`;
351
+ g.height = `${r.height - 2 * INSET}px`;
352
+ g.left = `${r.left - size - 3}px`;
353
+ g.width = '6px';
354
+ g.cursor = 'ew-resize';
355
+ }
356
+ else if (e === 'top') {
357
+ g.left = `${r.left + INSET}px`;
358
+ g.width = `${r.width - 2 * INSET}px`;
359
+ g.top = `${r.bottom + size - 3}px`;
360
+ g.height = '6px';
361
+ g.cursor = 'ns-resize';
362
+ }
363
+ else {
364
+ g.left = `${r.left + INSET}px`;
365
+ g.width = `${r.width - 2 * INSET}px`;
366
+ g.top = `${r.top - size - 3}px`;
367
+ g.height = '6px';
368
+ g.cursor = 'ns-resize';
369
+ }
370
+ };
371
+ // Restart the wipe-in keyframes. CSS `animation` only fires when the animating
372
+ // class is (re)applied — keeping OPEN_CLASS alone on a same-strip tab switch
373
+ // would leave the drawer static (UE re-animates the panel on every mode click).
374
+ const kickAnim = (group) => {
375
+ const el = group.element;
376
+ el.classList.remove(ANIM_CLASS);
377
+ // Force a style recalc so the next add is treated as a fresh animation start.
378
+ void el.offsetWidth;
379
+ el.classList.add(ANIM_CLASS);
380
+ const flyout = portaledFlyout ?? contentContainerOf(group);
381
+ if (flyout) {
382
+ flyout.classList.remove(ANIM_CLASS);
383
+ void flyout.offsetWidth;
384
+ flyout.classList.add(ANIM_CLASS);
385
+ }
386
+ };
387
+ // The bottom strip is relocated into the footer, OUTSIDE its group element, so
388
+ // the OPEN_CLASS we add to group.element never reaches it. Mirror the open
389
+ // state onto the footer strip so the active-tab highlight (dv-active-tab) only
390
+ // shows WHILE the drawer is open — otherwise the group's always-present active
391
+ // panel would paint a persistent highlight in the footer with no click.
392
+ // The relocated footer strip is OUTSIDE its group element, so the
393
+ // `dv-active-group` focus class dockview toggles never reaches it. Mirror it
394
+ // as `fx-bottom-edge-focused` so the lime focus accent (::before) lights ONLY
395
+ // while the bottom drawer is BOTH open AND focused — not merely open (an open
396
+ // but unfocused drawer keeps its selected tab, minus the accent bar).
397
+ const syncBottomFocusMarker = () => {
398
+ if (!bottomStripEl)
399
+ return;
400
+ const focused = !!openGroup
401
+ && edgeOf(openGroup) === 'bottom'
402
+ && openGroup.element.classList.contains('dv-active-group');
403
+ bottomStripEl.classList.toggle('fx-bottom-edge-focused', focused);
404
+ };
405
+ const syncBottomOpenMarker = () => {
406
+ if (!bottomStripEl)
407
+ return;
408
+ const isBottomOpen = !!openGroup && edgeOf(openGroup) === 'bottom';
409
+ bottomStripEl.classList.toggle('fx-bottom-edge-open', isBottomOpen);
410
+ syncBottomFocusMarker();
411
+ };
412
+ // Hard close — dispose / switching to another edge group.
413
+ const forceClose = () => {
414
+ if (openGroup) {
415
+ restoreDrawerFlyout(openGroup);
416
+ openGroup.element.classList.remove(OPEN_CLASS, ANIM_CLASS);
417
+ openGroup = null;
418
+ }
419
+ syncSurfaceInteractionBlock();
420
+ syncBottomOpenMarker();
421
+ };
422
+ const open = (group) => {
423
+ if (openGroup && openGroup !== group) {
424
+ restoreDrawerFlyout(openGroup);
425
+ openGroup.element.classList.remove(OPEN_CLASS, ANIM_CLASS);
426
+ openGroup = null;
427
+ }
428
+ openGroup = group;
429
+ group.element.classList.add(OPEN_CLASS);
430
+ syncSurfaceInteractionBlock();
431
+ position(group);
432
+ portalDrawerFlyout(group);
433
+ kickAnim(group);
434
+ syncBottomOpenMarker();
435
+ };
436
+ // Soft dismiss (outside-click / re-click active tab), UE rules:
437
+ // • active tab is pinned → keep open (no-op)
438
+ // • active is non-pin, group has pin → snap back to the pinned tab
439
+ // • no pin in group → close the drawer
440
+ const close = () => {
441
+ if (!openGroup)
442
+ return;
443
+ const group = openGroup;
444
+ if (activeIsPinned(group))
445
+ return;
446
+ const pinnedId = pinnedPanelId(group);
447
+ if (pinnedId) {
448
+ const pinned = findPanel(group, pinnedId);
449
+ if (pinned) {
450
+ try {
451
+ pinned.api.setActive();
452
+ }
453
+ catch { /* noop */ }
454
+ kickAnim(group);
455
+ return;
456
+ }
457
+ }
458
+ forceClose();
459
+ };
460
+ // Per-TAB pin toggle. Same-group pins are mutually exclusive: pinning B
461
+ // clears A's pin. Pinning activates that tab; opens the drawer only if it
462
+ // was closed — never kickAnim (pin is a state toggle, not an open).
463
+ const togglePin = (group, panel) => {
464
+ const cur = pinnedPanelId(group);
465
+ if (cur === panel.id) {
466
+ setEdgePin(group.id, undefined);
467
+ }
468
+ else {
469
+ setEdgePin(group.id, panel.id);
470
+ try {
471
+ panel.api.setActive();
472
+ }
473
+ catch { /* noop */ }
474
+ if (openGroup !== group)
475
+ open(group);
476
+ }
477
+ };
478
+ // Drag the grip → rewrite the size var (clamped). Pointer capture keeps the drag
479
+ // alive even when the cursor leaves the 6px bar.
480
+ const disposeGripResize = installPointerDragSession({
481
+ element: grip,
482
+ begin: () => {
483
+ if (!openGroup)
484
+ return null;
485
+ const group = openGroup;
486
+ const edge = edgeOf(group);
487
+ return { group, edge, rect: group.element.getBoundingClientRect() };
488
+ },
489
+ move: ({ group, edge, rect: r }, ev) => {
490
+ let size;
491
+ if (edge === 'left')
492
+ size = ev.clientX - r.right;
493
+ else if (edge === 'right')
494
+ size = r.left - ev.clientX;
495
+ else if (edge === 'top')
496
+ size = ev.clientY - r.bottom;
497
+ else
498
+ size = r.top - ev.clientY;
499
+ size = Math.max(160, Math.min(size, 900));
500
+ group.element.style.setProperty(sizeVar(edge), `${size}px`);
501
+ if (drawerPortalHost)
502
+ copyDrawerVars(group.element.style, drawerPortalHost);
503
+ positionGrip(group);
504
+ },
505
+ preventDefault: true,
506
+ stopPropagation: true,
507
+ draggingClassName: 'fx-edge-drawer-grip--dragging',
508
+ });
509
+ // Resolve the edge group owning a strip element (tab / chrome). Handles both
510
+ // the in-place left/right strips (under `root`) and the relocated bottom strip
511
+ // (in the footer, outside `root`).
512
+ const edgeGroupForStripEl = (el) => {
513
+ if (bottomStripEl && bottomStripEl.contains(el))
514
+ return edgeGroupAt('bottom');
515
+ const groupEl = el.closest('.dv-groupview-edge');
516
+ if (groupEl && root.contains(groupEl))
517
+ return edgeGroupFromElement(api, groupEl);
518
+ return undefined;
519
+ };
520
+ // Void / strip chrome (not a tab) calls dockview doSetGroupActive on
521
+ // pointerdown — that lights the last active tab via our UE accent without
522
+ // opening the drawer. Swallow those activations; real tab clicks handle
523
+ // setActive themselves below.
524
+ const onStripChromePointerDown = (e) => {
525
+ // This listener is registered before the generic outside-dismiss listener,
526
+ // preserving the product rule that every dismissible pointer interaction
527
+ // clears a possibly cancelled footer re-click lease before the bottom strip
528
+ // may acquire it again for the current interaction.
529
+ if (openGroup && !activeIsPinned(openGroup))
530
+ preserveNextActiveTabClick = false;
531
+ const target = e.target;
532
+ if (!target)
533
+ return;
534
+ const inBottom = !!bottomStripEl && bottomStripEl.contains(target);
535
+ const groupEl = target.closest('.dv-groupview-edge');
536
+ if (!inBottom && (!groupEl || !root.contains(groupEl)))
537
+ return;
538
+ if (target.closest('.dv-tab'))
539
+ return;
540
+ if (target.closest('.fx-edge-drawer-grip'))
541
+ return;
542
+ if (target.closest('.dv-content-container'))
543
+ return;
544
+ e.stopPropagation();
545
+ };
546
+ const onClickCapture = (e) => {
547
+ const target = e.target;
548
+ const tabEl = target?.closest('.dv-tab');
549
+ if (!tabEl)
550
+ return;
551
+ const group = edgeGroupForStripEl(tabEl);
552
+ if (!group)
553
+ return;
554
+ // Edge-group tab: block dockview's native expand/resize entirely.
555
+ e.preventDefault();
556
+ // If a portalled control is open, let its own outside-click handler see
557
+ // this footer click and dismiss the control. Dockview already bails on a
558
+ // default-prevented tab event, so stopping propagation is unnecessary.
559
+ if (!hasOwnedInteractionSurface())
560
+ e.stopPropagation();
561
+ // Pin toggle (rendered by DockTab in place of close): flip THIS tab's pin.
562
+ const pinBtn = target?.closest(`.${EDGE_PIN_CLASS}`);
563
+ if (pinBtn) {
564
+ const panelId = pinBtn.dataset.fxEdgePinPanel;
565
+ const panel = panelId ? findPanel(group, panelId) : undefined;
566
+ if (panel)
567
+ togglePin(group, panel);
568
+ return;
569
+ }
570
+ // Map the clicked tab → its panel by DOM order within the tabs container.
571
+ const container = tabEl.closest('.dv-tabs-container');
572
+ const tabs = container
573
+ ? Array.from(container.querySelectorAll(':scope > .dv-tab'))
574
+ : [];
575
+ const index = tabs.indexOf(tabEl);
576
+ const panel = index >= 0 ? group.panels[index] : undefined;
577
+ // Always setActive — even when this panel is already the group's active
578
+ // panel. Otherwise clicking a strip tab while focus is on another group
579
+ // never promotes this edge group to `dv-active-group`, so the UE focus
580
+ // tab accent never lights up.
581
+ const wasActive = panel != null && group.activePanel === panel;
582
+ if (panel) {
583
+ try {
584
+ panel.api.setActive();
585
+ }
586
+ catch { /* noop */ }
587
+ }
588
+ // Re-click active tab → soft dismiss (pin rules inside close()).
589
+ // Same-strip switch → re-kick wipe-in. Else open the drawer.
590
+ if (openGroup === group && wasActive) {
591
+ const preserveOpen = preserveNextActiveTabClick;
592
+ preserveNextActiveTabClick = false;
593
+ if (preserveOpen)
594
+ kickAnim(group);
595
+ else
596
+ close();
597
+ }
598
+ else if (openGroup === group && !wasActive) {
599
+ preserveNextActiveTabClick = false;
600
+ kickAnim(group);
601
+ }
602
+ else {
603
+ preserveNextActiveTabClick = false;
604
+ open(group);
605
+ }
606
+ };
607
+ const reposition = () => { if (openGroup)
608
+ position(openGroup); };
609
+ // Hide edge strips with zero tabs. Dropping back uses the root's narrow
610
+ // edge overlay (kind:'edge') — see willDropSub — which routes into the
611
+ // registered edge group and re-shows it. No need to flash empty strips
612
+ // during drag.
613
+ const syncEmptyEdges = () => {
614
+ for (const pos of EDGE_POSITIONS) {
615
+ if (!api.getEdgeGroup(pos))
616
+ continue;
617
+ const group = edgeGroups(api).find((g) => {
618
+ const loc = g.api.location;
619
+ return loc.type === 'edge' && loc.position === pos;
620
+ });
621
+ const hasItems = (group?.panels.length ?? 0) > 0;
622
+ try {
623
+ api.setEdgeGroupVisible(pos, hasItems);
624
+ }
625
+ catch { /* noop */ }
626
+ if (group) {
627
+ group.element.classList.toggle('fx-edge-empty', !hasItems);
628
+ }
629
+ if (!hasItems && group) {
630
+ setEdgePin(group.id, undefined);
631
+ if (openGroup === group)
632
+ forceClose();
633
+ }
634
+ }
635
+ // Keep the footer strip parented + its host empty-state in sync.
636
+ relocateBottomStrip();
637
+ };
638
+ const edgeGroupAt = (pos) => edgeGroups(api).find((g) => {
639
+ const loc = g.api.location;
640
+ return loc.type === 'edge' && loc.position === pos;
641
+ });
642
+ // Move dockview's bottom-edge `.dv-tabs-and-actions-container` out of the
643
+ // (collapsed, hidden) splitview cell and into the StatusBar footer host, so
644
+ // the dock tabs share the footer row with the status items. The relocated
645
+ // element is the REAL dockview tab strip → native drag in/out, native drop
646
+ // targets and our click interceptor all keep working. Idempotent; re-run on
647
+ // every layout change (reset/fromJSON disposes the group → new container).
648
+ const relocateBottomStrip = () => {
649
+ const host = footerHost();
650
+ if (!host)
651
+ return;
652
+ const group = edgeGroupAt('bottom');
653
+ // Resolve THIS group's live strip. Order matters:
654
+ // 1. If the strip is still under the group (not yet relocated) → use it.
655
+ // 2. Else if it's the SAME group we already relocated → reuse bottomStripEl.
656
+ // 3. Else it's a NEW group whose header isn't built yet → BAIL. Never fall
657
+ // back to a previous group's detached strip; that's exactly what made
658
+ // the footer flash correct then blank on the 2nd hydration pass.
659
+ let container = null;
660
+ if (group) {
661
+ container = group.element.querySelector(':scope > .dv-tabs-and-actions-container');
662
+ if (!container && bottomGroupId === group.id)
663
+ container = bottomStripEl;
664
+ if (!container) {
665
+ if (bailFrames++ < 180)
666
+ scheduleRelocate();
667
+ return;
668
+ }
669
+ }
670
+ else {
671
+ container = bottomStripEl;
672
+ }
673
+ bailFrames = 0;
674
+ // Drop any stale strip a disposed group left behind in the host.
675
+ for (const child of Array.from(host.children)) {
676
+ if (child !== container)
677
+ child.remove();
678
+ }
679
+ if (container && container.parentElement !== host) {
680
+ host.appendChild(container);
681
+ container.classList.add('fx-bottom-edge-strip');
682
+ }
683
+ if (container) {
684
+ // dockview lays the collapsed (height-0) bottom group out in the shell and
685
+ // can stamp inline height/width/display on the tabs container + its tab
686
+ // strip; carried into the footer those inline values win over our CSS and
687
+ // render the relocated strip at 0 size (invisible until a later reflow —
688
+ // the "refresh shows nothing until you click" bug). Strip them so our
689
+ // footer CSS controls sizing, then force a reflow to paint immediately.
690
+ for (const prop of ['height', 'width', 'display']) {
691
+ container.style.removeProperty(prop);
692
+ (container.querySelector(':scope > .dv-tabs-container'))?.style.removeProperty(prop);
693
+ }
694
+ void container.offsetHeight;
695
+ }
696
+ bottomStripEl = container ?? null;
697
+ if (group)
698
+ bottomGroupId = group.id;
699
+ syncBottomOpenMarker();
700
+ // Redirect this group's drop overlays to the footer-anchored host so tab
701
+ // reorder / receive highlights render over the footer, not the shell.
702
+ if (group)
703
+ attachBottomDropContainer(group);
704
+ host.classList.toggle('is-empty', (group?.panels.length ?? 0) === 0);
705
+ };
706
+ // Default editor layout may put panels only in the grid. Still register the
707
+ // left/right/bottom edge slots (hidden while empty) so outermost drop and
708
+ // "Move to Side" have a destination without flashing empty strips.
709
+ const ensureEdgeSlots = () => {
710
+ for (const pos of ENSURED_EDGE_SLOTS) {
711
+ if (api.getEdgeGroup(pos))
712
+ continue;
713
+ try {
714
+ api.addEdgeGroup(pos, {
715
+ id: `edge-${pos}`,
716
+ initialSize: pos === 'bottom' ? 280 : 260,
717
+ // Bottom is footer-merged: its collapsed splitview cell must take ZERO
718
+ // height (the strip is relocated into the StatusBar), otherwise a blank
719
+ // 35px bar would sit above the footer. Left/right keep the strip in the
720
+ // grid so use the theme default collapsed width.
721
+ ...(pos === 'bottom' ? { collapsedSize: 0 } : {}),
722
+ collapsed: true,
723
+ });
724
+ api.setEdgeGroupVisible(pos, false);
725
+ }
726
+ catch { /* noop */ }
727
+ }
728
+ forceBottomCollapsedZero();
729
+ forceVerticalShellGapZero();
730
+ };
731
+ // Force the bottom edge's collapsed cell to ZERO height. dockview's
732
+ // `fromJSON` auto-creates edge groups from serialized `edgeGroups` using the
733
+ // theme default collapsedSize (35) and ignores the collapsedSize we pass to
734
+ // addEdgeGroup — so a persisted / default layout leaves a blank 35px band
735
+ // above the footer (the strip itself is relocated into the StatusBar) and
736
+ // parks the bottom drop overlay there. There is no public collapsedSize
737
+ // setter, so reach the ShellManager's EdgeGroupView and shrink it in place.
738
+ // Guarded: if dockview's internals move this becomes a no-op (empty band is
739
+ // cosmetic, never functional). Left/right keep the theme default.
740
+ const forceBottomCollapsedZero = () => {
741
+ try {
742
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
743
+ const shell = api.component?._shellManager;
744
+ const view = shell?._bottomView;
745
+ if (!view || view.collapsedSize === 0)
746
+ return;
747
+ // (collapsedSize, expandedMinimumSize) — keep expanded-min sane (>0).
748
+ view.updateCollapsedSize(0, 50);
749
+ if (view.isCollapsed)
750
+ shell._middleColumn.resizeView('bottom', 0);
751
+ }
752
+ catch { /* dockview internals moved — empty band is cosmetic */ }
753
+ };
754
+ // The theme's 6px gap should separate core grid groups and side edge strips,
755
+ // but the footer-merged bottom group has no visible shell cell: its real tab
756
+ // strip lives in GlobalStatusBar. Dockview applies one margin to the whole
757
+ // vertical shell split, leaving a stray 6px band above the footer. There is no
758
+ // public per-axis/per-edge gap option, so zero only the shell's vertical
759
+ // splitview margin; the core grid and left/right shell gaps stay at 6px.
760
+ const forceVerticalShellGapZero = () => {
761
+ try {
762
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
763
+ const shell = api.component?._shellManager;
764
+ shell?._middleColumn?.updateMargin(0);
765
+ }
766
+ catch { /* dockview internals moved — footer gap is cosmetic */ }
767
+ };
768
+ // ── Global footer-chrome owner ───────────────────────────────────────────
769
+ // The footer panels (Info / Checkpoints / Events) are interface-level chrome
770
+ // that must exist under EVERY layout — every page AND every Page — not be
771
+ // re-seeded into each layout's JSON. This reconciler is that single owner:
772
+ // installEdgeDrawer runs once per DockShell region and persists across every
773
+ // page / Page switch, so after each layout change we ensure any missing
774
+ // footer panel is (re)added into the bottom edge group. Panels are inserted
775
+ // straight into the edge group (position.referenceGroup) so they never detour
776
+ // through the grid.
777
+ //
778
+ // `ensuringFooter` does double duty: reentrancy guard AND a "batch in progress"
779
+ // flag the layout/panel event handlers below check to STAY QUIET. Adding a panel
780
+ // (and the moveTo fallback) each fire onDidAddPanel / onDidActivePanelChange /
781
+ // onDidLayoutChange, so without suppression every insert would re-run relocate
782
+ // and each new panel would momentarily steal the active tab — the "tabs randomly
783
+ // focus" churn seen on page switch. Instead we do all inserts silently, restore
784
+ // the pre-existing active panel so the footer never steals focus from the page
785
+ // content, and let the SINGLE post-ensure reconcile relocate the strip once.
786
+ let ensuringFooter = false;
787
+ const ensureFooterPanels = () => {
788
+ if (ensuringFooter)
789
+ return;
790
+ const bottom = edgeGroupAt('bottom');
791
+ if (!bottom)
792
+ return; // ensureEdgeSlots creates it; a later tick retries
793
+ for (const id of FOOTER_PANEL_ID_LIST) {
794
+ if (isFooterPanelUserVisible(id))
795
+ continue;
796
+ const hidden = api.getPanel(id);
797
+ if (!hidden)
798
+ continue;
799
+ try {
800
+ hidden.api.close();
801
+ }
802
+ catch { /* noop */ }
803
+ }
804
+ // Steady state (footer already complete): do nothing — onDidLayoutChange fires
805
+ // on every resize/drag, so a no-op fast-path keeps those churn-free.
806
+ if (FOOTER_PANEL_ID_LIST.every((id) => !isFooterPanelUserVisible(id) || api.getPanel(id)))
807
+ return;
808
+ ensuringFooter = true;
809
+ // Preserve whatever the page had focused so a freshly-added footer tab (an
810
+ // empty group's first panel is force-active; moveTo also activates) can't grab
811
+ // the active group.
812
+ const prevActive = api.activePanel;
813
+ try {
814
+ FOOTER_PANEL_ID_LIST.forEach((id, index) => {
815
+ // Only ADD a fully-absent footer panel — never relocate one the user has
816
+ // dragged elsewhere (respecting a user who moved Info into the grid).
817
+ if (!isFooterPanelUserVisible(id) || api.getPanel(id))
818
+ return;
819
+ try {
820
+ api.addPanel({
821
+ id,
822
+ component: id,
823
+ title: id,
824
+ position: { referenceGroup: bottom, direction: 'within', index },
825
+ inactive: true,
826
+ });
827
+ // Guarantee it landed in the bottom edge group: referenceGroup targeting
828
+ // can fall back to a fresh grid group on some dockview builds. Moving it
829
+ // in the SAME tick (before paint) keeps the add flash-free. moveTo-into-
830
+ // edge is the proven path (see willDropSub).
831
+ const panel = api.getPanel(id);
832
+ if (panel && panel.group !== bottom) {
833
+ try {
834
+ panel.api.moveTo({ group: bottom, position: 'center' });
835
+ }
836
+ catch { /* noop */ }
837
+ }
838
+ }
839
+ catch { /* component not registered in this host — skip */ }
840
+ });
841
+ try {
842
+ prevActive?.api.setActive();
843
+ }
844
+ catch { /* prevActive was closed — noop */ }
845
+ }
846
+ finally {
847
+ ensuringFooter = false;
848
+ }
849
+ };
850
+ // Normalize to collapsed on install. In our model an edge group is ALWAYS
851
+ // collapsed (a narrow strip); "expansion" is the fixed drawer overlay, never a
852
+ // splitview resize. A previously-persisted expanded state (collapsed:false)
853
+ // would otherwise restore as a full-width column that can't be closed — the
854
+ // native tab-click collapse is intercepted below. collapse() is a no-op when
855
+ // already collapsed.
856
+ const normalize = () => {
857
+ for (const group of edgeGroups(api)) {
858
+ try {
859
+ group.api.collapse();
860
+ }
861
+ catch { /* noop */ }
862
+ }
863
+ };
864
+ // Safety net: the drawer is a pure overlay and must never become a splitview
865
+ // resize. If anything (a missed click, a future dockview code path) expands an
866
+ // edge group, snap it straight back to collapsed so the grid never shifts.
867
+ const collapseObservation = createReplaceableObservationSetLifecycle({
868
+ subscribe: (group, listener) => group.api.onDidCollapsedChange(listener),
869
+ onObservation: (group, event) => {
870
+ if (!event.isCollapsed) {
871
+ try {
872
+ group.api.collapse();
873
+ }
874
+ catch { /* noop */ }
875
+ }
876
+ },
877
+ });
878
+ const rebindCollapseGuards = () => {
879
+ collapseObservation.replace(edgeGroups(api));
880
+ };
881
+ ensureEdgeSlots();
882
+ ensureFooterPanels();
883
+ const disposeFooterEnsure = registerFooterPanelEnsure(ensureFooterPanels);
884
+ normalize();
885
+ rebindCollapseGuards();
886
+ relocateBottomStrip();
887
+ syncEmptyEdges();
888
+ // The StatusBar footer host may mount well after the dock, and the layout is
889
+ // hydrated by SEVERAL async paths (onReady restore, applyPageScope, and the
890
+ // project-id resolve round-trip to /api/projects). Any of these can
891
+ // create the real bottom group AFTER our first relocate. Keep re-running the
892
+ // (idempotent) relocate until the strip is actually parented into the footer
893
+ // host, with a generous frame cap so a late-mounting footer or late hydration
894
+ // still lands without waiting for a user click. syncEmptyEdges is re-run too
895
+ // so the just-parented strip's empty-state / visibility is correct.
896
+ const disposeFooterRelocationRetry = installBoundedFrameRetryLifecycle({
897
+ attempt: () => {
898
+ relocateBottomStrip();
899
+ const host = footerHost();
900
+ return !!host && !!bottomStripEl && bottomStripEl.parentElement === host;
901
+ },
902
+ onSuccess: syncEmptyEdges,
903
+ maxFrames: 242,
904
+ });
905
+ // Listeners live on `document` (capture): the bottom strip is relocated into
906
+ // the footer, OUTSIDE `root`, so a root-scoped listener would miss its tabs.
907
+ // edgeGroupForStripEl / the bottom-strip containment checks re-gate to our
908
+ // edge groups only.
909
+ const disposeCaptureInteraction = installCaptureInteractionObservation({
910
+ onPointerDown: onStripChromePointerDown,
911
+ onClick: onClickCapture,
912
+ });
913
+ const disposeOutsideDismiss = installOutsideDismissLifecycle({
914
+ isOpen: () => openGroup !== null,
915
+ isPinned: () => !!openGroup && activeIsPinned(openGroup),
916
+ containsTarget: (target) => isInsideOpenDrawer(target),
917
+ isDismissExempt: isEdgeDrawerDismissExemptTarget,
918
+ onContainedPointerDown: (target) => {
919
+ if (bottomStripEl?.contains(target)) {
920
+ // A footer re-click used to dismiss the drawer even when it was only
921
+ // the user's way back from a Content Browser popup. Let the popup
922
+ // consume the interaction first, then preserve this active tab click.
923
+ preserveNextActiveTabClick = hasOwnedInteractionSurface();
924
+ }
925
+ },
926
+ dismiss: () => {
927
+ preserveNextActiveTabClick = false;
928
+ close();
929
+ },
930
+ });
931
+ const disposeViewportResize = installViewportResizeObservation({
932
+ onResize: reposition,
933
+ });
934
+ // Reveal the footer drop zone ONLY during a real HTML5 tab drag. We can't
935
+ // reuse DockRegion's `fx-dock-dragging` flag: that also flips on a plain
936
+ // pointerdown on a tab strip (to catch floating-group pointer drags), so a
937
+ // mere CLICK on a footer tab would flash the drop affordance. `dragstart` /
938
+ // `dragend` only fire for an actual drag, so gate the footer zone on our own
939
+ // `fx-edge-drag` class instead.
940
+ const DRAG_CLASS = 'fx-edge-drag';
941
+ // Keep the "exactly one live drop overlay" invariant. dockview can rely on
942
+ // `onDragLeave` doing NOTHING for an override target because its own anchor
943
+ // container is SHARED by every droptarget in the instance: whoever becomes the
944
+ // target next repositions that single overlay. Our footer shim is a SECOND,
945
+ // group-exclusive container, so nothing ever took the footer's overlay down —
946
+ // dragging a footer tab up into the grid painted the grid's zone while the
947
+ // footer's lime rectangle stayed, two live drop zones at once. Wipe ours as
948
+ // soon as the drag is over anything outside the strip; coming back fires a
949
+ // real `dragenter`, which rebuilds it through `getElements()`.
950
+ const overBottomStrip = (node) => {
951
+ if (!node)
952
+ return false;
953
+ if (bottomStripEl?.contains(node))
954
+ return true;
955
+ // Before the footer relocation lands, the strip is still inside its group.
956
+ const bottom = edgeGroupAt('bottom');
957
+ return !!bottom && bottom.element.contains(node);
958
+ };
959
+ const disposeDragPresence = installDragPresenceLifecycle({
960
+ isStartTarget: (eventTarget) => {
961
+ const target = eventTarget;
962
+ return !!(target?.closest?.('.dv-tab')
963
+ || target?.closest?.('.dv-tabs-and-actions-container'));
964
+ },
965
+ onActiveChange: (active) => {
966
+ document.documentElement.classList.toggle(DRAG_CLASS, active);
967
+ // Backstop: wipe any footer drop overlay dockview left behind when the drag
968
+ // ended on a group other than the bottom edge.
969
+ if (!active)
970
+ clearDropAnchor();
971
+ },
972
+ onDragOver: (eventTarget) => {
973
+ if (!dropAnchorModel)
974
+ return;
975
+ if (overBottomStrip(eventTarget))
976
+ return;
977
+ clearDropAnchor();
978
+ },
979
+ });
980
+ // Programmatic drawer control (chrome-drawer's `app.drawer.*` commands).
981
+ // Event name kept as a bare literal
982
+ // to avoid an interface→extensions import; chrome-drawer emits the same string.
983
+ const onEdgeDrawerCmd = (e) => {
984
+ const detail = e.detail;
985
+ if (!detail)
986
+ return;
987
+ if (detail.action === 'close') {
988
+ close();
989
+ return;
990
+ }
991
+ const id = detail.id;
992
+ if (!id)
993
+ return;
994
+ const panel = api.getPanel(id);
995
+ if (!panel)
996
+ return;
997
+ const group = edgeGroups(api).find((g) => g.panels.some((p) => p.id === id));
998
+ if (!group)
999
+ return;
1000
+ // toggle: re-hitting the already-open active panel closes it.
1001
+ if (detail.action === 'toggle' && openGroup === group && group.activePanel?.id === id) {
1002
+ close();
1003
+ return;
1004
+ }
1005
+ try {
1006
+ panel.api.setActive();
1007
+ }
1008
+ catch { /* noop */ }
1009
+ open(group);
1010
+ };
1011
+ const disposeCommandObservation = installCustomEventObservation({
1012
+ eventType: 'forgeax:edge-drawer',
1013
+ onEvent: onEdgeDrawerCmd,
1014
+ });
1015
+ const disposeLayoutChangeObservation = installDockLayoutObservation({
1016
+ onDidLayoutChange: (listener) => api.onDidLayoutChange(listener),
1017
+ }, {
1018
+ getCurrentScope: () => null,
1019
+ onCommitted: () => {
1020
+ // Silent while ensureFooterPanels is batching — its addPanel/moveTo calls fire
1021
+ // this; the caller does the single reconcile once the batch completes.
1022
+ if (ensuringFooter)
1023
+ return;
1024
+ reposition();
1025
+ // fromJSON / reset may drop edge slots — re-create empty ones for drop.
1026
+ ensureEdgeSlots();
1027
+ // …then re-assert the global footer chrome for the new layout.
1028
+ ensureFooterPanels();
1029
+ normalize();
1030
+ rebindCollapseGuards();
1031
+ // Reset/fromJSON disposes+recreates the bottom group → re-relocate its strip.
1032
+ relocateBottomStrip();
1033
+ syncEmptyEdges();
1034
+ },
1035
+ });
1036
+ // Panel add/remove is the precise moment an edge can become empty / non-empty;
1037
+ // layout-change alone can miss it depending on dockview's event ordering.
1038
+ const disposePanelMembershipObservation = installPanelMembershipObservation({
1039
+ subscribeAdd: (listener) => api.onDidAddPanel(listener),
1040
+ subscribeRemove: (listener) => api.onDidRemovePanel(listener),
1041
+ onAdd: () => { if (ensuringFooter)
1042
+ return; relocateBottomStrip(); syncEmptyEdges(); },
1043
+ onRemove: () => { syncEmptyEdges(); },
1044
+ });
1045
+ // fromJSON hydration fires ONLY `onDidLayoutFromJSON` — NOT `onDidLayoutChange`
1046
+ // (a gridview AsapEvent that ignores edge groups, which live in the shell
1047
+ // splitview) and NOT per-panel `onDidAddPanel` for edge groups (addEdgeGroup
1048
+ // never forwards it). So a refresh that restores a bottom panel left the strip
1049
+ // un-relocated until an unrelated grid click finally fired onDidLayoutChange —
1050
+ // the "shows only after clicking dockview" bug. Reconcile here explicitly.
1051
+ const disposeLayoutFromJsonObservation = installLayoutFromJsonObservation({
1052
+ subscribe: (listener) => api.onDidLayoutFromJSON(listener),
1053
+ onHydrated: () => {
1054
+ ensureEdgeSlots();
1055
+ ensureFooterPanels();
1056
+ normalize();
1057
+ rebindCollapseGuards();
1058
+ relocateBottomStrip();
1059
+ syncEmptyEdges();
1060
+ },
1061
+ });
1062
+ // Active-panel changes fire during hydration once a restored bottom panel is
1063
+ // made active — a cheap extra beat to catch strips the layout-change path may
1064
+ // have relocated before their tabs were fully populated.
1065
+ const disposeActivePanelObservation = installActivePanelObservation({
1066
+ subscribe: (listener) => api.onDidActivePanelChange(listener),
1067
+ onChange: () => { if (ensuringFooter)
1068
+ return; relocateBottomStrip(); syncBottomFocusMarker(); },
1069
+ });
1070
+ // Root edge drop (the thin outermost overlay) normally orthogonalizes into a
1071
+ // NEW grid group. When we already own an edge-group slot at that position,
1072
+ // steal the drop: preventDefault → show the slot → move the panel into it.
1073
+ // Empty sidebars stay hidden until this lands — no drag-time flash.
1074
+ const disposeWillDropObservation = installWillDropObservation({
1075
+ subscribe: (listener) => api.onWillDrop(listener),
1076
+ onWillDrop: (e) => {
1077
+ if (e.kind !== 'edge')
1078
+ return;
1079
+ const pos = e.position;
1080
+ if (!EDGE_POSITIONS.includes(pos))
1081
+ return;
1082
+ if (!api.getEdgeGroup(pos))
1083
+ return;
1084
+ const edgeGroup = edgeGroupAt(pos);
1085
+ if (!edgeGroup)
1086
+ return;
1087
+ const data = e.getData?.();
1088
+ const panelId = data?.panelId;
1089
+ if (!panelId)
1090
+ return;
1091
+ const panel = api.getPanel(panelId);
1092
+ if (!panel)
1093
+ return;
1094
+ e.preventDefault();
1095
+ try {
1096
+ api.setEdgeGroupVisible(pos, true);
1097
+ }
1098
+ catch { /* noop */ }
1099
+ edgeGroup.element.classList.remove('fx-edge-empty');
1100
+ try {
1101
+ panel.api.moveTo({ group: edgeGroup, position: 'center' });
1102
+ }
1103
+ catch { /* noop */ }
1104
+ try {
1105
+ edgeGroup.api.collapse();
1106
+ }
1107
+ catch { /* noop */ }
1108
+ open(edgeGroup);
1109
+ syncEmptyEdges();
1110
+ },
1111
+ });
1112
+ return () => {
1113
+ disposeFooterEnsure();
1114
+ disposeFooterRelocationRetry();
1115
+ footerRelocationFrame.dispose();
1116
+ disposeGripResize();
1117
+ forceClose();
1118
+ clearEdgePins();
1119
+ // Return the relocated strip to nowhere-in-particular; dockview disposes it
1120
+ // with the group. Just drop our footer marker so a stale strip can't linger.
1121
+ try {
1122
+ bottomStripEl?.remove();
1123
+ }
1124
+ catch { /* noop */ }
1125
+ bottomStripEl = null;
1126
+ bottomGroupId = null;
1127
+ try {
1128
+ bottomDropContainer.dispose();
1129
+ }
1130
+ catch { /* noop */ }
1131
+ disposeDrawerPortalHost();
1132
+ disposeOutsideDismiss();
1133
+ disposeCaptureInteraction();
1134
+ disposeViewportResize();
1135
+ disposeDragPresence();
1136
+ disposeCommandObservation();
1137
+ disposeLayoutChangeObservation();
1138
+ disposePanelMembershipObservation();
1139
+ disposeActivePanelObservation();
1140
+ disposeLayoutFromJsonObservation();
1141
+ disposeWillDropObservation();
1142
+ collapseObservation.dispose();
1143
+ };
1144
+ }