@dxos/plugin-debug 0.8.3 → 0.8.4-main.1da679c

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 (76) hide show
  1. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs +20 -0
  2. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs.map +7 -0
  3. package/dist/lib/browser/{DevtoolsOverviewContainer-IIIWO77Q.mjs → DevtoolsOverviewContainer-EPD6EWT5.mjs} +2 -2
  4. package/dist/lib/browser/{SpaceGenerator-VB6IB2LL.mjs → SpaceGenerator-SB2YRVRT.mjs} +376 -494
  5. package/dist/lib/browser/SpaceGenerator-SB2YRVRT.mjs.map +7 -0
  6. package/dist/lib/browser/{app-graph-builder-6HHJMKVU.mjs → app-graph-builder-7ODCSP7R.mjs} +27 -37
  7. package/dist/lib/browser/app-graph-builder-7ODCSP7R.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-47JOZTT2.mjs → chunk-5XPIRNQS.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-KS3YBEL7.mjs → chunk-AJA6RYN3.mjs} +2 -2
  10. package/dist/lib/browser/index.mjs +17 -14
  11. package/dist/lib/browser/index.mjs.map +3 -3
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/{react-context-ZQRD2WG2.mjs → react-context-Y537DXK5.mjs} +5 -5
  14. package/dist/lib/browser/{react-context-ZQRD2WG2.mjs.map → react-context-Y537DXK5.mjs.map} +1 -1
  15. package/dist/lib/browser/{react-surface-UI6OK73H.mjs → react-surface-OP75RFNI.mjs} +45 -40
  16. package/dist/lib/browser/react-surface-OP75RFNI.mjs.map +7 -0
  17. package/dist/lib/browser/{settings-SXQWSIM4.mjs → settings-XAUQOU7I.mjs} +6 -6
  18. package/dist/lib/browser/{settings-SXQWSIM4.mjs.map → settings-XAUQOU7I.mjs.map} +1 -1
  19. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  20. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  21. package/dist/types/src/capabilities/index.d.ts +5 -5
  22. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  23. package/dist/types/src/capabilities/react-context.d.ts +2 -2
  24. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  25. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  26. package/dist/types/src/capabilities/settings.d.ts +1 -1
  27. package/dist/types/src/components/DebugGraph.d.ts +8 -0
  28. package/dist/types/src/components/DebugGraph.d.ts.map +1 -0
  29. package/dist/types/src/components/DebugSettings.d.ts.map +1 -1
  30. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +3 -1
  31. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  32. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +1 -1
  33. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  34. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +13 -3
  35. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
  37. package/dist/types/src/components/SpaceGenerator/presets.d.ts +5 -5
  38. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  39. package/dist/types/src/components/Wireframe.d.ts.map +1 -1
  40. package/dist/types/src/components/index.d.ts +2 -1
  41. package/dist/types/src/components/index.d.ts.map +1 -1
  42. package/dist/types/src/translations.d.ts +62 -60
  43. package/dist/types/src/translations.d.ts.map +1 -1
  44. package/dist/types/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +61 -59
  46. package/src/DebugPlugin.tsx +2 -2
  47. package/src/capabilities/app-graph-builder.ts +13 -40
  48. package/src/capabilities/react-surface.tsx +9 -8
  49. package/src/components/DebugGraph.tsx +14 -0
  50. package/src/components/DebugObjectPanel.tsx +1 -1
  51. package/src/components/DebugSettings.tsx +72 -64
  52. package/src/components/SpaceGenerator/ObjectGenerator.tsx +32 -26
  53. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +8 -6
  54. package/src/components/SpaceGenerator/SpaceGenerator.tsx +15 -72
  55. package/src/components/SpaceGenerator/draw-util.ts +3 -3
  56. package/src/components/SpaceGenerator/presets.ts +346 -221
  57. package/src/components/Wireframe.tsx +2 -1
  58. package/src/components/index.ts +1 -1
  59. package/src/translations.ts +8 -4
  60. package/dist/lib/browser/DebugApp-WSEJPCKY.mjs +0 -225
  61. package/dist/lib/browser/DebugApp-WSEJPCKY.mjs.map +0 -7
  62. package/dist/lib/browser/SpaceGenerator-VB6IB2LL.mjs.map +0 -7
  63. package/dist/lib/browser/app-graph-builder-6HHJMKVU.mjs.map +0 -7
  64. package/dist/lib/browser/react-surface-UI6OK73H.mjs.map +0 -7
  65. package/dist/types/src/components/DebugApp/DebugApp.d.ts +0 -6
  66. package/dist/types/src/components/DebugApp/DebugApp.d.ts.map +0 -1
  67. package/dist/types/src/components/DebugApp/Tree.d.ts +0 -18
  68. package/dist/types/src/components/DebugApp/Tree.d.ts.map +0 -1
  69. package/dist/types/src/components/DebugApp/index.d.ts +0 -3
  70. package/dist/types/src/components/DebugApp/index.d.ts.map +0 -1
  71. package/src/components/DebugApp/DebugApp.tsx +0 -77
  72. package/src/components/DebugApp/Tree.tsx +0 -103
  73. package/src/components/DebugApp/index.ts +0 -7
  74. /package/dist/lib/browser/{DevtoolsOverviewContainer-IIIWO77Q.mjs.map → DevtoolsOverviewContainer-EPD6EWT5.mjs.map} +0 -0
  75. /package/dist/lib/browser/{chunk-47JOZTT2.mjs.map → chunk-5XPIRNQS.mjs.map} +0 -0
  76. /package/dist/lib/browser/{chunk-KS3YBEL7.mjs.map → chunk-AJA6RYN3.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-debug",
3
- "version": "0.8.3",
3
+ "version": "0.8.4-main.1da679c",
4
4
  "description": "DXOS Surface plugin for testing.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,6 +10,7 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
13
14
  "types": "./dist/types/src/index.d.ts",
14
15
  "browser": "./dist/lib/browser/index.mjs"
15
16
  }
@@ -25,7 +26,7 @@
25
26
  "dependencies": {
26
27
  "@antv/graphlib": "^2.0.4",
27
28
  "@antv/layout": "^1.2.13",
28
- "@automerge/automerge": "3.0.0-beta.4",
29
+ "@automerge/automerge": "3.1.1",
29
30
  "@preact-signals/safe-react": "^0.9.0",
30
31
  "@preact/signals-core": "^1.9.0",
31
32
  "@tldraw/tldraw": "^3.0.0",
@@ -33,75 +34,76 @@
33
34
  "react-json-tree": "^0.18.0",
34
35
  "react-resize-detector": "^11.0.1",
35
36
  "workerize-loader": "^2.0.2",
36
- "@dxos/app-framework": "0.8.3",
37
- "@dxos/async": "0.8.3",
38
- "@dxos/compute": "0.8.3",
39
- "@dxos/client-services": "0.8.3",
40
- "@dxos/config": "0.8.3",
41
- "@dxos/conductor": "0.8.3",
42
- "@dxos/context": "0.8.3",
43
- "@dxos/devtools": "0.8.3",
44
- "@dxos/echo": "0.8.3",
45
- "@dxos/echo-generator": "0.8.3",
46
- "@dxos/echo-pipeline": "0.8.3",
47
- "@dxos/echo-schema": "0.8.3",
48
- "@dxos/functions": "0.8.3",
49
- "@dxos/invariant": "0.8.3",
50
- "@dxos/local-storage": "0.8.3",
51
- "@dxos/live-object": "0.8.3",
52
- "@dxos/keys": "0.8.3",
53
- "@dxos/log": "0.8.3",
54
- "@dxos/plugin-client": "0.8.3",
55
- "@dxos/plugin-deck": "0.8.3",
56
- "@dxos/plugin-graph": "0.8.3",
57
- "@dxos/plugin-markdown": "0.8.3",
58
- "@dxos/plugin-meeting": "0.8.3",
59
- "@dxos/plugin-sheet": "0.8.3",
60
- "@dxos/plugin-space": "0.8.3",
61
- "@dxos/plugin-script": "0.8.3",
62
- "@dxos/plugin-table": "0.8.3",
63
- "@dxos/plugin-status-bar": "0.8.3",
64
- "@dxos/protocols": "0.8.3",
65
- "@dxos/plugin-theme": "0.8.3",
66
- "@dxos/react-client": "0.8.3",
67
- "@dxos/react-ui-attention": "0.8.3",
68
- "@dxos/react-ui-canvas-compute": "0.8.3",
69
- "@dxos/react-ui-canvas-editor": "0.8.3",
70
- "@dxos/random": "0.8.3",
71
- "@dxos/react-ui-form": "0.8.3",
72
- "@dxos/react-ui-kanban": "0.8.3",
73
- "@dxos/react-hooks": "0.8.3",
74
- "@dxos/react-ui-stack": "0.8.3",
75
- "@dxos/react-ui-table": "0.8.3",
76
- "@dxos/react-ui-syntax-highlighter": "0.8.3",
77
- "@dxos/schema": "0.8.3",
78
- "@dxos/util": "0.8.3",
79
- "@dxos/plugin-sketch": "0.8.3"
37
+ "@dxos/app-framework": "0.8.4-main.1da679c",
38
+ "@dxos/assistant-testing": "0.8.4-main.1da679c",
39
+ "@dxos/client-services": "0.8.4-main.1da679c",
40
+ "@dxos/blueprints": "0.8.4-main.1da679c",
41
+ "@dxos/compute": "0.8.4-main.1da679c",
42
+ "@dxos/config": "0.8.4-main.1da679c",
43
+ "@dxos/conductor": "0.8.4-main.1da679c",
44
+ "@dxos/context": "0.8.4-main.1da679c",
45
+ "@dxos/async": "0.8.4-main.1da679c",
46
+ "@dxos/devtools": "0.8.4-main.1da679c",
47
+ "@dxos/echo": "0.8.4-main.1da679c",
48
+ "@dxos/echo-generator": "0.8.4-main.1da679c",
49
+ "@dxos/echo-schema": "0.8.4-main.1da679c",
50
+ "@dxos/echo-pipeline": "0.8.4-main.1da679c",
51
+ "@dxos/functions": "0.8.4-main.1da679c",
52
+ "@dxos/invariant": "0.8.4-main.1da679c",
53
+ "@dxos/keys": "0.8.4-main.1da679c",
54
+ "@dxos/live-object": "0.8.4-main.1da679c",
55
+ "@dxos/log": "0.8.4-main.1da679c",
56
+ "@dxos/plugin-client": "0.8.4-main.1da679c",
57
+ "@dxos/plugin-deck": "0.8.4-main.1da679c",
58
+ "@dxos/plugin-inbox": "0.8.4-main.1da679c",
59
+ "@dxos/local-storage": "0.8.4-main.1da679c",
60
+ "@dxos/plugin-graph": "0.8.4-main.1da679c",
61
+ "@dxos/plugin-meeting": "0.8.4-main.1da679c",
62
+ "@dxos/plugin-script": "0.8.4-main.1da679c",
63
+ "@dxos/plugin-markdown": "0.8.4-main.1da679c",
64
+ "@dxos/plugin-sheet": "0.8.4-main.1da679c",
65
+ "@dxos/plugin-sketch": "0.8.4-main.1da679c",
66
+ "@dxos/plugin-space": "0.8.4-main.1da679c",
67
+ "@dxos/plugin-status-bar": "0.8.4-main.1da679c",
68
+ "@dxos/plugin-table": "0.8.4-main.1da679c",
69
+ "@dxos/plugin-theme": "0.8.4-main.1da679c",
70
+ "@dxos/random": "0.8.4-main.1da679c",
71
+ "@dxos/protocols": "0.8.4-main.1da679c",
72
+ "@dxos/react-hooks": "0.8.4-main.1da679c",
73
+ "@dxos/react-ui-attention": "0.8.4-main.1da679c",
74
+ "@dxos/react-client": "0.8.4-main.1da679c",
75
+ "@dxos/react-ui-canvas-compute": "0.8.4-main.1da679c",
76
+ "@dxos/react-ui-canvas-editor": "0.8.4-main.1da679c",
77
+ "@dxos/react-ui-form": "0.8.4-main.1da679c",
78
+ "@dxos/react-ui-kanban": "0.8.4-main.1da679c",
79
+ "@dxos/react-ui-stack": "0.8.4-main.1da679c",
80
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.1da679c",
81
+ "@dxos/react-ui-table": "0.8.4-main.1da679c",
82
+ "@dxos/util": "0.8.4-main.1da679c",
83
+ "@dxos/schema": "0.8.4-main.1da679c"
80
84
  },
81
85
  "devDependencies": {
82
- "@effect-rx/rx-react": "^0.34.1",
83
- "@effect/platform": "0.80.12",
84
- "@phosphor-icons/react": "^2.1.5",
86
+ "@effect-rx/rx-react": "0.38.0",
87
+ "@effect/platform": "0.90.2",
85
88
  "@types/react": "~18.2.0",
86
89
  "@types/react-dom": "~18.2.0",
87
- "effect": "3.14.21",
90
+ "effect": "3.17.7",
88
91
  "react": "~18.2.0",
89
92
  "react-dom": "~18.2.0",
90
- "vite": "5.4.7",
91
- "@dxos/react-ui": "0.8.3",
92
- "@dxos/react-ui-theme": "0.8.3",
93
- "@dxos/storybook-utils": "0.8.3"
93
+ "vite": "7.1.1",
94
+ "@dxos/react-ui": "0.8.4-main.1da679c",
95
+ "@dxos/storybook-utils": "0.8.4-main.1da679c",
96
+ "@dxos/react-ui-theme": "0.8.4-main.1da679c"
94
97
  },
95
98
  "peerDependencies": {
96
99
  "@effect-rx/rx-react": "^0.34.1",
97
- "@effect/platform": "0.80.12",
98
- "@phosphor-icons/react": "^2.1.5",
100
+ "@effect/platform": "^0.80.12",
99
101
  "effect": "^3.13.3",
100
102
  "react": "~18.2.0",
101
103
  "react-dom": "~18.2.0",
102
- "@dxos/react-ui-theme": "0.8.3",
103
- "@dxos/react-ui": "0.8.3",
104
- "@dxos/random": "0.8.3"
104
+ "@dxos/random": "0.8.4-main.1da679c",
105
+ "@dxos/react-ui": "0.8.4-main.1da679c",
106
+ "@dxos/react-ui-theme": "0.8.4-main.1da679c"
105
107
  },
106
108
  "publishConfig": {
107
109
  "access": "public"
@@ -2,12 +2,12 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, defineModule, definePlugin, Events } from '@dxos/app-framework';
5
+ import { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';
6
6
  import { type Client } from '@dxos/react-client';
7
7
 
8
8
  import { AppGraphBuilder, DebugSettings, ReactContext, ReactSurface } from './capabilities';
9
9
  import { meta } from './meta';
10
- import translations from './translations';
10
+ import { translations } from './translations';
11
11
 
12
12
  // TODO(wittjosiah): Rename to DevtoolsPlugin?
13
13
  export const DebugPlugin = () => {
@@ -5,11 +5,11 @@
5
5
  import { Rx } from '@effect-rx/rx-react';
6
6
  import { Option, pipe } from 'effect';
7
7
 
8
- import { contributes, Capabilities, type PluginContext } from '@dxos/app-framework';
8
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
9
9
  import { Obj } from '@dxos/echo';
10
10
  import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
11
- import { createExtension, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';
12
- import { getActiveSpace, SPACE_PLUGIN } from '@dxos/plugin-space';
11
+ import { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';
12
+ import { SPACE_PLUGIN, getActiveSpace } from '@dxos/plugin-space';
13
13
 
14
14
  import { DEBUG_PLUGIN } from '../meta';
15
15
  import { Devtools } from '../types';
@@ -30,6 +30,7 @@ export default (context: PluginContext) =>
30
30
  ),
31
31
  Option.map((node) => {
32
32
  const space = get(rxFromSignal(() => getActiveSpace(context)));
33
+ const [graph] = get(context.capabilities(Capabilities.AppGraph));
33
34
 
34
35
  return [
35
36
  {
@@ -56,6 +57,15 @@ export default (context: PluginContext) =>
56
57
  },
57
58
  ]
58
59
  : []),
60
+ {
61
+ id: `app-graph-${node.id}`,
62
+ type: 'dxos.org/plugin/debug/app-graph',
63
+ data: { graph: graph?.graph, root: space ? space.id : ROOT_ID },
64
+ properties: {
65
+ label: ['debug app graph label', { ns: DEBUG_PLUGIN }],
66
+ icon: 'ph--graph--regular',
67
+ },
68
+ },
59
69
  {
60
70
  id: `${Devtools.Client.id}-${node.id}`,
61
71
  data: null,
@@ -366,43 +376,6 @@ export default (context: PluginContext) =>
366
376
  ),
367
377
  }),
368
378
 
369
- // Debug node.
370
- createExtension({
371
- id: 'dxos.org/plugin/debug/debug',
372
- connector: (node) =>
373
- Rx.make((get) =>
374
- pipe(
375
- get(node),
376
- Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
377
- Option.flatMap(() => {
378
- const [graph] = get(context.capabilities(Capabilities.AppGraph));
379
- return graph ? Option.some(graph) : Option.none();
380
- }),
381
- Option.flatMap((graph) => {
382
- // TODO(wittjosiah): Plank is currently blank. Remove?
383
- // const settings = context
384
- // .requestCapabilities(Capabilities.SettingsStore)[0]
385
- // ?.getStore<DebugSettingsProps>(DEBUG_PLUGIN)?.value;
386
- // return !!settings?.debug && node.id === 'root';
387
- return Option.none();
388
- }),
389
- Option.map((graph) => [
390
- {
391
- id: 'dxos.org/plugin/debug/debug',
392
- type: 'dxos.org/plugin/debug/debug',
393
- data: { graph },
394
- properties: {
395
- label: ['debug label', { ns: DEBUG_PLUGIN }],
396
- disposition: 'navigation',
397
- icon: 'ph--bug--regular',
398
- },
399
- },
400
- ]),
401
- Option.getOrElse(() => []),
402
- ),
403
- ),
404
- }),
405
-
406
379
  // Debug object companion.
407
380
  createExtension({
408
381
  id: `${DEBUG_PLUGIN}/debug-object`,
@@ -7,14 +7,14 @@ import React, { useCallback } from 'react';
7
7
 
8
8
  import {
9
9
  Capabilities,
10
+ LayoutAction,
11
+ type PluginContext,
10
12
  chain,
11
13
  contributes,
12
14
  createIntent,
13
15
  createSurface,
14
- LayoutAction,
15
16
  useCapability,
16
17
  useIntentDispatcher,
17
- type PluginContext,
18
18
  } from '@dxos/app-framework';
19
19
  import {
20
20
  AutomergePanel,
@@ -43,19 +43,19 @@ import {
43
43
  TracingPanel,
44
44
  WorkflowPanel,
45
45
  } from '@dxos/devtools';
46
- import { Obj, Type } from '@dxos/echo';
46
+ import { Obj } from '@dxos/echo';
47
47
  import { SettingsStore } from '@dxos/local-storage';
48
48
  import { log } from '@dxos/log';
49
49
  import { ClientCapabilities } from '@dxos/plugin-client';
50
50
  import { Graph } from '@dxos/plugin-graph';
51
51
  import { ScriptAction } from '@dxos/plugin-script/types';
52
52
  import { SpaceAction } from '@dxos/plugin-space/types';
53
- import { SpaceState, isSpace, type Space, parseId } from '@dxos/react-client/echo';
53
+ import { type Space, SpaceState, isSpace, parseId } from '@dxos/react-client/echo';
54
54
  import { StackItem } from '@dxos/react-ui-stack';
55
55
  import { DataType } from '@dxos/schema';
56
56
 
57
57
  import {
58
- DebugApp,
58
+ DebugGraph,
59
59
  DebugObjectPanel,
60
60
  DebugSettings,
61
61
  DebugStatus,
@@ -73,10 +73,11 @@ type SpaceDebug = {
73
73
 
74
74
  type GraphDebug = {
75
75
  graph: Graph;
76
+ root: string;
76
77
  };
77
78
 
78
79
  const isSpaceDebug = (data: any): data is SpaceDebug => data?.type === `${DEBUG_PLUGIN}/space` && isSpace(data.space);
79
- const isGraphDebug = (data: any): data is GraphDebug => data?.graph instanceof Graph;
80
+ const isGraphDebug = (data: any): data is GraphDebug => data?.graph instanceof Graph && typeof data?.root === 'string';
80
81
 
81
82
  // TODO(wittjosiah): Factor out?
82
83
  const useCurrentSpace = () => {
@@ -111,7 +112,7 @@ export default (context: PluginContext) =>
111
112
 
112
113
  const collection =
113
114
  data.subject.space.state.get() === SpaceState.SPACE_READY &&
114
- data.subject.space.properties[Type.getTypename(DataType.Collection)]?.target;
115
+ data.subject.space.properties[DataType.Collection.typename]?.target;
115
116
  if (!Obj.instanceOf(DataType.Collection, collection)) {
116
117
  return;
117
118
  }
@@ -134,7 +135,7 @@ export default (context: PluginContext) =>
134
135
  id: `${DEBUG_PLUGIN}/graph`,
135
136
  role: 'article',
136
137
  filter: (data): data is { subject: GraphDebug } => isGraphDebug(data.subject),
137
- component: ({ data }) => <DebugApp graph={data.subject.graph} />,
138
+ component: ({ data }) => <DebugGraph graph={data.subject.graph} root={data.subject.root} />,
138
139
  }),
139
140
  createSurface({
140
141
  id: `${DEBUG_PLUGIN}/wireframe`,
@@ -0,0 +1,14 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React, { type FC } from 'react';
6
+
7
+ import { Tree } from '@dxos/devtools';
8
+ import { type Graph } from '@dxos/plugin-graph';
9
+
10
+ export const DebugGraph: FC<{ graph: Graph; root: string }> = ({ graph, root }) => {
11
+ return <Tree data={graph.toJSON(root)} />;
12
+ };
13
+
14
+ export default DebugGraph;
@@ -26,7 +26,7 @@ export const DebugObjectPanel = ({ object }: DebugObjectPanelProps) => {
26
26
  <Clipboard.IconButton value={dxn} />
27
27
  </Input.Root>
28
28
  </Toolbar.Root>
29
- <SyntaxHighlighter classNames='flex text-xs' language='json'>
29
+ <SyntaxHighlighter language='json' classNames='text-xs'>
30
30
  {JSON.stringify(object, null, 2)}
31
31
  </SyntaxHighlighter>
32
32
  </StackItem.Content>
@@ -5,11 +5,11 @@
5
5
  import React, { useEffect, useState } from 'react';
6
6
 
7
7
  import { Capabilities, useCapabilities } from '@dxos/app-framework';
8
- import { type ConfigProto, defs, SaveConfig, Storage } from '@dxos/config';
8
+ import { type ConfigProto, SaveConfig, Storage, defs } from '@dxos/config';
9
9
  import { log } from '@dxos/log';
10
10
  import { useClient } from '@dxos/react-client';
11
- import { useTranslation, Button, Toast, Input, useFileDownload, Select, Icon } from '@dxos/react-ui';
12
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
11
+ import { Button, Icon, Input, Select, Toast, useFileDownload, useTranslation } from '@dxos/react-ui';
12
+ import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
13
13
  import { setDeep } from '@dxos/util';
14
14
 
15
15
  import { DEBUG_PLUGIN } from '../meta';
@@ -77,67 +77,75 @@ export const DebugSettings = ({ settings }: { settings: DebugSettingsProps }) =>
77
77
  };
78
78
 
79
79
  return (
80
- <DeprecatedFormContainer>
81
- <DeprecatedFormInput label={t('settings wireframe')}>
82
- <Input.Switch checked={settings.wireframe} onCheckedChange={(checked) => (settings.wireframe = !!checked)} />
83
- </DeprecatedFormInput>
84
- <DeprecatedFormInput label={t('settings download diagnostics')}>
85
- <Button onClick={handleDownload}>
86
- <Icon icon='ph--download-simple--regular' size={5} />
87
- </Button>
88
- </DeprecatedFormInput>
89
- <DeprecatedFormInput label={t('settings repair')}>
90
- <Button onClick={handleRepair}>
91
- <Icon icon='ph--first-aid-kit--regular' size={5} />
92
- </Button>
93
- </DeprecatedFormInput>
94
-
95
- {/* TODO(burdon): Move to layout? */}
96
- {toast && (
97
- <Toast.Root>
98
- <Toast.Body>
99
- <Toast.Title>
100
- <Icon icon='ph--gift--duotone' size={5} classNames='inline mr-1' />
101
- <span>{toast.title}</span>
102
- </Toast.Title>
103
- {toast.description && <Toast.Description>{toast.description}</Toast.Description>}
104
- </Toast.Body>
105
- </Toast.Root>
106
- )}
107
-
108
- <DeprecatedFormInput label={t('settings choose storage adaptor')}>
109
- <Select.Root
110
- value={
111
- Object.entries(StorageAdapters).find(
112
- ([name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,
113
- )?.[0]
114
- }
115
- onValueChange={(value) => {
116
- if (confirm(t('settings storage adapter changed alert'))) {
117
- updateConfig(
118
- storageConfig,
119
- setStorageConfig,
120
- ['runtime', 'client', 'storage', 'dataStore'],
121
- StorageAdapters[value as keyof typeof StorageAdapters],
122
- );
123
- }
124
- }}
125
- >
126
- <Select.TriggerButton placeholder={t('settings data store label')} />
127
- <Select.Portal>
128
- <Select.Content>
129
- <Select.Viewport>
130
- {Object.keys(StorageAdapters).map((key) => (
131
- <Select.Option key={key} value={key}>
132
- {t(`settings storage adaptor ${key} label`)}
133
- </Select.Option>
134
- ))}
135
- </Select.Viewport>
136
- </Select.Content>
137
- </Select.Portal>
138
- </Select.Root>
139
- </DeprecatedFormInput>
140
- </DeprecatedFormContainer>
80
+ <ControlPage>
81
+ <ControlSection title={t('settings title', { ns: DEBUG_PLUGIN })}>
82
+ <ControlGroup>
83
+ <ControlItemInput title={t('settings wireframe')}>
84
+ <Input.Switch
85
+ checked={settings.wireframe}
86
+ onCheckedChange={(checked) => (settings.wireframe = !!checked)}
87
+ />
88
+ </ControlItemInput>
89
+ <ControlItemInput title={t('settings download diagnostics')}>
90
+ <Button onClick={handleDownload}>
91
+ <Icon icon='ph--download-simple--regular' size={5} />
92
+ </Button>
93
+ </ControlItemInput>
94
+ <ControlItemInput title={t('settings repair')}>
95
+ <Button onClick={handleRepair}>
96
+ <Icon icon='ph--first-aid-kit--regular' size={5} />
97
+ </Button>
98
+ </ControlItemInput>
99
+
100
+ {/* TODO(burdon): Move to layout? */}
101
+ {toast && (
102
+ <Toast.Root>
103
+ <Toast.Body>
104
+ <Toast.Title>
105
+ <Icon icon='ph--gift--duotone' size={5} classNames='inline mr-1' />
106
+ <span>{toast.title}</span>
107
+ </Toast.Title>
108
+ {toast.description && <Toast.Description>{toast.description}</Toast.Description>}
109
+ </Toast.Body>
110
+ </Toast.Root>
111
+ )}
112
+
113
+ <ControlItemInput title={t('settings choose storage adaptor')}>
114
+ <Select.Root
115
+ value={
116
+ Object.entries(StorageAdapters).find(
117
+ ([name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,
118
+ )?.[0]
119
+ }
120
+ onValueChange={(value) => {
121
+ if (confirm(t('settings storage adapter changed alert'))) {
122
+ updateConfig(
123
+ storageConfig,
124
+ setStorageConfig,
125
+ ['runtime', 'client', 'storage', 'dataStore'],
126
+ StorageAdapters[value as keyof typeof StorageAdapters],
127
+ );
128
+ }
129
+ }}
130
+ >
131
+ <Select.TriggerButton placeholder={t('settings data store label')} />
132
+ <Select.Portal>
133
+ <Select.Content>
134
+ <Select.Viewport>
135
+ {Object.keys(StorageAdapters).map((key) => (
136
+ <Select.Option key={key} value={key}>
137
+ {t(`settings storage adaptor ${key} label`)}
138
+ </Select.Option>
139
+ ))}
140
+ </Select.Viewport>
141
+ <Select.Arrow />
142
+ </Select.Content>
143
+ </Select.Portal>
144
+ </Select.Root>
145
+ </ControlItemInput>
146
+ </ControlGroup>
147
+ </ControlSection>
148
+ </ControlPage>
141
149
  );
142
150
  };
143
151
 
@@ -2,58 +2,64 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { type PromiseIntentDispatcher, createIntent } from '@dxos/app-framework';
5
6
  import { addressToA1Notation } from '@dxos/compute';
6
7
  import { ComputeGraph, ComputeGraphModel, DEFAULT_OUTPUT, NODE_INPUT, NODE_OUTPUT } from '@dxos/conductor';
7
- import { DXN, Filter, Key, Obj, Ref } from '@dxos/echo';
8
+ import { DXN, Filter, Key, Obj, Ref, Type } from '@dxos/echo';
8
9
  import { type TypedObject } from '@dxos/echo-schema';
9
- import { DocumentType } from '@dxos/plugin-markdown/types';
10
+ import { Markdown } from '@dxos/plugin-markdown/types';
10
11
  import { createSheet } from '@dxos/plugin-sheet/types';
11
- import { SheetType, type CellValue } from '@dxos/plugin-sheet/types';
12
+ import { type CellValue, SheetType } from '@dxos/plugin-sheet/types';
12
13
  import { CanvasType, DiagramType } from '@dxos/plugin-sketch/types';
14
+ import { SpaceAction } from '@dxos/plugin-space/types';
13
15
  import { faker } from '@dxos/random';
16
+ import { type Client } from '@dxos/react-client';
14
17
  import { type Space } from '@dxos/react-client/echo';
15
- import { TableType } from '@dxos/react-ui-table';
16
- import { createView, DataType } from '@dxos/schema';
17
- import { createAsyncGenerator, type ValueGenerator } from '@dxos/schema/testing';
18
+ import { DataType, typenameFromQuery } from '@dxos/schema';
19
+ import { type ValueGenerator, createAsyncGenerator } from '@dxos/schema/testing';
18
20
  import { range } from '@dxos/util';
19
21
 
20
22
  const generator: ValueGenerator = faker as any;
21
23
 
24
+ const findViewByTypename = async (views: DataType.View[], typename: string) => {
25
+ return views.find((view) => typenameFromQuery(view.query) === typename);
26
+ };
27
+
22
28
  export type ObjectGenerator<T extends Obj.Any> = (space: Space, n: number, cb?: (objects: T[]) => void) => Promise<T[]>;
23
29
 
24
- export const createGenerator = <T extends Obj.Any>(type: TypedObject<T>): ObjectGenerator<T> => {
25
- return async (space: Space, n: number, cb?: (objects: T[]) => void): Promise<T[]> => {
26
- // Find or create mutable schema.
27
- const schema =
28
- (await space.db.schemaRegistry.query({ typename: type.typename }).firstOrUndefined()) ??
29
- (await space.db.schemaRegistry.register([type]))[0];
30
-
31
- // Create objects.
32
- const generate = createAsyncGenerator(generator, schema.snapshot, { db: space.db });
33
- const objects = await generate.createObjects(n);
30
+ export const createGenerator = <T extends Obj.Any>(
31
+ client: Client,
32
+ dispatch: PromiseIntentDispatcher,
33
+ schema: TypedObject<T>,
34
+ ): ObjectGenerator<T> => {
35
+ return async (space: Space, n: number): Promise<T[]> => {
36
+ const typename = schema.typename;
34
37
 
35
38
  // Find or create table and view.
36
- const { objects: tables } = await space.db.query(Filter.type(TableType)).run();
37
- const table = tables.find((table) => table.view?.target?.query?.typename === type.typename);
38
- if (!table) {
39
- const name = type.typename.split('/').pop() ?? type.typename;
40
- const view = createView({ name, typename: type.typename, jsonSchema: schema.jsonSchema });
41
- space.db.add(Obj.make(TableType, { name, view: Ref.make(view) }));
39
+ const { objects: views } = await space.db.query(Filter.type(DataType.View)).run();
40
+ const view = await findViewByTypename(views, typename);
41
+ const staticSchema = client?.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);
42
+ if (!view && !staticSchema) {
43
+ await dispatch(createIntent(SpaceAction.AddSchema, { space, schema }));
44
+ } else if (!view && staticSchema) {
45
+ await dispatch(createIntent(SpaceAction.UseStaticSchema, { space, typename }));
42
46
  }
43
47
 
44
- return objects;
48
+ // Create objects.
49
+ const generate = createAsyncGenerator(generator, schema, { db: space.db });
50
+ return generate.createObjects(n);
45
51
  };
46
52
  };
47
53
 
48
54
  export const staticGenerators = new Map<string, ObjectGenerator<any>>([
49
55
  [
50
- DocumentType.typename,
56
+ Markdown.Document.typename,
51
57
  async (space, n, cb) => {
52
58
  const objects = range(n).map(() => {
53
59
  return space.db.add(
54
- Obj.make(DocumentType, {
60
+ Markdown.makeDocument({
55
61
  name: faker.commerce.productName(),
56
- content: Ref.make(Obj.make(DataType.Text, { content: faker.lorem.sentences(5) })),
62
+ content: faker.lorem.sentences(5),
57
63
  }),
58
64
  );
59
65
  });
@@ -4,7 +4,7 @@
4
4
 
5
5
  import '@dxos-theme';
6
6
 
7
- import { type Meta } from '@storybook/react';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
8
  import React from 'react';
9
9
 
10
10
  import { IntentPlugin } from '@dxos/app-framework';
@@ -24,15 +24,15 @@ const DefaultStory = () => {
24
24
  return <SpaceGenerator space={space} />;
25
25
  };
26
26
 
27
- const meta: Meta = {
27
+ const meta = {
28
28
  title: 'plugins/plugin-debug/SpaceGenerator',
29
- component: SpaceGenerator,
29
+ component: SpaceGenerator as any,
30
30
  render: render(DefaultStory),
31
31
  decorators: [
32
32
  withPluginManager({
33
33
  plugins: [
34
34
  ClientPlugin({
35
- onClientInitialized: async (_, client) => {
35
+ onClientInitialized: async ({ client }) => {
36
36
  await client.halo.createIdentity();
37
37
  },
38
38
  }),
@@ -45,8 +45,10 @@ const meta: Meta = {
45
45
  parameters: {
46
46
  layout: 'fullscreen',
47
47
  },
48
- };
48
+ } satisfies Meta<typeof DefaultStory>;
49
49
 
50
50
  export default meta;
51
51
 
52
- export const Default = {};
52
+ type Story = StoryObj<typeof meta>;
53
+
54
+ export const Default: Story = {};