@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
@@ -5,10 +5,10 @@
5
5
  import React, { useEffect, useRef, useState } from 'react';
6
6
 
7
7
  import { TimeoutError } from '@dxos/async';
8
- import { StatusBar } from '@dxos/plugin-status-bar/components';
9
- import { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';
8
+ import * as StatusBar from '@dxos/plugin-status-bar/StatusBar';
9
+ import { ConnectionState } from '@dxos/protocols/buf/dxos/client/services_pb';
10
10
  import { useNetworkStatus } from '@dxos/react-client/mesh';
11
- import { IconButton } from '@dxos/react-ui';
11
+ import * as Button from '@dxos/react-ui/Button';
12
12
 
13
13
  const styles = {
14
14
  success: 'text-sky-300 dark:text-green-700',
@@ -89,7 +89,7 @@ const ErrorIndicator = () => {
89
89
  if (errorRef.current) {
90
90
  return (
91
91
  <StatusBar.Item>
92
- <IconButton
92
+ <Button.Root
93
93
  variant='ghost'
94
94
  icon='ph--warning-circle--duotone'
95
95
  iconOnly
@@ -102,7 +102,7 @@ const ErrorIndicator = () => {
102
102
  } else {
103
103
  return (
104
104
  <StatusBar.Item>
105
- <IconButton variant='ghost' icon='ph--check--regular' iconOnly label='No errors.' />
105
+ <Button.Root variant='ghost' icon='ph--check--regular' iconOnly label='No errors.' />
106
106
  </StatusBar.Item>
107
107
  );
108
108
  }
@@ -121,13 +121,13 @@ const SwarmIndicator = () => {
121
121
  if (state === 0) {
122
122
  return (
123
123
  <StatusBar.Item>
124
- <IconButton variant='ghost' icon='ph--lightning--regular' iconOnly label='Connected to swarm.' />
124
+ <Button.Root variant='ghost' icon='ph--lightning--regular' iconOnly label='Connected to swarm.' />
125
125
  </StatusBar.Item>
126
126
  );
127
127
  } else {
128
128
  return (
129
129
  <StatusBar.Item>
130
- <IconButton
130
+ <Button.Root
131
131
  variant='ghost'
132
132
  icon='ph--lightning-slash--regular'
133
133
  iconOnly
@@ -168,7 +168,7 @@ const SavingIndicator = () => {
168
168
  case 2:
169
169
  return (
170
170
  <StatusBar.Item>
171
- <IconButton
171
+ <Button.Root
172
172
  variant='ghost'
173
173
  icon='ph--circle--duotone'
174
174
  iconOnly
@@ -180,7 +180,7 @@ const SavingIndicator = () => {
180
180
  case 1:
181
181
  return (
182
182
  <StatusBar.Item>
183
- <IconButton
183
+ <Button.Root
184
184
  variant='ghost'
185
185
  icon='ph--circle--duotone'
186
186
  iconOnly
@@ -193,7 +193,7 @@ const SavingIndicator = () => {
193
193
  default:
194
194
  return (
195
195
  <StatusBar.Item>
196
- <IconButton variant='ghost' icon='ph--circle--duotone' iconOnly label='Modified indicator.' />
196
+ <Button.Root variant='ghost' icon='ph--circle--duotone' iconOnly label='Modified indicator.' />
197
197
  </StatusBar.Item>
198
198
  );
199
199
  }
@@ -2,4 +2,4 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { DebugStatus as default } from './DebugStatus';
5
+ export { DebugStatus as default } from './DebugStatus.tsx';
@@ -0,0 +1,62 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { type CallMetadata, log } from '@dxos/log';
9
+ import { random } from '@dxos/random';
10
+ import { withAttention } from '@dxos/react-ui-attention/testing';
11
+ import * as Button from '@dxos/react-ui/Button';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
+ import * as Toolbar from '@dxos/react-ui/Toolbar';
14
+
15
+ import { translations } from '#translations';
16
+
17
+ import { LoggerPanel } from './LoggerPanel.tsx';
18
+
19
+ random.seed(123);
20
+
21
+ // Workspace-relative paths so rows and the Levels popover show a derived package name.
22
+ const FILES = [
23
+ 'packages/plugins/plugin-debug/src/alpha.ts',
24
+ 'packages/ui/react-ui-debug/src/beta.ts',
25
+ 'packages/core/echo/echo/src/gamma.ts',
26
+ ];
27
+
28
+ let seq = 0;
29
+
30
+ const emit = (file: string, level: 'info' | 'warn' | 'error') => {
31
+ // Hand-written meta so entries appear to originate from distinct files, populating the Levels list.
32
+ const callMeta: CallMetadata = { F: file, L: 1, S: undefined };
33
+ const context =
34
+ level === 'error' ? { seq: ++seq, file, error: new Error('Simulated failure') } : { seq: ++seq, file };
35
+ log[level](random.lorem.sentences(), context, callMeta);
36
+ };
37
+
38
+ /** The panel reads the process-wide log buffer, so the story emits into it rather than passing rows. */
39
+ const Render = () => (
40
+ <div className='grid grid-rows-[min-content_1fr] h-[24rem] w-[48rem] max-w-full'>
41
+ <Toolbar.Root>
42
+ <Button.Root onClick={() => emit(FILES[0], 'info')}>Info</Button.Root>
43
+ <Button.Root onClick={() => emit(FILES[1], 'warn')}>Warn</Button.Root>
44
+ <Button.Root onClick={() => emit(FILES[2], 'error')}>Error</Button.Root>
45
+ </Toolbar.Root>
46
+ <LoggerPanel />
47
+ </div>
48
+ );
49
+
50
+ const meta = {
51
+ title: 'plugins/plugin-debug/containers/LoggerPanel',
52
+ component: LoggerPanel,
53
+ render: Render,
54
+ decorators: [withAttention(), withTheme(), withLayout({ layout: 'centered' })],
55
+ parameters: { translations },
56
+ } satisfies Meta<typeof LoggerPanel>;
57
+
58
+ export default meta;
59
+
60
+ type Story = StoryObj<typeof meta>;
61
+
62
+ export const Default: Story = {};
@@ -0,0 +1,28 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Logger } from '@dxos/react-ui-debug';
8
+ import * as Panel from '@dxos/react-ui/Panel';
9
+
10
+ export const LoggerPanel = () => (
11
+ <Logger.Root>
12
+ <Panel.Root>
13
+ <Panel.Header>
14
+ <Logger.Toolbar />
15
+ </Panel.Header>
16
+ <Panel.Body asChild>
17
+ <Logger.Content>
18
+ <Logger.List />
19
+ </Logger.Content>
20
+ </Panel.Body>
21
+ <Panel.Footer>
22
+ <Logger.Filter />
23
+ </Panel.Footer>
24
+ </Panel.Root>
25
+ </Logger.Root>
26
+ );
27
+
28
+ LoggerPanel.displayName = 'LoggerPanel';
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './LoggerPanel.tsx';
@@ -13,31 +13,31 @@ import { useQuery } from '@dxos/echo-react';
13
13
  import { ClientPlugin, initializeIdentity } from '@dxos/plugin-client/testing';
14
14
  import * as ProgressPlugin from '@dxos/plugin-progress/ProgressPlugin';
15
15
  import { SpacePlugin } from '@dxos/plugin-space/testing';
16
- import { corePlugins } from '@dxos/plugin-testing';
16
+ import * as CorePlugins from '@dxos/plugin-testing/CorePlugins';
17
17
  import * as StorybookPlugin from '@dxos/plugin-testing/StorybookPlugin';
18
18
  import { useSpaces } from '@dxos/react-client/echo';
19
- import { ScrollArea } from '@dxos/react-ui';
20
19
  import { Listbox } from '@dxos/react-ui-list';
20
+ import * as ScrollArea from '@dxos/react-ui/ScrollArea';
21
21
  import { withLayout } from '@dxos/react-ui/testing';
22
22
 
23
23
  import { translations } from '#translations';
24
24
 
25
- import { SpaceGenerator } from './SpaceGenerator';
25
+ import { SpaceGenerator } from './SpaceGenerator.tsx';
26
26
 
27
27
  /** Live list of every object in the space — updates as the generator creates objects. */
28
28
  const ObjectList = ({ space }: { space: Parameters<typeof SpaceGenerator>[0]['space'] }) => {
29
29
  const objects = useQuery(space.db, Query.select(Filter.everything()));
30
30
 
31
31
  return (
32
- <ScrollArea.Root thin orientation='vertical'>
32
+ <ScrollArea.Root orientation='vertical'>
33
33
  <ScrollArea.Viewport>
34
- <Listbox.Root>
34
+ <Listbox.Root items={objects.map((object) => ({ value: object.id, label: object.id }))}>
35
35
  <Listbox.Content>
36
36
  {objects.map((object) => (
37
37
  <Listbox.Item key={object.id} id={object.id} classNames='px-2 gap-2'>
38
38
  <div className='flex flex-col grow truncate'>
39
39
  <span className='truncate'>{Obj.getLabel(object) ?? object.id}</span>
40
- <span className='text-description text-sm truncate'>{Obj.getTypename(object)}</span>
40
+ <span className='text-fg-muted text-sm truncate'>{Obj.getTypename(object)}</span>
41
41
  </div>
42
42
  </Listbox.Item>
43
43
  ))}
@@ -55,7 +55,7 @@ const DefaultStory = () => {
55
55
  }
56
56
 
57
57
  return (
58
- <div className='dx-container grid grid-cols-2 divide-x divide-separator'>
58
+ <div className='dx-expand grid grid-cols-2 divide-x divide-separator'>
59
59
  <SpaceGenerator space={space} />
60
60
  <ObjectList space={space} />
61
61
  </div>
@@ -69,7 +69,7 @@ const meta = {
69
69
  withLayout({ layout: 'fullscreen' }),
70
70
  withPluginManager(() => ({
71
71
  plugins: [
72
- ...corePlugins(),
72
+ ...CorePlugins.make(),
73
73
  StorybookPlugin.make({}),
74
74
  // Hosts the ProgressRegistry the Progress Monitor row registers into (and its meter reads).
75
75
  ProgressPlugin.make(),
@@ -4,31 +4,31 @@
4
4
 
5
5
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
 
7
- import { useOperationInvoker, useOptionalCapability } from '@dxos/app-framework/ui';
7
+ import * as ActivationEvents from '@dxos/app-framework/ActivationEvents';
8
+ import * as Hooks from '@dxos/app-framework/Hooks';
9
+ import * as PluginManagerProvider from '@dxos/app-framework/PluginManagerProvider';
8
10
  import * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';
11
+ import * as ToolkitHooks from '@dxos/app-toolkit/Hooks';
9
12
  import * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';
10
- import { useProgressMonitor } from '@dxos/app-toolkit/ui';
11
13
  import { ComputeGraph } from '@dxos/conductor';
12
14
  import { Filter, Obj, Type } from '@dxos/echo';
15
+ import * as EffectEx from '@dxos/effect/EffectEx';
13
16
  import * as Drawing from '@dxos/plugin-illustrator/Drawing';
14
17
  import * as Markdown from '@dxos/plugin-markdown/Markdown';
15
18
  import * as Sheet from '@dxos/plugin-sheet/Sheet';
16
19
  import * as SpaceOperation from '@dxos/plugin-space/SpaceOperation';
17
20
  import { useClient } from '@dxos/react-client';
18
21
  import { type Space } from '@dxos/react-client/echo';
19
- import {
20
- Flex,
21
- IconButton,
22
- Input,
23
- Panel,
24
- ScrollArea,
25
- ThemedClassName,
26
- useAsyncEffect,
27
- useTranslation,
28
- } from '@dxos/react-ui';
29
- import { composable, composableProps } from '@dxos/react-ui';
30
22
  import { ProgressMeter } from '@dxos/react-ui-components';
31
- import { type ActionGraphProps, Menu, MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';
23
+ import { type ActionGraphProps, ActionToolbar, MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';
24
+ import * as Button from '@dxos/react-ui/Button';
25
+ import * as Field from '@dxos/react-ui/Field';
26
+ import * as UiHooks from '@dxos/react-ui/Hooks';
27
+ import * as Input from '@dxos/react-ui/Input';
28
+ import * as Layout from '@dxos/react-ui/Layout';
29
+ import * as Panel from '@dxos/react-ui/Panel';
30
+ import * as ScrollArea from '@dxos/react-ui/ScrollArea';
31
+ import * as Util from '@dxos/react-ui/Util';
32
32
  import { Organization, Person, Task } from '@dxos/types';
33
33
  import { mx } from '@dxos/ui-theme';
34
34
  import { sortKeys } from '@dxos/util';
@@ -47,28 +47,45 @@ export type SpaceGeneratorProps = {
47
47
  onCreateObjects?: (objects: Obj.Unknown[]) => void;
48
48
  };
49
49
 
50
- export const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(
50
+ export const SpaceGenerator = Util.composable<HTMLDivElement, SpaceGeneratorProps>(
51
51
  ({ children, space, onCreateObjects, ...props }, forwardedRef) => {
52
- const { invokePromise } = useOperationInvoker();
53
- const { t } = useTranslation(meta.profile.key);
52
+ const invoker = Hooks.useOperationInvoker();
53
+ const { invokePromise } = invoker;
54
+ const { t } = UiHooks.useTranslation(meta.profile.key);
54
55
  const client = useClient();
55
56
  const [count, setCount] = useState(1);
56
57
  const [info, setInfo] = useState<any>({});
57
58
  const presets = useMemo(() => generator(), []);
59
+ const manager = PluginManagerProvider.usePluginManager();
60
+ const allTemplates = Hooks.useCapabilities(AppCapabilities.SpaceTemplate);
61
+
62
+ useEffect(() => {
63
+ EffectEx.runDetached(manager.activate(ActivationEvents.SpaceTemplatesRequested));
64
+ }, [manager]);
58
65
 
59
66
  // Register types.
60
- useAsyncEffect(async () => {
67
+ UiHooks.useAsyncEffect(async () => {
61
68
  await client.addTypes([...staticTypes, ...recordTypes, ...presets.schemas]);
62
69
  }, [client, presets]);
63
70
 
64
71
  // Create type generators.
65
72
  const typeMap = useMemo(() => {
66
73
  const recordGenerators = new Map<string, ObjectGenerator<any>>(
67
- recordTypes.map((type) => [Type.getTypename(type), createGenerator(client, invokePromise, type)]),
74
+ recordTypes.map((type) => [Type.getTypename(type), createGenerator(client, invoker, manager, type)]),
75
+ );
76
+
77
+ const allTemplateGenerators = new Map<string, ObjectGenerator<any>>(
78
+ allTemplates.map((template) => [
79
+ template.id,
80
+ async (space) => {
81
+ await template.apply({ client, space });
82
+ return [];
83
+ },
84
+ ]),
68
85
  );
69
86
 
70
- return new Map([...staticGenerators, ...presets.items, ...recordGenerators]);
71
- }, [client, invokePromise, presets]);
87
+ return new Map([...staticGenerators, ...presets.items, ...recordGenerators, ...allTemplateGenerators]);
88
+ }, [client, invoker, invokePromise, manager, presets, allTemplates]);
72
89
 
73
90
  // Query space to get info.
74
91
  const updateInfo = useCallback(async () => {
@@ -98,7 +115,7 @@ export const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(
98
115
  });
99
116
  }, [space]);
100
117
 
101
- useAsyncEffect(updateInfo, [updateInfo]);
118
+ UiHooks.useAsyncEffect(updateInfo, [updateInfo]);
102
119
 
103
120
  // TODO(wittjosiah): Custom toast required — `notify` labels are fixed at invocation, so a
104
121
  // result-dependent count cannot be reported through it. Drop these once operation notify
@@ -163,55 +180,62 @@ export const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(
163
180
  return (
164
181
  // `alwaysActive`: the toolbar gates itself on the menu scope's attention, and this debug panel
165
182
  // is not an attendable surface, so without it every action renders disabled.
166
- <Menu.Root {...menuActions} alwaysActive>
167
- <Panel.Root {...composableProps(props)} ref={forwardedRef}>
168
- <Panel.Toolbar>
169
- <Menu.Toolbar classNames='dx-document'>
170
- <Menu.Items />
171
- <Input.Root>
172
- <Input.TextInput
173
- type='number'
174
- placeholder='Count'
175
- classNames='w-[4rem] text-right'
176
- min={1}
177
- max={100}
178
- size={8}
179
- value={count}
180
- onChange={(event) => setCount(parseInt(event.target.value))}
181
- />
182
- </Input.Root>
183
- </Menu.Toolbar>
184
- </Panel.Toolbar>
185
- <Panel.Content asChild>
186
- <ScrollArea.Root thin orientation='vertical'>
187
- <ScrollArea.Viewport classNames='dx-document gap-4 divide-y divide-subdued-separator'>
188
- <SchemaTable
189
- classNames='py-1'
190
- types={staticTypes}
191
- objects={info.objects}
192
- label='Static Types'
193
- onClick={handleCreateData}
194
- />
195
- <SchemaTable
196
- classNames='py-1'
197
- types={recordTypes}
198
- objects={info.objects}
199
- label='Record Types'
200
- onClick={handleCreateData}
201
- />
183
+
184
+ <Panel.Root {...Util.composableProps(props)} ref={forwardedRef}>
185
+ <Panel.Header>
186
+ <ActionToolbar {...menuActions} alwaysActive classNames='dx-document'>
187
+ <Field.Root>
188
+ <Input.Root
189
+ placeholder='Count'
190
+ classNames='w-[4rem] text-right'
191
+ min={1}
192
+ max={100}
193
+ size={8}
194
+ value={count}
195
+ onChange={(event) => setCount(parseInt(event.target.value))}
196
+ type='number'
197
+ />
198
+ </Field.Root>
199
+ </ActionToolbar>
200
+ </Panel.Header>
201
+ <Panel.Body asChild>
202
+ <ScrollArea.Root orientation='vertical'>
203
+ <ScrollArea.Viewport classNames='dx-document gap-4 divide-y divide-separator-subtle'>
204
+ <SchemaTable
205
+ classNames='py-1'
206
+ types={staticTypes}
207
+ objects={info.objects}
208
+ label='Static Types'
209
+ onClick={handleCreateData}
210
+ />
211
+ <SchemaTable
212
+ classNames='py-1'
213
+ types={recordTypes}
214
+ objects={info.objects}
215
+ label='Record Types'
216
+ onClick={handleCreateData}
217
+ />
218
+ <SchemaTable
219
+ classNames='py-1'
220
+ types={presets.types}
221
+ objects={info.objects}
222
+ label='Presets'
223
+ onClick={handleCreateData}
224
+ />
225
+ {allTemplates.length > 0 && (
202
226
  <SchemaTable
203
227
  classNames='py-1'
204
- types={presets.types}
228
+ types={allTemplates.map(({ id, label }) => ({ typename: id, presetLabel: label }))}
205
229
  objects={info.objects}
206
- label='Presets'
230
+ label='Space Templates'
207
231
  onClick={handleCreateData}
208
232
  />
209
- <ProgressGenerator classNames='py-1' />
210
- </ScrollArea.Viewport>
211
- </ScrollArea.Root>
212
- </Panel.Content>
213
- </Panel.Root>
214
- </Menu.Root>
233
+ )}
234
+ <ProgressGenerator classNames='py-1' />
235
+ </ScrollArea.Viewport>
236
+ </ScrollArea.Root>
237
+ </Panel.Body>
238
+ </Panel.Root>
215
239
  );
216
240
  },
217
241
  );
@@ -259,14 +283,14 @@ const useSpaceGeneratorMenu = ({
259
283
  // Stable key for the test progress monitor within the shared registry.
260
284
  const TEST_PROGRESS_NAME = `${meta.profile.key}.test-progress`;
261
285
 
262
- type ProgressGeneratorProps = ThemedClassName;
286
+ type ProgressGeneratorProps = Util.ThemedClassName;
263
287
 
264
288
  // Drives a synthetic progress monitor (10s over 10 steps) so the R0 rail meter can be exercised —
265
289
  // and renders the meter here too, since the rail's only lives inside a popover the user must open,
266
290
  // which made a working monitor look like a broken one.
267
291
  const ProgressGenerator = ({ classNames }: ProgressGeneratorProps) => {
268
- const registry = useOptionalCapability(AppCapabilities.ProgressRegistry);
269
- const monitor = useProgressMonitor(TEST_PROGRESS_NAME);
292
+ const registry = Hooks.useOptionalCapability(AppCapabilities.ProgressRegistry);
293
+ const monitor = ToolkitHooks.useProgressMonitor(TEST_PROGRESS_NAME);
270
294
  const running = monitor?.status === 'running';
271
295
  const intervalRef = useRef<ReturnType<typeof setInterval> | undefined>(undefined);
272
296
 
@@ -317,18 +341,23 @@ const ProgressGenerator = ({ classNames }: ProgressGeneratorProps) => {
317
341
 
318
342
  return (
319
343
  <div className={mx('flex flex-col gap-1 py-1', classNames)}>
320
- <Flex gap='sm' align='center'>
344
+ <Layout.Flex gap='sm' align='center'>
321
345
  <span className='grow'>Progress Monitor</span>
322
346
  {running ? (
323
- <IconButton
347
+ <Button.Root
324
348
  icon='ph--x--regular'
325
349
  label='Cancel test progress'
326
350
  onClick={() => registry?.cancel(TEST_PROGRESS_NAME)}
327
351
  />
328
352
  ) : (
329
- <IconButton icon='ph--play--regular' label='Start test progress' disabled={!registry} onClick={handleStart} />
353
+ <Button.Root
354
+ icon='ph--play--regular'
355
+ label='Start test progress'
356
+ disabled={!registry}
357
+ onClick={handleStart}
358
+ />
330
359
  )}
331
- </Flex>
360
+ </Layout.Flex>
332
361
  {monitor && (monitor.status === 'running' || monitor.status === 'error') && (
333
362
  <ProgressMeter state={monitor} onCancel={() => registry?.cancel(TEST_PROGRESS_NAME)} />
334
363
  )}
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export { SpaceGenerator as default } from './SpaceGenerator';
5
+ export { SpaceGenerator as default } from './SpaceGenerator.tsx';
@@ -3,12 +3,13 @@
3
3
  //
4
4
 
5
5
  import { useAtomValue } from '@effect/atom-react/Hooks';
6
- import * as Atom from 'effect/unstable/reactivity/Atom';
7
- import React, { Fragment } from 'react';
6
+ import * as Atom from 'effect/reactivity/Atom';
7
+ import React from 'react';
8
8
 
9
- import { useOptionalCapability } from '@dxos/app-framework/ui';
9
+ import * as Hooks from '@dxos/app-framework/Hooks';
10
10
  import * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';
11
- import { ScrollArea } from '@dxos/react-ui';
11
+ import { STAT_CARD_HUES, StatCard } from '@dxos/devtools';
12
+ import * as Layout from '@dxos/react-ui/Layout';
12
13
 
13
14
  // Fallback so the atom hook is called unconditionally when no store is contributed (host plugin not
14
15
  // loaded); the panel then renders its empty state.
@@ -17,12 +18,12 @@ const EMPTY = Atom.make<Record<string, unknown>>({});
17
18
  const isRecord = (value: unknown): value is Record<string, unknown> =>
18
19
  typeof value === 'object' && value !== null && !Array.isArray(value);
19
20
 
20
- /** Renders a leaf value; numbers are monospace so columns of counts align. */
21
+ /** Renders a leaf value; numbers are localised so columns of counts read alike. */
21
22
  const formatValue = (value: unknown): string => (typeof value === 'number' ? value.toLocaleString() : String(value));
22
23
 
23
24
  /**
24
25
  * Flattens a compartment into `key → value` rows, one level deep: nested objects (e.g. `coverage`)
25
- * become dotted keys (`coverage.plain`) so everything renders in a single flat table.
26
+ * become dotted keys (`coverage.plain`) so everything renders as flat rows.
26
27
  */
27
28
  const flatten = (stats: unknown): [string, unknown][] => {
28
29
  if (!isRecord(stats)) {
@@ -36,39 +37,39 @@ const flatten = (stats: unknown): [string, unknown][] => {
36
37
  );
37
38
  };
38
39
 
40
+ export type StatsPanelProps = {
41
+ /** Renders the empty state as a card too, so a stack shows the store exists. */
42
+ showEmpty?: boolean;
43
+ };
44
+
39
45
  /**
40
- * Presentational panel for the {@link AppCapabilities.StatsPanel} store: renders every plugin
41
- * compartment as a flat key × value table, live (re-renders on each write). Purely generic — it
42
- * displays whatever each plugin stores, so it works for sync telemetry or any other stats.
46
+ * The {@link AppCapabilities.StatsPanel} store as one card per plugin compartment, live (re-renders
47
+ * on each write). Purely generic — it displays whatever each plugin stores.
43
48
  */
44
- export const StatsPanel = () => {
45
- const store = useOptionalCapability(AppCapabilities.StatsPanel);
49
+ export const StatsPanel = ({ showEmpty = true }: StatsPanelProps) => {
50
+ const store = Hooks.useOptionalCapability(AppCapabilities.StatsPanel);
46
51
  const stats = useAtomValue(store?.statsAtom ?? EMPTY);
47
52
  const compartments = Object.entries(stats);
48
53
  if (compartments.length === 0) {
49
- return <div className='p-2 text-sm text-description'>No stats yet.</div>;
54
+ return showEmpty ? (
55
+ <StatCard.Root>
56
+ <StatCard.Header icon='ph--chart-bar--regular' hue={STAT_CARD_HUES.system} title='Plugin stats' />
57
+ <StatCard.Row label='No stats yet.' />
58
+ </StatCard.Root>
59
+ ) : null;
50
60
  }
51
61
 
52
62
  return (
53
- <ScrollArea.Root thin centered padding>
54
- <ScrollArea.Viewport>
55
- {compartments.map(([pluginKey, value]) => (
56
- <section key={pluginKey} className='w-full'>
57
- <h3 className='text-start font-mono text-xs text-description pb-1'>{pluginKey}</h3>
58
- <dl className='grid grid-cols-[auto_minmax(0,1fr)] w-full'>
59
- {flatten(value).map(([key, cell]) => (
60
- <Fragment key={key}>
61
- <dt className='border-be border-separator pb-1 pt-1 pe-2 text-description self-start'>{key}</dt>
62
- <dd className='border-be border-separator pb-1 pt-1 truncate font-mono text-end'>
63
- {formatValue(cell)}
64
- </dd>
65
- </Fragment>
66
- ))}
67
- </dl>
68
- </section>
69
- ))}
70
- </ScrollArea.Viewport>
71
- </ScrollArea.Root>
63
+ <Layout.Container gap='md' gutter='none'>
64
+ {compartments.map(([pluginKey, value]) => (
65
+ <StatCard.Root key={pluginKey}>
66
+ <StatCard.Header icon='ph--chart-bar--regular' hue={STAT_CARD_HUES.system} title={pluginKey} />
67
+ {flatten(value).map(([key, cell]) => (
68
+ <StatCard.Row key={key} label={key} tooltip={key} value={formatValue(cell)} />
69
+ ))}
70
+ </StatCard.Root>
71
+ ))}
72
+ </Layout.Container>
72
73
  );
73
74
  };
74
75
 
@@ -2,4 +2,4 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- export * from './StatsPanel';
5
+ export * from './StatsPanel.tsx';
@@ -6,13 +6,14 @@ import React from 'react';
6
6
  import { useResizeDetector } from 'react-resize-detector';
7
7
 
8
8
  import { Obj } from '@dxos/echo';
9
- import { Flex, type ThemedClassName } from '@dxos/react-ui';
10
9
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
11
10
  import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
11
+ import * as Layout from '@dxos/react-ui/Layout';
12
+ import type * as Util from '@dxos/react-ui/Util';
12
13
  import { mx } from '@dxos/ui-theme';
13
14
 
14
15
  // TODO(burdon): Create generic container with wireframe mode.
15
- export type WireframeProps = ThemedClassName<{
16
+ export type WireframeProps = Util.ThemedClassName<{
16
17
  object: Obj.Unknown;
17
18
  label?: string;
18
19
  }>;
@@ -24,14 +25,14 @@ export const Wireframe = ({ classNames, label, object }: WireframeProps) => {
24
25
 
25
26
  return (
26
27
  <div ref={ref} className={mx('relative grow min-h-96', classNames)} {...attentionAttrs}>
27
- <Flex column gap='sm' classNames='absolute inset-2 overflow-hidden font-mono'>
28
- <Flex justify='between'>
28
+ <Layout.Flex column gap='sm' classNames='absolute inset-2 overflow-hidden font-mono'>
29
+ <Layout.Flex justify='between'>
29
30
  <div>{label}</div>
30
31
  <div>{`[${width}x${height}]`}</div>
31
- </Flex>
32
+ </Layout.Flex>
32
33
  {object && <JsonHighlighter data={object} classNames='text-xs opacity-75 rounded-sm' />}
33
- </Flex>
34
- <svg width={width} height={height} className='bg-transparent *:text-subdued'>
34
+ </Layout.Flex>
35
+ <svg width={width} height={height} className='bg-transparent *:text-fg-subtle'>
35
36
  <rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />
36
37
  <line x1={0} y1={0} x2={width} y2={height} strokeWidth={1} />
37
38
  <line x1={0} y1={height} x2={width} y2={0} strokeWidth={1} />
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export { Wireframe as default } from './Wireframe';
5
+ export { Wireframe as default } from './Wireframe.tsx';