@dxos/plugin-debug 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/PLUGIN.mdl +241 -3
  2. package/README.md +27 -3
  3. package/dist/lib/Debug.mjs.map +1 -1
  4. package/dist/lib/DebugNodes.mjs +21 -2
  5. package/dist/lib/DebugNodes.mjs.map +1 -1
  6. package/dist/lib/DebugOperation.mjs +166 -2
  7. package/dist/lib/DebugOperation.mjs.map +1 -1
  8. package/dist/lib/DebugPlugin.mjs.map +1 -1
  9. package/dist/lib/DebugSurface.mjs +7 -2
  10. package/dist/lib/DebugSurface.mjs.map +1 -1
  11. package/dist/lib/IncidentSpace.mjs +2 -0
  12. package/dist/lib/PipelineSpace.mjs +2 -0
  13. package/dist/lib/ReviewSpace.mjs +2 -0
  14. package/dist/lib/StockfishSpace.mjs +2 -0
  15. package/dist/lib/TidepoolSpace.mjs +2 -0
  16. package/dist/lib/WeatherSpace.mjs +2 -0
  17. package/dist/lib/WorkerSpace.mjs +2 -0
  18. package/dist/lib/capabilities.browser.mjs +71 -0
  19. package/dist/lib/capabilities.browser.mjs.map +1 -0
  20. package/dist/lib/capabilities.mjs +17 -7
  21. package/dist/lib/capabilities.mjs.map +1 -1
  22. package/dist/lib/capabilities.node.mjs +13 -3
  23. package/dist/lib/capabilities.node.mjs.map +1 -1
  24. package/dist/lib/capabilities.tauri.mjs +71 -0
  25. package/dist/lib/capabilities.tauri.mjs.map +1 -0
  26. package/dist/lib/capabilities.workerd.mjs +3 -1
  27. package/dist/lib/capabilities.workerd.mjs.map +1 -1
  28. package/dist/lib/chunk-DebugConsole.mjs +241 -0
  29. package/dist/lib/chunk-DebugConsole.mjs.map +1 -0
  30. package/dist/lib/chunk-DebugObjectPanel.mjs +12 -16
  31. package/dist/lib/chunk-DebugObjectPanel.mjs.map +1 -1
  32. package/dist/lib/chunk-DebugPanelDrawer.mjs +48 -0
  33. package/dist/lib/chunk-DebugPanelDrawer.mjs.map +1 -0
  34. package/dist/lib/chunk-DebugPanelHeader.mjs +280 -0
  35. package/dist/lib/chunk-DebugPanelHeader.mjs.map +1 -0
  36. package/dist/lib/chunk-DebugPanelStatus.mjs +127 -0
  37. package/dist/lib/chunk-DebugPanelStatus.mjs.map +1 -0
  38. package/dist/lib/chunk-DebugSettings.mjs +81 -70
  39. package/dist/lib/chunk-DebugSettings.mjs.map +1 -1
  40. package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs +21 -12
  41. package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs.map +1 -1
  42. package/dist/lib/chunk-DebugStatus.mjs +12 -12
  43. package/dist/lib/chunk-DebugStatus.mjs.map +1 -1
  44. package/dist/lib/chunk-IncidentSpace.mjs +269 -0
  45. package/dist/lib/chunk-IncidentSpace.mjs.map +1 -0
  46. package/dist/lib/chunk-LoggerPanel.mjs +18 -0
  47. package/dist/lib/chunk-LoggerPanel.mjs.map +1 -0
  48. package/dist/lib/chunk-PLUGIN.mjs +6 -0
  49. package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
  50. package/dist/lib/chunk-PipelineSpace.mjs +378 -0
  51. package/dist/lib/chunk-PipelineSpace.mjs.map +1 -0
  52. package/dist/lib/chunk-ReviewSpace.mjs +356 -0
  53. package/dist/lib/chunk-ReviewSpace.mjs.map +1 -0
  54. package/dist/lib/chunk-SpaceGenerator.mjs +107 -73
  55. package/dist/lib/chunk-SpaceGenerator.mjs.map +1 -1
  56. package/dist/lib/chunk-StatsPanel.mjs +28 -35
  57. package/dist/lib/chunk-StatsPanel.mjs.map +1 -1
  58. package/dist/lib/chunk-StockfishSpace.mjs +563 -0
  59. package/dist/lib/chunk-StockfishSpace.mjs.map +1 -0
  60. package/dist/lib/chunk-TidepoolSpace.mjs +544 -0
  61. package/dist/lib/chunk-TidepoolSpace.mjs.map +1 -0
  62. package/dist/lib/chunk-WeatherSpace.mjs +206 -0
  63. package/dist/lib/chunk-WeatherSpace.mjs.map +1 -0
  64. package/dist/lib/chunk-Wireframe.mjs +6 -6
  65. package/dist/lib/chunk-Wireframe.mjs.map +1 -1
  66. package/dist/lib/chunk-WorkerSpace.mjs +177 -0
  67. package/dist/lib/chunk-WorkerSpace.mjs.map +1 -0
  68. package/dist/lib/chunk-app-graph-builder.mjs +72 -40
  69. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
  70. package/dist/lib/chunk-create-space-from-template.mjs +55 -0
  71. package/dist/lib/chunk-create-space-from-template.mjs.map +1 -0
  72. package/dist/lib/chunk-errors.mjs +13 -0
  73. package/dist/lib/chunk-errors.mjs.map +1 -0
  74. package/dist/lib/chunk-graph-retention.mjs +14 -0
  75. package/dist/lib/chunk-graph-retention.mjs.map +1 -0
  76. package/dist/lib/chunk-insert-lorem-ipsum.mjs +2 -2
  77. package/dist/lib/chunk-log-recording.mjs +29 -1
  78. package/dist/lib/chunk-log-recording.mjs.map +1 -1
  79. package/dist/lib/chunk-open-page.mjs +29 -0
  80. package/dist/lib/chunk-open-page.mjs.map +1 -0
  81. package/dist/lib/chunk-operation-handler.mjs +5 -0
  82. package/dist/lib/chunk-operation-handler.mjs.map +1 -1
  83. package/dist/lib/chunk-react-surface.mjs +73 -71
  84. package/dist/lib/chunk-react-surface.mjs.map +1 -1
  85. package/dist/lib/chunk-settings.mjs +2 -2
  86. package/dist/lib/chunk-settings.mjs.map +1 -1
  87. package/dist/lib/chunk-snapshot.mjs +170 -0
  88. package/dist/lib/chunk-snapshot.mjs.map +1 -0
  89. package/dist/lib/chunk-space-templates.mjs +21 -0
  90. package/dist/lib/chunk-space-templates.mjs.map +1 -0
  91. package/dist/lib/chunk-stats-panel.mjs +1 -1
  92. package/dist/lib/chunk-stats-panel.mjs.map +1 -1
  93. package/dist/lib/chunk-undo.mjs +17 -0
  94. package/dist/lib/chunk-undo.mjs.map +1 -0
  95. package/dist/lib/chunk-view-state.mjs +37 -0
  96. package/dist/lib/chunk-view-state.mjs.map +1 -0
  97. package/dist/lib/components.mjs +68 -28
  98. package/dist/lib/components.mjs.map +1 -1
  99. package/dist/lib/containers.mjs +5 -2
  100. package/dist/lib/containers.mjs.map +1 -1
  101. package/dist/lib/index.mjs +8 -2
  102. package/dist/lib/meta.mjs +3 -2
  103. package/dist/lib/meta.mjs.map +1 -1
  104. package/dist/lib/operations.mjs +7 -1
  105. package/dist/lib/operations.mjs.map +1 -1
  106. package/dist/lib/plugin.mjs +2 -2
  107. package/dist/lib/plugin.mjs.map +1 -1
  108. package/dist/lib/translations.mjs +13 -4
  109. package/dist/lib/translations.mjs.map +1 -1
  110. package/dist/types/scripts/build-template-archive.d.ts +2 -0
  111. package/dist/types/scripts/build-template-archive.d.ts.map +1 -0
  112. package/dist/types/src/DebugPlugin.d.ts +2 -2
  113. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/DebugSurfaces.d.ts +4 -5
  115. package/dist/types/src/capabilities/DebugSurfaces.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/app-graph-builder.d.ts +31 -0
  117. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/app-graph-builder.test.d.ts +2 -0
  119. package/dist/types/src/capabilities/app-graph-builder.test.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/gen/browser.d.ts +14 -0
  121. package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/gen/node.d.ts +2 -0
  123. package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/gen/tauri.d.ts +14 -0
  125. package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/gen/workerd.d.ts +2 -0
  127. package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/graph-retention.d.ts +5 -0
  129. package/dist/types/src/capabilities/graph-retention.d.ts.map +1 -0
  130. package/dist/types/src/capabilities/index.d.ts +2 -0
  131. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/log-recording.d.ts +4 -0
  133. package/dist/types/src/capabilities/log-recording.d.ts.map +1 -1
  134. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  135. package/dist/types/src/capabilities/space-templates.d.ts +14 -0
  136. package/dist/types/src/capabilities/space-templates.d.ts.map +1 -0
  137. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts +4 -3
  138. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -1
  139. package/dist/types/src/components/SchemaTable/index.d.ts +1 -1
  140. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -1
  141. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +2 -1
  142. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  143. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  144. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  145. package/dist/types/src/components/SpaceGenerator/presets.d.ts +1 -1
  146. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  147. package/dist/types/src/components/index.d.ts +2 -2
  148. package/dist/types/src/components/index.d.ts.map +1 -1
  149. package/dist/types/src/containers/DebugConsole/DebugConsole.d.ts +12 -0
  150. package/dist/types/src/containers/DebugConsole/DebugConsole.d.ts.map +1 -0
  151. package/dist/types/src/containers/DebugConsole/DebugConsole.stories.d.ts +103 -0
  152. package/dist/types/src/containers/DebugConsole/DebugConsole.stories.d.ts.map +1 -0
  153. package/dist/types/src/containers/DebugConsole/cli.d.ts +24 -0
  154. package/dist/types/src/containers/DebugConsole/cli.d.ts.map +1 -0
  155. package/dist/types/src/containers/DebugConsole/index.d.ts +2 -0
  156. package/dist/types/src/containers/DebugConsole/index.d.ts.map +1 -0
  157. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +1 -1
  158. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -1
  159. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +1 -1
  160. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -1
  161. package/dist/types/src/containers/DebugPanel/DebugPanel.d.ts +30 -0
  162. package/dist/types/src/containers/DebugPanel/DebugPanel.d.ts.map +1 -0
  163. package/dist/types/src/containers/DebugPanel/DebugPanel.stories.d.ts +126 -0
  164. package/dist/types/src/containers/DebugPanel/DebugPanel.stories.d.ts.map +1 -0
  165. package/dist/types/src/containers/DebugPanel/DebugPanelContext.d.ts +16 -0
  166. package/dist/types/src/containers/DebugPanel/DebugPanelContext.d.ts.map +1 -0
  167. package/dist/types/src/containers/DebugPanel/DebugPanelHeader.d.ts +14 -0
  168. package/dist/types/src/containers/DebugPanel/DebugPanelHeader.d.ts.map +1 -0
  169. package/dist/types/src/containers/DebugPanel/DebugPanelMain.d.ts +6 -0
  170. package/dist/types/src/containers/DebugPanel/DebugPanelMain.d.ts.map +1 -0
  171. package/dist/types/src/containers/DebugPanel/DebugPanelSidebar.d.ts +6 -0
  172. package/dist/types/src/containers/DebugPanel/DebugPanelSidebar.d.ts.map +1 -0
  173. package/dist/types/src/containers/DebugPanel/index.d.ts +7 -0
  174. package/dist/types/src/containers/DebugPanel/index.d.ts.map +1 -0
  175. package/dist/types/src/containers/DebugPanel/view-state.d.ts +46 -0
  176. package/dist/types/src/containers/DebugPanel/view-state.d.ts.map +1 -0
  177. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.d.ts +10 -0
  178. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.d.ts.map +1 -0
  179. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.d.ts +114 -0
  180. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.d.ts.map +1 -0
  181. package/dist/types/src/containers/DebugPanelDrawer/index.d.ts +2 -0
  182. package/dist/types/src/containers/DebugPanelDrawer/index.d.ts.map +1 -0
  183. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.d.ts +11 -0
  184. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.d.ts.map +1 -0
  185. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.stories.d.ts +107 -0
  186. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.stories.d.ts.map +1 -0
  187. package/dist/types/src/containers/DebugPanelStatus/index.d.ts +2 -0
  188. package/dist/types/src/containers/DebugPanelStatus/index.d.ts.map +1 -0
  189. package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.d.ts.map +1 -1
  190. package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.stories.d.ts +13 -4
  191. package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.stories.d.ts.map +1 -1
  192. package/dist/types/src/containers/DebugPortSettings/index.d.ts +1 -1
  193. package/dist/types/src/containers/DebugPortSettings/index.d.ts.map +1 -1
  194. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts +2 -2
  195. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts.map +1 -1
  196. package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts +14 -5
  197. package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts.map +1 -1
  198. package/dist/types/src/containers/DebugSettings/index.d.ts +1 -1
  199. package/dist/types/src/containers/DebugSettings/index.d.ts.map +1 -1
  200. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +1 -1
  201. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -1
  202. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +1 -1
  203. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -1
  204. package/dist/types/src/containers/DebugStatus/index.d.ts +1 -1
  205. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -1
  206. package/dist/types/src/containers/LoggerPanel/LoggerPanel.d.ts +6 -0
  207. package/dist/types/src/containers/LoggerPanel/LoggerPanel.d.ts.map +1 -0
  208. package/dist/types/src/containers/LoggerPanel/LoggerPanel.stories.d.ts +107 -0
  209. package/dist/types/src/containers/LoggerPanel/LoggerPanel.stories.d.ts.map +1 -0
  210. package/dist/types/src/containers/LoggerPanel/index.d.ts +2 -0
  211. package/dist/types/src/containers/LoggerPanel/index.d.ts.map +1 -0
  212. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  213. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.stories.d.ts +13 -4
  214. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -1
  215. package/dist/types/src/containers/SpaceGenerator/index.d.ts +1 -1
  216. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -1
  217. package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts +5 -1
  218. package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts.map +1 -1
  219. package/dist/types/src/containers/StatsPanel/index.d.ts +1 -1
  220. package/dist/types/src/containers/StatsPanel/index.d.ts.map +1 -1
  221. package/dist/types/src/containers/Wireframe/Wireframe.d.ts +2 -2
  222. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -1
  223. package/dist/types/src/containers/Wireframe/index.d.ts +1 -1
  224. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -1
  225. package/dist/types/src/containers/index.d.ts +7 -1
  226. package/dist/types/src/containers/index.d.ts.map +1 -1
  227. package/dist/types/src/errors.d.ts +123 -0
  228. package/dist/types/src/errors.d.ts.map +1 -0
  229. package/dist/types/src/index.d.ts +2 -2
  230. package/dist/types/src/index.d.ts.map +1 -1
  231. package/dist/types/src/operations/DebugOperationHandlerSet.d.ts.map +1 -1
  232. package/dist/types/src/operations/create-space-from-template.d.ts +5 -0
  233. package/dist/types/src/operations/create-space-from-template.d.ts.map +1 -0
  234. package/dist/types/src/operations/errors.d.ts +33 -0
  235. package/dist/types/src/operations/errors.d.ts.map +1 -0
  236. package/dist/types/src/operations/index.d.ts +1 -1
  237. package/dist/types/src/operations/index.d.ts.map +1 -1
  238. package/dist/types/src/operations/open-page.d.ts +5 -0
  239. package/dist/types/src/operations/open-page.d.ts.map +1 -0
  240. package/dist/types/src/operations/snapshot.d.ts +5 -0
  241. package/dist/types/src/operations/snapshot.d.ts.map +1 -0
  242. package/dist/types/src/operations/snapshot.test.d.ts +2 -0
  243. package/dist/types/src/operations/snapshot.test.d.ts.map +1 -0
  244. package/dist/types/src/operations/undo.d.ts +5 -0
  245. package/dist/types/src/operations/undo.d.ts.map +1 -0
  246. package/dist/types/src/operations/undo.test.d.ts +2 -0
  247. package/dist/types/src/operations/undo.test.d.ts.map +1 -0
  248. package/dist/types/src/plugin.d.ts.map +1 -1
  249. package/dist/types/src/samples/crm/PipelineSpace.d.ts +21 -0
  250. package/dist/types/src/samples/crm/PipelineSpace.d.ts.map +1 -0
  251. package/dist/types/src/samples/crm/PipelineSpace.test.d.ts +2 -0
  252. package/dist/types/src/samples/crm/PipelineSpace.test.d.ts.map +1 -0
  253. package/dist/types/src/samples/crm/accounts.d.ts +55 -0
  254. package/dist/types/src/samples/crm/accounts.d.ts.map +1 -0
  255. package/dist/types/src/samples/crm/inbox.d.ts +14 -0
  256. package/dist/types/src/samples/crm/inbox.d.ts.map +1 -0
  257. package/dist/types/src/samples/crm/pipeline.d.ts +9 -0
  258. package/dist/types/src/samples/crm/pipeline.d.ts.map +1 -0
  259. package/dist/types/src/samples/crm/util.d.ts +14 -0
  260. package/dist/types/src/samples/crm/util.d.ts.map +1 -0
  261. package/dist/types/src/samples/incident/IncidentSpace.d.ts +21 -0
  262. package/dist/types/src/samples/incident/IncidentSpace.d.ts.map +1 -0
  263. package/dist/types/src/samples/incident/IncidentSpace.test.d.ts +2 -0
  264. package/dist/types/src/samples/incident/IncidentSpace.test.d.ts.map +1 -0
  265. package/dist/types/src/samples/incident/docs.d.ts +14 -0
  266. package/dist/types/src/samples/incident/docs.d.ts.map +1 -0
  267. package/dist/types/src/samples/incident/project.d.ts +16 -0
  268. package/dist/types/src/samples/incident/project.d.ts.map +1 -0
  269. package/dist/types/src/samples/incident/tasks.d.ts +9 -0
  270. package/dist/types/src/samples/incident/tasks.d.ts.map +1 -0
  271. package/dist/types/src/samples/incident/util.d.ts +32 -0
  272. package/dist/types/src/samples/incident/util.d.ts.map +1 -0
  273. package/dist/types/src/samples/index.d.ts +8 -0
  274. package/dist/types/src/samples/index.d.ts.map +1 -0
  275. package/dist/types/src/samples/review/ReviewSpace.d.ts +19 -0
  276. package/dist/types/src/samples/review/ReviewSpace.d.ts.map +1 -0
  277. package/dist/types/src/samples/review/ReviewSpace.test.d.ts +2 -0
  278. package/dist/types/src/samples/review/ReviewSpace.test.d.ts.map +1 -0
  279. package/dist/types/src/samples/review/assets.d.ts +19 -0
  280. package/dist/types/src/samples/review/assets.d.ts.map +1 -0
  281. package/dist/types/src/samples/review/util.d.ts +4 -0
  282. package/dist/types/src/samples/review/util.d.ts.map +1 -0
  283. package/dist/types/src/samples/review/work.d.ts +15 -0
  284. package/dist/types/src/samples/review/work.d.ts.map +1 -0
  285. package/dist/types/src/samples/stockfish/StockfishSpace.d.ts +27 -0
  286. package/dist/types/src/samples/stockfish/StockfishSpace.d.ts.map +1 -0
  287. package/dist/types/src/samples/stockfish/StockfishSpace.test.d.ts +2 -0
  288. package/dist/types/src/samples/stockfish/StockfishSpace.test.d.ts.map +1 -0
  289. package/dist/types/src/samples/stockfish/docs.d.ts +8 -0
  290. package/dist/types/src/samples/stockfish/docs.d.ts.map +1 -0
  291. package/dist/types/src/samples/stockfish/game.d.ts +10 -0
  292. package/dist/types/src/samples/stockfish/game.d.ts.map +1 -0
  293. package/dist/types/src/samples/stockfish/project.d.ts +31 -0
  294. package/dist/types/src/samples/stockfish/project.d.ts.map +1 -0
  295. package/dist/types/src/samples/stockfish/run.test.d.ts +2 -0
  296. package/dist/types/src/samples/stockfish/run.test.d.ts.map +1 -0
  297. package/dist/types/src/samples/stockfish/skill.d.ts +8 -0
  298. package/dist/types/src/samples/stockfish/skill.d.ts.map +1 -0
  299. package/dist/types/src/samples/stockfish/tasks.d.ts +12 -0
  300. package/dist/types/src/samples/stockfish/tasks.d.ts.map +1 -0
  301. package/dist/types/src/samples/stockfish/util.d.ts +14 -0
  302. package/dist/types/src/samples/stockfish/util.d.ts.map +1 -0
  303. package/dist/types/src/samples/tidepool/TidepoolSpace.d.ts +22 -0
  304. package/dist/types/src/samples/tidepool/TidepoolSpace.d.ts.map +1 -0
  305. package/dist/types/src/samples/tidepool/TidepoolSpace.test.d.ts +2 -0
  306. package/dist/types/src/samples/tidepool/TidepoolSpace.test.d.ts.map +1 -0
  307. package/dist/types/src/samples/tidepool/docs.d.ts +12 -0
  308. package/dist/types/src/samples/tidepool/docs.d.ts.map +1 -0
  309. package/dist/types/src/samples/tidepool/project.d.ts +20 -0
  310. package/dist/types/src/samples/tidepool/project.d.ts.map +1 -0
  311. package/dist/types/src/samples/tidepool/tasks.d.ts +14 -0
  312. package/dist/types/src/samples/tidepool/tasks.d.ts.map +1 -0
  313. package/dist/types/src/samples/tidepool/team.d.ts +9 -0
  314. package/dist/types/src/samples/tidepool/team.d.ts.map +1 -0
  315. package/dist/types/src/samples/tidepool/util.d.ts +14 -0
  316. package/dist/types/src/samples/tidepool/util.d.ts.map +1 -0
  317. package/dist/types/src/samples/weather/WeatherSpace.d.ts +21 -0
  318. package/dist/types/src/samples/weather/WeatherSpace.d.ts.map +1 -0
  319. package/dist/types/src/samples/weather/WeatherSpace.test.d.ts +2 -0
  320. package/dist/types/src/samples/weather/WeatherSpace.test.d.ts.map +1 -0
  321. package/dist/types/src/samples/weather/project.d.ts +20 -0
  322. package/dist/types/src/samples/weather/project.d.ts.map +1 -0
  323. package/dist/types/src/samples/weather/skill.d.ts +12 -0
  324. package/dist/types/src/samples/weather/skill.d.ts.map +1 -0
  325. package/dist/types/src/samples/weather/tasks.d.ts +9 -0
  326. package/dist/types/src/samples/weather/tasks.d.ts.map +1 -0
  327. package/dist/types/src/samples/weather/util.d.ts +16 -0
  328. package/dist/types/src/samples/weather/util.d.ts.map +1 -0
  329. package/dist/types/src/samples/worker/WorkerSpace.d.ts +22 -0
  330. package/dist/types/src/samples/worker/WorkerSpace.d.ts.map +1 -0
  331. package/dist/types/src/samples/worker/WorkerSpace.test.d.ts +2 -0
  332. package/dist/types/src/samples/worker/WorkerSpace.test.d.ts.map +1 -0
  333. package/dist/types/src/samples/worker/project.d.ts +18 -0
  334. package/dist/types/src/samples/worker/project.d.ts.map +1 -0
  335. package/dist/types/src/samples/worker/tasks.d.ts +9 -0
  336. package/dist/types/src/samples/worker/tasks.d.ts.map +1 -0
  337. package/dist/types/src/samples/worker/util.d.ts +14 -0
  338. package/dist/types/src/samples/worker/util.d.ts.map +1 -0
  339. package/dist/types/src/stories/SpaceTemplates.stories.d.ts +114 -0
  340. package/dist/types/src/stories/SpaceTemplates.stories.d.ts.map +1 -0
  341. package/dist/types/src/testing/index.d.ts +3 -0
  342. package/dist/types/src/testing/index.d.ts.map +1 -0
  343. package/dist/types/src/testing/stub-drawer-plugin.d.ts +8 -0
  344. package/dist/types/src/testing/stub-drawer-plugin.d.ts.map +1 -0
  345. package/dist/types/src/testing/stub-tools-plugin.d.ts +19 -0
  346. package/dist/types/src/testing/stub-tools-plugin.d.ts.map +1 -0
  347. package/dist/types/src/translations.d.ts +13 -4
  348. package/dist/types/src/translations.d.ts.map +1 -1
  349. package/dist/types/src/types/Debug.d.ts +2 -2
  350. package/dist/types/src/types/Debug.d.ts.map +1 -1
  351. package/dist/types/src/types/DebugNodes.d.ts +13 -1
  352. package/dist/types/src/types/DebugNodes.d.ts.map +1 -1
  353. package/dist/types/src/types/DebugOperation.d.ts +119 -0
  354. package/dist/types/src/types/DebugOperation.d.ts.map +1 -1
  355. package/dist/types/src/types/DebugSurface.d.ts +7 -0
  356. package/dist/types/src/types/DebugSurface.d.ts.map +1 -1
  357. package/dist/types/src/types/index.d.ts +6 -6
  358. package/dist/types/src/types/index.d.ts.map +1 -1
  359. package/dist/types/tsconfig.tsbuildinfo +1 -1
  360. package/dx.config.ts +3 -2
  361. package/package.json +129 -73
  362. package/scripts/build-template-archive.ts +65 -0
  363. package/src/DebugPlugin.ts +1 -1
  364. package/src/capabilities/DebugSurfaces.tsx +85 -71
  365. package/src/capabilities/app-graph-builder.test.ts +45 -0
  366. package/src/capabilities/app-graph-builder.ts +83 -46
  367. package/src/capabilities/gen/browser.ts +85 -0
  368. package/src/capabilities/gen/node.ts +15 -8
  369. package/src/capabilities/gen/tauri.ts +85 -0
  370. package/src/capabilities/gen/workerd.ts +11 -4
  371. package/src/capabilities/graph-retention.ts +23 -0
  372. package/src/capabilities/index.ts +18 -10
  373. package/src/capabilities/log-recording.ts +20 -1
  374. package/src/capabilities/operation-handler.ts +9 -0
  375. package/src/capabilities/react-surface.ts +33 -29
  376. package/src/capabilities/settings.ts +2 -2
  377. package/src/capabilities/space-templates.ts +25 -0
  378. package/src/capabilities/stats-panel.ts +1 -1
  379. package/src/components/SchemaTable/SchemaTable.tsx +44 -10
  380. package/src/components/SchemaTable/index.ts +1 -1
  381. package/src/components/SpaceGenerator/ObjectGenerator.tsx +22 -2
  382. package/src/components/SpaceGenerator/index.ts +2 -2
  383. package/src/components/SpaceGenerator/presets.ts +4 -4
  384. package/src/components/index.ts +2 -2
  385. package/src/containers/DebugConsole/DebugConsole.stories.tsx +29 -0
  386. package/src/containers/DebugConsole/DebugConsole.tsx +94 -0
  387. package/src/containers/DebugConsole/cli.ts +296 -0
  388. package/src/containers/DebugConsole/index.ts +5 -0
  389. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +44 -44
  390. package/src/containers/DebugObjectPanel/index.ts +1 -1
  391. package/src/containers/DebugPanel/DebugPanel.stories.tsx +118 -0
  392. package/src/containers/DebugPanel/DebugPanel.tsx +72 -0
  393. package/src/containers/DebugPanel/DebugPanelContext.ts +33 -0
  394. package/src/containers/DebugPanel/DebugPanelHeader.tsx +54 -0
  395. package/src/containers/DebugPanel/DebugPanelMain.tsx +116 -0
  396. package/src/containers/DebugPanel/DebugPanelSidebar.tsx +123 -0
  397. package/src/containers/DebugPanel/index.ts +10 -0
  398. package/src/containers/DebugPanel/view-state.ts +60 -0
  399. package/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.tsx +92 -0
  400. package/src/containers/DebugPanelDrawer/DebugPanelDrawer.tsx +72 -0
  401. package/src/containers/DebugPanelDrawer/index.ts +5 -0
  402. package/src/containers/DebugPanelStatus/DebugPanelStatus.stories.tsx +119 -0
  403. package/src/containers/DebugPanelStatus/DebugPanelStatus.tsx +167 -0
  404. package/src/containers/DebugPanelStatus/index.ts +5 -0
  405. package/src/containers/DebugPortSettings/DebugPortSettings.stories.tsx +2 -2
  406. package/src/containers/DebugPortSettings/DebugPortSettings.tsx +33 -40
  407. package/src/containers/DebugPortSettings/index.ts +1 -1
  408. package/src/containers/DebugSettings/DebugSettings.stories.tsx +1 -1
  409. package/src/containers/DebugSettings/DebugSettings.tsx +71 -64
  410. package/src/containers/DebugSettings/index.ts +1 -1
  411. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +39 -28
  412. package/src/containers/DebugSpaceObjectsPanel/index.ts +1 -1
  413. package/src/containers/DebugStatus/DebugStatus.tsx +10 -10
  414. package/src/containers/DebugStatus/index.ts +1 -1
  415. package/src/containers/LoggerPanel/LoggerPanel.stories.tsx +62 -0
  416. package/src/containers/LoggerPanel/LoggerPanel.tsx +28 -0
  417. package/src/containers/LoggerPanel/index.ts +5 -0
  418. package/src/containers/SpaceGenerator/SpaceGenerator.stories.tsx +8 -8
  419. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +102 -73
  420. package/src/containers/SpaceGenerator/index.ts +1 -1
  421. package/src/containers/StatsPanel/StatsPanel.tsx +32 -31
  422. package/src/containers/StatsPanel/index.ts +1 -1
  423. package/src/containers/Wireframe/Wireframe.tsx +8 -7
  424. package/src/containers/Wireframe/index.ts +1 -1
  425. package/src/containers/index.ts +22 -9
  426. package/src/errors.ts +23 -0
  427. package/src/index.ts +2 -2
  428. package/src/meta.ts +1 -1
  429. package/src/operations/DebugOperationHandlerSet.ts +5 -1
  430. package/src/operations/create-space-from-template.ts +57 -0
  431. package/src/operations/errors.ts +8 -0
  432. package/src/operations/index.ts +1 -1
  433. package/src/operations/open-page.ts +51 -0
  434. package/src/operations/snapshot.test.ts +57 -0
  435. package/src/operations/snapshot.ts +243 -0
  436. package/src/operations/undo.test.ts +19 -0
  437. package/src/operations/undo.ts +28 -0
  438. package/src/plugin.tsx +4 -0
  439. package/src/samples/crm/PipelineSpace.test.ts +55 -0
  440. package/src/samples/crm/PipelineSpace.ts +52 -0
  441. package/src/samples/crm/accounts.ts +153 -0
  442. package/src/samples/crm/inbox.ts +158 -0
  443. package/src/samples/crm/pipeline.ts +70 -0
  444. package/src/samples/crm/util.ts +18 -0
  445. package/src/samples/incident/IncidentSpace.test.ts +68 -0
  446. package/src/samples/incident/IncidentSpace.ts +61 -0
  447. package/src/samples/incident/docs.ts +111 -0
  448. package/src/samples/incident/project.ts +61 -0
  449. package/src/samples/incident/tasks.ts +101 -0
  450. package/src/samples/incident/util.ts +24 -0
  451. package/src/samples/index.ts +11 -0
  452. package/src/samples/review/ReviewSpace.test.ts +89 -0
  453. package/src/samples/review/ReviewSpace.ts +47 -0
  454. package/src/samples/review/assets.ts +123 -0
  455. package/src/samples/review/util.ts +10 -0
  456. package/src/samples/review/work.ts +249 -0
  457. package/src/samples/stockfish/StockfishSpace.test.ts +129 -0
  458. package/src/samples/stockfish/StockfishSpace.ts +70 -0
  459. package/src/samples/stockfish/docs.ts +65 -0
  460. package/src/samples/stockfish/game.ts +47 -0
  461. package/src/samples/stockfish/project.ts +87 -0
  462. package/src/samples/stockfish/run.test.ts +193 -0
  463. package/src/samples/stockfish/skill.ts +154 -0
  464. package/src/samples/stockfish/tasks.ts +306 -0
  465. package/src/samples/stockfish/util.ts +17 -0
  466. package/src/samples/tidepool/TidepoolSpace.test.ts +61 -0
  467. package/src/samples/tidepool/TidepoolSpace.ts +65 -0
  468. package/src/samples/tidepool/docs.ts +140 -0
  469. package/src/samples/tidepool/project.ts +57 -0
  470. package/src/samples/tidepool/tasks.ts +252 -0
  471. package/src/samples/tidepool/team.ts +87 -0
  472. package/src/samples/tidepool/util.ts +18 -0
  473. package/src/samples/weather/WeatherSpace.test.ts +93 -0
  474. package/src/samples/weather/WeatherSpace.ts +59 -0
  475. package/src/samples/weather/project.ts +76 -0
  476. package/src/samples/weather/skill.ts +45 -0
  477. package/src/samples/weather/tasks.ts +98 -0
  478. package/src/samples/weather/util.ts +21 -0
  479. package/src/samples/worker/WorkerSpace.test.ts +102 -0
  480. package/src/samples/worker/WorkerSpace.ts +56 -0
  481. package/src/samples/worker/project.ts +72 -0
  482. package/src/samples/worker/tasks.ts +119 -0
  483. package/src/samples/worker/util.ts +17 -0
  484. package/src/stories/SpaceTemplates.stories.tsx +105 -0
  485. package/src/testing/index.ts +6 -0
  486. package/src/testing/stub-drawer-plugin.ts +65 -0
  487. package/src/testing/stub-tools-plugin.tsx +95 -0
  488. package/src/translations.ts +15 -6
  489. package/src/types/Debug.ts +2 -2
  490. package/src/types/DebugNodes.ts +21 -1
  491. package/src/types/DebugOperation.ts +206 -0
  492. package/src/types/DebugSurface.ts +7 -0
  493. package/src/types/index.ts +6 -6
  494. package/dist/lib/chunk-LogStatus.mjs +0 -44
  495. package/dist/lib/chunk-LogStatus.mjs.map +0 -1
  496. package/dist/types/src/containers/LogStatus/LogStatus.d.ts +0 -6
  497. package/dist/types/src/containers/LogStatus/LogStatus.d.ts.map +0 -1
  498. package/dist/types/src/containers/LogStatus/index.d.ts +0 -2
  499. package/dist/types/src/containers/LogStatus/index.d.ts.map +0 -1
  500. package/src/containers/LogStatus/LogStatus.tsx +0 -51
  501. package/src/containers/LogStatus/index.ts +0 -5
@@ -0,0 +1,127 @@
1
+ import { n as DebugPanel, t as DebugPanelHeader } from "./chunk-DebugPanelHeader.mjs";
2
+ import { n as debugPanelAspect, t as DEBUG_PANEL_CONTEXT } from "./chunk-view-state.mjs";
3
+ import { meta } from "#meta";
4
+ import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
5
+ import * as Button from "@dxos/react-ui/Button";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import * as Hooks from "@dxos/app-framework/Hooks";
8
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
9
+ import * as UiHooks from "@dxos/react-ui/Hooks";
10
+ import { getDebugPortController } from "@dxos/react-client/devtools";
11
+ import { useViewState, useViewStateActions } from "@dxos/react-ui-attention";
12
+ import * as StatusBar from "@dxos/plugin-status-bar/StatusBar";
13
+ import * as FloatingPanel from "@dxos/react-ui/FloatingPanel";
14
+ //#region src/containers/DebugPanelStatus/DebugPanelStatus.tsx
15
+ /** Room for the log table to breathe; the console fits itself to whatever it is given. */
16
+ var DEFAULT_SIZE = {
17
+ width: 1024,
18
+ height: 384
19
+ };
20
+ var MIN_SIZE = {
21
+ width: 480,
22
+ height: 240
23
+ };
24
+ /** Clear of the status bar the panel opens from. */
25
+ var MARGIN = 8;
26
+ /**
27
+ * Status-bar button showing the debug panel: docked, it toggles the deck's bottom drawer; floating,
28
+ * it opens the panel as a window over the whole app — dragged, resized, folded to its title bar as
29
+ * the session needs, and left where it was put across reloads. The red dot marks a live agent debug
30
+ * port — an agent can evaluate code in this page — so it must be visible without opening settings.
31
+ */
32
+ var DebugPanelStatus = ({ controller = getDebugPortController() }) => {
33
+ const { t } = UiHooks.useTranslation(meta.profile.key);
34
+ const subscribe = useCallback((listener) => controller.subscribe(listener), [controller]);
35
+ const getStatus = useCallback(() => controller.getStatus(), [controller]);
36
+ const status = useSyncExternalStore(subscribe, getStatus);
37
+ const { invokePromise } = Hooks.useOperationInvoker();
38
+ const { position, size = DEFAULT_SIZE, mode = "docked" } = useViewState(debugPanelAspect, DEBUG_PANEL_CONTEXT);
39
+ const { update } = useViewStateActions(debugPanelAspect, DEBUG_PANEL_CONTEXT);
40
+ const label = status.running ? t("debug-port-status.running.label") : t("open-debug-panel.label");
41
+ const [floatingOpen, setFloatingOpen] = useState(false);
42
+ const previousModeRef = useRef(mode);
43
+ useEffect(() => {
44
+ if (previousModeRef.current === "docked" && mode === "floating") setFloatingOpen(true);
45
+ previousModeRef.current = mode;
46
+ }, [mode]);
47
+ const handleToggleDrawer = useCallback(() => void invokePromise(LayoutOperation.UpdateDrawer, { state: "toggle" }), [invokePromise]);
48
+ const handleModeChange = useCallback((next) => {
49
+ setFloatingOpen(false);
50
+ update((prev) => ({
51
+ ...prev,
52
+ mode: next
53
+ }));
54
+ if (next === "docked") invokePromise(LayoutOperation.UpdateDrawer, { state: "open" });
55
+ }, [update, invokePromise]);
56
+ const handlePositionChangeEnd = useCallback(({ position }) => update((prev) => ({
57
+ ...prev,
58
+ position
59
+ })), [update]);
60
+ const handleSizeChangeEnd = useCallback(({ size }) => update((prev) => ({
61
+ ...prev,
62
+ size
63
+ })), [update]);
64
+ const getAnchorPosition = useCallback(({ triggerRect, boundaryRect }) => {
65
+ if (position) return position;
66
+ const bounds = boundaryRect ?? new DOMRect(0, 0, window.innerWidth, window.innerHeight);
67
+ const bottom = triggerRect?.top ?? bounds.bottom;
68
+ return {
69
+ x: Math.max(0, bounds.left + (bounds.width - size.width) / 2),
70
+ y: Math.max(0, bottom - size.height - MARGIN)
71
+ };
72
+ }, [position, size]);
73
+ return /* @__PURE__ */ jsxs(FloatingPanel.Root, {
74
+ open: mode === "floating" && floatingOpen,
75
+ onOpenChange: ({ open }) => setFloatingOpen(open),
76
+ defaultSize: size,
77
+ minSize: MIN_SIZE,
78
+ getAnchorPosition,
79
+ persistRect: true,
80
+ closeOnEscape: true,
81
+ onPositionChangeEnd: handlePositionChangeEnd,
82
+ onSizeChangeEnd: handleSizeChangeEnd,
83
+ children: [/* @__PURE__ */ jsxs(StatusBar.Item, {
84
+ classNames: "relative",
85
+ children: [mode === "floating" ? /* @__PURE__ */ jsx(FloatingPanel.Trigger, {
86
+ asChild: true,
87
+ children: /* @__PURE__ */ jsx(Button.Root, {
88
+ variant: "ghost",
89
+ icon: "ph--terminal-window--regular",
90
+ iconOnly: true,
91
+ label
92
+ })
93
+ }) : /* @__PURE__ */ jsx(Button.Root, {
94
+ variant: "ghost",
95
+ icon: "ph--terminal-window--regular",
96
+ iconOnly: true,
97
+ label,
98
+ onClick: handleToggleDrawer
99
+ }), status.running && /* @__PURE__ */ jsx("span", {
100
+ role: "status",
101
+ "aria-label": t("debug-port-status.running.label"),
102
+ "data-testid": "debugPlugin.portIndicator",
103
+ className: "absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-red-500 pointer-events-none"
104
+ })]
105
+ }), /* @__PURE__ */ jsx(FloatingPanel.Content, { children: /* @__PURE__ */ jsxs(DebugPanel.Root, { children: [/* @__PURE__ */ jsxs(FloatingPanel.Header, {
106
+ classNames: "pl-1",
107
+ children: [/* @__PURE__ */ jsx(FloatingPanel.DragTrigger, { children: /* @__PURE__ */ jsx(FloatingPanel.Title, { children: t("debug-panel.title") }) }), /* @__PURE__ */ jsxs(FloatingPanel.Control, { children: [
108
+ /* @__PURE__ */ jsx(DebugPanelHeader, {
109
+ mode,
110
+ onModeChange: handleModeChange,
111
+ size: "sm"
112
+ }),
113
+ /* @__PURE__ */ jsx(FloatingPanel.StageTrigger, { stage: "minimized" }),
114
+ /* @__PURE__ */ jsx(FloatingPanel.StageTrigger, { stage: "default" }),
115
+ /* @__PURE__ */ jsx(FloatingPanel.CloseTrigger, {})
116
+ ] })]
117
+ }), /* @__PURE__ */ jsx(FloatingPanel.Body, {
118
+ classNames: "grid",
119
+ children: /* @__PURE__ */ jsx(DebugPanel.Body, {})
120
+ })] }) })]
121
+ });
122
+ };
123
+ DebugPanelStatus.displayName = "DebugPanelStatus";
124
+ //#endregion
125
+ export { DebugPanelStatus };
126
+
127
+ //# sourceMappingURL=chunk-DebugPanelStatus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-DebugPanelStatus.mjs","names":[],"sources":["../../src/containers/DebugPanelStatus/DebugPanelStatus.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';\n\nimport * as Hooks from '@dxos/app-framework/Hooks';\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as StatusBar from '@dxos/plugin-status-bar/StatusBar';\nimport { type DebugPortController, getDebugPortController } from '@dxos/react-client/devtools';\nimport { useViewState, useViewStateActions } from '@dxos/react-ui-attention';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as FloatingPanel from '@dxos/react-ui/FloatingPanel';\nimport * as UiHooks from '@dxos/react-ui/Hooks';\n\nimport { meta } from '#meta';\n\nimport {\n DEBUG_PANEL_CONTEXT,\n DebugPanel,\n DebugPanelHeader,\n type DebugPanelMode,\n debugPanelAspect,\n} from '../DebugPanel/index.ts';\n\n/** Room for the log table to breathe; the console fits itself to whatever it is given. */\nconst DEFAULT_SIZE: FloatingPanel.Size = { width: 1024, height: 384 };\n\nconst MIN_SIZE: FloatingPanel.Size = { width: 480, height: 240 };\n\n/** Clear of the status bar the panel opens from. */\nconst MARGIN = 8;\n\nexport type DebugPanelStatusProps = {\n /** Injectable for stories/tests; defaults to the page-wide controller. */\n controller?: DebugPortController;\n};\n\n/**\n * Status-bar button showing the debug panel: docked, it toggles the deck's bottom drawer; floating,\n * it opens the panel as a window over the whole app — dragged, resized, folded to its title bar as\n * the session needs, and left where it was put across reloads. The red dot marks a live agent debug\n * port — an agent can evaluate code in this page — so it must be visible without opening settings.\n */\nexport const DebugPanelStatus = ({ controller = getDebugPortController() }: DebugPanelStatusProps) => {\n const { t } = UiHooks.useTranslation(meta.profile.key);\n const subscribe = useCallback((listener: () => void) => controller.subscribe(listener), [controller]);\n const getStatus = useCallback(() => controller.getStatus(), [controller]);\n const status = useSyncExternalStore(subscribe, getStatus);\n const { invokePromise } = Hooks.useOperationInvoker();\n\n const { position, size = DEFAULT_SIZE, mode = 'docked' } = useViewState(debugPanelAspect, DEBUG_PANEL_CONTEXT);\n const { update } = useViewStateActions(debugPanelAspect, DEBUG_PANEL_CONTEXT);\n const label = status.running ? t('debug-port-status.running.label') : t('open-debug-panel.label');\n\n // Owned here rather than by the window so the drawer's float control can open it: the drawer\n // only flips the persisted mode, and a docked-to-floating flip while mounted is that request.\n const [floatingOpen, setFloatingOpen] = useState(false);\n const previousModeRef = useRef(mode);\n useEffect(() => {\n if (previousModeRef.current === 'docked' && mode === 'floating') {\n setFloatingOpen(true);\n }\n previousModeRef.current = mode;\n }, [mode]);\n\n const handleToggleDrawer = useCallback(\n () => void invokePromise(LayoutOperation.UpdateDrawer, { state: 'toggle' }),\n [invokePromise],\n );\n // Docking moves the panel: the window closes before the drawer opens so the two never show at once.\n const handleModeChange = useCallback(\n (next: DebugPanelMode) => {\n setFloatingOpen(false);\n update((prev) => ({ ...prev, mode: next }));\n if (next === 'docked') {\n void invokePromise(LayoutOperation.UpdateDrawer, { state: 'open' });\n }\n },\n [update, invokePromise],\n );\n const handlePositionChangeEnd = useCallback(\n ({ position }: { position: FloatingPanel.Point }) => update((prev) => ({ ...prev, position })),\n [update],\n );\n\n const handleSizeChangeEnd = useCallback(\n ({ size }: { size: FloatingPanel.Size }) => update((prev) => ({ ...prev, size })),\n [update],\n );\n // First opening: centred above the status bar, where the popover it replaces used to sit. A\n // persisted position wins from then on.\n const getAnchorPosition = useCallback(\n ({ triggerRect, boundaryRect }: { triggerRect: DOMRect | null; boundaryRect: DOMRect | null }) => {\n if (position) {\n return position;\n }\n const bounds = boundaryRect ?? new DOMRect(0, 0, window.innerWidth, window.innerHeight);\n const bottom = triggerRect?.top ?? bounds.bottom;\n return {\n x: Math.max(0, bounds.left + (bounds.width - size.width) / 2),\n y: Math.max(0, bottom - size.height - MARGIN),\n };\n },\n [position, size],\n );\n\n return (\n <FloatingPanel.Root\n open={mode === 'floating' && floatingOpen}\n onOpenChange={({ open }) => setFloatingOpen(open)}\n defaultSize={size}\n minSize={MIN_SIZE}\n getAnchorPosition={getAnchorPosition}\n persistRect\n closeOnEscape\n onPositionChangeEnd={handlePositionChangeEnd}\n onSizeChangeEnd={handleSizeChangeEnd}\n >\n {/* IconButton is the direct trigger child so the trigger ref/handlers/ARIA attach to the button, not the container. */}\n <StatusBar.Item classNames='relative'>\n {mode === 'floating' ? (\n <FloatingPanel.Trigger asChild>\n <Button.Root variant='ghost' icon='ph--terminal-window--regular' iconOnly label={label} />\n </FloatingPanel.Trigger>\n ) : (\n <Button.Root\n variant='ghost'\n icon='ph--terminal-window--regular'\n iconOnly\n label={label}\n onClick={handleToggleDrawer}\n />\n )}\n {status.running && (\n <span\n role='status'\n aria-label={t('debug-port-status.running.label')}\n data-testid='debugPlugin.portIndicator'\n className='absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-red-500 pointer-events-none'\n />\n )}\n </StatusBar.Item>\n <FloatingPanel.Content>\n <DebugPanel.Root>\n <FloatingPanel.Header classNames='pl-1'>\n <FloatingPanel.DragTrigger>\n <FloatingPanel.Title>{t('debug-panel.title')}</FloatingPanel.Title>\n </FloatingPanel.DragTrigger>\n {/* Fold and restore only: a debug panel over the whole app is a window the reader would resize. */}\n <FloatingPanel.Control>\n <DebugPanelHeader mode={mode} onModeChange={handleModeChange} size='sm' />\n <FloatingPanel.StageTrigger stage='minimized' />\n <FloatingPanel.StageTrigger stage='default' />\n <FloatingPanel.CloseTrigger />\n </FloatingPanel.Control>\n </FloatingPanel.Header>\n <FloatingPanel.Body classNames='grid'>\n <DebugPanel.Body />\n </FloatingPanel.Body>\n </DebugPanel.Root>\n </FloatingPanel.Content>\n </FloatingPanel.Root>\n );\n};\n\nDebugPanelStatus.displayName = 'DebugPanelStatus';\n"],"mappings":"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"}
@@ -1,18 +1,24 @@
1
1
  import { Settings } from "#types";
2
2
  import { meta } from "#meta";
3
+ import { log } from "@dxos/log";
4
+ import { gzip, setDeep } from "@dxos/util";
3
5
  import { useCallback, useEffect, useMemo, useState, useSyncExternalStore } from "react";
4
- import { Flex, IconButton, Input, Select, Toast, useFileDownload, useTranslation } from "@dxos/react-ui";
5
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
- import { setDeep } from "@dxos/util";
6
+ import * as Button from "@dxos/react-ui/Button";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
8
  import { useClient } from "@dxos/react-client";
8
- import { Logger } from "@dxos/react-ui-debug";
9
+ import * as Hooks from "@dxos/react-ui/Hooks";
10
+ import { getDebugPortController } from "@dxos/react-client/devtools";
9
11
  import * as AppSpace from "@dxos/app-toolkit/AppSpace";
10
12
  import { SaveConfig, Storage, defs } from "@dxos/config";
11
- import { log } from "@dxos/log";
12
13
  import { MANUAL_LOG_EXPORT_MAX_BYTES } from "@dxos/log-store-idb";
13
14
  import { Form } from "@dxos/react-ui-form";
15
+ import * as Input from "@dxos/react-ui/Input";
16
+ import * as Select from "@dxos/react-ui/Select";
17
+ import * as UiToast from "@dxos/react-ui/Toast";
14
18
  import { TRACE_ALL_KEY } from "@dxos/tracing";
15
- import { getDebugPortController } from "@dxos/react-client/devtools";
19
+ import { Logger } from "@dxos/react-ui-debug";
20
+ import * as Field from "@dxos/react-ui/Field";
21
+ import * as Layout from "@dxos/react-ui/Layout";
16
22
  //#region src/containers/DebugPortSettings/DebugPortSettings.tsx
17
23
  /**
18
24
  * Scopes the panel to the controller's own entries.
@@ -29,25 +35,23 @@ var CONTROLLER_FILE = "devtools/debug-port-controller";
29
35
  * flipped, the session id is regenerated on every activation, and nothing survives a reload.
30
36
  */
31
37
  var DebugPortSettings = ({ controller = getDebugPortController(), disabled }) => {
32
- const { t } = useTranslation(meta.profile.key);
38
+ const { t } = Hooks.useTranslation(meta.profile.key);
33
39
  const subscribe = useCallback((listener) => controller.subscribe(listener), [controller]);
34
40
  const getStatus = useCallback(() => controller.getStatus(), [controller]);
35
41
  const status = useSyncExternalStore(subscribe, getStatus);
36
42
  const handleToggle = useCallback((checked) => checked ? controller.start({ persist: true }) : controller.stop(), [controller]);
37
- const handleCopy = useCallback(() => {
38
- if (status.session) navigator.clipboard.writeText(status.session);
39
- }, [status.session]);
40
- return /* @__PURE__ */ jsxs(Form.Section, {
41
- title: t("settings.debug-port.section.label"),
43
+ return /* @__PURE__ */ jsxs(Form.FieldSet, {
44
+ label: t("settings.debug-port.section.label"),
42
45
  description: t("settings.debug-port.section.description"),
43
- children: [/* @__PURE__ */ jsx(Form.Row, {
46
+ children: [/* @__PURE__ */ jsx(Form.Field, {
47
+ standalone: true,
44
48
  label: t("settings.debug-port.label"),
45
49
  description: t("settings.debug-port.description"),
46
- children: /* @__PURE__ */ jsxs(Flex, {
50
+ children: /* @__PURE__ */ jsxs(Layout.Flex, {
47
51
  gap: "md",
48
52
  align: "center",
49
53
  children: [status.running && /* @__PURE__ */ jsxs("span", {
50
- className: "text-sm text-description",
54
+ className: "text-sm text-fg-muted",
51
55
  children: [
52
56
  t("settings.debug-port.running.label"),
53
57
  " ",
@@ -56,38 +60,31 @@ var DebugPortSettings = ({ controller = getDebugPortController(), disabled }) =>
56
60
  children: status.origin
57
61
  })
58
62
  ]
59
- }), /* @__PURE__ */ jsx(Input.Root, { children: /* @__PURE__ */ jsx(Input.Switch, {
63
+ }), /* @__PURE__ */ jsx(Field.Root, { children: /* @__PURE__ */ jsx(Input.Switch, {
60
64
  checked: status.running,
61
65
  disabled,
62
- onCheckedChange: handleToggle
66
+ onCheckedChange: ({ checked }) => handleToggle(checked)
63
67
  }) })]
64
68
  })
65
- }), status.running && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Form.Row, {
69
+ }), status.running && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Form.Field, {
66
70
  standalone: true,
67
71
  label: t("settings.debug-port.session.label"),
68
72
  description: t("settings.debug-port.session.description"),
69
- children: /* @__PURE__ */ jsxs(Flex, {
70
- gap: "sm",
71
- align: "center",
72
- children: [/* @__PURE__ */ jsx("span", {
73
- className: "grow truncate font-mono text-sm",
74
- children: status.session
75
- }), /* @__PURE__ */ jsx(IconButton, {
76
- icon: "ph--copy--regular",
77
- iconOnly: true,
78
- label: t("settings.debug-port.copy-session.label"),
79
- onClick: handleCopy
80
- })]
73
+ children: /* @__PURE__ */ jsx(Input.Root, {
74
+ value: status.session ?? "",
75
+ disabled: true,
76
+ variant: "mono",
77
+ copyable: true,
78
+ "aria-label": t("settings.debug-port.session.label")
81
79
  })
82
- }), /* @__PURE__ */ jsx(Form.Row, {
80
+ }), /* @__PURE__ */ jsx(Form.Field, {
83
81
  standalone: true,
84
82
  label: t("settings.debug-port.log.label"),
85
- classNames: "md:grid-cols-1 md:[grid-template-areas:\"header\"\"description\"\"control\"\"validation\"]",
86
83
  children: /* @__PURE__ */ jsx(Logger.Root, {
87
84
  rowFilter: isDebugPortRow,
88
85
  children: /* @__PURE__ */ jsx(Logger.Content, {
89
86
  classNames: "max-h-[16lh]",
90
- children: /* @__PURE__ */ jsx(Logger.List, {})
87
+ children: /* @__PURE__ */ jsx(Logger.List, { checkable: false })
91
88
  })
92
89
  })
93
90
  })] })]
@@ -101,10 +98,10 @@ var StorageAdapters = {
101
98
  opfs: defs.Runtime_Client_Storage_StorageDriver.WEBFS,
102
99
  idb: defs.Runtime_Client_Storage_StorageDriver.IDB
103
100
  };
104
- var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
105
- const { t } = useTranslation(meta.profile.key);
101
+ var DebugSettings = ({ settings, onSettingsChange, scope, logStore, onUpload }) => {
102
+ const { t } = Hooks.useTranslation(meta.profile.key);
106
103
  const [toast, setToast] = useState();
107
- const download = useFileDownload();
104
+ const download = Hooks.useFileDownload();
108
105
  const [storageConfig, setStorageConfig] = useState({});
109
106
  const client = useClient();
110
107
  useEffect(() => {
@@ -126,7 +123,7 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
126
123
  log.error("no default space available for upload", void 0, {
127
124
  "~LogMeta": "~LogMeta",
128
125
  F: __dxlog_file,
129
- L: 73,
126
+ L: 77,
130
127
  S: void 0
131
128
  });
132
129
  return;
@@ -136,7 +133,7 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
136
133
  log.error("diagnostics failed to upload to IPFS", void 0, {
137
134
  "~LogMeta": "~LogMeta",
138
135
  F: __dxlog_file,
139
- L: 78,
136
+ L: 82,
140
137
  S: void 0
141
138
  });
142
139
  return;
@@ -154,7 +151,7 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
154
151
  log.info("diagnostics", { url }, {
155
152
  "~LogMeta": "~LogMeta",
156
153
  F: __dxlog_file,
157
- L: 93,
154
+ L: 97,
158
155
  S: void 0
159
156
  });
160
157
  }
@@ -166,8 +163,8 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
166
163
  t
167
164
  ]);
168
165
  const handleDownloadLogs = useCallback(async () => {
169
- const file = await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES });
170
- const fileName = `composer-logs-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-")}.ndjson`;
166
+ const file = await gzip(await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES }));
167
+ const fileName = `composer-logs-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-")}.ndjson.gz`;
171
168
  download(file, fileName);
172
169
  }, [download, logStore]);
173
170
  const handleRepair = useCallback(async () => {
@@ -220,85 +217,99 @@ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
220
217
  readonly: !onSettingsChange,
221
218
  children: /* @__PURE__ */ jsx(Form.Viewport, {
222
219
  scroll: true,
223
- children: /* @__PURE__ */ jsxs(Form.Content, { children: [/* @__PURE__ */ jsxs(Form.Section, {
224
- title: meta.profile.name ?? meta.profile.key,
220
+ children: /* @__PURE__ */ jsxs(Form.Content, { children: [/* @__PURE__ */ jsxs(Form.FieldSet, {
221
+ label: meta.profile.name ?? meta.profile.key,
222
+ actions: scope,
225
223
  children: [
226
- /* @__PURE__ */ jsx(Form.Row, {
224
+ /* @__PURE__ */ jsx(Form.Field, {
227
225
  label: t("settings.wireframe.label"),
228
226
  description: t("settings.wireframe.description"),
229
- children: /* @__PURE__ */ jsx(Input.Root, { children: /* @__PURE__ */ jsx(Input.Switch, {
227
+ children: /* @__PURE__ */ jsx(Input.Switch, {
230
228
  disabled: !onSettingsChange,
231
229
  checked: settings.wireframe,
232
- onCheckedChange: handleWireframeChange
233
- }) })
230
+ onCheckedChange: ({ checked }) => handleWireframeChange(checked)
231
+ })
234
232
  }),
235
- /* @__PURE__ */ jsx(Form.Row, {
233
+ /* @__PURE__ */ jsx(Form.Field, {
236
234
  label: t("settings.trace-all.label"),
237
235
  description: t("settings.trace-all.description"),
238
- children: /* @__PURE__ */ jsx(Input.Root, { children: /* @__PURE__ */ jsx(Input.Switch, {
236
+ children: /* @__PURE__ */ jsx(Input.Switch, {
239
237
  disabled: !onSettingsChange,
240
238
  checked: traceAll,
241
- onCheckedChange: handleTraceAllChange
242
- }) })
239
+ onCheckedChange: ({ checked }) => handleTraceAllChange(checked)
240
+ })
243
241
  }),
244
- /* @__PURE__ */ jsx(Form.Row, {
242
+ /* @__PURE__ */ jsx(Form.Field, {
243
+ standalone: true,
245
244
  label: t("settings.tracing-panel.label"),
246
245
  description: t("settings.tracing-panel.description"),
247
- children: /* @__PURE__ */ jsx(IconButton, {
246
+ children: /* @__PURE__ */ jsx(Button.Root, {
248
247
  icon: "ph--arrow-square-out--regular",
249
248
  iconOnly: true,
250
249
  label: t("settings.tracing-panel.label"),
251
250
  onClick: handleOpenTracingPanel
252
251
  })
253
252
  }),
254
- /* @__PURE__ */ jsx(Form.Row, {
253
+ /* @__PURE__ */ jsx(Form.Field, {
254
+ standalone: true,
255
255
  label: t("settings.download-diagnostics.label"),
256
256
  description: t("settings.download-diagnostics.description"),
257
- children: /* @__PURE__ */ jsx(IconButton, {
257
+ children: /* @__PURE__ */ jsx(Button.Root, {
258
258
  icon: "ph--download-simple--regular",
259
259
  iconOnly: true,
260
260
  label: t("settings.download-diagnostics.label"),
261
261
  onClick: handleDownload
262
262
  })
263
263
  }),
264
- /* @__PURE__ */ jsx(Form.Row, {
264
+ /* @__PURE__ */ jsx(Form.Field, {
265
+ standalone: true,
265
266
  label: t("settings.download-logs.label"),
266
267
  description: t("settings.download-logs.description"),
267
- children: /* @__PURE__ */ jsx(IconButton, {
268
+ children: /* @__PURE__ */ jsx(Button.Root, {
268
269
  icon: "ph--download-simple--regular",
269
270
  iconOnly: true,
270
271
  label: t("settings.download-logs.label"),
271
272
  onClick: handleDownloadLogs
272
273
  })
273
274
  }),
274
- /* @__PURE__ */ jsx(Form.Row, {
275
+ /* @__PURE__ */ jsx(Form.Field, {
276
+ standalone: true,
275
277
  label: t("settings.repair.label"),
276
278
  description: t("settings.repair.description"),
277
- children: /* @__PURE__ */ jsx(IconButton, {
279
+ children: /* @__PURE__ */ jsx(Button.Root, {
278
280
  icon: "ph--first-aid-kit--regular",
279
281
  iconOnly: true,
280
282
  label: t("settings.repair.label"),
281
283
  onClick: handleRepair
282
284
  })
283
285
  }),
284
- toast && /* @__PURE__ */ jsxs(Toast.Root, { children: [/* @__PURE__ */ jsx(Toast.Title, {
285
- icon: "ph--gift--duotone",
286
- children: /* @__PURE__ */ jsx("span", { children: toast.title })
287
- }), toast.description && /* @__PURE__ */ jsx(Toast.Description, { children: toast.description })] }),
288
- /* @__PURE__ */ jsx(Form.Row, {
286
+ toast && /* @__PURE__ */ jsxs(UiToast.Root, {
287
+ defaultOpen: true,
288
+ duration: 5e3,
289
+ onOpenChange: (open) => !open && setToast(void 0),
290
+ children: [/* @__PURE__ */ jsx(UiToast.Header, {
291
+ icon: "ph--gift--duotone",
292
+ children: toast.title
293
+ }), toast.description && /* @__PURE__ */ jsx(UiToast.Description, { children: toast.description })]
294
+ }),
295
+ /* @__PURE__ */ jsx(Form.Field, {
289
296
  label: t("settings.choose-storage-adaptor.label"),
290
297
  description: t("settings.choose-storage-adaptor.description"),
291
298
  children: /* @__PURE__ */ jsxs(Select.Root, {
292
299
  disabled: !onSettingsChange,
293
- value: Object.entries(StorageAdapters).find(([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore)?.[0],
294
- onValueChange: handleStorageAdapterChange,
295
- children: [/* @__PURE__ */ jsx(Select.TriggerButton, {
300
+ value: Object.entries(StorageAdapters).filter(([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore).map(([name]) => name).slice(0, 1),
301
+ onValueChange: ({ value: [value] }) => value && handleStorageAdapterChange(value),
302
+ items: Object.keys(StorageAdapters).map((key) => ({
303
+ value: key,
304
+ label: t(`settings.storage-adaptor.${key}.label`)
305
+ })),
306
+ children: [/* @__PURE__ */ jsx(Select.Trigger, {
296
307
  disabled: !onSettingsChange,
297
308
  placeholder: t("settings.data-store.label")
298
- }), /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsxs(Select.Content, { children: [/* @__PURE__ */ jsx(Select.Viewport, { children: Object.keys(StorageAdapters).map((key) => /* @__PURE__ */ jsx(Select.Option, {
309
+ }), /* @__PURE__ */ jsx(Select.Content, { children: Object.keys(StorageAdapters).map((key) => /* @__PURE__ */ jsx(Select.Item, { item: {
299
310
  value: key,
300
- children: t(`settings.storage-adaptor.${key}.label`)
301
- }, key)) }), /* @__PURE__ */ jsx(Select.Arrow, {})] }) })]
311
+ label: t(`settings.storage-adaptor.${key}.label`)
312
+ } }, key)) })]
302
313
  })
303
314
  })
304
315
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-DebugSettings.mjs","names":[],"sources":["../../src/containers/DebugPortSettings/DebugPortSettings.tsx","../../src/containers/DebugSettings/DebugSettings.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useSyncExternalStore } from 'react';\n\nimport { type DebugPortController, getDebugPortController } from '@dxos/react-client/devtools';\nimport { Flex, IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { Logger, type LogRow } from '@dxos/react-ui-debug';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\n\n/**\n * Scopes the panel to the controller's own entries.\n *\n * A display filter, not `initialFilter`: that one narrows what the process-wide buffer captures,\n * which would starve the main log companion reading the same buffer.\n */\nconst isDebugPortRow = (row: LogRow): boolean => (row.entry.meta?.F ?? '').includes(CONTROLLER_FILE);\n\nconst CONTROLLER_FILE = 'devtools/debug-port-controller';\n\nexport type DebugPortSettingsProps = {\n /** Injectable for stories/tests; defaults to the page-wide controller. */\n controller?: DebugPortController;\n /** The switch starts arbitrary eval, so it follows the form's readonly state like every other control. */\n disabled?: boolean;\n};\n\n/**\n * Start/stop the agent debug port and surface the session id an agent needs.\n *\n * The port evaluates agent-supplied code against the live client, so it is off until this switch is\n * flipped, the session id is regenerated on every activation, and nothing survives a reload.\n */\nexport const DebugPortSettings = ({ controller = getDebugPortController(), disabled }: DebugPortSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n const subscribe = useCallback((listener: () => void) => controller.subscribe(listener), [controller]);\n const getStatus = useCallback(() => controller.getStatus(), [controller]);\n const status = useSyncExternalStore(subscribe, getStatus);\n\n // `persist` keeps the session across reloads of this tab: an OAuth redirect or a HMR reload would\n // otherwise strand the agent mid-investigation with a dead session id.\n const handleToggle = useCallback(\n (checked: boolean) => (checked ? controller.start({ persist: true }) : controller.stop()),\n [controller],\n );\n\n const handleCopy = useCallback(() => {\n if (status.session) {\n void navigator.clipboard.writeText(status.session);\n }\n }, [status.session]);\n\n return (\n <Form.Section\n title={t('settings.debug-port.section.label')}\n description={t('settings.debug-port.section.description')}\n >\n <Form.Row label={t('settings.debug-port.label')} description={t('settings.debug-port.description')}>\n <Flex gap='md' align='center'>\n {status.running && (\n <span className='text-sm text-description'>\n {t('settings.debug-port.running.label')} <span className='font-mono'>{status.origin}</span>\n </span>\n )}\n <Input.Root>\n <Input.Switch checked={status.running} disabled={disabled} onCheckedChange={handleToggle} />\n </Input.Root>\n </Flex>\n </Form.Row>\n\n {status.running && (\n <>\n <Form.Row\n standalone\n label={t('settings.debug-port.session.label')}\n description={t('settings.debug-port.session.description')}\n >\n <Flex gap='sm' align='center'>\n <span className='grow truncate font-mono text-sm'>{status.session}</span>\n <IconButton\n icon='ph--copy--regular'\n iconOnly\n label={t('settings.debug-port.copy-session.label')}\n onClick={handleCopy}\n />\n </Flex>\n </Form.Row>\n\n {/* The settings variant puts the control in a right-hand column; log rows need the full\n width, so this row collapses to a single column. */}\n <Form.Row\n standalone\n label={t('settings.debug-port.log.label')}\n classNames='md:grid-cols-1 md:[grid-template-areas:\"header\"\"description\"\"control\"\"validation\"]'\n >\n {/* Only the rows: a settings card has no room for the panel's toolbar, levels or filter. */}\n <Logger.Root rowFilter={isDebugPortRow}>\n <Logger.Content classNames='max-h-[16lh]'>\n <Logger.List />\n </Logger.Content>\n </Logger.Root>\n </Form.Row>\n </>\n )}\n </Form.Section>\n );\n};\n\nDebugPortSettings.displayName = 'DebugPortSettings';\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppSpace from '@dxos/app-toolkit/AppSpace';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type ConfigInit, SaveConfig, Storage, defs } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { type IdbLogStore, MANUAL_LOG_EXPORT_MAX_BYTES } from '@dxos/log-store-idb';\nimport { useClient } from '@dxos/react-client';\nimport { IconButton, Input, Select, Toast, useFileDownload, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { TRACE_ALL_KEY } from '@dxos/tracing';\nimport { setDeep } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { Settings } from '#types';\n\nimport { DebugPortSettings } from '../DebugPortSettings';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime_Client_Storage_StorageDriver.WEBFS,\n idb: defs.Runtime_Client_Storage_StorageDriver.IDB,\n} as const;\n\nexport type DebugSettingsProps = AppSurface.SettingsProps<\n Settings.Settings,\n {\n logStore: IdbLogStore;\n onUpload?: AppCapabilities.FileUploader;\n }\n>;\n\nexport const DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }: DebugSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n const [toast, setToast] = useState<Toast>();\n const download = useFileDownload();\n const [storageConfig, setStorageConfig] = useState<ConfigInit>({});\n const client = useClient();\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = useCallback(\n (toast: Toast) => {\n setToast(toast);\n const timer = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(timer);\n },\n [setToast],\n );\n\n const handleDownload = useCallback(async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], {\n type: 'text/plain',\n });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (onUpload) {\n const defaultSpace = AppSpace.getDefaultSpace(client);\n if (!defaultSpace) {\n log.error('no default space available for upload');\n return;\n }\n const info = await onUpload(defaultSpace.db, new File([file], fileName));\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n log.info('diagnostics', { url });\n }\n }, [client, download, handleToast, onUpload, t]);\n\n const handleDownloadLogs = useCallback(async () => {\n const file = await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES });\n const fileName = `composer-logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.ndjson`;\n download(file, fileName);\n }, [download, logStore]);\n\n const handleRepair = useCallback(async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({\n title: t('settings.repair-success.message'),\n description: JSON.stringify(info, undefined, 2),\n });\n } catch (err: any) {\n handleToast({\n title: t('settings.repair-failed.message'),\n description: err.message,\n });\n }\n }, [client, handleToast, t]);\n\n const handleWireframeChange = useCallback(\n (checked: boolean) => onSettingsChange?.((s) => ({ ...s, wireframe: !!checked })),\n [onSettingsChange],\n );\n\n const traceAll = useMemo(\n () => settings.traceAll ?? (typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true'),\n [settings.traceAll],\n );\n\n const handleTraceAllChange = useCallback(\n (checked: boolean) => {\n const value = !!checked;\n localStorage.setItem(TRACE_ALL_KEY, String(value));\n onSettingsChange?.((s) => ({ ...s, traceAll: value }));\n },\n [onSettingsChange],\n );\n\n const handleOpenTracingPanel = useCallback(() => {\n window.open('about:blank', '_blank');\n }, []);\n\n const handleStorageAdapterChange = useCallback(\n (value: string) => {\n if (confirm(t('settings.storage-adapter.changed-alert.message'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n },\n [storageConfig, t],\n );\n\n return (\n <Form.Root schema={Settings.Settings} values={settings} variant='settings' readonly={!onSettingsChange}>\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Form.Row label={t('settings.wireframe.label')} description={t('settings.wireframe.description')}>\n <Input.Root>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={settings.wireframe}\n onCheckedChange={handleWireframeChange}\n />\n </Input.Root>\n </Form.Row>\n <Form.Row label={t('settings.trace-all.label')} description={t('settings.trace-all.description')}>\n <Input.Root>\n <Input.Switch disabled={!onSettingsChange} checked={traceAll} onCheckedChange={handleTraceAllChange} />\n </Input.Root>\n </Form.Row>\n <Form.Row label={t('settings.tracing-panel.label')} description={t('settings.tracing-panel.description')}>\n <IconButton\n icon='ph--arrow-square-out--regular'\n iconOnly\n label={t('settings.tracing-panel.label')}\n onClick={handleOpenTracingPanel}\n />\n </Form.Row>\n <Form.Row\n label={t('settings.download-diagnostics.label')}\n description={t('settings.download-diagnostics.description')}\n >\n <IconButton\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-diagnostics.label')}\n onClick={handleDownload}\n />\n </Form.Row>\n <Form.Row label={t('settings.download-logs.label')} description={t('settings.download-logs.description')}>\n <IconButton\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-logs.label')}\n onClick={handleDownloadLogs}\n />\n </Form.Row>\n <Form.Row label={t('settings.repair.label')} description={t('settings.repair.description')}>\n <IconButton\n icon='ph--first-aid-kit--regular'\n iconOnly\n label={t('settings.repair.label')}\n onClick={handleRepair}\n />\n </Form.Row>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <Toast.Root>\n <Toast.Title icon='ph--gift--duotone'>\n <span>{toast.title}</span>\n </Toast.Title>\n {toast.description && <Toast.Description>{toast.description}</Toast.Description>}\n </Toast.Root>\n )}\n\n <Form.Row\n label={t('settings.choose-storage-adaptor.label')}\n description={t('settings.choose-storage-adaptor.description')}\n >\n <Select.Root\n disabled={!onSettingsChange}\n value={\n Object.entries(StorageAdapters).find(\n ([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,\n )?.[0]\n }\n onValueChange={handleStorageAdapterChange}\n >\n <Select.TriggerButton disabled={!onSettingsChange} placeholder={t('settings.data-store.label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Option key={key} value={key}>\n {t(`settings.storage-adaptor.${key}.label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Form.Row>\n </Form.Section>\n\n <DebugPortSettings disabled={!onSettingsChange} />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nconst updateConfig = (config: ConfigInit, setConfig: (newConfig: ConfigInit) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n\nDebugSettings.displayName = 'DebugSettings';\n"],"mappings":"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"}
1
+ {"version":3,"file":"chunk-DebugSettings.mjs","names":[],"sources":["../../src/containers/DebugPortSettings/DebugPortSettings.tsx","../../src/containers/DebugSettings/DebugSettings.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useSyncExternalStore } from 'react';\n\nimport { type DebugPortController, getDebugPortController } from '@dxos/react-client/devtools';\nimport { Logger, type LogRow } from '@dxos/react-ui-debug';\nimport { Form } from '@dxos/react-ui-form';\nimport * as Field from '@dxos/react-ui/Field';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Layout from '@dxos/react-ui/Layout';\n\nimport { meta } from '#meta';\n\n/**\n * Scopes the panel to the controller's own entries.\n *\n * A display filter, not `initialFilter`: that one narrows what the process-wide buffer captures,\n * which would starve the main log companion reading the same buffer.\n */\nconst isDebugPortRow = (row: LogRow): boolean => (row.entry.meta?.F ?? '').includes(CONTROLLER_FILE);\n\nconst CONTROLLER_FILE = 'devtools/debug-port-controller';\n\nexport type DebugPortSettingsProps = {\n /** Injectable for stories/tests; defaults to the page-wide controller. */\n controller?: DebugPortController;\n /** The switch starts arbitrary eval, so it follows the form's readonly state like every other control. */\n disabled?: boolean;\n};\n\n/**\n * Start/stop the agent debug port and surface the session id an agent needs.\n *\n * The port evaluates agent-supplied code against the live client, so it is off until this switch is\n * flipped, the session id is regenerated on every activation, and nothing survives a reload.\n */\nexport const DebugPortSettings = ({ controller = getDebugPortController(), disabled }: DebugPortSettingsProps) => {\n const { t } = Hooks.useTranslation(meta.profile.key);\n const subscribe = useCallback((listener: () => void) => controller.subscribe(listener), [controller]);\n const getStatus = useCallback(() => controller.getStatus(), [controller]);\n const status = useSyncExternalStore(subscribe, getStatus);\n\n // `persist` keeps the session across reloads of this tab: an OAuth redirect or a HMR reload would\n // otherwise strand the agent mid-investigation with a dead session id.\n const handleToggle = useCallback(\n (checked: boolean) => (checked ? controller.start({ persist: true }) : controller.stop()),\n [controller],\n );\n\n return (\n <Form.FieldSet\n label={t('settings.debug-port.section.label')}\n description={t('settings.debug-port.section.description')}\n >\n <Form.Field standalone label={t('settings.debug-port.label')} description={t('settings.debug-port.description')}>\n <Layout.Flex gap='md' align='center'>\n {status.running && (\n <span className='text-sm text-fg-muted'>\n {t('settings.debug-port.running.label')} <span className='font-mono'>{status.origin}</span>\n </span>\n )}\n <Field.Root>\n <Input.Switch\n checked={status.running}\n disabled={disabled}\n onCheckedChange={({ checked }) => handleToggle(checked)}\n />\n </Field.Root>\n </Layout.Flex>\n </Form.Field>\n\n {status.running && (\n <>\n <Form.Field\n standalone\n label={t('settings.debug-port.session.label')}\n description={t('settings.debug-port.session.description')}\n >\n <Input.Root\n value={status.session ?? ''}\n disabled\n variant='mono'\n copyable\n aria-label={t('settings.debug-port.session.label')}\n />\n </Form.Field>\n\n <Form.Field standalone label={t('settings.debug-port.log.label')}>\n {/* Only the rows: a settings card has no room for the panel's toolbar, levels or filter, so nothing to check rows for. */}\n <Logger.Root rowFilter={isDebugPortRow}>\n <Logger.Content classNames='max-h-[16lh]'>\n <Logger.List checkable={false} />\n </Logger.Content>\n </Logger.Root>\n </Form.Field>\n </>\n )}\n </Form.FieldSet>\n );\n};\n\nDebugPortSettings.displayName = 'DebugPortSettings';\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppSpace from '@dxos/app-toolkit/AppSpace';\nimport type * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport { type ConfigInit, SaveConfig, Storage, defs } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { type IdbLogStore, MANUAL_LOG_EXPORT_MAX_BYTES } from '@dxos/log-store-idb';\nimport { useClient } from '@dxos/react-client';\nimport { Form } from '@dxos/react-ui-form';\nimport * as Button from '@dxos/react-ui/Button';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Select from '@dxos/react-ui/Select';\nimport * as UiToast from '@dxos/react-ui/Toast';\nimport { TRACE_ALL_KEY } from '@dxos/tracing';\nimport { gzip, setDeep } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { Settings } from '#types';\n\nimport { DebugPortSettings } from '../DebugPortSettings/index.ts';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime_Client_Storage_StorageDriver.WEBFS,\n idb: defs.Runtime_Client_Storage_StorageDriver.IDB,\n} as const;\n\nexport type DebugSettingsProps = AppSurface.SettingsProps<\n Settings.Settings,\n {\n logStore: IdbLogStore;\n onUpload?: AppCapabilities.FileUploader;\n }\n>;\n\nexport const DebugSettings = ({ settings, onSettingsChange, scope, logStore, onUpload }: DebugSettingsProps) => {\n const { t } = Hooks.useTranslation(meta.profile.key);\n const [toast, setToast] = useState<Toast>();\n const download = Hooks.useFileDownload();\n const [storageConfig, setStorageConfig] = useState<ConfigInit>({});\n const client = useClient();\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = useCallback(\n (toast: Toast) => {\n setToast(toast);\n const timer = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(timer);\n },\n [setToast],\n );\n\n const handleDownload = useCallback(async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], {\n type: 'text/plain',\n });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (onUpload) {\n const defaultSpace = AppSpace.getDefaultSpace(client);\n if (!defaultSpace) {\n log.error('no default space available for upload');\n return;\n }\n const info = await onUpload(defaultSpace.db, new File([file], fileName));\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n log.info('diagnostics', { url });\n }\n }, [client, download, handleToast, onUpload, t]);\n\n const handleDownloadLogs = useCallback(async () => {\n const file = await gzip(await logStore.exportBlob({ maxSize: MANUAL_LOG_EXPORT_MAX_BYTES }));\n const fileName = `composer-logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.ndjson.gz`;\n download(file, fileName);\n }, [download, logStore]);\n\n const handleRepair = useCallback(async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({\n title: t('settings.repair-success.message'),\n description: JSON.stringify(info, undefined, 2),\n });\n } catch (err: any) {\n handleToast({\n title: t('settings.repair-failed.message'),\n description: err.message,\n });\n }\n }, [client, handleToast, t]);\n\n const handleWireframeChange = useCallback(\n (checked: boolean) => onSettingsChange?.((s) => ({ ...s, wireframe: !!checked })),\n [onSettingsChange],\n );\n\n const traceAll = useMemo(\n () => settings.traceAll ?? (typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true'),\n [settings.traceAll],\n );\n\n const handleTraceAllChange = useCallback(\n (checked: boolean) => {\n const value = !!checked;\n localStorage.setItem(TRACE_ALL_KEY, String(value));\n onSettingsChange?.((s) => ({ ...s, traceAll: value }));\n },\n [onSettingsChange],\n );\n\n const handleOpenTracingPanel = useCallback(() => {\n window.open('about:blank', '_blank');\n }, []);\n\n const handleStorageAdapterChange = useCallback(\n (value: string) => {\n if (confirm(t('settings.storage-adapter.changed-alert.message'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n },\n [storageConfig, t],\n );\n\n return (\n <Form.Root schema={Settings.Settings} values={settings} variant='settings' readonly={!onSettingsChange}>\n <Form.Viewport scroll>\n <Form.Content>\n <Form.FieldSet label={meta.profile.name ?? meta.profile.key} actions={scope}>\n <Form.Field label={t('settings.wireframe.label')} description={t('settings.wireframe.description')}>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={settings.wireframe}\n onCheckedChange={({ checked }) => handleWireframeChange(checked)}\n />\n </Form.Field>\n <Form.Field label={t('settings.trace-all.label')} description={t('settings.trace-all.description')}>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={traceAll}\n onCheckedChange={({ checked }) => handleTraceAllChange(checked)}\n />\n </Form.Field>\n <Form.Field\n standalone\n label={t('settings.tracing-panel.label')}\n description={t('settings.tracing-panel.description')}\n >\n <Button.Root\n icon='ph--arrow-square-out--regular'\n iconOnly\n label={t('settings.tracing-panel.label')}\n onClick={handleOpenTracingPanel}\n />\n </Form.Field>\n <Form.Field\n standalone\n label={t('settings.download-diagnostics.label')}\n description={t('settings.download-diagnostics.description')}\n >\n <Button.Root\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-diagnostics.label')}\n onClick={handleDownload}\n />\n </Form.Field>\n <Form.Field\n standalone\n label={t('settings.download-logs.label')}\n description={t('settings.download-logs.description')}\n >\n <Button.Root\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-logs.label')}\n onClick={handleDownloadLogs}\n />\n </Form.Field>\n <Form.Field standalone label={t('settings.repair.label')} description={t('settings.repair.description')}>\n <Button.Root\n icon='ph--first-aid-kit--regular'\n iconOnly\n label={t('settings.repair.label')}\n onClick={handleRepair}\n />\n </Form.Field>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <UiToast.Root defaultOpen duration={5_000} onOpenChange={(open) => !open && setToast(undefined)}>\n <UiToast.Header icon='ph--gift--duotone'>{toast.title}</UiToast.Header>\n {toast.description && <UiToast.Description>{toast.description}</UiToast.Description>}\n </UiToast.Root>\n )}\n\n <Form.Field\n label={t('settings.choose-storage-adaptor.label')}\n description={t('settings.choose-storage-adaptor.description')}\n >\n <Select.Root\n disabled={!onSettingsChange}\n value={Object.entries(StorageAdapters)\n .filter(([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore)\n .map(([name]) => name)\n .slice(0, 1)}\n onValueChange={({ value: [value] }) => value && handleStorageAdapterChange(value)}\n items={Object.keys(StorageAdapters).map((key) => ({\n value: key,\n label: t(`settings.storage-adaptor.${key}.label`),\n }))}\n >\n <Select.Trigger disabled={!onSettingsChange} placeholder={t('settings.data-store.label')} />\n <Select.Content>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Item key={key} item={{ value: key, label: t(`settings.storage-adaptor.${key}.label`) }} />\n ))}\n </Select.Content>\n </Select.Root>\n </Form.Field>\n </Form.FieldSet>\n\n <DebugPortSettings disabled={!onSettingsChange} />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nconst updateConfig = (config: ConfigInit, setConfig: (newConfig: ConfigInit) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n\nDebugSettings.displayName = 'DebugSettings';\n"],"mappings":"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"}
@@ -1,27 +1,36 @@
1
- import { useState } from "react";
2
1
  import { Filter, Query } from "@dxos/echo";
3
- import { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from "@dxos/react-ui";
2
+ import { useState } from "react";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
+ import * as Panel from "@dxos/react-ui/Panel";
5
+ import * as Toolbar from "@dxos/react-ui/Toolbar";
5
6
  import { ObjectsTree } from "@dxos/devtools";
6
7
  import { useQuery } from "@dxos/echo-react";
7
8
  import { JsonHighlighter } from "@dxos/react-ui-syntax-highlighter";
9
+ import * as ScrollArea from "@dxos/react-ui/ScrollArea";
10
+ import * as Input from "@dxos/react-ui/Input";
11
+ import * as Layout from "@dxos/react-ui/Layout";
12
+ import * as Icon from "@dxos/react-ui/Icon";
8
13
  //#region src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx
9
14
  var DebugSpaceObjectsPanel = ({ space, onOpen, canOpen }) => {
10
15
  const [selectedId, setSelectedId] = useState(null);
16
+ const [filter, setFilter] = useState("");
11
17
  const [selectedObject] = useQuery(space.db, selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()));
12
- return /* @__PURE__ */ jsx(Clipboard.Provider, { children: /* @__PURE__ */ jsxs(Panel.Root, { children: [/* @__PURE__ */ jsx(Panel.Toolbar, {
13
- asChild: true,
14
- children: /* @__PURE__ */ jsx(Toolbar.Root, { children: /* @__PURE__ */ jsx(Input.Root, { children: /* @__PURE__ */ jsx(Input.TextInput, {
15
- disabled: true,
16
- placeholder: "Search..."
17
- }) }) })
18
- }), /* @__PURE__ */ jsx(Panel.Content, {
18
+ return /* @__PURE__ */ jsxs(Panel.Root, { children: [/* @__PURE__ */ jsx(Panel.Header, { children: /* @__PURE__ */ jsx(Toolbar.Root, { children: /* @__PURE__ */ jsx(Input.Root, {
19
+ placeholder: "Search...",
20
+ "aria-label": "Search",
21
+ noAutoFill: true,
22
+ value: filter,
23
+ onChange: (event) => setFilter(event.target.value),
24
+ end: /* @__PURE__ */ jsx(Icon.Icon, { icon: "ph--magnifying-glass--regular" })
25
+ }) }) }), /* @__PURE__ */ jsx(Panel.Body, {
19
26
  asChild: true,
20
- children: /* @__PURE__ */ jsxs(Grid, {
27
+ children: /* @__PURE__ */ jsxs(Layout.Grid, {
28
+ grow: true,
21
29
  rows: 2,
22
- classNames: "divide-y divide-subdued-separator",
30
+ classNames: "divide-y divide-separator-subtle",
23
31
  children: [/* @__PURE__ */ jsx(ScrollArea.Root, { children: /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(ObjectsTree, {
24
32
  db: space.db,
33
+ filter,
25
34
  onSelect: (entity) => setSelectedId(entity.id),
26
35
  onOpen,
27
36
  canOpen
@@ -30,7 +39,7 @@ var DebugSpaceObjectsPanel = ({ space, onOpen, canOpen }) => {
30
39
  data: selectedObject
31
40
  })]
32
41
  })
33
- })] }) });
42
+ })] });
34
43
  };
35
44
  DebugSpaceObjectsPanel.displayName = "DebugSpaceObjectsPanel";
36
45
  //#endregion