@dxos/plugin-explorer 0.8.4-main.72ec0f3 → 0.8.4-main.937b3ca

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 (125) hide show
  1. package/dist/lib/browser/ExplorerContainer-BFAWRIAJ.mjs +45 -0
  2. package/dist/lib/browser/ExplorerContainer-BFAWRIAJ.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-ARBGXQFH.mjs → chunk-AGZAGILW.mjs} +135 -148
  4. package/dist/lib/{node-esm/chunk-NPIP4VEH.mjs.map → browser/chunk-AGZAGILW.mjs.map} +3 -3
  5. package/dist/lib/browser/{chunk-2MKBRIUT.mjs → chunk-BZMTFAP3.mjs} +8 -5
  6. package/dist/lib/browser/chunk-BZMTFAP3.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-DXORXPUJ.mjs +83 -0
  8. package/dist/lib/browser/chunk-DXORXPUJ.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-MGBT2ZFU.mjs +177 -0
  10. package/dist/lib/browser/chunk-MGBT2ZFU.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-UBHZGWZQ.mjs → chunk-YNQF4CPY.mjs} +1 -1
  12. package/dist/lib/browser/chunk-YNQF4CPY.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +46 -65
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/meta.mjs +1 -1
  17. package/dist/lib/browser/react-surface-24INQLMB.mjs +35 -0
  18. package/dist/lib/browser/react-surface-24INQLMB.mjs.map +7 -0
  19. package/dist/lib/browser/types/index.mjs +1 -2
  20. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs +46 -0
  21. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs.map +7 -0
  22. package/dist/lib/node-esm/{chunk-UXZM5VJB.mjs → chunk-DK77RB6M.mjs} +1 -1
  23. package/dist/lib/node-esm/chunk-DK77RB6M.mjs.map +7 -0
  24. package/dist/lib/node-esm/{chunk-3ODK27PU.mjs → chunk-IPIGIQHX.mjs} +8 -5
  25. package/dist/lib/node-esm/chunk-IPIGIQHX.mjs.map +7 -0
  26. package/dist/lib/node-esm/{chunk-NPIP4VEH.mjs → chunk-QLMTN2XI.mjs} +135 -148
  27. package/dist/lib/{browser/chunk-ARBGXQFH.mjs.map → node-esm/chunk-QLMTN2XI.mjs.map} +3 -3
  28. package/dist/lib/node-esm/chunk-UCH3WYRD.mjs +84 -0
  29. package/dist/lib/node-esm/chunk-UCH3WYRD.mjs.map +7 -0
  30. package/dist/lib/node-esm/chunk-YWJBDETV.mjs +179 -0
  31. package/dist/lib/node-esm/chunk-YWJBDETV.mjs.map +7 -0
  32. package/dist/lib/node-esm/index.mjs +46 -65
  33. package/dist/lib/node-esm/index.mjs.map +4 -4
  34. package/dist/lib/node-esm/meta.json +1 -1
  35. package/dist/lib/node-esm/meta.mjs +1 -1
  36. package/dist/lib/node-esm/react-surface-F465WXH7.mjs +36 -0
  37. package/dist/lib/node-esm/react-surface-F465WXH7.mjs.map +7 -0
  38. package/dist/lib/node-esm/types/index.mjs +1 -2
  39. package/dist/types/src/ExplorerPlugin.d.ts +2 -1
  40. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  41. package/dist/types/src/capabilities/index.d.ts +1 -2
  42. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  43. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  44. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  45. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  46. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  47. package/dist/types/src/components/ExplorerContainer.d.ts +3 -5
  48. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  49. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -1
  50. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
  52. package/dist/types/src/components/Graph/adapter.d.ts +1 -1
  53. package/dist/types/src/components/Graph/adapter.d.ts.map +1 -1
  54. package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
  55. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  56. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  57. package/dist/types/src/components/Tree/testing/generator.d.ts.map +1 -1
  58. package/dist/types/src/components/Tree/types/tree.d.ts +17 -15
  59. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
  60. package/dist/types/src/components/Tree/types/types.d.ts +1 -1
  61. package/dist/types/src/components/Tree/types/types.d.ts.map +1 -1
  62. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  63. package/dist/types/src/meta.d.ts +2 -2
  64. package/dist/types/src/meta.d.ts.map +1 -1
  65. package/dist/types/src/translations.d.ts +17 -10
  66. package/dist/types/src/translations.d.ts.map +1 -1
  67. package/dist/types/src/types/ExplorerAction.d.ts +1 -18
  68. package/dist/types/src/types/ExplorerAction.d.ts.map +1 -1
  69. package/dist/types/src/types/Graph.d.ts +19 -22
  70. package/dist/types/src/types/Graph.d.ts.map +1 -1
  71. package/dist/types/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +52 -48
  73. package/src/ExplorerPlugin.tsx +27 -52
  74. package/src/capabilities/index.ts +1 -4
  75. package/src/capabilities/react-surface/index.ts +7 -0
  76. package/src/capabilities/react-surface/react-surface.tsx +30 -0
  77. package/src/components/Chart/Chart.stories.tsx +2 -2
  78. package/src/components/ExplorerContainer.tsx +6 -8
  79. package/src/components/Globe/Globe.stories.tsx +2 -2
  80. package/src/components/Graph/D3ForceGraph.stories.tsx +12 -7
  81. package/src/components/Graph/D3ForceGraph.tsx +2 -2
  82. package/src/components/Graph/ForceGraph.stories.tsx +12 -7
  83. package/src/components/Graph/adapter.ts +14 -8
  84. package/src/components/Graph/testing.ts +6 -3
  85. package/src/components/Tree/Tree.stories.tsx +3 -2
  86. package/src/components/Tree/Tree.tsx +8 -3
  87. package/src/components/Tree/testing/generator.ts +4 -2
  88. package/src/components/Tree/types/tree.test.ts +3 -1
  89. package/src/components/Tree/types/tree.ts +39 -18
  90. package/src/components/Tree/types/types.ts +1 -1
  91. package/src/hooks/useGraphModel.ts +6 -4
  92. package/src/meta.ts +2 -2
  93. package/src/translations.ts +3 -1
  94. package/src/types/ExplorerAction.ts +10 -19
  95. package/src/types/Graph.ts +38 -22
  96. package/dist/lib/browser/ExplorerContainer-NOLLVUTE.mjs +0 -50
  97. package/dist/lib/browser/ExplorerContainer-NOLLVUTE.mjs.map +0 -7
  98. package/dist/lib/browser/chunk-2MKBRIUT.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-6BVXZQPP.mjs +0 -188
  100. package/dist/lib/browser/chunk-6BVXZQPP.mjs.map +0 -7
  101. package/dist/lib/browser/chunk-JDSUIUNR.mjs +0 -80
  102. package/dist/lib/browser/chunk-JDSUIUNR.mjs.map +0 -7
  103. package/dist/lib/browser/chunk-UBHZGWZQ.mjs.map +0 -7
  104. package/dist/lib/browser/intent-resolver-YS5LZC3A.mjs +0 -31
  105. package/dist/lib/browser/intent-resolver-YS5LZC3A.mjs.map +0 -7
  106. package/dist/lib/browser/react-surface-BVTCOVLK.mjs +0 -35
  107. package/dist/lib/browser/react-surface-BVTCOVLK.mjs.map +0 -7
  108. package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs +0 -51
  109. package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs.map +0 -7
  110. package/dist/lib/node-esm/chunk-3ODK27PU.mjs.map +0 -7
  111. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs +0 -190
  112. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs.map +0 -7
  113. package/dist/lib/node-esm/chunk-MS72BATS.mjs +0 -81
  114. package/dist/lib/node-esm/chunk-MS72BATS.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-UXZM5VJB.mjs.map +0 -7
  116. package/dist/lib/node-esm/intent-resolver-VCEC67WX.mjs +0 -32
  117. package/dist/lib/node-esm/intent-resolver-VCEC67WX.mjs.map +0 -7
  118. package/dist/lib/node-esm/react-surface-4HFEX52O.mjs +0 -36
  119. package/dist/lib/node-esm/react-surface-4HFEX52O.mjs.map +0 -7
  120. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  121. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  122. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  123. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  124. package/src/capabilities/intent-resolver.ts +0 -21
  125. package/src/capabilities/react-surface.tsx +0 -27
@@ -0,0 +1,84 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ __export
4
+ } from "./chunk-HSLMI22Q.mjs";
5
+
6
+ // src/types/ExplorerAction.ts
7
+ var ExplorerAction_exports = {};
8
+ __export(ExplorerAction_exports, {
9
+ GraphProps: () => GraphProps
10
+ });
11
+ import * as Schema from "effect/Schema";
12
+ import { TypeInputOptionsAnnotation } from "@dxos/plugin-space/types";
13
+ var GraphProps = Schema.Struct({
14
+ name: Schema.optional(Schema.String),
15
+ // TODO(wittjosiah): This should be a query input instead.
16
+ typename: Schema.String.pipe(Schema.annotations({
17
+ title: "Select type"
18
+ }), TypeInputOptionsAnnotation.set({
19
+ location: [
20
+ "database",
21
+ "runtime"
22
+ ],
23
+ kind: [
24
+ "user"
25
+ ],
26
+ registered: [
27
+ "registered"
28
+ ]
29
+ }), Schema.optional)
30
+ });
31
+
32
+ // src/types/Graph.ts
33
+ var Graph_exports = {};
34
+ __export(Graph_exports, {
35
+ Graph: () => Graph,
36
+ GraphV1: () => GraphV1,
37
+ make: () => make
38
+ });
39
+ import * as Schema2 from "effect/Schema";
40
+ import { Filter, Obj, Query, QueryAST, Ref, Type } from "@dxos/echo";
41
+ import { FormInputAnnotation, LabelAnnotation } from "@dxos/echo/internal";
42
+ import { View, ViewAnnotation } from "@dxos/schema";
43
+ var GraphSchema = Schema2.Struct({
44
+ name: Schema2.optional(Schema2.String),
45
+ view: Type.Ref(View.View).pipe(FormInputAnnotation.set(false)),
46
+ query: Schema2.Struct({
47
+ raw: Schema2.optional(Schema2.String),
48
+ ast: QueryAST.Query
49
+ }).pipe(Schema2.mutable, FormInputAnnotation.set(false))
50
+ }).pipe(Type.object({
51
+ typename: "dxos.org/type/Graph",
52
+ version: "0.2.0"
53
+ }), LabelAnnotation.set([
54
+ "name"
55
+ ]), ViewAnnotation.set(true));
56
+ var Graph = GraphSchema;
57
+ var make = ({ name, query = {
58
+ raw: "",
59
+ ast: Query.select(Filter.nothing()).ast
60
+ }, view }) => {
61
+ return Obj.make(Graph, {
62
+ name,
63
+ view: Ref.make(view),
64
+ query
65
+ });
66
+ };
67
+ var GraphV1 = Schema2.Struct({
68
+ name: Schema2.optional(Schema2.String),
69
+ query: Schema2.Struct({
70
+ raw: Schema2.optional(Schema2.String),
71
+ ast: QueryAST.Query
72
+ }).pipe(Schema2.mutable)
73
+ }).pipe(Type.object({
74
+ typename: "dxos.org/type/Graph",
75
+ version: "0.1.0"
76
+ }), LabelAnnotation.set([
77
+ "name"
78
+ ]));
79
+
80
+ export {
81
+ ExplorerAction_exports,
82
+ Graph_exports
83
+ };
84
+ //# sourceMappingURL=chunk-UCH3WYRD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/ExplorerAction.ts", "../../../src/types/Graph.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypeInputOptionsAnnotation } from '@dxos/plugin-space/types';\n\nexport const GraphProps = Schema.Struct({\n name: Schema.optional(Schema.String),\n // TODO(wittjosiah): This should be a query input instead.\n typename: Schema.String.pipe(\n Schema.annotations({ title: 'Select type' }),\n TypeInputOptionsAnnotation.set({\n location: ['database', 'runtime'],\n kind: ['user'],\n registered: ['registered'],\n }),\n Schema.optional,\n ),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Filter, Obj, Query, QueryAST, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';\nimport { View, ViewAnnotation } from '@dxos/schema';\n\nconst GraphSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n\n view: Type.Ref(View.View).pipe(FormInputAnnotation.set(false)),\n\n query: Schema.Struct({\n raw: Schema.optional(Schema.String),\n ast: QueryAST.Query,\n }).pipe(Schema.mutable, FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Graph',\n version: '0.2.0',\n }),\n LabelAnnotation.set(['name']),\n ViewAnnotation.set(true),\n);\nexport interface Graph extends Schema.Schema.Type<typeof GraphSchema> {}\nexport const Graph: Type.Obj<Graph> = GraphSchema as any;\n\ntype MakeProps = Omit<Partial<Obj.MakeProps<typeof Graph>>, 'view'> & {\n view: View.View;\n};\n\n/**\n * Make a graph as a view of a data set.\n */\nexport const make = ({\n name,\n query = { raw: '', ast: Query.select(Filter.nothing()).ast },\n view,\n}: MakeProps): Graph => {\n return Obj.make(Graph, { name, view: Ref.make(view), query });\n};\n\n//\n// V1\n//\n\nexport const GraphV1 = Schema.Struct({\n name: Schema.optional(Schema.String),\n query: Schema.Struct({\n raw: Schema.optional(Schema.String),\n ast: QueryAST.Query,\n }).pipe(Schema.mutable),\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Graph',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['name']),\n);\n"],
5
+ "mappings": ";;;;;;AAAA;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kCAAkC;AAEpC,IAAMC,aAAoBC,cAAO;EACtCC,MAAaC,gBAAgBC,aAAM;;EAEnCC,UAAiBD,cAAOE,KACfC,mBAAY;IAAEC,OAAO;EAAc,CAAA,GAC1CC,2BAA2BC,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;IACPC,YAAY;MAAC;;EACf,CAAA,GACOV,eAAQ;AAEnB,CAAA;;;ACpBA;;;;;;AAIA,YAAYW,aAAY;AAExB,SAASC,QAAQC,KAAKC,OAAOC,UAAUC,KAAKC,YAAY;AACxD,SAASC,qBAAqBC,uBAAuB;AACrD,SAASC,MAAMC,sBAAsB;AAErC,IAAMC,cAAqBC,eAAO;EAChCC,MAAaC,iBAAgBC,cAAM;EAEnCC,MAAMC,KAAKC,IAAIC,KAAKA,IAAI,EAAEC,KAAKC,oBAAoBC,IAAI,KAAA,CAAA;EAEvDC,OAAcX,eAAO;IACnBY,KAAYV,iBAAgBC,cAAM;IAClCU,KAAKC,SAASC;EAChB,CAAA,EAAGP,KAAYQ,iBAASP,oBAAoBC,IAAI,KAAA,CAAA;AAClD,CAAA,EAAGF,KACDH,KAAKY,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBV,IAAI;EAAC;CAAO,GAC5BW,eAAeX,IAAI,IAAA,CAAA;AAGd,IAAMY,QAAyBvB;AAS/B,IAAMwB,OAAO,CAAC,EACnBtB,MACAU,QAAQ;EAAEC,KAAK;EAAIC,KAAKE,MAAMS,OAAOC,OAAOC,QAAO,CAAA,EAAIb;AAAI,GAC3DT,KAAI,MACM;AACV,SAAOuB,IAAIJ,KAAKD,OAAO;IAAErB;IAAMG,MAAME,IAAIiB,KAAKnB,IAAAA;IAAOO;EAAM,CAAA;AAC7D;AAMO,IAAMiB,UAAiB5B,eAAO;EACnCC,MAAaC,iBAAgBC,cAAM;EACnCQ,OAAcX,eAAO;IACnBY,KAAYV,iBAAgBC,cAAM;IAClCU,KAAKC,SAASC;EAChB,CAAA,EAAGP,KAAYQ,eAAO;AACxB,CAAA,EAAGR,KACDH,KAAKY,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBV,IAAI;EAAC;CAAO,CAAA;",
6
+ "names": ["Schema", "TypeInputOptionsAnnotation", "GraphProps", "Struct", "name", "optional", "String", "typename", "pipe", "annotations", "title", "TypeInputOptionsAnnotation", "set", "location", "kind", "registered", "Schema", "Filter", "Obj", "Query", "QueryAST", "Ref", "Type", "FormInputAnnotation", "LabelAnnotation", "View", "ViewAnnotation", "GraphSchema", "Struct", "name", "optional", "String", "view", "Type", "Ref", "View", "pipe", "FormInputAnnotation", "set", "query", "raw", "ast", "QueryAST", "Query", "mutable", "object", "typename", "version", "LabelAnnotation", "ViewAnnotation", "Graph", "make", "select", "Filter", "nothing", "Obj", "GraphV1"]
7
+ }
@@ -0,0 +1,179 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/components/Graph/D3ForceGraph.tsx
4
+ import React, { useCallback, useEffect, useMemo, useRef } from "react";
5
+ import { Obj } from "@dxos/echo";
6
+ import { SelectionModel } from "@dxos/graph";
7
+ import { GraphForceProjector, SVG } from "@dxos/react-ui-graph";
8
+ import { getHashStyles } from "@dxos/ui-theme";
9
+ import "@dxos/react-ui-graph/styles/graph.css";
10
+ var D3ForceGraph = ({ classNames, model, selection: _selection, grid, ...props }) => {
11
+ const context = useRef(null);
12
+ const projector = useMemo(() => {
13
+ if (context.current) {
14
+ return new GraphForceProjector(context.current, {
15
+ attributes: {
16
+ linkForce: (edge) => {
17
+ return edge.data?.object?.active !== false;
18
+ }
19
+ },
20
+ forces: {
21
+ point: {
22
+ strength: 0.01
23
+ }
24
+ }
25
+ });
26
+ }
27
+ }, [
28
+ context.current
29
+ ]);
30
+ const graph = useRef(null);
31
+ const selection = useMemo(() => _selection ?? new SelectionModel(), [
32
+ _selection
33
+ ]);
34
+ useEffect(() => selection.subscribe(() => graph.current?.repaint()), [
35
+ selection
36
+ ]);
37
+ const handleSelect = useCallback((node) => {
38
+ if (selection.contains(node.id)) {
39
+ selection.remove(node.id);
40
+ } else {
41
+ selection.add(node.id);
42
+ }
43
+ }, [
44
+ selection
45
+ ]);
46
+ return /* @__PURE__ */ React.createElement(SVG.Root, {
47
+ ref: context,
48
+ classNames
49
+ }, /* @__PURE__ */ React.createElement(SVG.Markers, null), grid && /* @__PURE__ */ React.createElement(SVG.Grid, {
50
+ axis: true
51
+ }), /* @__PURE__ */ React.createElement(SVG.Zoom, {
52
+ extent: [
53
+ 1 / 2,
54
+ 2
55
+ ]
56
+ }, /* @__PURE__ */ React.createElement(SVG.Graph, {
57
+ ...props,
58
+ ref: graph,
59
+ model,
60
+ projector,
61
+ labels: {
62
+ text: (node) => {
63
+ return node.data?.data.label ?? node.id;
64
+ }
65
+ },
66
+ attributes: {
67
+ node: (node) => {
68
+ const obj = node.data?.data.object;
69
+ return {
70
+ data: {
71
+ color: getHashStyles(obj && Obj.getTypename(obj))?.hue
72
+ },
73
+ classes: {
74
+ "dx-selected": selection.contains(node.id)
75
+ }
76
+ };
77
+ }
78
+ },
79
+ onSelect: handleSelect
80
+ })));
81
+ };
82
+
83
+ // src/components/Graph/ForceGraph.tsx
84
+ import { forceLink, forceManyBody } from "d3";
85
+ import NativeForceGraph from "force-graph";
86
+ import React2, { useEffect as useEffect2, useRef as useRef2, useState } from "react";
87
+ import { useResizeDetector } from "react-resize-detector";
88
+ import { filterObjectsSync } from "@dxos/plugin-search";
89
+
90
+ // src/components/Graph/adapter.ts
91
+ var GraphAdapter = class {
92
+ graph;
93
+ _nodes = [];
94
+ _links = [];
95
+ constructor(graph) {
96
+ this.graph = graph;
97
+ this._nodes = graph.nodes.map((node) => ({
98
+ id: node.id,
99
+ type: node.type,
100
+ data: node.data
101
+ }));
102
+ const nodeIds = new Set(this._nodes.map((node) => node.id));
103
+ this._links = graph.edges.filter((edge) => nodeIds.has(edge.source) && nodeIds.has(edge.target)).map((edge) => ({
104
+ type: edge.type,
105
+ source: edge.source,
106
+ target: edge.target,
107
+ data: edge.data
108
+ }));
109
+ }
110
+ get nodes() {
111
+ return this._nodes;
112
+ }
113
+ get links() {
114
+ return this._links;
115
+ }
116
+ };
117
+
118
+ // src/components/Graph/ForceGraph.tsx
119
+ var ForceGraph = ({ model, match }) => {
120
+ const { ref, width, height } = useResizeDetector({
121
+ refreshRate: 200
122
+ });
123
+ const rootRef = useRef2(null);
124
+ const forceGraph = useRef2(null);
125
+ const filteredRef = useRef2([]);
126
+ filteredRef.current = filterObjectsSync(model?.objects ?? [], match);
127
+ const [data, setData] = useState();
128
+ useEffect2(() => {
129
+ return model?.subscribe((model2) => {
130
+ setData(new GraphAdapter(model2.graph));
131
+ });
132
+ }, [
133
+ model
134
+ ]);
135
+ useEffect2(() => {
136
+ if (rootRef.current) {
137
+ forceGraph.current = new NativeForceGraph(rootRef.current).nodeRelSize(6).nodeLabel((node) => node.type === "schema" ? node.data.typename : node.data.label ?? node.id).nodeAutoColorBy((node) => node.type === "schema" ? "schema" : node.data.typename).linkAutoColorBy((link) => link.type);
138
+ }
139
+ return () => {
140
+ forceGraph.current?.pauseAnimation().graphData({
141
+ nodes: [],
142
+ links: []
143
+ });
144
+ forceGraph.current = null;
145
+ };
146
+ }, []);
147
+ useEffect2(() => {
148
+ if (!data || !width || !height || !forceGraph.current) {
149
+ return;
150
+ }
151
+ forceGraph.current.pauseAnimation().width(width).height(height).onEngineStop(() => {
152
+ handleZoomToFit();
153
+ }).onNodeClick((node) => {
154
+ forceGraph.current?.emitParticle(node);
155
+ }).d3Force("link", forceLink().distance(160).strength(0.5)).d3Force("charge", forceManyBody().strength(-30)).graphData(data).warmupTicks(100).cooldownTime(1e3).resumeAnimation();
156
+ }, [
157
+ data,
158
+ width,
159
+ height,
160
+ forceGraph.current
161
+ ]);
162
+ const handleZoomToFit = () => {
163
+ forceGraph.current?.zoomToFit(400, 40);
164
+ };
165
+ return /* @__PURE__ */ React2.createElement("div", {
166
+ ref,
167
+ className: "relative grow",
168
+ onClick: handleZoomToFit
169
+ }, /* @__PURE__ */ React2.createElement("div", {
170
+ ref: rootRef,
171
+ className: "absolute inset-0"
172
+ }));
173
+ };
174
+
175
+ export {
176
+ D3ForceGraph,
177
+ ForceGraph
178
+ };
179
+ //# sourceMappingURL=chunk-YWJBDETV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Graph/D3ForceGraph.tsx", "../../../src/components/Graph/ForceGraph.tsx", "../../../src/components/Graph/adapter.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { SelectionModel } from '@dxos/graph';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type GraphController,\n GraphForceProjector,\n type GraphLayoutNode,\n type GraphProps,\n SVG,\n type SVGContext,\n} from '@dxos/react-ui-graph';\nimport { type SpaceGraphEdge, type SpaceGraphModel, type SpaceGraphNode } from '@dxos/schema';\nimport { getHashStyles } from '@dxos/ui-theme';\n\nimport '@dxos/react-ui-graph/styles/graph.css';\n\nexport type D3ForceGraphProps = ThemedClassName<\n {\n model?: SpaceGraphModel;\n match?: RegExp;\n selection?: SelectionModel;\n grid?: boolean;\n } & Pick<GraphProps, 'drag'>\n>;\n\nexport const D3ForceGraph = ({ classNames, model, selection: _selection, grid, ...props }: D3ForceGraphProps) => {\n const context = useRef<SVGContext>(null);\n const projector = useMemo<GraphForceProjector | undefined>(() => {\n if (context.current) {\n return new GraphForceProjector(context.current, {\n attributes: {\n linkForce: (edge) => {\n // TODO(burdon): Check type (currently assumes Employee property).\n // Edge shouldn't contribute to force if it's not active.\n return edge.data?.object?.active !== false;\n },\n },\n forces: {\n point: {\n strength: 0.01,\n },\n },\n });\n }\n }, [context.current]);\n\n const graph = useRef<GraphController>(null);\n const selection = useMemo(() => _selection ?? new SelectionModel(), [_selection]);\n useEffect(() => selection.subscribe(() => graph.current?.repaint()), [selection]);\n\n const handleSelect = useCallback<NonNullable<GraphProps['onSelect']>>(\n (node) => {\n if (selection.contains(node.id)) {\n selection.remove(node.id);\n } else {\n selection.add(node.id);\n }\n },\n [selection],\n );\n\n return (\n <SVG.Root ref={context} classNames={classNames}>\n <SVG.Markers />\n {grid && <SVG.Grid axis />}\n <SVG.Zoom extent={[1 / 2, 2]}>\n <SVG.Graph<SpaceGraphNode, SpaceGraphEdge>\n {...props}\n ref={graph}\n model={model}\n projector={projector}\n labels={{\n text: (node) => {\n return node.data?.data.label ?? node.id;\n },\n }}\n attributes={{\n node: (node: GraphLayoutNode<SpaceGraphNode>) => {\n const obj = node.data?.data.object;\n return {\n data: {\n color: getHashStyles(obj && Obj.getTypename(obj))?.hue,\n },\n classes: {\n 'dx-selected': selection.contains(node.id),\n },\n };\n },\n }}\n onSelect={handleSelect}\n />\n </SVG.Zoom>\n </SVG.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { forceLink, forceManyBody } from 'd3';\nimport NativeForceGraph from 'force-graph';\nimport React, { type FC, useEffect, useRef, useState } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { type SearchResult, filterObjectsSync } from '@dxos/plugin-search';\nimport { type SpaceGraphModel } from '@dxos/schema';\n\nimport { GraphAdapter } from './adapter';\n\nexport type ForceGraphProps = {\n model?: SpaceGraphModel;\n match?: RegExp;\n};\n\nexport const ForceGraph: FC<ForceGraphProps> = ({ model, match }) => {\n const { ref, width, height } = useResizeDetector({ refreshRate: 200 });\n const rootRef = useRef<HTMLDivElement>(null);\n const forceGraph = useRef<NativeForceGraph>(null);\n\n const filteredRef = useRef<SearchResult[]>([]);\n filteredRef.current = filterObjectsSync(model?.objects ?? [], match);\n\n const [data, setData] = useState<GraphAdapter>();\n useEffect(() => {\n return model?.subscribe((model) => {\n setData(new GraphAdapter(model.graph));\n });\n }, [model]);\n\n useEffect(() => {\n if (rootRef.current) {\n // https://github.com/vasturiano/force-graph\n // https://github.com/vasturiano/3d-force-graph\n forceGraph.current = new NativeForceGraph(rootRef.current)\n // https://github.com/vasturiano/force-graph?tab=readme-ov-file#node-styling\n .nodeRelSize(6)\n .nodeLabel((node: any) => (node.type === 'schema' ? node.data.typename : (node.data.label ?? node.id)))\n .nodeAutoColorBy((node: any) => (node.type === 'schema' ? 'schema' : node.data.typename))\n\n // https://github.com/vasturiano/force-graph?tab=readme-ov-file#link-styling\n .linkAutoColorBy((link: any) => link.type);\n }\n\n return () => {\n forceGraph.current?.pauseAnimation().graphData({ nodes: [], links: [] });\n forceGraph.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!data || !width || !height || !forceGraph.current) {\n return;\n }\n\n // https://github.com/vasturiano/force-graph?tab=readme-ov-file#container-layout\n forceGraph.current\n .pauseAnimation()\n .width(width)\n .height(height)\n .onEngineStop(() => {\n handleZoomToFit();\n })\n .onNodeClick((node: any) => {\n forceGraph.current?.emitParticle(node);\n })\n\n // https://github.com/vasturiano/force-graph?tab=readme-ov-file#force-engine-d3-force-configuration\n // .d3Force('center', forceCenter().strength(0.9))\n .d3Force('link', forceLink().distance(160).strength(0.5))\n .d3Force('charge', forceManyBody().strength(-30))\n\n .graphData(data)\n .warmupTicks(100)\n .cooldownTime(1_000)\n .resumeAnimation();\n }, [data, width, height, forceGraph.current]);\n\n const handleZoomToFit = () => {\n forceGraph.current?.zoomToFit(400, 40);\n };\n\n return (\n <div ref={ref} className='relative grow' onClick={handleZoomToFit}>\n <div ref={rootRef} className='absolute inset-0' />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Graph } from '@dxos/graph';\n\nexport type GraphNode = {\n id?: string;\n};\n\nexport type GraphLink = {\n source?: string;\n target?: string;\n};\n\nexport type GraphData = {\n nodes: GraphNode[];\n links: GraphLink[];\n};\n\n/**\n * Map common graph to force-graph format.\n */\nexport class GraphAdapter implements GraphData {\n private readonly _nodes: GraphNode[] = [];\n private readonly _links: GraphLink[] = [];\n\n constructor(private readonly graph: Graph.Any) {\n this._nodes = graph.nodes.map((node: Graph.Node.Any) => ({\n id: node.id,\n type: node.type,\n data: node.data,\n }));\n\n // Build a set of node IDs for efficient lookup.\n const nodeIds = new Set(this._nodes.map((node) => node.id));\n\n // Filter out edges where source or target node doesn't exist.\n this._links = graph.edges\n .filter((edge: Graph.Edge.Any) => nodeIds.has(edge.source) && nodeIds.has(edge.target))\n .map((edge: Graph.Edge.Any) => ({\n type: edge.type,\n source: edge.source,\n target: edge.target,\n data: edge.data,\n }));\n }\n\n get nodes() {\n return this._nodes;\n }\n\n get links() {\n return this._links;\n }\n}\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,WAAWC,SAASC,cAAc;AAE/D,SAASC,WAAW;AACpB,SAASC,sBAAsB;AAE/B,SAEEC,qBAGAC,WAEK;AAEP,SAASC,qBAAqB;AAE9B,OAAO;AAWA,IAAMC,eAAe,CAAC,EAAEC,YAAYC,OAAOC,WAAWC,YAAYC,MAAM,GAAGC,MAAAA,MAA0B;AAC1G,QAAMC,UAAUC,OAAmB,IAAA;AACnC,QAAMC,YAAYC,QAAyC,MAAA;AACzD,QAAIH,QAAQI,SAAS;AACnB,aAAO,IAAIC,oBAAoBL,QAAQI,SAAS;QAC9CE,YAAY;UACVC,WAAW,CAACC,SAAAA;AAGV,mBAAOA,KAAKC,MAAMC,QAAQC,WAAW;UACvC;QACF;QACAC,QAAQ;UACNC,OAAO;YACLC,UAAU;UACZ;QACF;MACF,CAAA;IACF;EACF,GAAG;IAACd,QAAQI;GAAQ;AAEpB,QAAMW,QAAQd,OAAwB,IAAA;AACtC,QAAML,YAAYO,QAAQ,MAAMN,cAAc,IAAImB,eAAAA,GAAkB;IAACnB;GAAW;AAChFoB,YAAU,MAAMrB,UAAUsB,UAAU,MAAMH,MAAMX,SAASe,QAAAA,CAAAA,GAAY;IAACvB;GAAU;AAEhF,QAAMwB,eAAeC,YACnB,CAACC,SAAAA;AACC,QAAI1B,UAAU2B,SAASD,KAAKE,EAAE,GAAG;AAC/B5B,gBAAU6B,OAAOH,KAAKE,EAAE;IAC1B,OAAO;AACL5B,gBAAU8B,IAAIJ,KAAKE,EAAE;IACvB;EACF,GACA;IAAC5B;GAAU;AAGb,SACE,sBAAA,cAAC+B,IAAIC,MAAI;IAACC,KAAK7B;IAASN;KACtB,sBAAA,cAACiC,IAAIG,SAAO,IAAA,GACXhC,QAAQ,sBAAA,cAAC6B,IAAII,MAAI;IAACC,MAAAA;MACnB,sBAAA,cAACL,IAAIM,MAAI;IAACC,QAAQ;MAAC,IAAI;MAAG;;KACxB,sBAAA,cAACP,IAAIQ,OAAK;IACP,GAAGpC;IACJ8B,KAAKd;IACLpB;IACAO;IACAkC,QAAQ;MACNC,MAAM,CAACf,SAAAA;AACL,eAAOA,KAAKb,MAAMA,KAAK6B,SAAShB,KAAKE;MACvC;IACF;IACAlB,YAAY;MACVgB,MAAM,CAACA,SAAAA;AACL,cAAMiB,MAAMjB,KAAKb,MAAMA,KAAKC;AAC5B,eAAO;UACLD,MAAM;YACJ+B,OAAOC,cAAcF,OAAOG,IAAIC,YAAYJ,GAAAA,CAAAA,GAAOK;UACrD;UACAC,SAAS;YACP,eAAejD,UAAU2B,SAASD,KAAKE,EAAE;UAC3C;QACF;MACF;IACF;IACAsB,UAAU1B;;AAKpB;;;AChGA,SAAS2B,WAAWC,qBAAqB;AACzC,OAAOC,sBAAsB;AAC7B,OAAOC,UAAkBC,aAAAA,YAAWC,UAAAA,SAAQC,gBAAgB;AAC5D,SAASC,yBAAyB;AAElC,SAA4BC,yBAAyB;;;ACc9C,IAAMC,eAAN,MAAMA;;EACMC,SAAsB,CAAA;EACtBC,SAAsB,CAAA;EAEvC,YAA6BC,OAAkB;SAAlBA,QAAAA;AAC3B,SAAKF,SAASE,MAAMC,MAAMC,IAAI,CAACC,UAA0B;MACvDC,IAAID,KAAKC;MACTC,MAAMF,KAAKE;MACXC,MAAMH,KAAKG;IACb,EAAA;AAGA,UAAMC,UAAU,IAAIC,IAAI,KAAKV,OAAOI,IAAI,CAACC,SAASA,KAAKC,EAAE,CAAA;AAGzD,SAAKL,SAASC,MAAMS,MACjBC,OAAO,CAACC,SAAyBJ,QAAQK,IAAID,KAAKE,MAAM,KAAKN,QAAQK,IAAID,KAAKG,MAAM,CAAA,EACpFZ,IAAI,CAACS,UAA0B;MAC9BN,MAAMM,KAAKN;MACXQ,QAAQF,KAAKE;MACbC,QAAQH,KAAKG;MACbR,MAAMK,KAAKL;IACb,EAAA;EACJ;EAEA,IAAIL,QAAQ;AACV,WAAO,KAAKH;EACd;EAEA,IAAIiB,QAAQ;AACV,WAAO,KAAKhB;EACd;AACF;;;ADpCO,IAAMiB,aAAkC,CAAC,EAAEC,OAAOC,MAAK,MAAE;AAC9D,QAAM,EAAEC,KAAKC,OAAOC,OAAM,IAAKC,kBAAkB;IAAEC,aAAa;EAAI,CAAA;AACpE,QAAMC,UAAUC,QAAuB,IAAA;AACvC,QAAMC,aAAaD,QAAyB,IAAA;AAE5C,QAAME,cAAcF,QAAuB,CAAA,CAAE;AAC7CE,cAAYC,UAAUC,kBAAkBZ,OAAOa,WAAW,CAAA,GAAIZ,KAAAA;AAE9D,QAAM,CAACa,MAAMC,OAAAA,IAAWC,SAAAA;AACxBC,EAAAA,WAAU,MAAA;AACR,WAAOjB,OAAOkB,UAAU,CAAClB,WAAAA;AACvBe,cAAQ,IAAII,aAAanB,OAAMoB,KAAK,CAAA;IACtC,CAAA;EACF,GAAG;IAACpB;GAAM;AAEViB,EAAAA,WAAU,MAAA;AACR,QAAIV,QAAQI,SAAS;AAGnBF,iBAAWE,UAAU,IAAIU,iBAAiBd,QAAQI,OAAO,EAEtDW,YAAY,CAAA,EACZC,UAAU,CAACC,SAAeA,KAAKC,SAAS,WAAWD,KAAKV,KAAKY,WAAYF,KAAKV,KAAKa,SAASH,KAAKI,EAAE,EACnGC,gBAAgB,CAACL,SAAeA,KAAKC,SAAS,WAAW,WAAWD,KAAKV,KAAKY,QAAQ,EAGtFI,gBAAgB,CAACC,SAAcA,KAAKN,IAAI;IAC7C;AAEA,WAAO,MAAA;AACLhB,iBAAWE,SAASqB,eAAAA,EAAiBC,UAAU;QAAEC,OAAO,CAAA;QAAIC,OAAO,CAAA;MAAG,CAAA;AACtE1B,iBAAWE,UAAU;IACvB;EACF,GAAG,CAAA,CAAE;AAELM,EAAAA,WAAU,MAAA;AACR,QAAI,CAACH,QAAQ,CAACX,SAAS,CAACC,UAAU,CAACK,WAAWE,SAAS;AACrD;IACF;AAGAF,eAAWE,QACRqB,eAAc,EACd7B,MAAMA,KAAAA,EACNC,OAAOA,MAAAA,EACPgC,aAAa,MAAA;AACZC,sBAAAA;IACF,CAAA,EACCC,YAAY,CAACd,SAAAA;AACZf,iBAAWE,SAAS4B,aAAaf,IAAAA;IACnC,CAAA,EAICgB,QAAQ,QAAQC,UAAAA,EAAYC,SAAS,GAAA,EAAKC,SAAS,GAAA,CAAA,EACnDH,QAAQ,UAAUI,cAAAA,EAAgBD,SAAS,GAAC,CAAA,EAE5CV,UAAUnB,IAAAA,EACV+B,YAAY,GAAA,EACZC,aAAa,GAAA,EACbC,gBAAe;EACpB,GAAG;IAACjC;IAAMX;IAAOC;IAAQK,WAAWE;GAAQ;AAE5C,QAAM0B,kBAAkB,MAAA;AACtB5B,eAAWE,SAASqC,UAAU,KAAK,EAAA;EACrC;AAEA,SACE,gBAAAC,OAAA,cAACC,OAAAA;IAAIhD;IAAUiD,WAAU;IAAgBC,SAASf;KAChD,gBAAAY,OAAA,cAACC,OAAAA;IAAIhD,KAAKK;IAAS4C,WAAU;;AAGnC;",
6
+ "names": ["React", "useCallback", "useEffect", "useMemo", "useRef", "Obj", "SelectionModel", "GraphForceProjector", "SVG", "getHashStyles", "D3ForceGraph", "classNames", "model", "selection", "_selection", "grid", "props", "context", "useRef", "projector", "useMemo", "current", "GraphForceProjector", "attributes", "linkForce", "edge", "data", "object", "active", "forces", "point", "strength", "graph", "SelectionModel", "useEffect", "subscribe", "repaint", "handleSelect", "useCallback", "node", "contains", "id", "remove", "add", "SVG", "Root", "ref", "Markers", "Grid", "axis", "Zoom", "extent", "Graph", "labels", "text", "label", "obj", "color", "getHashStyles", "Obj", "getTypename", "hue", "classes", "onSelect", "forceLink", "forceManyBody", "NativeForceGraph", "React", "useEffect", "useRef", "useState", "useResizeDetector", "filterObjectsSync", "GraphAdapter", "_nodes", "_links", "graph", "nodes", "map", "node", "id", "type", "data", "nodeIds", "Set", "edges", "filter", "edge", "has", "source", "target", "links", "ForceGraph", "model", "match", "ref", "width", "height", "useResizeDetector", "refreshRate", "rootRef", "useRef", "forceGraph", "filteredRef", "current", "filterObjectsSync", "objects", "data", "setData", "useState", "useEffect", "subscribe", "GraphAdapter", "graph", "NativeForceGraph", "nodeRelSize", "nodeLabel", "node", "type", "typename", "label", "id", "nodeAutoColorBy", "linkAutoColorBy", "link", "pauseAnimation", "graphData", "nodes", "links", "onEngineStop", "handleZoomToFit", "onNodeClick", "emitParticle", "d3Force", "forceLink", "distance", "strength", "forceManyBody", "warmupTicks", "cooldownTime", "resumeAnimation", "zoomToFit", "React", "div", "className", "onClick"]
7
+ }
@@ -1,51 +1,52 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  useGraphModel
4
- } from "./chunk-3ODK27PU.mjs";
4
+ } from "./chunk-IPIGIQHX.mjs";
5
5
  import {
6
6
  Chart,
7
7
  ExplorerContainer,
8
8
  Globe,
9
9
  Tree,
10
10
  defaultTreeLayoutSlots
11
- } from "./chunk-NPIP4VEH.mjs";
11
+ } from "./chunk-QLMTN2XI.mjs";
12
12
  import {
13
- D3ForceGraph,
14
- ForceGraph
15
- } from "./chunk-CRSVAZNA.mjs";
13
+ meta
14
+ } from "./chunk-DK77RB6M.mjs";
16
15
  import {
17
16
  ExplorerAction_exports,
18
17
  Graph_exports
19
- } from "./chunk-MS72BATS.mjs";
18
+ } from "./chunk-UCH3WYRD.mjs";
20
19
  import {
21
- meta
22
- } from "./chunk-UXZM5VJB.mjs";
20
+ D3ForceGraph,
21
+ ForceGraph
22
+ } from "./chunk-YWJBDETV.mjs";
23
23
  import "./chunk-HSLMI22Q.mjs";
24
24
 
25
25
  // src/ExplorerPlugin.tsx
26
- import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from "@dxos/app-framework";
27
- import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
28
- import { SpaceCapabilities } from "@dxos/plugin-space";
29
- import { defineObjectForm } from "@dxos/plugin-space/types";
26
+ import * as Effect from "effect/Effect";
27
+ import { Common, Plugin } from "@dxos/app-framework";
28
+ import { Type as Type2 } from "@dxos/echo";
29
+ import { View } from "@dxos/schema";
30
30
 
31
- // src/capabilities/index.ts
32
- import { lazy } from "@dxos/app-framework";
33
- var IntentResolver = lazy(() => import("./intent-resolver-VCEC67WX.mjs"));
34
- var ReactSurface = lazy(() => import("./react-surface-4HFEX52O.mjs"));
31
+ // src/capabilities/react-surface/index.ts
32
+ import { Capability } from "@dxos/app-framework";
33
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("./react-surface-F465WXH7.mjs"));
35
34
 
36
35
  // src/translations.ts
36
+ import { Type } from "@dxos/echo";
37
37
  import { translations as componentsTranslations } from "@dxos/react-ui-components";
38
38
  var translations = [
39
39
  {
40
40
  "en-US": {
41
- [Graph_exports.Graph.typename]: {
41
+ [Type.getTypename(Graph_exports.Graph)]: {
42
42
  "typename label": "Explorer",
43
43
  "typename label_zero": "Explorers",
44
44
  "typename label_one": "Explorer",
45
45
  "typename label_other": "Explorers",
46
46
  "object name placeholder": "New explorer",
47
47
  "rename object label": "Rename explorer",
48
- "delete object label": "Delete explorer"
48
+ "delete object label": "Delete explorer",
49
+ "object deleted label": "Explorer deleted"
49
50
  },
50
51
  [meta.id]: {
51
52
  "plugin name": "Explorer",
@@ -57,54 +58,34 @@ var translations = [
57
58
  ];
58
59
 
59
60
  // src/ExplorerPlugin.tsx
60
- var ExplorerPlugin = definePlugin(meta, () => [
61
- defineModule({
62
- id: `${meta.id}/module/translations`,
63
- activatesOn: Events.SetupTranslations,
64
- activate: () => contributes(Capabilities.Translations, translations)
65
- }),
66
- defineModule({
67
- id: `${meta.id}/module/metadata`,
68
- activatesOn: Events.SetupMetadata,
69
- activate: () => contributes(Capabilities.Metadata, {
70
- id: Graph_exports.Graph.typename,
71
- metadata: {
72
- icon: "ph--graph--regular",
73
- iconHue: "green"
74
- }
75
- })
76
- }),
77
- defineModule({
78
- id: `${meta.id}/module/object-form`,
79
- activatesOn: ClientEvents.SetupSchema,
80
- activate: () => contributes(SpaceCapabilities.ObjectForm, defineObjectForm({
81
- objectSchema: Graph_exports.Graph,
82
- formSchema: ExplorerAction_exports.GraphProps,
83
- hidden: true,
84
- getIntent: (props, options) => createIntent(ExplorerAction_exports.CreateGraph, {
85
- ...props,
86
- space: options.space
61
+ var ExplorerPlugin = Plugin.define(meta).pipe(Common.Plugin.addTranslationsModule({
62
+ translations
63
+ }), Common.Plugin.addMetadataModule({
64
+ metadata: {
65
+ id: Type2.getTypename(Graph_exports.Graph),
66
+ metadata: {
67
+ icon: "ph--graph--regular",
68
+ iconHue: "green",
69
+ inputSchema: ExplorerAction_exports.GraphProps,
70
+ createObject: (props, { db }) => Effect.promise(async () => {
71
+ const { view } = await View.makeFromDatabase({
72
+ db,
73
+ typename: props.typename
74
+ });
75
+ return Graph_exports.make({
76
+ name: props.name,
77
+ view
78
+ });
87
79
  })
88
- }))
89
- }),
90
- defineModule({
91
- id: `${meta.id}/module/schema`,
92
- activatesOn: ClientEvents.SetupSchema,
93
- activate: () => contributes(ClientCapabilities.Schema, [
94
- Graph_exports.Graph
95
- ])
96
- }),
97
- defineModule({
98
- id: `${meta.id}/module/react-surface`,
99
- activatesOn: Events.SetupReactSurface,
100
- activate: ReactSurface
101
- }),
102
- defineModule({
103
- id: `${meta.id}/module/intent-resolver`,
104
- activatesOn: Events.SetupIntentResolver,
105
- activate: IntentResolver
106
- })
107
- ]);
80
+ }
81
+ }
82
+ }), Common.Plugin.addSchemaModule({
83
+ schema: [
84
+ Graph_exports.Graph
85
+ ]
86
+ }), Common.Plugin.addSurfaceModule({
87
+ activate: ReactSurface
88
+ }), Plugin.make);
108
89
  export {
109
90
  Chart,
110
91
  D3ForceGraph,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/ExplorerPlugin.tsx", "../../../src/capabilities/index.ts", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { defineObjectForm } from '@dxos/plugin-space/types';\n\nimport { IntentResolver, ReactSurface } from './capabilities';\nimport { meta } from './meta';\nimport { translations } from './translations';\nimport { ExplorerAction, Graph } from './types';\n\nexport const ExplorerPlugin = definePlugin(meta, () => [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: Graph.Graph.typename,\n metadata: {\n icon: 'ph--graph--regular',\n iconHue: 'green',\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: Graph.Graph,\n formSchema: ExplorerAction.GraphProps,\n hidden: true,\n getIntent: (props, options) => createIntent(ExplorerAction.CreateGraph, { ...props, space: options.space }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [Graph.Graph]),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\nimport { translations as componentsTranslations } from '@dxos/react-ui-components';\n\nimport { meta } from './meta';\nimport { Graph } from './types';\n\nexport const translations = [\n {\n 'en-US': {\n [Graph.Graph.typename]: {\n 'typename label': 'Explorer',\n 'typename label_zero': 'Explorers',\n 'typename label_one': 'Explorer',\n 'typename label_other': 'Explorers',\n 'object name placeholder': 'New explorer',\n 'rename object label': 'Rename explorer',\n 'delete object label': 'Delete explorer',\n },\n [meta.id]: {\n 'plugin name': 'Explorer',\n 'object title label': 'Title',\n },\n },\n },\n ...componentsTranslations,\n] as const satisfies Resource[];\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAcC,QAAQC,aAAaC,cAAcC,cAAcC,oBAAoB;AAC5F,SAASC,oBAAoBC,oBAAoB;AACjD,SAASC,yBAAyB;AAClC,SAASC,wBAAwB;;;ACHjC,SAASC,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,eAAeD,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ACF9C,SAASE,gBAAgBC,8BAA8B;AAKhD,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,cAAMA,MAAMC,QAAQ,GAAG;QACtB,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,uBAAuB;QACvB,uBAAuB;MACzB;MACA,CAACC,KAAKC,EAAE,GAAG;QACT,eAAe;QACf,sBAAsB;MACxB;IACF;EACF;KACGC;;;;AFdE,IAAMC,iBAAiBC,aAAaC,MAAM,MAAM;EACrDC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAcC,YAAAA;EACzD,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOO;IACpBL,UAAU,MACRC,YAAYC,aAAaI,UAAU;MACjCV,IAAIW,cAAMA,MAAMC;MAChBC,UAAU;QACRC,MAAM;QACNC,SAAS;MACX;IACF,CAAA;EACJ,CAAA;EACAhB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAae,aAAaC;IAC1Bb,UAAU,MACRC,YACEa,kBAAkBC,YAClBC,iBAAiB;MACfC,cAAcV,cAAMA;MACpBW,YAAYC,uBAAeC;MAC3BC,QAAQ;MACRC,WAAW,CAACC,OAAOC,YAAYC,aAAaN,uBAAeO,aAAa;QAAE,GAAGH;QAAOI,OAAOH,QAAQG;MAAM,CAAA;IAC3G,CAAA,CAAA;EAEN,CAAA;EACAhC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAae,aAAaC;IAC1Bb,UAAU,MAAMC,YAAY2B,mBAAmBC,QAAQ;MAACtB,cAAMA;KAAM;EACtE,CAAA;EACAZ,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOgC;IACpB9B,UAAU+B;EACZ,CAAA;EACApC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOkC;IACpBhC,UAAUiC;EACZ,CAAA;CACD;",
6
- "names": ["Capabilities", "Events", "contributes", "createIntent", "defineModule", "definePlugin", "ClientCapabilities", "ClientEvents", "SpaceCapabilities", "defineObjectForm", "lazy", "IntentResolver", "lazy", "ReactSurface", "translations", "componentsTranslations", "translations", "Graph", "typename", "meta", "id", "componentsTranslations", "ExplorerPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "SetupMetadata", "Metadata", "Graph", "typename", "metadata", "icon", "iconHue", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "formSchema", "ExplorerAction", "GraphProps", "hidden", "getIntent", "props", "options", "createIntent", "CreateGraph", "space", "ClientCapabilities", "Schema", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver"]
3
+ "sources": ["../../../src/ExplorerPlugin.tsx", "../../../src/capabilities/react-surface/index.ts", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Common, Plugin } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { type CreateObject } from '@dxos/plugin-space/types';\nimport { View } from '@dxos/schema';\n\nimport { ReactSurface } from './capabilities';\nimport { meta } from './meta';\nimport { translations } from './translations';\nimport { ExplorerAction, Graph } from './types';\n\nexport const ExplorerPlugin = Plugin.define(meta).pipe(\n Common.Plugin.addTranslationsModule({ translations }),\n Common.Plugin.addMetadataModule({\n metadata: {\n id: Type.getTypename(Graph.Graph),\n metadata: {\n icon: 'ph--graph--regular',\n iconHue: 'green',\n inputSchema: ExplorerAction.GraphProps,\n createObject: ((props, { db }) =>\n Effect.promise(async () => {\n const { view } = await View.makeFromDatabase({ db, typename: props.typename });\n return Graph.make({ name: props.name, view });\n })) satisfies CreateObject,\n },\n },\n }),\n Common.Plugin.addSchemaModule({ schema: [Graph.Graph] }),\n Common.Plugin.addSurfaceModule({ activate: ReactSurface }),\n Plugin.make,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\nimport { translations as componentsTranslations } from '@dxos/react-ui-components';\n\nimport { meta } from './meta';\nimport { Graph } from './types';\n\nexport const translations = [\n {\n 'en-US': {\n [Type.getTypename(Graph.Graph)]: {\n 'typename label': 'Explorer',\n 'typename label_zero': 'Explorers',\n 'typename label_one': 'Explorer',\n 'typename label_other': 'Explorers',\n 'object name placeholder': 'New explorer',\n 'rename object label': 'Rename explorer',\n 'delete object label': 'Delete explorer',\n 'object deleted label': 'Explorer deleted',\n },\n [meta.id]: {\n 'plugin name': 'Explorer',\n 'object title label': 'Title',\n },\n },\n },\n ...componentsTranslations,\n] as const satisfies Resource[];\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,QAAQC,cAAc;AAC/B,SAASC,QAAAA,aAAY;AAErB,SAASC,YAAY;;;ACLrB,SAASC,kBAAkB;AAEpB,IAAMC,eAAeC,WAAWC,KAAK,gBAAgB,MAAM,OAAO,8BAAA,CAAA;;;ACFzE,SAASC,YAAY;AAErB,SAASC,gBAAgBC,8BAA8B;AAKhD,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,KAAKC,YAAYC,cAAMA,KAAK,CAAA,GAAI;QAC/B,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;MAC1B;MACA,CAACC,KAAKC,EAAE,GAAG;QACT,eAAe;QACf,sBAAsB;MACxB;IACF;EACF;KACGC;;;;AFdE,IAAMC,iBAAiBC,OAAOC,OAAOC,IAAAA,EAAMC,KAChDC,OAAOJ,OAAOK,sBAAsB;EAAEC;AAAa,CAAA,GACnDF,OAAOJ,OAAOO,kBAAkB;EAC9BC,UAAU;IACRC,IAAIC,MAAKC,YAAYC,cAAMA,KAAK;IAChCJ,UAAU;MACRK,MAAM;MACNC,SAAS;MACTC,aAAaC,uBAAeC;MAC5BC,cAAe,CAACC,OAAO,EAAEC,GAAE,MAClBC,eAAQ,YAAA;AACb,cAAM,EAAEC,KAAI,IAAK,MAAMC,KAAKC,iBAAiB;UAAEJ;UAAIK,UAAUN,MAAMM;QAAS,CAAA;AAC5E,eAAOb,cAAMc,KAAK;UAAEC,MAAMR,MAAMQ;UAAML;QAAK,CAAA;MAC7C,CAAA;IACJ;EACF;AACF,CAAA,GACAlB,OAAOJ,OAAO4B,gBAAgB;EAAEC,QAAQ;IAACjB,cAAMA;;AAAO,CAAA,GACtDR,OAAOJ,OAAO8B,iBAAiB;EAAEC,UAAUC;AAAa,CAAA,GACxDhC,OAAO0B,IAAI;",
6
+ "names": ["Effect", "Common", "Plugin", "Type", "View", "Capability", "ReactSurface", "Capability", "lazy", "Type", "translations", "componentsTranslations", "translations", "Type", "getTypename", "Graph", "meta", "id", "componentsTranslations", "ExplorerPlugin", "Plugin", "define", "meta", "pipe", "Common", "addTranslationsModule", "translations", "addMetadataModule", "metadata", "id", "Type", "getTypename", "Graph", "icon", "iconHue", "inputSchema", "ExplorerAction", "GraphProps", "createObject", "props", "db", "promise", "view", "View", "makeFromDatabase", "typename", "make", "name", "addSchemaModule", "schema", "addSurfaceModule", "activate", "ReactSurface"]
7
7
  }