@dxos/plugin-explorer 0.7.5-main.9d2a38b → 0.7.5-main.e94eead

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 (100) hide show
  1. package/dist/lib/browser/{ExplorerContainer-A7UBZ3QP.mjs → ExplorerContainer-GJTCBEM4.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-Q4MVJ6YE.mjs → chunk-PMHCTMKT.mjs} +3 -3
  3. package/dist/lib/browser/{chunk-Q4MVJ6YE.mjs.map → chunk-PMHCTMKT.mjs.map} +1 -1
  4. package/dist/lib/browser/{chunk-D67EYME2.mjs → chunk-QOKAZK4V.mjs} +5 -2
  5. package/dist/lib/browser/chunk-QOKAZK4V.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-DTAFIUA7.mjs → chunk-S3QNIEBS.mjs} +2 -2
  7. package/dist/lib/browser/{chunk-5GTLMW4Q.mjs → chunk-YQL7YE6N.mjs} +171 -100
  8. package/dist/lib/browser/chunk-YQL7YE6N.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +24 -12
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/{intent-resolver-DADUM6T5.mjs → intent-resolver-UJNDAIDZ.mjs} +14 -11
  12. package/dist/lib/browser/{intent-resolver-DADUM6T5.mjs.map → intent-resolver-UJNDAIDZ.mjs.map} +3 -3
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/meta.mjs +1 -1
  15. package/dist/lib/browser/{react-surface-FW4Q2UQM.mjs → react-surface-3X2V3VPN.mjs} +5 -5
  16. package/dist/lib/browser/types/index.mjs +2 -2
  17. package/dist/lib/node/{ExplorerContainer-ZV2YKOUE.cjs → ExplorerContainer-RJT54IOS.cjs} +6 -6
  18. package/dist/lib/node/{chunk-34MGVWOY.cjs → chunk-5MTMJYC4.cjs} +8 -5
  19. package/dist/lib/node/{chunk-34MGVWOY.cjs.map → chunk-5MTMJYC4.cjs.map} +3 -3
  20. package/dist/lib/node/{chunk-4H2Y5RER.cjs → chunk-VSACDC6F.cjs} +5 -5
  21. package/dist/lib/node/{chunk-WHMJ2VQ2.cjs → chunk-YH4QYCZH.cjs} +168 -97
  22. package/dist/lib/node/chunk-YH4QYCZH.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-SFG2GX7G.cjs → chunk-YUY7P7R2.cjs} +7 -7
  24. package/dist/lib/node/{chunk-SFG2GX7G.cjs.map → chunk-YUY7P7R2.cjs.map} +1 -1
  25. package/dist/lib/node/index.cjs +42 -30
  26. package/dist/lib/node/index.cjs.map +3 -3
  27. package/dist/lib/node/{intent-resolver-2V3P4L25.cjs → intent-resolver-XQV24IAA.cjs} +17 -14
  28. package/dist/lib/node/{intent-resolver-2V3P4L25.cjs.map → intent-resolver-XQV24IAA.cjs.map} +3 -3
  29. package/dist/lib/node/meta.cjs +3 -3
  30. package/dist/lib/node/meta.cjs.map +1 -1
  31. package/dist/lib/node/meta.json +1 -1
  32. package/dist/lib/node/{react-surface-7J4K5DDX.cjs → react-surface-36YIY7NA.cjs} +11 -11
  33. package/dist/lib/node/types/index.cjs +4 -4
  34. package/dist/lib/node/types/index.cjs.map +1 -1
  35. package/dist/lib/node-esm/{ExplorerContainer-JXY6XN2D.mjs → ExplorerContainer-TM3VIXVK.mjs} +2 -2
  36. package/dist/lib/node-esm/{chunk-WTGQFG6L.mjs → chunk-3KRWHGBM.mjs} +171 -100
  37. package/dist/lib/node-esm/chunk-3KRWHGBM.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-7NVKKFPI.mjs → chunk-57K7ORAW.mjs} +3 -3
  39. package/dist/lib/node-esm/{chunk-7NVKKFPI.mjs.map → chunk-57K7ORAW.mjs.map} +1 -1
  40. package/dist/lib/node-esm/{chunk-HIMBUOZ3.mjs → chunk-BRJI3QC2.mjs} +2 -2
  41. package/dist/lib/node-esm/{chunk-ZEM6ZU5V.mjs → chunk-UHJZUVRI.mjs} +5 -2
  42. package/dist/lib/node-esm/chunk-UHJZUVRI.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +24 -12
  44. package/dist/lib/node-esm/index.mjs.map +3 -3
  45. package/dist/lib/node-esm/{intent-resolver-3BG74H5K.mjs → intent-resolver-RZQ3EEOE.mjs} +14 -11
  46. package/dist/lib/node-esm/{intent-resolver-3BG74H5K.mjs.map → intent-resolver-RZQ3EEOE.mjs.map} +3 -3
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/meta.mjs +1 -1
  49. package/dist/lib/node-esm/{react-surface-7ZTSGXJO.mjs → react-surface-YDY7IBMY.mjs} +5 -5
  50. package/dist/lib/node-esm/types/index.mjs +2 -2
  51. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  52. package/dist/types/src/capabilities/index.d.ts +2 -2
  53. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  55. package/dist/types/src/components/Chart/Chart.d.ts +1 -2
  56. package/dist/types/src/components/Chart/Chart.d.ts.map +1 -1
  57. package/dist/types/src/components/Chart/Chart.stories.d.ts +1 -2
  58. package/dist/types/src/components/Chart/Chart.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/ExplorerContainer.d.ts +1 -2
  60. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  61. package/dist/types/src/components/Globe/Globe.d.ts +1 -2
  62. package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
  63. package/dist/types/src/components/Globe/Globe.stories.d.ts +2 -3
  64. package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/Graph/Graph.d.ts +2 -0
  66. package/dist/types/src/components/Graph/Graph.d.ts.map +1 -1
  67. package/dist/types/src/components/Graph/graph-model.d.ts +16 -10
  68. package/dist/types/src/components/Graph/graph-model.d.ts.map +1 -1
  69. package/dist/types/src/components/Tree/Tree.d.ts +1 -2
  70. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  71. package/dist/types/src/components/index.d.ts +1 -1
  72. package/dist/types/src/components/index.d.ts.map +1 -1
  73. package/dist/types/src/meta.d.ts +1 -0
  74. package/dist/types/src/meta.d.ts.map +1 -1
  75. package/dist/types/src/translations.d.ts +13 -0
  76. package/dist/types/src/translations.d.ts.map +1 -1
  77. package/dist/types/src/types/schema.d.ts +2 -2
  78. package/package.json +26 -24
  79. package/src/ExplorerPlugin.tsx +19 -14
  80. package/src/capabilities/intent-resolver.ts +6 -3
  81. package/src/components/Graph/Graph.tsx +92 -26
  82. package/src/components/Graph/graph-model.ts +127 -73
  83. package/src/components/Tree/Tree.tsx +7 -2
  84. package/src/meta.ts +2 -1
  85. package/src/translations.ts +4 -0
  86. package/src/types/schema.ts +1 -1
  87. package/dist/lib/browser/chunk-5GTLMW4Q.mjs.map +0 -7
  88. package/dist/lib/browser/chunk-D67EYME2.mjs.map +0 -7
  89. package/dist/lib/node/chunk-WHMJ2VQ2.cjs.map +0 -7
  90. package/dist/lib/node-esm/chunk-WTGQFG6L.mjs.map +0 -7
  91. package/dist/lib/node-esm/chunk-ZEM6ZU5V.mjs.map +0 -7
  92. /package/dist/lib/browser/{ExplorerContainer-A7UBZ3QP.mjs.map → ExplorerContainer-GJTCBEM4.mjs.map} +0 -0
  93. /package/dist/lib/browser/{chunk-DTAFIUA7.mjs.map → chunk-S3QNIEBS.mjs.map} +0 -0
  94. /package/dist/lib/browser/{react-surface-FW4Q2UQM.mjs.map → react-surface-3X2V3VPN.mjs.map} +0 -0
  95. /package/dist/lib/node/{ExplorerContainer-ZV2YKOUE.cjs.map → ExplorerContainer-RJT54IOS.cjs.map} +0 -0
  96. /package/dist/lib/node/{chunk-4H2Y5RER.cjs.map → chunk-VSACDC6F.cjs.map} +0 -0
  97. /package/dist/lib/node/{react-surface-7J4K5DDX.cjs.map → react-surface-36YIY7NA.cjs.map} +0 -0
  98. /package/dist/lib/node-esm/{ExplorerContainer-JXY6XN2D.mjs.map → ExplorerContainer-TM3VIXVK.mjs.map} +0 -0
  99. /package/dist/lib/node-esm/{chunk-HIMBUOZ3.mjs.map → chunk-BRJI3QC2.mjs.map} +0 -0
  100. /package/dist/lib/node-esm/{react-surface-7ZTSGXJO.mjs.map → react-surface-YDY7IBMY.mjs.map} +0 -0
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { type Space } from '@dxos/client/echo';
3
2
  export type LayoutVariant = 'tidy' | 'radial' | 'edge';
4
3
  export type TreeLayoutSlots = {
@@ -23,5 +22,5 @@ export type TreeComponentProps<N = unknown> = {
23
22
  variant?: LayoutVariant;
24
23
  onNodeClick?: (node?: N) => void;
25
24
  };
26
- export declare const Tree: <N>({ space, selected, variant, onNodeClick }: TreeComponentProps<N>) => React.JSX.Element;
25
+ export declare const Tree: <N>({ space, selected, variant, onNodeClick }: TreeComponentProps<N>) => import("react/jsx-runtime").JSX.Element;
27
26
  //# sourceMappingURL=Tree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../../../../src/components/Tree/Tree.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAY/C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAGvD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;IAE1B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAIpC,CAAC;AAQF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CAClC,CAAC;AAGF,eAAO,MAAM,IAAI,GAAI,CAAC,6CAAuD,kBAAkB,CAAC,CAAC,CAAC,sBA6CjG,CAAC"}
1
+ {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../../../../src/components/Tree/Tree.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAa/C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAGvD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;IAE1B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAIpC,CAAC;AAQF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CAClC,CAAC;AAGF,eAAO,MAAM,IAAI,GAAI,CAAC,6CAAuD,kBAAkB,CAAC,CAAC,CAAC,4CAiDjG,CAAC"}
@@ -1,7 +1,7 @@
1
1
  export declare const ExplorerContainer: import("react").LazyExoticComponent<({ view, role }: {
2
2
  view: import("../types").ViewType;
3
3
  role: string;
4
- }) => import("react").JSX.Element | null>;
4
+ }) => import("react/jsx-runtime").JSX.Element | null>;
5
5
  export * from './Chart';
6
6
  export * from './Globe';
7
7
  export * from './Graph';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB;;;yCAA4C,CAAC;AAE3E,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB;;;qDAA4C,CAAC;AAE3E,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
@@ -6,5 +6,6 @@ export declare const meta: {
6
6
  icon: string;
7
7
  source: string;
8
8
  tags: string[];
9
+ screenshots: string[];
9
10
  };
10
11
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,eAAO,MAAM,IAAI;;;;;;;CAOK,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,eAAO,MAAM,IAAI;;;;;;;;CAQK,CAAC"}
@@ -1,5 +1,18 @@
1
1
  declare const _default: {
2
2
  'en-US': {
3
+ [x: string]: {
4
+ 'typename label': string;
5
+ 'plugin name'?: undefined;
6
+ 'object title label'?: undefined;
7
+ 'object title placeholder'?: undefined;
8
+ 'create object label'?: undefined;
9
+ } | {
10
+ 'plugin name': string;
11
+ 'object title label': string;
12
+ 'object title placeholder': string;
13
+ 'create object label': string;
14
+ 'typename label'?: undefined;
15
+ };
3
16
  "dxos.org/plugin/explorer": {
4
17
  'plugin name': string;
5
18
  'object title label': string;
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;AAMA,wBAWE"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAOA,wBAcE"}
@@ -1,8 +1,8 @@
1
1
  import { S } from '@dxos/echo-schema';
2
- declare const ViewType_base: import("@dxos/echo-schema").TypedObjectPrototype<import("packages/core/echo/echo-schema/dist/types/src/object/common").TypedObjectFields<{
2
+ declare const ViewType_base: import("@dxos/echo-schema").TypedObjectPrototype<import("@dxos/echo-schema").TypedObjectFields<{
3
3
  name: S.optional<typeof S.String>;
4
4
  type: typeof S.String;
5
- }, import("packages/core/echo/echo-schema/dist/types/src/object/common").TypedObjectOptions>, S.Struct.Encoded<{
5
+ }, import("@dxos/echo-schema").TypedObjectOptions>, S.Struct.Encoded<{
6
6
  name: S.optional<typeof S.String>;
7
7
  type: typeof S.String;
8
8
  }>>;
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@dxos/plugin-explorer",
3
- "version": "0.7.5-main.9d2a38b",
3
+ "version": "0.7.5-main.e94eead",
4
4
  "description": "Braneframe data visualization plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
7
  "license": "MIT",
8
8
  "author": "DXOS.org",
9
9
  "sideEffects": true,
10
+ "type": "module",
10
11
  "exports": {
11
12
  ".": {
12
13
  "types": "./dist/types/src/index.d.ts",
@@ -36,25 +37,26 @@
36
37
  "@observablehq/plot": "^0.6.11",
37
38
  "@preact/signals-core": "^1.6.0",
38
39
  "d3": "^7.9.0",
40
+ "force-graph": "1.49.3",
39
41
  "lodash.defaultsdeep": "^4.6.1",
40
42
  "lodash.get": "^4.4.2",
41
43
  "react-resize-detector": "^11.0.1",
42
44
  "topojson-client": "^3.1.0",
43
- "@dxos/app-framework": "0.7.5-main.9d2a38b",
44
- "@dxos/async": "0.7.5-main.9d2a38b",
45
- "@dxos/client": "0.7.5-main.9d2a38b",
46
- "@dxos/gem-core": "0.7.5-main.9d2a38b",
47
- "@dxos/echo-schema": "0.7.5-main.9d2a38b",
48
- "@dxos/gem-spore": "0.7.5-main.9d2a38b",
49
- "@dxos/log": "0.7.5-main.9d2a38b",
50
- "@dxos/plugin-client": "0.7.5-main.9d2a38b",
51
- "@dxos/plugin-search": "0.7.5-main.9d2a38b",
52
- "@dxos/plugin-graph": "0.7.5-main.9d2a38b",
53
- "@dxos/plugin-space": "0.7.5-main.9d2a38b",
54
- "@dxos/live-object": "0.7.5-main.9d2a38b",
55
- "@dxos/util": "0.7.5-main.9d2a38b",
56
- "@dxos/react-client": "0.7.5-main.9d2a38b",
57
- "@dxos/react-ui-stack": "0.7.5-main.9d2a38b"
45
+ "@dxos/echo-schema": "0.7.5-main.e94eead",
46
+ "@dxos/client": "0.7.5-main.e94eead",
47
+ "@dxos/app-framework": "0.7.5-main.e94eead",
48
+ "@dxos/gem-spore": "0.7.5-main.e94eead",
49
+ "@dxos/async": "0.7.5-main.e94eead",
50
+ "@dxos/live-object": "0.7.5-main.e94eead",
51
+ "@dxos/log": "0.7.5-main.e94eead",
52
+ "@dxos/plugin-client": "0.7.5-main.e94eead",
53
+ "@dxos/plugin-graph": "0.7.5-main.e94eead",
54
+ "@dxos/plugin-search": "0.7.5-main.e94eead",
55
+ "@dxos/gem-core": "0.7.5-main.e94eead",
56
+ "@dxos/plugin-space": "0.7.5-main.e94eead",
57
+ "@dxos/react-client": "0.7.5-main.e94eead",
58
+ "@dxos/react-ui-stack": "0.7.5-main.e94eead",
59
+ "@dxos/util": "0.7.5-main.e94eead"
58
60
  },
59
61
  "devDependencies": {
60
62
  "@phosphor-icons/react": "^2.1.5",
@@ -69,19 +71,19 @@
69
71
  "react": "~18.2.0",
70
72
  "react-dom": "~18.2.0",
71
73
  "vite": "5.4.7",
72
- "@dxos/echo-generator": "0.7.5-main.9d2a38b",
73
- "@dxos/plugin-outliner": "0.7.5-main.9d2a38b",
74
- "@dxos/random": "0.7.5-main.9d2a38b",
75
- "@dxos/react-ui": "0.7.5-main.9d2a38b",
76
- "@dxos/storybook-utils": "0.7.5-main.9d2a38b",
77
- "@dxos/react-ui-theme": "0.7.5-main.9d2a38b"
74
+ "@dxos/echo-generator": "0.7.5-main.e94eead",
75
+ "@dxos/plugin-outliner": "0.7.5-main.e94eead",
76
+ "@dxos/react-ui": "0.7.5-main.e94eead",
77
+ "@dxos/random": "0.7.5-main.e94eead",
78
+ "@dxos/storybook-utils": "0.7.5-main.e94eead",
79
+ "@dxos/react-ui-theme": "0.7.5-main.e94eead"
78
80
  },
79
81
  "peerDependencies": {
80
82
  "@phosphor-icons/react": "^2.1.5",
81
83
  "react": "~18.2.0",
82
84
  "react-dom": "~18.2.0",
83
- "@dxos/react-ui": "0.7.5-main.9d2a38b",
84
- "@dxos/react-ui-theme": "0.7.5-main.9d2a38b"
85
+ "@dxos/react-ui": "0.7.5-main.e94eead",
86
+ "@dxos/react-ui-theme": "0.7.5-main.e94eead"
85
87
  },
86
88
  "publishConfig": {
87
89
  "access": "public"
@@ -2,16 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- Capabilities,
7
- contributes,
8
- createIntent,
9
- defineModule,
10
- definePlugin,
11
- Events,
12
- oneOf,
13
- } from '@dxos/app-framework';
5
+ import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';
14
6
  import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
7
+ import { SpaceCapabilities } from '@dxos/plugin-space';
8
+ import { defineObjectForm } from '@dxos/plugin-space/types';
15
9
 
16
10
  import { IntentResolver, ReactSurface } from './capabilities';
17
11
  import { EXPLORER_PLUGIN, meta } from './meta';
@@ -27,30 +21,41 @@ export const ExplorerPlugin = () =>
27
21
  }),
28
22
  defineModule({
29
23
  id: `${meta.id}/module/metadata`,
30
- activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
24
+ activatesOn: Events.SetupMetadata,
31
25
  activate: () =>
32
26
  contributes(Capabilities.Metadata, {
33
27
  id: ViewType.typename,
34
28
  metadata: {
35
- createObject: (props: { name?: string }) => createIntent(ExplorerAction.Create, props),
36
29
  placeholder: ['object title placeholder', { ns: EXPLORER_PLUGIN }],
37
30
  icon: 'ph--graph--regular',
38
31
  },
39
32
  }),
40
33
  }),
34
+ defineModule({
35
+ id: `${meta.id}/module/object-form`,
36
+ activatesOn: ClientEvents.SetupSchema,
37
+ activate: () =>
38
+ contributes(
39
+ SpaceCapabilities.ObjectForm,
40
+ defineObjectForm({
41
+ objectSchema: ViewType,
42
+ getIntent: () => createIntent(ExplorerAction.Create),
43
+ }),
44
+ ),
45
+ }),
41
46
  defineModule({
42
47
  id: `${meta.id}/module/schema`,
43
- activatesOn: ClientEvents.SetupClient,
48
+ activatesOn: ClientEvents.SetupSchema,
44
49
  activate: () => contributes(ClientCapabilities.Schema, [ViewType]),
45
50
  }),
46
51
  defineModule({
47
52
  id: `${meta.id}/module/react-surface`,
48
- activatesOn: Events.Startup,
53
+ activatesOn: Events.SetupReactSurface,
49
54
  activate: ReactSurface,
50
55
  }),
51
56
  defineModule({
52
57
  id: `${meta.id}/module/intent-resolver`,
53
- activatesOn: Events.SetupIntents,
58
+ activatesOn: Events.SetupIntentResolver,
54
59
  activate: IntentResolver,
55
60
  }),
56
61
  ]);
@@ -10,7 +10,10 @@ import { ExplorerAction, ViewType } from '../types';
10
10
  export default () =>
11
11
  contributes(
12
12
  Capabilities.IntentResolver,
13
- createResolver(ExplorerAction.Create, ({ name }) => ({
14
- data: { object: create(ViewType, { name, type: '' }) },
15
- })),
13
+ createResolver({
14
+ intent: ExplorerAction.Create,
15
+ resolve: ({ name }) => ({
16
+ data: { object: create(ViewType, { name, type: '' }) },
17
+ }),
18
+ }),
16
19
  );
@@ -2,9 +2,12 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { forceLink, forceManyBody } from 'd3';
6
+ import ForceGraph from 'force-graph';
5
7
  import React, { type FC, useEffect, useMemo, useRef, useState } from 'react';
8
+ import { useResizeDetector } from 'react-resize-detector';
6
9
 
7
- import { type ReactiveEchoObject, type Space, getType } from '@dxos/client/echo';
10
+ import { getTypename, type ReactiveEchoObject, type Space } from '@dxos/client/echo';
8
11
  import { createSvgContext, defaultGridStyles, Grid, SVG, SVGRoot, Zoom } from '@dxos/gem-core';
9
12
  import {
10
13
  defaultStyles,
@@ -14,9 +17,8 @@ import {
14
17
  Markers,
15
18
  } from '@dxos/gem-spore';
16
19
  import { filterObjectsSync, type SearchResult } from '@dxos/plugin-search';
17
- import { useThemeContext } from '@dxos/react-ui';
20
+ import { useAsyncState, useThemeContext } from '@dxos/react-ui';
18
21
  import { mx } from '@dxos/react-ui-theme';
19
-
20
22
  import '@dxos/gem-spore/styles';
21
23
 
22
24
  import { type EchoGraphNode, SpaceGraphModel } from './graph-model';
@@ -45,12 +47,18 @@ const colors = [
45
47
  export type GraphProps = {
46
48
  space: Space;
47
49
  match?: RegExp;
50
+ grid?: boolean;
51
+ svg?: boolean;
48
52
  };
49
53
 
50
- export const Graph: FC<GraphProps> = ({ space, match }) => {
51
- const model = useMemo(() => (space ? new SpaceGraphModel({ schema: true }).open(space) : undefined), [space]);
52
- const [selected, setSelected] = useState<string>();
54
+ export const Graph: FC<GraphProps> = ({ space, match, grid, svg }) => {
53
55
  const { themeMode } = useThemeContext();
56
+ const [selected, setSelected] = useState<string>();
57
+
58
+ const [model] = useAsyncState(
59
+ async () => (space ? new SpaceGraphModel({ schema: true }).open(space) : undefined),
60
+ [space],
61
+ );
54
62
 
55
63
  const context = createSvgContext();
56
64
  const projector = useMemo(
@@ -61,15 +69,15 @@ export const Graph: FC<GraphProps> = ({ space, match }) => {
61
69
  strength: -100,
62
70
  },
63
71
  link: {
64
- distance: 180,
72
+ distance: 100,
65
73
  },
66
74
  radial: {
67
- radius: 200,
75
+ radius: 150,
68
76
  strength: 0.05,
69
77
  },
70
78
  },
71
79
  attributes: {
72
- radius: (node: GraphLayoutNode<EchoGraphNode>) => (node.data?.type === 'schema' ? 24 : 12),
80
+ radius: (node: GraphLayoutNode<EchoGraphNode>) => (node.data?.type === 'schema' ? 12 : 8),
73
81
  },
74
82
  }),
75
83
  [],
@@ -83,8 +91,68 @@ export const Graph: FC<GraphProps> = ({ space, match }) => {
83
91
 
84
92
  const [colorMap] = useState(new Map<string, string>());
85
93
 
86
- if (!model) {
87
- return null;
94
+ // https://github.com/vasturiano/force-graph
95
+ const { ref, width, height } = useResizeDetector();
96
+ const rootRef = useRef<HTMLDivElement>(null);
97
+ const forceGraph = useRef<ForceGraph>();
98
+
99
+ useEffect(() => {
100
+ if (rootRef.current) {
101
+ forceGraph.current = new ForceGraph(rootRef.current)
102
+ .nodeRelSize(6)
103
+ .nodeLabel((node: any) => {
104
+ if (node.type === 'schema') {
105
+ return node.data.typename;
106
+ }
107
+
108
+ return node.id;
109
+ })
110
+ .nodeAutoColorBy((node: any) => (node.type === 'schema' ? 'schema' : node.data.typename))
111
+ .linkColor(() => 'rgba(255,255,255,0.25)');
112
+ }
113
+
114
+ return () => {
115
+ forceGraph.current?.pauseAnimation().graphData({ nodes: [], links: [] });
116
+ forceGraph.current = undefined;
117
+ };
118
+ }, []);
119
+
120
+ // Update.
121
+ useEffect(() => {
122
+ if (forceGraph.current && width && height && model) {
123
+ forceGraph.current
124
+ .pauseAnimation()
125
+ .width(width)
126
+ .height(height)
127
+ .onEngineStop(() => {
128
+ forceGraph.current?.zoomToFit(400, 40);
129
+ })
130
+
131
+ // https://github.com/vasturiano/force-graph?tab=readme-ov-file#force-engine-d3-force-configuration
132
+ // .d3Force('center', forceCenter().strength(0.9))
133
+ .d3Force('link', forceLink().distance(160).strength(0.5))
134
+ .d3Force('charge', forceManyBody().strength(-30))
135
+ // .d3AlphaDecay(0.0228)
136
+ // .d3VelocityDecay(0.4)
137
+ .warmupTicks(100)
138
+ // .cooldownTime(1000)
139
+
140
+ //
141
+ .graphData(model.graph)
142
+ .resumeAnimation();
143
+ }
144
+ }, [model, width, height]);
145
+
146
+ const handleZoomToFit = () => {
147
+ forceGraph.current?.zoomToFit(400, 40);
148
+ };
149
+
150
+ if (!svg) {
151
+ return (
152
+ <div ref={ref} className='relative grow' onClick={handleZoomToFit}>
153
+ <div ref={rootRef} className='absolute inset-0' />
154
+ </div>
155
+ );
88
156
  }
89
157
 
90
158
  if (selected) {
@@ -95,7 +163,7 @@ export const Graph: FC<GraphProps> = ({ space, match }) => {
95
163
  <SVGRoot context={context}>
96
164
  <SVG className={mx(defaultStyles, slots?.root?.className)}>
97
165
  <Markers arrowSize={6} />
98
- <Grid className={slots?.grid?.className ?? defaultGridStyles(themeMode)} />
166
+ {grid && <Grid className={slots?.grid?.className ?? defaultGridStyles(themeMode)} />}
99
167
  <Zoom extent={[1 / 2, 4]}>
100
168
  <GraphComponent
101
169
  model={model}
@@ -117,29 +185,27 @@ export const Graph: FC<GraphProps> = ({ space, match }) => {
117
185
  node: (node: GraphLayoutNode<ReactiveEchoObject<any>>) => {
118
186
  let className: string | undefined;
119
187
  if (node.data) {
120
- const typename = getType(node.data)?.objectId;
121
- if (typename) {
122
- className = colorMap.get(typename);
123
- if (!className) {
124
- className = colors[colorMap.size % colors.length];
125
- colorMap.set(typename, className);
188
+ const { object } = node.data;
189
+ if (object) {
190
+ const typename = getTypename(object);
191
+ if (typename) {
192
+ className = colorMap.get(typename);
193
+ if (!className) {
194
+ className = colors[colorMap.size % colors.length];
195
+ colorMap.set(typename, className);
196
+ }
126
197
  }
127
198
  }
128
199
  }
129
200
 
130
201
  const selected = filteredRef.current?.some((object) => object.id === node.data?.id);
202
+ const blur = !selected && !!filteredRef.current?.length;
131
203
  return {
132
- class: mx(
133
- filteredRef.current?.length
134
- ? selected
135
- ? [className]
136
- : '[&>text]:!fill-neutral-300'
137
- : ['[&>text]:!fill-neutral-700', className],
138
- ),
204
+ class: mx(className, blur && 'opacity-70'),
139
205
  };
140
206
  },
141
207
  link: () => ({
142
- class: '[&>path]:!stroke-neutral-300',
208
+ class: '[&>path]:!stroke-neutral-300 dark:[&>path]:!stroke-neutral-700',
143
209
  }),
144
210
  }}
145
211
  />