@dxos/plugin-explorer 0.8.2-main.fbd8ed0 → 0.8.2-staging.42af850

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 (143) hide show
  1. package/dist/lib/browser/ExplorerContainer-BBZ54DJS.mjs +37 -0
  2. package/dist/lib/browser/ExplorerContainer-BBZ54DJS.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-JL7ZGOFE.mjs → chunk-73GQ46YO.mjs} +415 -155
  4. package/dist/lib/{node-esm/chunk-MUHCE377.mjs.map → browser/chunk-73GQ46YO.mjs.map} +4 -4
  5. package/dist/lib/browser/{chunk-HKQSZX7S.mjs → chunk-73YTQHOT.mjs} +3 -3
  6. package/dist/lib/browser/{chunk-HKQSZX7S.mjs.map → chunk-73YTQHOT.mjs.map} +1 -1
  7. package/dist/lib/browser/chunk-M2BGAY6H.mjs +177 -0
  8. package/dist/lib/browser/chunk-M2BGAY6H.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-Z2SDLMQM.mjs → chunk-OBAFAA5V.mjs} +3 -3
  10. package/dist/lib/browser/{chunk-Z2SDLMQM.mjs.map → chunk-OBAFAA5V.mjs.map} +1 -1
  11. package/dist/lib/browser/chunk-SLB2F5AO.mjs +30 -0
  12. package/dist/lib/browser/chunk-SLB2F5AO.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +15 -11
  14. package/dist/lib/browser/index.mjs.map +1 -1
  15. package/dist/lib/browser/{intent-resolver-7JF4DU2C.mjs → intent-resolver-FJDVBDE3.mjs} +3 -3
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/meta.mjs +1 -1
  18. package/dist/lib/browser/{react-surface-JLE6GLG6.mjs → react-surface-H3YDMXAQ.mjs} +5 -5
  19. package/dist/lib/browser/types/index.mjs +2 -2
  20. package/dist/lib/node/{ExplorerContainer-4RMWCWRX.cjs → ExplorerContainer-MVP2AM7R.cjs} +24 -16
  21. package/dist/lib/node/ExplorerContainer-MVP2AM7R.cjs.map +7 -0
  22. package/dist/lib/node/chunk-4T4LCT5R.cjs +52 -0
  23. package/dist/lib/node/chunk-4T4LCT5R.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-R4TOGRPE.cjs → chunk-72H5HBTK.cjs} +414 -153
  25. package/dist/lib/node/{chunk-R4TOGRPE.cjs.map → chunk-72H5HBTK.cjs.map} +4 -4
  26. package/dist/lib/node/{chunk-VB3QE6XY.cjs → chunk-BCDVG2CH.cjs} +6 -6
  27. package/dist/lib/node/{chunk-VB3QE6XY.cjs.map → chunk-BCDVG2CH.cjs.map} +1 -1
  28. package/dist/lib/node/{chunk-6R5P3UVS.cjs → chunk-MLRYW4WQ.cjs} +7 -7
  29. package/dist/lib/node/{chunk-6R5P3UVS.cjs.map → chunk-MLRYW4WQ.cjs.map} +1 -1
  30. package/dist/lib/node/chunk-NELWWGBU.cjs +204 -0
  31. package/dist/lib/node/chunk-NELWWGBU.cjs.map +7 -0
  32. package/dist/lib/node/index.cjs +34 -31
  33. package/dist/lib/node/index.cjs.map +1 -1
  34. package/dist/lib/node/{intent-resolver-VDAHQEE7.cjs → intent-resolver-DRT67ZU4.cjs} +8 -8
  35. package/dist/lib/node/meta.cjs +3 -3
  36. package/dist/lib/node/meta.cjs.map +1 -1
  37. package/dist/lib/node/meta.json +1 -1
  38. package/dist/lib/node/{react-surface-F66QYWDR.cjs → react-surface-6ESLSM33.cjs} +11 -11
  39. package/dist/lib/node/types/index.cjs +4 -4
  40. package/dist/lib/node/types/index.cjs.map +1 -1
  41. package/dist/lib/node-esm/ExplorerContainer-APGUQI4M.mjs +38 -0
  42. package/dist/lib/node-esm/ExplorerContainer-APGUQI4M.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-MUHCE377.mjs → chunk-34X2VFQN.mjs} +415 -154
  44. package/dist/lib/{browser/chunk-JL7ZGOFE.mjs.map → node-esm/chunk-34X2VFQN.mjs.map} +4 -4
  45. package/dist/lib/node-esm/{chunk-PUFSCMN4.mjs → chunk-3CMBLK6W.mjs} +3 -3
  46. package/dist/lib/node-esm/{chunk-PUFSCMN4.mjs.map → chunk-3CMBLK6W.mjs.map} +1 -1
  47. package/dist/lib/node-esm/{chunk-QOJSLABX.mjs → chunk-N6VEANUZ.mjs} +3 -3
  48. package/dist/lib/node-esm/{chunk-QOJSLABX.mjs.map → chunk-N6VEANUZ.mjs.map} +1 -1
  49. package/dist/lib/node-esm/chunk-PVII2K2B.mjs +179 -0
  50. package/dist/lib/node-esm/chunk-PVII2K2B.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-VSORIAHH.mjs +32 -0
  52. package/dist/lib/node-esm/chunk-VSORIAHH.mjs.map +7 -0
  53. package/dist/lib/node-esm/index.mjs +15 -11
  54. package/dist/lib/node-esm/index.mjs.map +1 -1
  55. package/dist/lib/node-esm/{intent-resolver-XWRVHP6H.mjs → intent-resolver-4RBV644N.mjs} +3 -3
  56. package/dist/lib/node-esm/meta.json +1 -1
  57. package/dist/lib/node-esm/meta.mjs +1 -1
  58. package/dist/lib/node-esm/{react-surface-4ZT5BQP6.mjs → react-surface-ZEVL3FXG.mjs} +5 -5
  59. package/dist/lib/node-esm/types/index.mjs +2 -2
  60. package/dist/types/src/components/ExplorerContainer.d.ts +4 -3
  61. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  62. package/dist/types/src/components/Graph/D3ForceGraph.d.ts +14 -0
  63. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -0
  64. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +6 -0
  65. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/Graph/ForceGraph.d.ts +8 -0
  67. package/dist/types/src/components/Graph/ForceGraph.d.ts.map +1 -0
  68. package/dist/types/src/components/Graph/{Graph.stories.d.ts → ForceGraph.stories.d.ts} +1 -1
  69. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/Graph/adapter.d.ts +21 -0
  71. package/dist/types/src/components/Graph/adapter.d.ts.map +1 -0
  72. package/dist/types/src/components/Graph/index.d.ts +2 -2
  73. package/dist/types/src/components/Graph/index.d.ts.map +1 -1
  74. package/dist/types/src/components/Graph/testing.d.ts +14 -0
  75. package/dist/types/src/components/Graph/testing.d.ts.map +1 -0
  76. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  77. package/dist/types/src/components/Tree/testing/generator.d.ts +8 -0
  78. package/dist/types/src/components/Tree/testing/generator.d.ts.map +1 -0
  79. package/dist/types/src/components/Tree/testing/index.d.ts +2 -0
  80. package/dist/types/src/components/Tree/testing/index.d.ts.map +1 -0
  81. package/dist/types/src/components/Tree/types/index.d.ts +3 -0
  82. package/dist/types/src/components/Tree/types/index.d.ts.map +1 -0
  83. package/dist/types/src/components/Tree/types/tree.d.ts +83 -0
  84. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -0
  85. package/dist/types/src/components/Tree/types/tree.test.d.ts +2 -0
  86. package/dist/types/src/components/Tree/types/tree.test.d.ts.map +1 -0
  87. package/dist/types/src/components/Tree/types/types.d.ts +8 -0
  88. package/dist/types/src/components/Tree/types/types.d.ts.map +1 -0
  89. package/dist/types/src/components/index.d.ts +2 -2
  90. package/dist/types/src/hooks/index.d.ts +2 -0
  91. package/dist/types/src/hooks/index.d.ts.map +1 -0
  92. package/dist/types/src/hooks/useGraphModel.d.ts +4 -0
  93. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -0
  94. package/dist/types/src/index.d.ts +2 -1
  95. package/dist/types/src/index.d.ts.map +1 -1
  96. package/package.json +28 -28
  97. package/src/components/ExplorerContainer.tsx +11 -4
  98. package/src/components/Graph/D3ForceGraph.stories.tsx +64 -0
  99. package/src/components/Graph/D3ForceGraph.tsx +101 -0
  100. package/src/components/Graph/ForceGraph.stories.tsx +64 -0
  101. package/src/components/Graph/{Graph.tsx → ForceGraph.tsx} +19 -26
  102. package/src/components/Graph/adapter.ts +47 -0
  103. package/src/components/Graph/index.ts +2 -3
  104. package/src/components/Graph/testing.ts +57 -0
  105. package/src/components/Tree/Tree.stories.tsx +1 -1
  106. package/src/components/Tree/Tree.tsx +11 -18
  107. package/src/components/Tree/testing/generator.ts +46 -0
  108. package/src/components/Tree/testing/index.ts +5 -0
  109. package/src/components/Tree/types/index.ts +6 -0
  110. package/src/components/Tree/types/tree.test.ts +133 -0
  111. package/src/components/Tree/types/tree.ts +287 -0
  112. package/src/components/Tree/types/types.ts +41 -0
  113. package/src/hooks/index.ts +5 -0
  114. package/src/hooks/useGraphModel.ts +35 -0
  115. package/src/index.ts +2 -2
  116. package/src/meta.ts +2 -2
  117. package/dist/lib/browser/ExplorerContainer-6U4GS62Q.mjs +0 -27
  118. package/dist/lib/browser/ExplorerContainer-6U4GS62Q.mjs.map +0 -7
  119. package/dist/lib/browser/chunk-QRPUL5AH.mjs +0 -206
  120. package/dist/lib/browser/chunk-QRPUL5AH.mjs.map +0 -7
  121. package/dist/lib/node/ExplorerContainer-4RMWCWRX.cjs.map +0 -7
  122. package/dist/lib/node/chunk-4ZUNNUQD.cjs +0 -237
  123. package/dist/lib/node/chunk-4ZUNNUQD.cjs.map +0 -7
  124. package/dist/lib/node-esm/ExplorerContainer-3GOCCL7Q.mjs +0 -28
  125. package/dist/lib/node-esm/ExplorerContainer-3GOCCL7Q.mjs.map +0 -7
  126. package/dist/lib/node-esm/chunk-BJZBPCC3.mjs +0 -208
  127. package/dist/lib/node-esm/chunk-BJZBPCC3.mjs.map +0 -7
  128. package/dist/types/src/components/Graph/Graph.d.ts +0 -8
  129. package/dist/types/src/components/Graph/Graph.d.ts.map +0 -1
  130. package/dist/types/src/components/Graph/Graph.stories.d.ts.map +0 -1
  131. package/dist/types/src/components/Graph/graph-model.d.ts +0 -39
  132. package/dist/types/src/components/Graph/graph-model.d.ts.map +0 -1
  133. package/dist/types/src/components/Tree/types.d.ts +0 -8
  134. package/dist/types/src/components/Tree/types.d.ts.map +0 -1
  135. package/src/components/Graph/Graph.stories.tsx +0 -62
  136. package/src/components/Graph/graph-model.ts +0 -194
  137. package/src/components/Tree/types.ts +0 -40
  138. /package/dist/lib/browser/{intent-resolver-7JF4DU2C.mjs.map → intent-resolver-FJDVBDE3.mjs.map} +0 -0
  139. /package/dist/lib/browser/{react-surface-JLE6GLG6.mjs.map → react-surface-H3YDMXAQ.mjs.map} +0 -0
  140. /package/dist/lib/node/{intent-resolver-VDAHQEE7.cjs.map → intent-resolver-DRT67ZU4.cjs.map} +0 -0
  141. /package/dist/lib/node/{react-surface-F66QYWDR.cjs.map → react-surface-6ESLSM33.cjs.map} +0 -0
  142. /package/dist/lib/node-esm/{intent-resolver-XWRVHP6H.mjs.map → intent-resolver-4RBV644N.mjs.map} +0 -0
  143. /package/dist/lib/node-esm/{react-surface-4ZT5BQP6.mjs.map → react-surface-ZEVL3FXG.mjs.map} +0 -0
@@ -1,62 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import '@dxos-theme';
6
-
7
- import { type Meta } from '@storybook/react';
8
- import React, { useEffect, useState } from 'react';
9
-
10
- import { createSpaceObjectGenerator, TestSchemaType } from '@dxos/echo-generator';
11
- import { faker } from '@dxos/random';
12
- import { useClient } from '@dxos/react-client';
13
- import { live } from '@dxos/react-client/echo';
14
- import { type Space } from '@dxos/react-client/echo';
15
- import { ClientRepeater } from '@dxos/react-client/testing';
16
- import { withLayout, withTheme } from '@dxos/storybook-utils';
17
-
18
- import { Graph } from './Graph';
19
- import { ViewType } from '../../types';
20
-
21
- faker.seed(1);
22
-
23
- const Story = () => {
24
- const client = useClient();
25
- const [space, setSpace] = useState<Space>();
26
- const [view, setView] = useState<ViewType>();
27
- useEffect(() => {
28
- const space = client.spaces.default;
29
- const generator = createSpaceObjectGenerator(space);
30
- queueMicrotask(async () => {
31
- await generator.addSchemas();
32
- await generator.createObjects({
33
- [TestSchemaType.organization]: 20,
34
- [TestSchemaType.contact]: 50,
35
- });
36
- });
37
-
38
- const view = space.db.add(live(ViewType, { name: '', type: '' }));
39
- setSpace(space);
40
- setView(view);
41
- }, []);
42
-
43
- if (!space || !view) {
44
- return null;
45
- }
46
-
47
- return <Graph space={space} />;
48
- };
49
-
50
- const meta: Meta = {
51
- title: 'plugins/plugin-explorer/Graph',
52
- component: Graph,
53
- render: () => <ClientRepeater component={Story} createSpace types={[ViewType]} />,
54
- decorators: [withTheme, withLayout({ fullscreen: true })],
55
- parameters: {
56
- layout: 'fullscreen',
57
- },
58
- };
59
-
60
- export default meta;
61
-
62
- export const Default = {};
@@ -1,194 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { SchemaAST } from 'effect';
6
-
7
- import { type CleanupFn } from '@dxos/async';
8
- import {
9
- getSchema,
10
- getSchemaDXN,
11
- type EchoSchema,
12
- ReferenceAnnotationId,
13
- SchemaValidator,
14
- StoredSchema,
15
- } from '@dxos/echo-schema';
16
- import { type GraphData, GraphModel } from '@dxos/gem-spore';
17
- import { log } from '@dxos/log';
18
- import { CollectionType } from '@dxos/plugin-space/types';
19
- import { Filter, type AnyLiveObject, type Space } from '@dxos/react-client/echo';
20
-
21
- export type SpaceGraphModelOptions = {
22
- schema?: boolean;
23
- };
24
-
25
- // TODO(burdon): Convert to common/graph.
26
-
27
- type SchemaGraphNode = {
28
- id: string;
29
- type: 'schema';
30
- data: { typename: string };
31
- };
32
-
33
- type ObjectGraphNode = {
34
- id: string;
35
- type: 'object';
36
- data: { typename: string; object: AnyLiveObject<any> };
37
- };
38
-
39
- export type EchoGraphNode = SchemaGraphNode | ObjectGraphNode;
40
-
41
- /**
42
- * Converts ECHO objects to a graph.
43
- */
44
- export class SpaceGraphModel extends GraphModel<EchoGraphNode> {
45
- private readonly _graph: GraphData<EchoGraphNode> = {
46
- nodes: [],
47
- links: [],
48
- };
49
-
50
- private _schema?: EchoSchema[];
51
- private _schemaSubscription?: CleanupFn;
52
- private _objects?: AnyLiveObject<any>[];
53
- private _objectsSubscription?: CleanupFn;
54
-
55
- constructor(private readonly _options: SpaceGraphModelOptions = {}) {
56
- super();
57
- }
58
-
59
- override get graph(): GraphData<EchoGraphNode> {
60
- return this._graph;
61
- }
62
-
63
- get objects(): AnyLiveObject<any>[] {
64
- return this._objects ?? [];
65
- }
66
-
67
- // TODO(burdon): Alternative diagram types:
68
- // - https://observablehq.com/@d3/radial-tree/2
69
- // - https://observablehq.com/@d3/disjoint-force-directed-graph/2
70
- // - https://observablehq.com/@mbostock/tadpoles
71
- // - https://observablehq.com/@d3/psr-b1919-21
72
- // - https://vasturiano.github.io/react-force-graph/example/basic (3D)
73
-
74
- async open(space: Space, objectId?: string) {
75
- // TODO(burdon): Factor out graph builder to lib (use common/graph abstraction).
76
- if (!this._schemaSubscription) {
77
- // TODO(burdon): Normalize unsubscribe callbacks and merge handlers.
78
- // TODO(burdon): Trigger initial subscription update.
79
- // TODO(burdon): Normalize subscription cb for objects, schema, etc.
80
-
81
- const schemaaQuery = space.db.schemaRegistry.query({});
82
- const schemas = await schemaaQuery.run();
83
- const onSchemaUpdate = ({ results }: { results: EchoSchema[] }) => (this._schema = results);
84
- this._schemaSubscription = schemaaQuery.subscribe(onSchemaUpdate);
85
- onSchemaUpdate({ results: schemas });
86
-
87
- this._objectsSubscription = space.db
88
- // TODO(burdon): ERROR: Cannot mix type and or filters.
89
- .query(Filter.not(Filter.or(Filter.type(StoredSchema), Filter.type(CollectionType))))
90
- .subscribe(
91
- ({ objects }) => {
92
- this._objects = objects;
93
-
94
- // Merge with current nodes.
95
- const currentNodes = this._graph.nodes;
96
-
97
- this._graph.nodes = [];
98
- this._graph.links = [];
99
-
100
- const addSchema = (typename: string) => {
101
- const current = currentNodes.find((node) => node.id === typename);
102
- if (typename) {
103
- this._graph.nodes.push({
104
- ...current,
105
- id: typename,
106
- type: 'schema',
107
- data: { typename },
108
- });
109
- }
110
- };
111
-
112
- // Runtime schema.
113
- space.db.graph.schemaRegistry.schemas.forEach((schema) => {
114
- const typename = getSchemaDXN(schema)?.typename;
115
- if (typename) {
116
- addSchema(typename);
117
- }
118
- });
119
-
120
- // Database Schema.
121
- this._schema?.forEach((schema) => {
122
- const typename = getSchemaDXN(schema)?.typename;
123
- if (typename) {
124
- addSchema(typename);
125
- }
126
- });
127
-
128
- // Database Objects.
129
- this._objects.forEach((object) => {
130
- const schema = getSchema(object);
131
- if (schema) {
132
- const typename = getSchemaDXN(schema)?.typename;
133
- if (typename) {
134
- const current = currentNodes.find((node) => node.id === object.id);
135
- this._graph.nodes.push({ ...current, id: object.id, type: 'object', data: { typename, object } });
136
-
137
- // Link to schema.
138
- const schemaNode = this._graph.nodes.find(
139
- (node) => node.type === 'schema' && node.data.typename === typename,
140
- );
141
- if (schemaNode) {
142
- this._graph.links.push({
143
- id: `${object.id}-${schemaNode.id}`,
144
- source: object.id,
145
- target: schemaNode.id,
146
- });
147
- } else {
148
- log.info('schema node not found', { typename });
149
- }
150
-
151
- // Link ot refs.
152
- // TODO(burdon): This isn't working.
153
- SchemaAST.getPropertySignatures(schema.ast).forEach((prop) => {
154
- if (!SchemaValidator.hasTypeAnnotation(schema, prop.name.toString(), ReferenceAnnotationId)) {
155
- return;
156
- }
157
-
158
- const value = object[String(prop.name)];
159
- if (value) {
160
- const refs = Array.isArray(value) ? value : [value];
161
- for (const ref of refs) {
162
- if (objects.findIndex((obj) => obj.id === ref.id) !== -1) {
163
- this._graph.links.push({
164
- id: `${object.id}-${String(prop.name)}-${ref.id}`,
165
- source: object.id,
166
- target: ref.id,
167
- });
168
- }
169
- }
170
- }
171
- });
172
- }
173
- }
174
- });
175
-
176
- this.triggerUpdate();
177
- },
178
- { fire: true },
179
- );
180
- }
181
-
182
- this.setSelected(objectId);
183
- return this;
184
- }
185
-
186
- close() {
187
- this._schemaSubscription?.();
188
- this._schemaSubscription = undefined;
189
- this._objectsSubscription?.();
190
- this._objectsSubscription = undefined;
191
-
192
- return this;
193
- }
194
- }
@@ -1,40 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- // TODO(burdon): Convert to common/graph.
6
- import { type GraphModel } from '@dxos/gem-spore';
7
-
8
- export type TreeNode = {
9
- id: string;
10
- label?: string;
11
- children?: TreeNode[];
12
- };
13
-
14
- export const mapGraphToTreeData = <N>(model: GraphModel<N>, maxDepth = 8): TreeNode | undefined => {
15
- const mapNode = (node: N, depth = 0): TreeNode => {
16
- const treeNode: TreeNode = {
17
- id: model.idAccessor(node),
18
- label: model.idAccessor(node).slice(0, 8),
19
- };
20
-
21
- const links = model.graph.links.filter((link) => link.source === treeNode.id);
22
- if (depth < maxDepth) {
23
- treeNode.children = links.map((link) =>
24
- mapNode(model.graph.nodes.find((node) => model.idAccessor(node) === link.target)!, depth + 1),
25
- );
26
- }
27
-
28
- return treeNode;
29
- };
30
-
31
- let data: TreeNode | undefined;
32
- if (model.selected) {
33
- const node = model.graph.nodes.find((node) => model.idAccessor(node) === model.selected);
34
- if (node) {
35
- data = mapNode(node);
36
- }
37
- }
38
-
39
- return data;
40
- };