@dxos/plugin-explorer 0.8.4-main.67995b8 → 0.8.4-main.72ec0f3

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-NOLLVUTE.mjs +50 -0
  2. package/dist/lib/browser/ExplorerContainer-NOLLVUTE.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-OAOY7SHY.mjs → chunk-2MKBRIUT.mjs} +6 -5
  4. package/dist/lib/browser/chunk-2MKBRIUT.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-J2BBZOSF.mjs → chunk-6BVXZQPP.mjs} +9 -8
  6. package/dist/lib/browser/chunk-6BVXZQPP.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-PVFZFKQ6.mjs → chunk-ARBGXQFH.mjs} +6 -246
  8. package/dist/lib/browser/{chunk-PVFZFKQ6.mjs.map → chunk-ARBGXQFH.mjs.map} +3 -3
  9. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  10. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-JDSUIUNR.mjs +80 -0
  12. package/dist/lib/browser/chunk-JDSUIUNR.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-UBHZGWZQ.mjs +24 -0
  14. package/dist/lib/browser/chunk-UBHZGWZQ.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +27 -20
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/intent-resolver-YS5LZC3A.mjs +31 -0
  18. package/dist/lib/browser/intent-resolver-YS5LZC3A.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/meta.mjs +2 -3
  21. package/dist/lib/browser/react-surface-BVTCOVLK.mjs +35 -0
  22. package/dist/lib/browser/react-surface-BVTCOVLK.mjs.map +7 -0
  23. package/dist/lib/browser/types/index.mjs +7 -6
  24. package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs +51 -0
  25. package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs.map +7 -0
  26. package/dist/lib/node-esm/{chunk-PPBUWC7F.mjs → chunk-3ODK27PU.mjs} +6 -5
  27. package/dist/lib/node-esm/chunk-3ODK27PU.mjs.map +7 -0
  28. package/dist/lib/node-esm/{chunk-4VMSNXYL.mjs → chunk-CRSVAZNA.mjs} +9 -8
  29. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs.map +7 -0
  30. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  31. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  32. package/dist/lib/node-esm/chunk-MS72BATS.mjs +81 -0
  33. package/dist/lib/node-esm/chunk-MS72BATS.mjs.map +7 -0
  34. package/dist/lib/node-esm/{chunk-S5A2EUSJ.mjs → chunk-NPIP4VEH.mjs} +6 -246
  35. package/dist/lib/node-esm/{chunk-S5A2EUSJ.mjs.map → chunk-NPIP4VEH.mjs.map} +3 -3
  36. package/dist/lib/node-esm/{chunk-PIAXA43R.mjs → chunk-UXZM5VJB.mjs} +8 -5
  37. package/dist/lib/node-esm/chunk-UXZM5VJB.mjs.map +7 -0
  38. package/dist/lib/node-esm/index.mjs +27 -20
  39. package/dist/lib/node-esm/index.mjs.map +3 -3
  40. package/dist/lib/node-esm/intent-resolver-VCEC67WX.mjs +32 -0
  41. package/dist/lib/node-esm/intent-resolver-VCEC67WX.mjs.map +7 -0
  42. package/dist/lib/node-esm/meta.json +1 -1
  43. package/dist/lib/node-esm/meta.mjs +2 -3
  44. package/dist/lib/node-esm/react-surface-4HFEX52O.mjs +36 -0
  45. package/dist/lib/node-esm/react-surface-4HFEX52O.mjs.map +7 -0
  46. package/dist/lib/node-esm/types/index.mjs +7 -6
  47. package/dist/types/src/ExplorerPlugin.d.ts +1 -1
  48. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  49. package/dist/types/src/capabilities/index.d.ts +2 -2
  50. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  52. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  53. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  54. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  55. package/dist/types/src/components/Chart/Chart.d.ts.map +1 -1
  56. package/dist/types/src/components/Chart/Chart.stories.d.ts +8 -4
  57. package/dist/types/src/components/Chart/Chart.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/ExplorerContainer.d.ts +2 -2
  59. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  60. package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
  61. package/dist/types/src/components/Globe/Globe.stories.d.ts +8 -4
  62. package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Graph/D3ForceGraph.d.ts +2 -2
  64. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -1
  65. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +13 -4
  66. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts +13 -4
  68. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Graph/testing.d.ts +1 -1
  70. package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
  71. package/dist/types/src/components/Tree/Tree.stories.d.ts +13 -16
  72. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  73. package/dist/types/src/components/Tree/types/tree.d.ts +1 -1
  74. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
  75. package/dist/types/src/components/index.d.ts +2 -4
  76. package/dist/types/src/components/index.d.ts.map +1 -1
  77. package/dist/types/src/hooks/useGraphModel.d.ts +2 -2
  78. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  79. package/dist/types/src/meta.d.ts +0 -1
  80. package/dist/types/src/meta.d.ts.map +1 -1
  81. package/dist/types/src/translations.d.ts +14 -2
  82. package/dist/types/src/translations.d.ts.map +1 -1
  83. package/dist/types/src/types/ExplorerAction.d.ts +23 -0
  84. package/dist/types/src/types/ExplorerAction.d.ts.map +1 -0
  85. package/dist/types/src/types/Graph.d.ts +33 -0
  86. package/dist/types/src/types/Graph.d.ts.map +1 -0
  87. package/dist/types/src/types/index.d.ts +2 -2
  88. package/dist/types/src/types/index.d.ts.map +1 -1
  89. package/dist/types/tsconfig.tsbuildinfo +1 -1
  90. package/package.json +44 -42
  91. package/src/ExplorerPlugin.tsx +49 -47
  92. package/src/capabilities/intent-resolver.ts +10 -8
  93. package/src/capabilities/react-surface.tsx +9 -5
  94. package/src/components/Chart/Chart.stories.tsx +9 -7
  95. package/src/components/Chart/Chart.tsx +1 -1
  96. package/src/components/ExplorerContainer.tsx +24 -6
  97. package/src/components/Globe/Globe.stories.tsx +14 -12
  98. package/src/components/Globe/Globe.tsx +1 -1
  99. package/src/components/Graph/D3ForceGraph.stories.tsx +32 -18
  100. package/src/components/Graph/D3ForceGraph.tsx +5 -5
  101. package/src/components/Graph/ForceGraph.stories.tsx +32 -18
  102. package/src/components/Graph/ForceGraph.tsx +4 -4
  103. package/src/components/Graph/testing.ts +8 -8
  104. package/src/components/Tree/Tree.stories.tsx +28 -22
  105. package/src/components/Tree/Tree.tsx +3 -3
  106. package/src/components/Tree/types/tree.test.ts +4 -3
  107. package/src/components/Tree/types/tree.ts +1 -1
  108. package/src/components/index.ts +3 -3
  109. package/src/hooks/useGraphModel.ts +5 -4
  110. package/src/meta.ts +7 -4
  111. package/src/translations.ts +4 -2
  112. package/src/types/ExplorerAction.ts +30 -0
  113. package/src/types/Graph.ts +46 -0
  114. package/src/types/index.ts +2 -2
  115. package/dist/lib/browser/ExplorerContainer-OGHSHZD5.mjs +0 -37
  116. package/dist/lib/browser/ExplorerContainer-OGHSHZD5.mjs.map +0 -7
  117. package/dist/lib/browser/chunk-EF4BFHTI.mjs +0 -38
  118. package/dist/lib/browser/chunk-EF4BFHTI.mjs.map +0 -7
  119. package/dist/lib/browser/chunk-J2BBZOSF.mjs.map +0 -7
  120. package/dist/lib/browser/chunk-OAOY7SHY.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-UL5EDJPE.mjs +0 -21
  122. package/dist/lib/browser/chunk-UL5EDJPE.mjs.map +0 -7
  123. package/dist/lib/browser/intent-resolver-XH2UO2FM.mjs +0 -24
  124. package/dist/lib/browser/intent-resolver-XH2UO2FM.mjs.map +0 -7
  125. package/dist/lib/browser/react-surface-65VQ42HX.mjs +0 -31
  126. package/dist/lib/browser/react-surface-65VQ42HX.mjs.map +0 -7
  127. package/dist/lib/node-esm/ExplorerContainer-6ON5NA2P.mjs +0 -38
  128. package/dist/lib/node-esm/ExplorerContainer-6ON5NA2P.mjs.map +0 -7
  129. package/dist/lib/node-esm/chunk-4VMSNXYL.mjs.map +0 -7
  130. package/dist/lib/node-esm/chunk-PIAXA43R.mjs.map +0 -7
  131. package/dist/lib/node-esm/chunk-PPBUWC7F.mjs.map +0 -7
  132. package/dist/lib/node-esm/chunk-VKCOKQRG.mjs +0 -39
  133. package/dist/lib/node-esm/chunk-VKCOKQRG.mjs.map +0 -7
  134. package/dist/lib/node-esm/intent-resolver-AGBBNA67.mjs +0 -25
  135. package/dist/lib/node-esm/intent-resolver-AGBBNA67.mjs.map +0 -7
  136. package/dist/lib/node-esm/react-surface-IJIMYAST.mjs +0 -32
  137. package/dist/lib/node-esm/react-surface-IJIMYAST.mjs.map +0 -7
  138. package/dist/types/src/types/schema.d.ts +0 -12
  139. package/dist/types/src/types/schema.d.ts.map +0 -1
  140. package/dist/types/src/types/types.d.ts +0 -18
  141. package/dist/types/src/types/types.d.ts.map +0 -1
  142. package/src/types/schema.ts +0 -16
  143. package/src/types/types.ts +0 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-explorer",
3
- "version": "0.8.4-main.67995b8",
3
+ "version": "0.8.4-main.72ec0f3",
4
4
  "description": "Braneframe data visualization plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,22 +10,22 @@
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
- "node": "./dist/lib/node-esm/index.mjs",
16
- "source": "./src/index.ts"
16
+ "node": "./dist/lib/node-esm/index.mjs"
17
17
  },
18
18
  "./meta": {
19
+ "source": "./src/meta.ts",
19
20
  "types": "./dist/types/src/meta.d.ts",
20
21
  "browser": "./dist/lib/browser/meta.mjs",
21
- "node": "./dist/lib/node-esm/meta.mjs",
22
- "source": "./src/meta.ts"
22
+ "node": "./dist/lib/node-esm/meta.mjs"
23
23
  },
24
24
  "./types": {
25
+ "source": "./src/types/index.ts",
25
26
  "types": "./dist/types/src/types/index.d.ts",
26
27
  "browser": "./dist/lib/browser/types/index.mjs",
27
- "node": "./dist/lib/node-esm/types/index.mjs",
28
- "source": "./src/types/index.ts"
28
+ "node": "./dist/lib/node-esm/types/index.mjs"
29
29
  }
30
30
  },
31
31
  "types": "dist/types/src/index.d.ts",
@@ -47,57 +47,59 @@
47
47
  "3d-force-graph": "^1.76.1",
48
48
  "@observablehq/plot": "^0.6.11",
49
49
  "@preact-signals/safe-react": "^0.9.0",
50
- "@preact/signals-core": "^1.9.0",
50
+ "@preact/signals-core": "^1.12.1",
51
51
  "d3": "^7.9.0",
52
- "effect": "3.17.0",
52
+ "effect": "3.18.3",
53
53
  "force-graph": "^1.49.4",
54
54
  "lodash.defaultsdeep": "^4.6.1",
55
55
  "react-resize-detector": "^11.0.1",
56
56
  "three": "^0.178.0",
57
57
  "topojson-client": "^3.1.0",
58
- "@dxos/app-framework": "0.8.4-main.67995b8",
59
- "@dxos/async": "0.8.4-main.67995b8",
60
- "@dxos/client": "0.8.4-main.67995b8",
61
- "@dxos/echo": "0.8.4-main.67995b8",
62
- "@dxos/graph": "0.8.4-main.67995b8",
63
- "@dxos/echo-schema": "0.8.4-main.67995b8",
64
- "@dxos/invariant": "0.8.4-main.67995b8",
65
- "@dxos/live-object": "0.8.4-main.67995b8",
66
- "@dxos/plugin-client": "0.8.4-main.67995b8",
67
- "@dxos/plugin-graph": "0.8.4-main.67995b8",
68
- "@dxos/plugin-search": "0.8.4-main.67995b8",
69
- "@dxos/log": "0.8.4-main.67995b8",
70
- "@dxos/plugin-space": "0.8.4-main.67995b8",
71
- "@dxos/react-ui-attention": "0.8.4-main.67995b8",
72
- "@dxos/react-client": "0.8.4-main.67995b8",
73
- "@dxos/react-ui-graph": "0.8.4-main.67995b8",
74
- "@dxos/react-ui-stack": "0.8.4-main.67995b8",
75
- "@dxos/schema": "0.8.4-main.67995b8",
76
- "@dxos/util": "0.8.4-main.67995b8"
58
+ "@dxos/app-framework": "0.8.4-main.72ec0f3",
59
+ "@dxos/async": "0.8.4-main.72ec0f3",
60
+ "@dxos/client": "0.8.4-main.72ec0f3",
61
+ "@dxos/echo": "0.8.4-main.72ec0f3",
62
+ "@dxos/echo-query": "0.8.4-main.72ec0f3",
63
+ "@dxos/graph": "0.8.4-main.72ec0f3",
64
+ "@dxos/invariant": "0.8.4-main.72ec0f3",
65
+ "@dxos/live-object": "0.8.4-main.72ec0f3",
66
+ "@dxos/log": "0.8.4-main.72ec0f3",
67
+ "@dxos/plugin-graph": "0.8.4-main.72ec0f3",
68
+ "@dxos/plugin-client": "0.8.4-main.72ec0f3",
69
+ "@dxos/plugin-search": "0.8.4-main.72ec0f3",
70
+ "@dxos/plugin-space": "0.8.4-main.72ec0f3",
71
+ "@dxos/react-ui-attention": "0.8.4-main.72ec0f3",
72
+ "@dxos/react-client": "0.8.4-main.72ec0f3",
73
+ "@dxos/react-ui-components": "0.8.4-main.72ec0f3",
74
+ "@dxos/react-ui-stack": "0.8.4-main.72ec0f3",
75
+ "@dxos/react-ui-graph": "0.8.4-main.72ec0f3",
76
+ "@dxos/types": "0.8.4-main.72ec0f3",
77
+ "@dxos/schema": "0.8.4-main.72ec0f3",
78
+ "@dxos/util": "0.8.4-main.72ec0f3"
77
79
  },
78
80
  "devDependencies": {
79
81
  "@types/d3": "^7.4.3",
80
82
  "@types/d3-hierarchy": "^3.1.6",
81
83
  "@types/lodash.defaultsdeep": "^4.6.6",
82
- "@types/react": "~18.2.0",
83
- "@types/react-dom": "~18.2.0",
84
+ "@types/react": "~19.2.2",
85
+ "@types/react-dom": "~19.2.2",
84
86
  "@types/topojson-client": "^3.1.4",
85
87
  "@types/topojson-specification": "^1.0.5",
86
- "react": "~18.2.0",
87
- "react-dom": "~18.2.0",
88
- "vite": "5.4.7",
89
- "@dxos/react-ui": "0.8.4-main.67995b8",
90
- "@dxos/echo-generator": "0.8.4-main.67995b8",
91
- "@dxos/random": "0.8.4-main.67995b8",
92
- "@dxos/react-ui-theme": "0.8.4-main.67995b8",
93
- "@dxos/storybook-utils": "0.8.4-main.67995b8"
88
+ "react": "~19.2.0",
89
+ "react-dom": "~19.2.0",
90
+ "vite": "7.1.9",
91
+ "@dxos/echo-generator": "0.8.4-main.72ec0f3",
92
+ "@dxos/random": "0.8.4-main.72ec0f3",
93
+ "@dxos/react-ui-theme": "0.8.4-main.72ec0f3",
94
+ "@dxos/react-ui": "0.8.4-main.72ec0f3",
95
+ "@dxos/storybook-utils": "0.8.4-main.72ec0f3"
94
96
  },
95
97
  "peerDependencies": {
96
98
  "effect": "^3.13.3",
97
- "react": "~18.2.0",
98
- "react-dom": "~18.2.0",
99
- "@dxos/react-ui": "0.8.4-main.67995b8",
100
- "@dxos/react-ui-theme": "0.8.4-main.67995b8"
99
+ "react": "^19.0.0",
100
+ "react-dom": "^19.0.0",
101
+ "@dxos/react-ui": "0.8.4-main.72ec0f3",
102
+ "@dxos/react-ui-theme": "0.8.4-main.72ec0f3"
101
103
  },
102
104
  "publishConfig": {
103
105
  "access": "public"
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';
5
+ import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from '@dxos/app-framework';
6
6
  import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
7
7
  import { SpaceCapabilities } from '@dxos/plugin-space';
8
8
  import { defineObjectForm } from '@dxos/plugin-space/types';
@@ -10,51 +10,53 @@ import { defineObjectForm } from '@dxos/plugin-space/types';
10
10
  import { IntentResolver, ReactSurface } from './capabilities';
11
11
  import { meta } from './meta';
12
12
  import { translations } from './translations';
13
- import { ViewType, ExplorerAction } from './types';
13
+ import { ExplorerAction, Graph } from './types';
14
14
 
15
- export const ExplorerPlugin = () =>
16
- definePlugin(meta, [
17
- defineModule({
18
- id: `${meta.id}/module/translations`,
19
- activatesOn: Events.SetupTranslations,
20
- activate: () => contributes(Capabilities.Translations, translations),
21
- }),
22
- defineModule({
23
- id: `${meta.id}/module/metadata`,
24
- activatesOn: Events.SetupMetadata,
25
- activate: () =>
26
- contributes(Capabilities.Metadata, {
27
- id: ViewType.typename,
28
- metadata: {
29
- icon: 'ph--graph--regular',
30
- },
15
+ export const ExplorerPlugin = definePlugin(meta, () => [
16
+ defineModule({
17
+ id: `${meta.id}/module/translations`,
18
+ activatesOn: Events.SetupTranslations,
19
+ activate: () => contributes(Capabilities.Translations, translations),
20
+ }),
21
+ defineModule({
22
+ id: `${meta.id}/module/metadata`,
23
+ activatesOn: Events.SetupMetadata,
24
+ activate: () =>
25
+ contributes(Capabilities.Metadata, {
26
+ id: Graph.Graph.typename,
27
+ metadata: {
28
+ icon: 'ph--graph--regular',
29
+ iconHue: 'green',
30
+ },
31
+ }),
32
+ }),
33
+ defineModule({
34
+ id: `${meta.id}/module/object-form`,
35
+ activatesOn: ClientEvents.SetupSchema,
36
+ activate: () =>
37
+ contributes(
38
+ SpaceCapabilities.ObjectForm,
39
+ defineObjectForm({
40
+ objectSchema: Graph.Graph,
41
+ formSchema: ExplorerAction.GraphProps,
42
+ hidden: true,
43
+ getIntent: (props, options) => createIntent(ExplorerAction.CreateGraph, { ...props, space: options.space }),
31
44
  }),
32
- }),
33
- defineModule({
34
- id: `${meta.id}/module/object-form`,
35
- activatesOn: ClientEvents.SetupSchema,
36
- activate: () =>
37
- contributes(
38
- SpaceCapabilities.ObjectForm,
39
- defineObjectForm({
40
- objectSchema: ViewType,
41
- getIntent: () => createIntent(ExplorerAction.Create),
42
- }),
43
- ),
44
- }),
45
- defineModule({
46
- id: `${meta.id}/module/schema`,
47
- activatesOn: ClientEvents.SetupSchema,
48
- activate: () => contributes(ClientCapabilities.Schema, [ViewType]),
49
- }),
50
- defineModule({
51
- id: `${meta.id}/module/react-surface`,
52
- activatesOn: Events.SetupReactSurface,
53
- activate: ReactSurface,
54
- }),
55
- defineModule({
56
- id: `${meta.id}/module/intent-resolver`,
57
- activatesOn: Events.SetupIntentResolver,
58
- activate: IntentResolver,
59
- }),
60
- ]);
45
+ ),
46
+ }),
47
+ defineModule({
48
+ id: `${meta.id}/module/schema`,
49
+ activatesOn: ClientEvents.SetupSchema,
50
+ activate: () => contributes(ClientCapabilities.Schema, [Graph.Graph]),
51
+ }),
52
+ defineModule({
53
+ id: `${meta.id}/module/react-surface`,
54
+ activatesOn: Events.SetupReactSurface,
55
+ activate: ReactSurface,
56
+ }),
57
+ defineModule({
58
+ id: `${meta.id}/module/intent-resolver`,
59
+ activatesOn: Events.SetupIntentResolver,
60
+ activate: IntentResolver,
61
+ }),
62
+ ]);
@@ -2,18 +2,20 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, Capabilities, createResolver } from '@dxos/app-framework';
6
- import { Obj } from '@dxos/echo';
5
+ import { Capabilities, type PluginContext, contributes, createResolver } from '@dxos/app-framework';
6
+ import { ClientCapabilities } from '@dxos/plugin-client';
7
7
 
8
- import { ExplorerAction, ViewType } from '../types';
8
+ import { ExplorerAction, Graph } from '../types';
9
9
 
10
- export default () =>
10
+ export default (context: PluginContext) =>
11
11
  contributes(
12
12
  Capabilities.IntentResolver,
13
13
  createResolver({
14
- intent: ExplorerAction.Create,
15
- resolve: ({ name }) => ({
16
- data: { object: Obj.make(ViewType, { name, type: '' }) },
17
- }),
14
+ intent: ExplorerAction.CreateGraph,
15
+ resolve: async ({ space, name, typename }) => {
16
+ const client = context.getCapability(ClientCapabilities.Client);
17
+ const { view } = await Graph.makeView({ client, space, name, typename });
18
+ return { data: { object: view } };
19
+ },
18
20
  }),
19
21
  );
@@ -6,18 +6,22 @@ import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
8
  import { Obj } from '@dxos/echo';
9
+ import { View } from '@dxos/schema';
9
10
 
10
11
  import { ExplorerContainer } from '../components';
11
- import { EXPLORER_PLUGIN } from '../meta';
12
- import { ViewType } from '../types';
12
+ import { meta } from '../meta';
13
+ import { Graph } from '../types';
13
14
 
14
15
  export default () =>
15
16
  contributes(
16
17
  Capabilities.ReactSurface,
17
18
  createSurface({
18
- id: `${EXPLORER_PLUGIN}/article`,
19
+ id: `${meta.id}/article`,
19
20
  role: ['article', 'section'],
20
- filter: (data): data is { subject: ViewType } => Obj.instanceOf(ViewType, data.subject),
21
- component: ({ data, role }) => <ExplorerContainer view={data.subject} role={role} />,
21
+ filter: (data): data is { subject: View.View } =>
22
+ Obj.instanceOf(View.View, data.subject) && Obj.instanceOf(Graph.Graph, data.subject.presentation.target),
23
+ component: ({ data, role }) => {
24
+ return <ExplorerContainer view={data.subject} role={role} />;
25
+ },
22
26
  }),
23
27
  );
@@ -2,17 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
8
  import { ClientRepeater } from '@dxos/react-client/testing';
11
- import { withLayout, withTheme } from '@dxos/storybook-utils';
9
+ import { withTheme } from '@dxos/react-ui/testing';
12
10
 
13
- import { Chart } from './Chart';
14
11
  import CitiesData from '../../../data/cities.js';
15
12
 
13
+ import { Chart } from './Chart';
14
+
16
15
  // TODO(burdon): Generate data with geo lat/lng.
17
16
  // TODO(burdon): How to provide geo service via agent?
18
17
 
@@ -32,10 +31,13 @@ const Story = () => {
32
31
  // TODO(burdon): Change to decorator.
33
32
  export const Default = () => <ClientRepeater component={Story} />;
34
33
 
35
- const meta: Meta<typeof Chart> = {
34
+ const meta = {
36
35
  title: 'plugins/plugin-explorer/Chart',
37
36
  component: Chart,
38
- decorators: [withTheme, withLayout({ fullscreen: true })],
39
- };
37
+ decorators: [withTheme],
38
+ parameters: {
39
+ layout: 'fullscreen',
40
+ },
41
+ } satisfies Meta<typeof Chart>;
40
42
 
41
43
  export default meta;
@@ -7,7 +7,7 @@ import { type DotOptions } from '@observablehq/plot';
7
7
  import React, { useEffect } from 'react';
8
8
  import { useResizeDetector } from 'react-resize-detector';
9
9
 
10
- import { type Accessor, createAdapter, type Point } from '../plot';
10
+ import { type Accessor, type Point, createAdapter } from '../plot';
11
11
 
12
12
  const defaultOptions: DotOptions = {
13
13
  r: 4,
@@ -2,32 +2,50 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React from 'react';
5
+ import React, { useCallback, useMemo, useState } from 'react';
6
6
 
7
+ import { type Filter } from '@dxos/echo';
8
+ import { QueryBuilder } from '@dxos/echo-query';
7
9
  import { useGlobalSearch } from '@dxos/plugin-search';
8
10
  import { getSpace } from '@dxos/react-client/echo';
11
+ import { Toolbar } from '@dxos/react-ui';
12
+ import { QueryEditor, type QueryEditorProps } from '@dxos/react-ui-components';
9
13
  import { StackItem } from '@dxos/react-ui-stack';
14
+ import { type View } from '@dxos/schema';
10
15
 
11
- import { D3ForceGraph } from './Graph';
12
16
  import { useGraphModel } from '../hooks';
13
- import { type ViewType } from '../types';
17
+
18
+ import { D3ForceGraph } from './Graph';
14
19
 
15
20
  type ExplorerContainerProps = {
16
21
  role: string;
17
- view: ViewType;
22
+ view: View.View;
18
23
  };
19
24
 
20
25
  const ExplorerContainer = ({ role, view }: ExplorerContainerProps) => {
21
26
  const space = getSpace(view);
22
- const model = useGraphModel(space);
27
+ const [filter, setFilter] = useState<Filter.Any>();
28
+ const model = useGraphModel(space, filter);
23
29
  const { match } = useGlobalSearch();
24
30
 
31
+ const builder = useMemo(() => new QueryBuilder(), []);
32
+ const handleChange = useCallback<NonNullable<QueryEditorProps['onChange']>>((value) => {
33
+ setFilter(builder.build(value).filter);
34
+ }, []);
35
+
36
+ const showToolbar = role === 'article';
37
+
25
38
  if (!space || !model) {
26
39
  return null;
27
40
  }
28
41
 
29
42
  return (
30
- <StackItem.Content size={role === 'section' ? 'square' : 'intrinsic'}>
43
+ <StackItem.Content toolbar={showToolbar}>
44
+ {showToolbar && (
45
+ <Toolbar.Root>
46
+ <QueryEditor db={space.db} onChange={handleChange} />
47
+ </Toolbar.Root>
48
+ )}
31
49
  <D3ForceGraph model={model} match={match} />
32
50
  </StackItem.Content>
33
51
  );
@@ -2,9 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { plot, sphere, geo, graticule, dot } from '@observablehq/plot';
5
+ import { dot, geo, graticule, plot, sphere } from '@observablehq/plot';
8
6
  import { type Meta } from '@storybook/react-vite';
9
7
  import { geoCircle } from 'd3';
10
8
  import React, { useEffect } from 'react';
@@ -12,12 +10,13 @@ import { useResizeDetector } from 'react-resize-detector';
12
10
  import { feature } from 'topojson-client';
13
11
 
14
12
  import { ClientRepeater } from '@dxos/react-client/testing';
15
- import { withLayout, withTheme } from '@dxos/storybook-utils';
13
+ import { withTheme } from '@dxos/react-ui/testing';
16
14
 
17
- import { Globe } from './Globe';
18
15
  import CitiesData from '../../../data/cities.js';
19
16
  import CountriesData from '../../../data/countries-110m.js';
20
17
 
18
+ import { Globe } from './Globe';
19
+
21
20
  // TODO(burdon): Generate data with geo lat/lng.
22
21
  // TODO(burdon): How to provide geo service via agent?
23
22
 
@@ -80,13 +79,16 @@ const ExtendedStory = () => {
80
79
  return <div ref={containerRef} className='grow p-8' />;
81
80
  };
82
81
 
83
- export const Default = () => <ClientRepeater component={DefaultStory} createSpace />;
84
-
85
- export const Extended = () => <ClientRepeater component={ExtendedStory} createSpace />;
86
-
87
- const meta: Meta = {
82
+ const meta = {
88
83
  title: 'plugins/plugin-explorer/Globe',
89
- decorators: [withTheme, withLayout({ fullscreen: true })],
90
- };
84
+ decorators: [withTheme],
85
+ parameters: {
86
+ layout: 'fullscreen',
87
+ },
88
+ } satisfies Meta;
91
89
 
92
90
  export default meta;
91
+
92
+ export const Default = () => <ClientRepeater component={DefaultStory} createSpace />;
93
+
94
+ export const Extended = () => <ClientRepeater component={ExtendedStory} createSpace />;
@@ -9,7 +9,7 @@ import { useResizeDetector } from 'react-resize-detector';
9
9
  import * as topojson from 'topojson-client';
10
10
 
11
11
  import CountriesData from '../../../data/countries-110m.js';
12
- import { type Accessor, createAdapter, type GeoLocation } from '../plot';
12
+ import { type Accessor, type GeoLocation, createAdapter } from '../plot';
13
13
 
14
14
  const defaultOptions: DotOptions = {
15
15
  r: 4,
@@ -2,24 +2,25 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useState } from 'react';
6
7
 
7
- import { type Meta } from '@storybook/react-vite';
8
- import React, { useEffect, useState } from 'react';
9
-
10
- import { Obj } from '@dxos/echo';
11
8
  import { faker } from '@dxos/random';
12
9
  import { useClient } from '@dxos/react-client';
13
10
  import { type Space } from '@dxos/react-client/echo';
14
11
  import { withClientProvider } from '@dxos/react-client/testing';
15
- import { DataType } from '@dxos/schema';
12
+ import { useAsyncEffect } from '@dxos/react-ui';
13
+ import { withTheme } from '@dxos/react-ui/testing';
14
+ import { View } from '@dxos/schema';
16
15
  import { type ValueGenerator } from '@dxos/schema/testing';
17
- import { withLayout, withTheme, render } from '@dxos/storybook-utils';
16
+ import { render } from '@dxos/storybook-utils';
17
+ import { HasRelationship, Organization, Person, Project } from '@dxos/types';
18
+
19
+ import { useGraphModel } from '../../hooks';
20
+ import { Graph } from '../../types';
18
21
 
19
22
  import { D3ForceGraph } from './D3ForceGraph';
20
23
  import { generate } from './testing';
21
- import { useGraphModel } from '../../hooks';
22
- import { ViewType } from '../../types';
23
24
 
24
25
  const generator = faker as any as ValueGenerator;
25
26
 
@@ -28,11 +29,13 @@ faker.seed(1);
28
29
  const DefaultStory = () => {
29
30
  const client = useClient();
30
31
  const [space, setSpace] = useState<Space>();
31
- const [view, setView] = useState<ViewType>();
32
- useEffect(() => {
32
+ const [view, setView] = useState<View.View>();
33
+
34
+ useAsyncEffect(async () => {
33
35
  const space = client.spaces.default;
34
36
  void generate(space, generator);
35
- const view = space.db.add(Obj.make(ViewType, { name: '', type: '' }));
37
+ const { view } = await Graph.makeView({ client, space, name: 'Test', typename: Graph.Graph.typename });
38
+ space.db.add(view);
36
39
  setSpace(space);
37
40
  setView(view);
38
41
  }, []);
@@ -45,20 +48,31 @@ const DefaultStory = () => {
45
48
  return <D3ForceGraph model={model} />;
46
49
  };
47
50
 
48
- const meta: Meta = {
51
+ const meta = {
49
52
  title: 'plugins/plugin-explorer/D3ForceGraph',
50
53
  component: D3ForceGraph,
51
54
  render: render(DefaultStory),
52
55
  decorators: [
56
+ withTheme,
53
57
  withClientProvider({
54
58
  createSpace: true,
55
- types: [ViewType, DataType.Organization, DataType.Project, DataType.Person, DataType.HasRelationship],
59
+ types: [
60
+ Graph.Graph,
61
+ View.View,
62
+ Organization.Organization,
63
+ Project.Project,
64
+ Person.Person,
65
+ HasRelationship.HasRelationship,
66
+ ],
56
67
  }),
57
- withTheme,
58
- withLayout({ fullscreen: true }),
59
68
  ],
60
- };
69
+ parameters: {
70
+ layout: 'fullscreen',
71
+ },
72
+ } satisfies Meta<typeof D3ForceGraph>;
61
73
 
62
74
  export default meta;
63
75
 
64
- export const Default = {};
76
+ type Story = StoryObj<typeof meta>;
77
+
78
+ export const Default: Story = {};
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React, { type FC, useCallback, useEffect, useMemo, useRef } from 'react';
5
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
6
6
 
7
7
  import { Obj } from '@dxos/echo';
8
8
  import { SelectionModel } from '@dxos/graph';
@@ -15,8 +15,8 @@ import {
15
15
  SVG,
16
16
  type SVGContext,
17
17
  } from '@dxos/react-ui-graph';
18
- import { getHashColor } from '@dxos/react-ui-theme';
19
- import { type SpaceGraphNode, type SpaceGraphModel, type SpaceGraphEdge } from '@dxos/schema';
18
+ import { getHashStyles } from '@dxos/react-ui-theme';
19
+ import { type SpaceGraphEdge, type SpaceGraphModel, type SpaceGraphNode } from '@dxos/schema';
20
20
 
21
21
  import '@dxos/react-ui-graph/styles/graph.css';
22
22
 
@@ -29,7 +29,7 @@ export type D3ForceGraphProps = ThemedClassName<
29
29
  } & Pick<GraphProps, 'drag'>
30
30
  >;
31
31
 
32
- export const D3ForceGraph: FC<D3ForceGraphProps> = ({ classNames, model, selection: _selection, grid, ...props }) => {
32
+ export const D3ForceGraph = ({ classNames, model, selection: _selection, grid, ...props }: D3ForceGraphProps) => {
33
33
  const context = useRef<SVGContext>(null);
34
34
  const projector = useMemo<GraphForceProjector | undefined>(() => {
35
35
  if (context.current) {
@@ -85,7 +85,7 @@ export const D3ForceGraph: FC<D3ForceGraphProps> = ({ classNames, model, selecti
85
85
  const obj = node.data?.data.object;
86
86
  return {
87
87
  data: {
88
- color: getHashColor(obj && Obj.getTypename(obj))?.color,
88
+ color: getHashStyles(obj && Obj.getTypename(obj))?.hue,
89
89
  },
90
90
  classes: {
91
91
  'dx-selected': selection.contains(node.id),