@dxos/plugin-debug 0.8.4-main.72ec0f3 → 0.8.4-main.765dc60934

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 (214) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +15 -0
  4. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
  5. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs +59 -0
  6. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs.map +7 -0
  7. package/dist/lib/neutral/DebugPlugin.mjs +47 -0
  8. package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
  9. package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
  10. package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
  11. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs +224 -0
  12. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs.map +7 -0
  13. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs +34 -0
  14. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs.map +7 -0
  15. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs +121 -0
  16. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs.map +7 -0
  17. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs +23 -0
  18. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
  19. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs +143 -0
  20. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs.map +7 -0
  21. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs +52 -0
  22. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs.map +7 -0
  23. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs +577 -0
  24. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs.map +7 -0
  25. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  26. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  27. package/dist/lib/{browser/chunk-WZFZ4ESO.mjs → neutral/chunk-3OGPOE7H.mjs} +2 -2
  28. package/dist/lib/neutral/chunk-3OGPOE7H.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  30. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  31. package/dist/lib/{browser/chunk-SRV2AIGJ.mjs → neutral/chunk-NFIOTQRZ.mjs} +30 -9
  32. package/dist/lib/neutral/chunk-NFIOTQRZ.mjs.map +7 -0
  33. package/dist/lib/{browser/SpaceGenerator-46TAISVE.mjs → neutral/components/index.mjs} +317 -490
  34. package/dist/lib/neutral/components/index.mjs.map +7 -0
  35. package/dist/lib/neutral/containers/index.mjs +21 -0
  36. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  37. package/dist/lib/neutral/index.mjs +18 -0
  38. package/dist/lib/neutral/index.mjs.map +7 -0
  39. package/dist/lib/neutral/meta.json +1 -0
  40. package/dist/lib/neutral/meta.mjs +8 -0
  41. package/dist/lib/neutral/meta.mjs.map +7 -0
  42. package/dist/lib/neutral/plugin.mjs +12 -0
  43. package/dist/lib/neutral/plugin.mjs.map +7 -0
  44. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
  45. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
  46. package/dist/lib/neutral/react-surface-UR2SYHYW.mjs +419 -0
  47. package/dist/lib/neutral/react-surface-UR2SYHYW.mjs.map +7 -0
  48. package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
  49. package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
  50. package/dist/lib/neutral/translations.mjs +83 -0
  51. package/dist/lib/neutral/translations.mjs.map +7 -0
  52. package/dist/lib/neutral/types/index.mjs +14 -0
  53. package/dist/lib/neutral/types/index.mjs.map +7 -0
  54. package/dist/types/src/DebugPlugin.d.ts +4 -1
  55. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  56. package/dist/types/src/DebugPlugin.node.d.ts +5 -0
  57. package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
  58. package/dist/types/src/DebugPlugin.test.d.ts +2 -0
  59. package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
  60. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  61. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/index.d.ts +8 -5
  63. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/react-context.d.ts +4 -2
  65. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/react-surface.d.ts +7 -2
  67. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/settings.d.ts +5 -2
  69. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  70. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
  71. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
  72. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +99 -0
  73. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
  74. package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
  75. package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
  76. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
  77. package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
  78. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
  79. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +5 -5
  80. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  81. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
  82. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  83. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  84. package/dist/types/src/components/SpaceGenerator/presets.d.ts +1 -4
  85. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  86. package/dist/types/src/components/index.d.ts +4 -10
  87. package/dist/types/src/components/index.d.ts.map +1 -1
  88. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +8 -0
  89. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
  90. package/dist/types/src/containers/DebugGraph/index.d.ts +2 -0
  91. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
  92. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +6 -0
  93. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
  94. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +2 -0
  95. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
  96. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +5 -0
  97. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
  98. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +2 -0
  99. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
  100. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
  101. package/dist/types/src/containers/DebugStatus/index.d.ts +2 -0
  102. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
  103. package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
  104. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
  105. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +2 -0
  106. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
  107. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +11 -0
  108. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
  109. package/dist/types/src/containers/SpaceGenerator/index.d.ts +2 -0
  110. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
  111. package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +1 -1
  112. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
  113. package/dist/types/src/containers/Wireframe/index.d.ts +2 -0
  114. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
  115. package/dist/types/src/containers/index.d.ts +9 -0
  116. package/dist/types/src/containers/index.d.ts.map +1 -0
  117. package/dist/types/src/index.d.ts +1 -1
  118. package/dist/types/src/index.d.ts.map +1 -1
  119. package/dist/types/src/meta.d.ts +2 -2
  120. package/dist/types/src/meta.d.ts.map +1 -1
  121. package/dist/types/src/plugin.d.ts +4 -0
  122. package/dist/types/src/plugin.d.ts.map +1 -0
  123. package/dist/types/src/translations.d.ts +80 -59
  124. package/dist/types/src/translations.d.ts.map +1 -1
  125. package/dist/types/src/types/Settings.d.ts +8 -0
  126. package/dist/types/src/types/Settings.d.ts.map +1 -0
  127. package/dist/types/src/types/index.d.ts +69 -0
  128. package/dist/types/src/types/index.d.ts.map +1 -0
  129. package/dist/types/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +132 -76
  131. package/src/DebugPlugin.node.ts +18 -0
  132. package/src/DebugPlugin.test.ts +29 -0
  133. package/src/DebugPlugin.tsx +28 -34
  134. package/src/capabilities/app-graph-builder.ts +362 -388
  135. package/src/capabilities/index.ts +5 -5
  136. package/src/capabilities/react-context.tsx +16 -7
  137. package/src/capabilities/react-surface.tsx +376 -356
  138. package/src/capabilities/settings.ts +24 -12
  139. package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
  140. package/src/components/DebugSettings/DebugSettings.tsx +262 -0
  141. package/src/components/DebugSettings/index.ts +5 -0
  142. package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +2 -2
  143. package/src/components/SchemaTable/index.ts +5 -0
  144. package/src/components/SpaceGenerator/ObjectGenerator.tsx +26 -29
  145. package/src/components/SpaceGenerator/draw-util.ts +8 -8
  146. package/src/components/SpaceGenerator/index.ts +2 -3
  147. package/src/components/SpaceGenerator/presets.ts +206 -110
  148. package/src/components/index.ts +4 -8
  149. package/src/containers/DebugGraph/DebugGraph.tsx +14 -0
  150. package/src/containers/DebugGraph/index.ts +5 -0
  151. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +76 -0
  152. package/src/containers/DebugObjectPanel/index.ts +5 -0
  153. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +47 -0
  154. package/src/containers/DebugSpaceObjectsPanel/index.ts +5 -0
  155. package/src/{components → containers/DebugStatus}/DebugStatus.tsx +41 -19
  156. package/src/containers/DebugStatus/index.ts +5 -0
  157. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
  158. package/src/containers/DevtoolsOverviewContainer/index.ts +5 -0
  159. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +126 -0
  160. package/src/containers/SpaceGenerator/index.ts +5 -0
  161. package/src/{components → containers/Wireframe}/Wireframe.tsx +5 -9
  162. package/src/containers/Wireframe/index.ts +5 -0
  163. package/src/containers/index.ts +13 -0
  164. package/src/index.ts +1 -1
  165. package/src/meta.ts +3 -3
  166. package/src/plugin.ts +10 -0
  167. package/src/translations.ts +75 -58
  168. package/src/types/Settings.ts +16 -0
  169. package/src/{types.ts → types/index.ts} +20 -11
  170. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs +0 -20
  171. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs.map +0 -7
  172. package/dist/lib/browser/DevtoolsOverviewContainer-JXVZVPHN.mjs +0 -25
  173. package/dist/lib/browser/DevtoolsOverviewContainer-JXVZVPHN.mjs.map +0 -7
  174. package/dist/lib/browser/SpaceGenerator-46TAISVE.mjs.map +0 -7
  175. package/dist/lib/browser/app-graph-builder-CRH2HJKT.mjs +0 -588
  176. package/dist/lib/browser/app-graph-builder-CRH2HJKT.mjs.map +0 -7
  177. package/dist/lib/browser/chunk-SRV2AIGJ.mjs.map +0 -7
  178. package/dist/lib/browser/chunk-WZFZ4ESO.mjs.map +0 -7
  179. package/dist/lib/browser/index.mjs +0 -130
  180. package/dist/lib/browser/index.mjs.map +0 -7
  181. package/dist/lib/browser/meta.json +0 -1
  182. package/dist/lib/browser/react-context-P2YDWEWI.mjs +0 -16
  183. package/dist/lib/browser/react-context-P2YDWEWI.mjs.map +0 -7
  184. package/dist/lib/browser/react-surface-2SNVZDEA.mjs +0 -774
  185. package/dist/lib/browser/react-surface-2SNVZDEA.mjs.map +0 -7
  186. package/dist/lib/browser/settings-SQXR3OAH.mjs +0 -22
  187. package/dist/lib/browser/settings-SQXR3OAH.mjs.map +0 -7
  188. package/dist/types/src/components/Container.d.ts +0 -5
  189. package/dist/types/src/components/Container.d.ts.map +0 -1
  190. package/dist/types/src/components/DebugGraph.d.ts +0 -8
  191. package/dist/types/src/components/DebugGraph.d.ts.map +0 -1
  192. package/dist/types/src/components/DebugObjectPanel.d.ts +0 -7
  193. package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
  194. package/dist/types/src/components/DebugSettings.d.ts +0 -6
  195. package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
  196. package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
  197. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
  198. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
  199. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
  200. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
  201. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -15
  202. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
  203. package/dist/types/src/components/Wireframe.d.ts.map +0 -1
  204. package/dist/types/src/types.d.ts +0 -63
  205. package/dist/types/src/types.d.ts.map +0 -1
  206. package/src/components/Container.tsx +0 -15
  207. package/src/components/DebugGraph.tsx +0 -14
  208. package/src/components/DebugObjectPanel.tsx +0 -33
  209. package/src/components/DebugSettings.tsx +0 -180
  210. package/src/components/DevtoolsOverviewContainer.tsx +0 -20
  211. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -52
  212. package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -122
  213. /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
  214. /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { useState } from 'react';
6
+
7
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { ObjectsTree } from '@dxos/devtools';
9
+ import { Filter, Query } from '@dxos/echo';
10
+ import { type ObjectId } from '@dxos/keys';
11
+ import { useQuery } from '@dxos/react-client/echo';
12
+ import { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';
13
+ import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
14
+
15
+ export type DebugSpaceObjectsPanelProps = AppSurface.SpaceArticleProps;
16
+
17
+ export const DebugSpaceObjectsPanel = ({ space }: DebugSpaceObjectsPanelProps) => {
18
+ const [selectedId, setSelectedId] = useState<ObjectId | null>(null);
19
+ const [selectedObject] = useQuery(
20
+ space.db,
21
+ selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()),
22
+ );
23
+
24
+ return (
25
+ <Clipboard.Provider>
26
+ <Panel.Root>
27
+ <Panel.Toolbar asChild>
28
+ <Toolbar.Root>
29
+ <Input.Root>
30
+ <Input.TextInput disabled placeholder='Search...' />
31
+ </Input.Root>
32
+ </Toolbar.Root>
33
+ </Panel.Toolbar>
34
+ <Panel.Content asChild>
35
+ <Grid rows={2} classNames='divide-y divide-separator'>
36
+ <ScrollArea.Root>
37
+ <ScrollArea.Viewport>
38
+ <ObjectsTree db={space.db} onSelect={(entity) => setSelectedId(entity.id)} />
39
+ </ScrollArea.Viewport>
40
+ </ScrollArea.Root>
41
+ {selectedObject && <JsonHighlighter classNames='p-1' data={selectedObject} />}
42
+ </Grid>
43
+ </Panel.Content>
44
+ </Panel.Root>
45
+ </Clipboard.Provider>
46
+ );
47
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { DebugSpaceObjectsPanel as default } from './DebugSpaceObjectsPanel';
@@ -5,11 +5,10 @@
5
5
  import React, { useEffect, useRef, useState } from 'react';
6
6
 
7
7
  import { TimeoutError } from '@dxos/async';
8
- import { useActiveSpace } from '@dxos/plugin-space';
9
- import { StatusBar } from '@dxos/plugin-status-bar';
8
+ import { StatusBar } from '@dxos/plugin-status-bar/components';
10
9
  import { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';
11
10
  import { useNetworkStatus } from '@dxos/react-client/mesh';
12
- import { Icon } from '@dxos/react-ui';
11
+ import { IconButton } from '@dxos/react-ui';
13
12
 
14
13
  const styles = {
15
14
  success: 'text-sky-300 dark:text-green-700',
@@ -89,14 +88,20 @@ const ErrorIndicator = () => {
89
88
 
90
89
  if (errorRef.current) {
91
90
  return (
92
- <StatusBar.Button title={errorRef.current.message} onClick={handleReset}>
93
- <Icon icon='ph--warning-circle--duotone' size={4} classNames={styles.error} />
94
- </StatusBar.Button>
91
+ <StatusBar.Item>
92
+ <IconButton
93
+ icon='ph--warning-circle--duotone'
94
+ iconOnly
95
+ label={errorRef.current.message}
96
+ classNames={styles.error}
97
+ onClick={handleReset}
98
+ />
99
+ </StatusBar.Item>
95
100
  );
96
101
  } else {
97
102
  return (
98
- <StatusBar.Item title='No errors.'>
99
- <Icon icon='ph--check--regular' size={4} />
103
+ <StatusBar.Item>
104
+ <IconButton variant='ghost' icon='ph--check--regular' iconOnly label='No errors.' />
100
105
  </StatusBar.Item>
101
106
  );
102
107
  }
@@ -114,14 +119,20 @@ const SwarmIndicator = () => {
114
119
 
115
120
  if (state === 0) {
116
121
  return (
117
- <StatusBar.Item title='Connected to swarm.'>
118
- <Icon icon='ph--lightning--regular' size={4} />
122
+ <StatusBar.Item>
123
+ <IconButton variant='ghost' icon='ph--lightning--regular' iconOnly label='Connected to swarm.' />
119
124
  </StatusBar.Item>
120
125
  );
121
126
  } else {
122
127
  return (
123
- <StatusBar.Item title='Disconnected from swarm.'>
124
- <Icon icon='ph--lightning-slash--regular' size={4} classNames={styles.warning} />
128
+ <StatusBar.Item>
129
+ <IconButton
130
+ variant='ghost'
131
+ icon='ph--lightning-slash--regular'
132
+ iconOnly
133
+ label='Disconnected from swarm.'
134
+ classNames={styles.warning}
135
+ />
125
136
  </StatusBar.Item>
126
137
  );
127
138
  }
@@ -133,7 +144,6 @@ const SwarmIndicator = () => {
133
144
  // TODO(burdon): Merge with SaveStatus.
134
145
  const SavingIndicator = () => {
135
146
  const [state, _setState] = useState(0);
136
- const _space = useActiveSpace();
137
147
  // TODO(dmaretskyi): Fix this when we have save status for automerge.
138
148
  // useEffect(() => {
139
149
  // if (!space) {
@@ -156,21 +166,33 @@ const SavingIndicator = () => {
156
166
  switch (state) {
157
167
  case 2:
158
168
  return (
159
- <StatusBar.Item title='Edit not saved.'>
160
- <Icon icon='ph--circle--duotone' size={4} classNames={styles.warning} />
169
+ <StatusBar.Item>
170
+ <IconButton
171
+ variant='ghost'
172
+ icon='ph--circle--duotone'
173
+ iconOnly
174
+ label='Edit not saved.'
175
+ classNames={styles.warning}
176
+ />
161
177
  </StatusBar.Item>
162
178
  );
163
179
  case 1:
164
180
  return (
165
- <StatusBar.Item title='Saving...'>
166
- <Icon icon='ph--circle--duotone' size={4} classNames={styles.success} />
181
+ <StatusBar.Item>
182
+ <IconButton
183
+ variant='ghost'
184
+ icon='ph--circle--duotone'
185
+ iconOnly
186
+ label='Saving...'
187
+ classNames={styles.success}
188
+ />
167
189
  </StatusBar.Item>
168
190
  );
169
191
  case 0:
170
192
  default:
171
193
  return (
172
- <StatusBar.Item title='Modified indicator.'>
173
- <Icon icon='ph--circle--duotone' size={4} />
194
+ <StatusBar.Item>
195
+ <IconButton variant='ghost' icon='ph--circle--duotone' iconOnly label='Modified indicator.' />
174
196
  </StatusBar.Item>
175
197
  );
176
198
  }
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export { DebugStatus as default } from './DebugStatus';
@@ -0,0 +1,25 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Surface } from '@dxos/app-framework/ui';
8
+ import { StatsPanel, useStats } from '@dxos/devtools';
9
+
10
+ export const DevtoolsOverviewContainer = () => {
11
+ const [stats, refreshStats] = useStats();
12
+ const surfaceProfilerStats = Surface.useProfilerStats();
13
+ const clearSurfaceProfiler = Surface.useProfilerClear();
14
+
15
+ return (
16
+ <StatsPanel
17
+ stats={stats}
18
+ surfaceProfilerStats={surfaceProfilerStats}
19
+ onRefresh={refreshStats}
20
+ onClearSurfaceProfiler={clearSurfaceProfiler}
21
+ >
22
+ <Surface.Surface role='devtools-overview' />
23
+ </StatsPanel>
24
+ );
25
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { DevtoolsOverviewContainer as default } from './DevtoolsOverviewContainer';
@@ -0,0 +1,126 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useMemo, useState } from 'react';
6
+
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { ComputeGraph } from '@dxos/conductor';
9
+ import { Filter, Obj, type Type } from '@dxos/echo';
10
+ import { Markdown } from '@dxos/plugin-markdown';
11
+ import { Sheet } from '@dxos/plugin-sheet';
12
+ import { Sketch } from '@dxos/plugin-sketch';
13
+ import { useClient } from '@dxos/react-client';
14
+ import { type Space } from '@dxos/react-client/echo';
15
+ import { IconButton, Input, Panel, ScrollArea, Toolbar, useAsyncEffect } from '@dxos/react-ui';
16
+ import { Organization, Person, Task } from '@dxos/types';
17
+ import { composable, composableProps } from '@dxos/ui-theme';
18
+ import { sortKeys } from '@dxos/util';
19
+
20
+ import { type ObjectGenerator, SchemaTable, createGenerator, generator, staticGenerators } from '#components';
21
+
22
+ // TODO(burdon): Make extensible.
23
+ const staticTypes = [Markdown.Document, Sketch.Sketch, Sheet.Sheet, ComputeGraph];
24
+ const recordTypes: Type.AnyObj[] = [Organization.Organization, Person.Person, Task.Task];
25
+
26
+ export type SpaceGeneratorProps = {
27
+ space: Space;
28
+ onCreateObjects?: (objects: Obj.Unknown[]) => void;
29
+ };
30
+
31
+ export const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(
32
+ ({ space, onCreateObjects, children, ...props }, forwardedRef) => {
33
+ const { invokePromise } = useOperationInvoker();
34
+ const client = useClient();
35
+ const [count, setCount] = useState(1);
36
+ const [info, setInfo] = useState<any>({});
37
+ const presets = useMemo(() => generator(), []);
38
+
39
+ // Register types.
40
+ useAsyncEffect(async () => {
41
+ await client.addTypes([...staticTypes, ...recordTypes, ...presets.schemas]);
42
+ }, [client, presets]);
43
+
44
+ // Create type generators.
45
+ const typeMap = useMemo(() => {
46
+ const recordGenerators = new Map<string, ObjectGenerator<any>>(
47
+ recordTypes.map((type) => [type.typename, createGenerator(client, invokePromise, type)]),
48
+ );
49
+
50
+ return new Map([...staticGenerators, ...presets.items, ...recordGenerators]);
51
+ }, [client, invokePromise, presets]);
52
+
53
+ // Query space to get info.
54
+ const updateInfo = useCallback(async () => {
55
+ const echoSchema = await space.db.schemaRegistry.query().run();
56
+ const staticSchema = await space.db.graph.schemaRegistry.query().run();
57
+
58
+ const objects = await space.db.query(Filter.everything()).run();
59
+ const objectMap = sortKeys(
60
+ objects.reduce<Record<string, number>>((map, obj) => {
61
+ const type = Obj.getTypename(obj);
62
+ if (type) {
63
+ const count = map[type] ?? 0;
64
+ map[type] = count + 1;
65
+ }
66
+
67
+ return map;
68
+ }, {}),
69
+ );
70
+
71
+ setInfo({
72
+ schema: {
73
+ static: staticSchema.length,
74
+ mutable: echoSchema.length,
75
+ },
76
+ objects: objectMap,
77
+ });
78
+ }, [space]);
79
+
80
+ useAsyncEffect(updateInfo, [updateInfo]);
81
+
82
+ const handleCreateData = useCallback(
83
+ async (typename: string) => {
84
+ const constructor = typeMap.get(typename);
85
+ if (constructor) {
86
+ // TODO(burdon): Input to specify number of objects.
87
+ await constructor(space, count, onCreateObjects);
88
+ await updateInfo();
89
+ }
90
+ },
91
+ [typeMap, count, space, onCreateObjects, updateInfo],
92
+ );
93
+
94
+ return (
95
+ <Panel.Root {...composableProps(props)} ref={forwardedRef}>
96
+ <Panel.Toolbar asChild>
97
+ <Toolbar.Root>
98
+ <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />
99
+ <Toolbar.Separator />
100
+ <Input.Root>
101
+ <Input.TextInput
102
+ type='number'
103
+ placeholder='Count'
104
+ classNames='w-[4rem] text-right'
105
+ min={1}
106
+ max={100}
107
+ size={8}
108
+ value={count}
109
+ onChange={(event) => setCount(parseInt(event.target.value))}
110
+ />
111
+ </Input.Root>
112
+ </Toolbar.Root>
113
+ </Panel.Toolbar>
114
+ <Panel.Content asChild>
115
+ <ScrollArea.Root thin orientation='vertical'>
116
+ <ScrollArea.Viewport classNames='dx-document gap-4 divide-y divide-subdued-separator'>
117
+ <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />
118
+ <SchemaTable types={recordTypes} objects={info.objects} label='Record Types' onClick={handleCreateData} />
119
+ <SchemaTable types={presets.types} objects={info.objects} label='Presets' onClick={handleCreateData} />
120
+ </ScrollArea.Viewport>
121
+ </ScrollArea.Root>
122
+ </Panel.Content>
123
+ </Panel.Root>
124
+ );
125
+ },
126
+ );
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { SpaceGenerator as default } from './SpaceGenerator';
@@ -8,13 +8,13 @@ import { useResizeDetector } from 'react-resize-detector';
8
8
  import { Obj } from '@dxos/echo';
9
9
  import { type ThemedClassName } from '@dxos/react-ui';
10
10
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
11
- import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
12
- import { mx } from '@dxos/react-ui-theme';
11
+ import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
12
+ import { mx } from '@dxos/ui-theme';
13
13
 
14
14
  // TODO(burdon): Create generic container with wireframe mode.
15
15
  export type WireframeProps = ThemedClassName<{
16
+ object: Obj.Unknown;
16
17
  label?: string;
17
- object: Obj.Any;
18
18
  }>;
19
19
 
20
20
  // TODO(burdon): Make focusable and attendable with input.
@@ -23,17 +23,13 @@ export const Wireframe = ({ classNames, label, object }: WireframeProps) => {
23
23
  const { width, height, ref } = useResizeDetector();
24
24
 
25
25
  return (
26
- <div ref={ref} className={mx('relative grow min-bs-96', classNames)} {...attentionAttrs}>
26
+ <div ref={ref} className={mx('relative grow min-h-96', classNames)} {...attentionAttrs}>
27
27
  <div className='absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono'>
28
28
  <div className='flex justify-between'>
29
29
  <div>{label}</div>
30
30
  <div>{`[${width}x${height}]`}</div>
31
31
  </div>
32
- {object && (
33
- <SyntaxHighlighter language='json' classNames='text-xs opacity-75 rounded'>
34
- {JSON.stringify(object, undefined, 2)}
35
- </SyntaxHighlighter>
36
- )}
32
+ {object && <JsonHighlighter data={object} classNames='text-xs opacity-75 rounded-sm' />}
37
33
  </div>
38
34
  <svg width={width} height={height} className='bg-transparent *:text-subdued'>
39
35
  <rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { Wireframe as default } from './Wireframe';
@@ -0,0 +1,13 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentType, lazy } from 'react';
6
+
7
+ export const DebugGraph: ComponentType<any> = lazy(() => import('./DebugGraph'));
8
+ export const DebugObjectPanel: ComponentType<any> = lazy(() => import('./DebugObjectPanel'));
9
+ export const DebugStatus: ComponentType<any> = lazy(() => import('./DebugStatus'));
10
+ export const DevtoolsOverviewContainer: ComponentType<any> = lazy(() => import('./DevtoolsOverviewContainer'));
11
+ export const SpaceGenerator: ComponentType<any> = lazy(() => import('./SpaceGenerator'));
12
+ export const Wireframe: ComponentType<any> = lazy(() => import('./Wireframe'));
13
+ export const DebugSpaceObjectsPanel: ComponentType<any> = lazy(() => import('./DebugSpaceObjectsPanel'));
package/src/index.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './DebugPlugin';
6
5
  export * from './meta';
6
+ export * from './types';
package/src/meta.ts CHANGED
@@ -2,11 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
6
  import { trim } from '@dxos/util';
7
7
 
8
- export const meta: PluginMeta = {
9
- id: 'dxos.org/plugin/debug',
8
+ export const meta: Plugin.Meta = {
9
+ id: 'org.dxos.plugin.debug',
10
10
  name: 'Debug',
11
11
  description: trim`
12
12
  Comprehensive developer toolkit for troubleshooting applications, generating test data, and exploring automation capabilities.
package/src/plugin.ts ADDED
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const DebugPlugin = Plugin.lazy(meta, () => import('#plugin'));
10
+ export type { DebugPluginOptions } from '#types';
@@ -3,71 +3,88 @@
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
+ import { translations as introspectTranslations } from '@dxos/react-ui-introspect/translations';
6
7
 
7
- import { meta } from './meta';
8
+ import { meta } from '#meta';
8
9
 
9
10
  export const translations = [
11
+ ...introspectTranslations,
10
12
  {
11
13
  'en-US': {
12
14
  [meta.id]: {
13
- 'plugin name': 'Debug',
14
- 'settings title': 'Debug settings',
15
- 'mutation count': 'Number of mutations',
16
- 'mutation period': 'Mutation period',
17
- 'open devtools label': 'Open DevTools',
18
- 'devtools label': 'DevTools',
19
- 'devtools overview label': 'Stats',
20
- 'debug label': 'Debug',
21
- 'debug app graph label': 'App Graph',
22
- 'settings show debug panel': 'Show Debug panel.',
23
- 'settings show devtools panel': 'Show DevTools panel.',
24
- 'settings wireframe': 'Show wireframes.',
25
- 'settings repair': 'Run repair tool.',
26
- 'settings download diagnostics': 'Download diagnostics.',
27
- 'settings uploaded': 'Uploaded to IPFS',
28
- 'settings uploaded to clipboard': 'URL copied to clipboard.',
29
- 'settings repair success': 'Repair succeeded',
30
- 'settings repair failed': 'Repair failed',
31
- 'settings choose storage adaptor': 'Storage adaptor (worker reload required).',
32
- 'settings storage adaptor idb label': 'IndexedDB',
33
- 'settings storage adaptor opfs label': 'OPFS',
34
- 'settings data store label': 'Data Store',
35
- 'settings storage adapter changed alert':
15
+ 'plugin.name': 'Debug',
16
+ 'settings.title': 'Debug settings',
17
+ 'open-devtools.label': 'Open DevTools',
18
+ 'devtools.label': 'DevTools',
19
+ 'devtools-overview.label': 'Stats',
20
+ 'space-objects.label': 'Database',
21
+ 'debug.label': 'Debug',
22
+ 'generate-objects.label': 'Generate Objects',
23
+ 'debug-app-graph.label': 'App Graph',
24
+ 'debug-tools-explorer.label': 'SDK Explorer',
25
+
26
+ 'settings.wireframe.label': 'Show wireframes.',
27
+ 'settings.wireframe.description': 'Overlay wireframe outlines on UI components for debugging layout.',
28
+ 'settings.trace-all.label': 'Trace all requests (100% sampling).',
29
+ 'settings.trace-all.description':
30
+ 'Override the default 30% sampling rate to capture all traces. Requires page reload to take effect.',
31
+ 'settings.tracing-panel.label': 'Open tracing panel.',
32
+ 'settings.tracing-panel.description': 'Open the tracing dashboard to inspect captured spans.',
33
+ 'settings.repair.label': 'Run repair tool.',
34
+ 'settings.repair.description': 'Attempt to detect and fix inconsistencies in local data storage.',
35
+ 'settings.download-diagnostics.label': 'Download diagnostics.',
36
+ 'settings.download-diagnostics.description':
37
+ 'Export a JSON file containing client diagnostics for troubleshooting.',
38
+ 'settings.download-logs.label': 'Download log buffer.',
39
+ 'settings.download-logs.description': 'Export the in-memory log buffer as an NDJSON file.',
40
+ 'settings.uploaded.message': 'Settings uploaded.',
41
+ 'settings.uploaded.description': 'URL copied to clipboard.',
42
+ 'settings.choose-storage-adaptor.label': 'Storage adaptor (worker reload required).',
43
+ 'settings.choose-storage-adaptor.description':
44
+ 'Select the browser storage backend. Changing this requires a worker reload and may make existing data unavailable.',
45
+ 'settings.repair-success.message': 'Repair succeeded',
46
+ 'settings.repair-failed.message': 'Repair failed',
47
+
48
+ 'settings.storage-adaptor.idb.label': 'IndexedDB',
49
+ 'settings.storage-adaptor.opfs.label': 'OPFS',
50
+ 'settings.storage-adapter.changed-alert.message':
36
51
  'Warning: Swapping the storage adapter will make your data unavailable.',
37
- 'settings space fragmentation': 'Enable AM space fragmentation',
38
- 'open debug panel label': 'Show Debug',
39
- 'client label': 'Client',
40
- 'config label': 'Config',
41
- 'storage label': 'Storage',
42
- 'logs label': 'Logs',
43
- 'diagnostics label': 'Diagnostics',
44
- 'tracing label': 'Tracing',
45
- 'halo label': 'HALO',
46
- 'identity label': 'Identity',
47
- 'devices label': 'Devices',
48
- 'keyring label': 'Keyring',
49
- 'credentials label': 'Credentials',
50
- 'echo label': 'ECHO',
51
- 'spaces label': 'Spaces',
52
- 'space label': 'Space',
53
- 'feeds label': 'Feeds',
54
- 'objects label': 'Objects',
55
- 'schema label': 'Schema',
56
- 'automerge label': 'Automerge',
57
- 'queues label': 'Queues',
58
- 'members label': 'Members',
59
- 'metadata label': 'Metadata',
60
- 'mesh label': 'MESH',
61
- 'signal label': 'Signal',
62
- 'swarm label': 'Swarm',
63
- 'network label': 'Network',
64
- 'agent label': 'Agent',
65
- 'dashboard label': 'Dashboard',
66
- 'search label': 'Search',
67
- 'edge label': 'EDGE',
68
- 'workflows label': 'Workflows',
69
- 'traces label': 'Traces',
70
- 'testing label': 'Testing',
52
+
53
+ 'settings.data-store.label': 'Data Store',
54
+
55
+ 'open-debug-panel.label': 'Show Debug',
56
+ 'client.label': 'Client',
57
+ 'config.label': 'Config',
58
+ 'storage.label': 'Storage',
59
+ 'logs.label': 'Logs',
60
+ 'diagnostics.label': 'Diagnostics',
61
+ 'tracing.label': 'Tracing',
62
+ 'halo.label': 'HALO',
63
+ 'identity.label': 'Identity',
64
+ 'devices.label': 'Devices',
65
+ 'keyring.label': 'Keyring',
66
+ 'credentials.label': 'Credentials',
67
+ 'echo.label': 'ECHO',
68
+ 'spaces.label': 'Spaces',
69
+ 'space.label': 'Space',
70
+ 'feeds.label': 'Feeds',
71
+ 'objects.label': 'Objects',
72
+ 'schema.label': 'Schema',
73
+ 'automerge.label': 'Automerge',
74
+ 'queues.label': 'Queues',
75
+ 'members.label': 'Members',
76
+ 'metadata.label': 'Metadata',
77
+ 'mesh.label': 'MESH',
78
+ 'signal.label': 'Signal',
79
+ 'swarm.label': 'Swarm',
80
+ 'network.label': 'Network',
81
+ 'agent.label': 'Agent',
82
+ 'dashboard.label': 'Dashboard',
83
+ 'search.label': 'Search',
84
+ 'edge.label': 'EDGE',
85
+ 'workflows.label': 'Workflows',
86
+ 'traces.label': 'Traces',
87
+ 'testing.label': 'Testing',
71
88
  },
72
89
  },
73
90
  },
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ export const Settings = Schema.mutable(
10
+ Schema.Struct({
11
+ wireframe: Schema.optional(Schema.Boolean),
12
+ traceAll: Schema.optional(Schema.Boolean),
13
+ }),
14
+ );
15
+
16
+ export interface Settings extends Schema.Schema.Type<typeof Settings> {}