@dxos/plugin-explorer 0.8.4-main.ae835ea → 0.8.4-main.bcb3aa67d6

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 (119) hide show
  1. package/dist/lib/browser/{chunk-UBHZGWZQ.mjs → chunk-LSUP47BZ.mjs} +2 -2
  2. package/dist/lib/browser/chunk-LSUP47BZ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +11342 -87
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/meta.mjs +1 -1
  7. package/dist/lib/browser/types/index.mjs +64 -5
  8. package/dist/lib/browser/types/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/{chunk-UXZM5VJB.mjs → chunk-EN3JZNEY.mjs} +2 -2
  10. package/dist/lib/node-esm/chunk-EN3JZNEY.mjs.map +7 -0
  11. package/dist/lib/node-esm/index.mjs +11342 -87
  12. package/dist/lib/node-esm/index.mjs.map +4 -4
  13. package/dist/lib/node-esm/meta.json +1 -1
  14. package/dist/lib/node-esm/meta.mjs +1 -1
  15. package/dist/lib/node-esm/types/index.mjs +64 -5
  16. package/dist/lib/node-esm/types/index.mjs.map +4 -4
  17. package/dist/types/src/ExplorerPlugin.d.ts +2 -1
  18. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  19. package/dist/types/src/capabilities/index.d.ts +2 -2
  20. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  21. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  22. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  23. package/dist/types/src/components/Graph/D3ForceGraph.d.ts +10 -5
  24. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -1
  25. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +8 -2
  26. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts +1 -1
  28. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Graph/adapter.d.ts +1 -1
  30. package/dist/types/src/components/Graph/adapter.d.ts.map +1 -1
  31. package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
  32. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  33. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/Tree/testing/generator.d.ts.map +1 -1
  35. package/dist/types/src/components/Tree/types/tree.d.ts +18 -16
  36. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
  37. package/dist/types/src/components/Tree/types/types.d.ts +1 -1
  38. package/dist/types/src/components/Tree/types/types.d.ts.map +1 -1
  39. package/dist/types/src/components/index.d.ts +0 -4
  40. package/dist/types/src/components/index.d.ts.map +1 -1
  41. package/dist/types/src/containers/ExplorerContainer/ExplorerContainer.d.ts +6 -0
  42. package/dist/types/src/containers/ExplorerContainer/ExplorerContainer.d.ts.map +1 -0
  43. package/dist/types/src/containers/ExplorerContainer/index.d.ts +3 -0
  44. package/dist/types/src/containers/ExplorerContainer/index.d.ts.map +1 -0
  45. package/dist/types/src/containers/index.d.ts +3 -0
  46. package/dist/types/src/containers/index.d.ts.map +1 -0
  47. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  48. package/dist/types/src/meta.d.ts +2 -2
  49. package/dist/types/src/meta.d.ts.map +1 -1
  50. package/dist/types/src/translations.d.ts +31 -22
  51. package/dist/types/src/translations.d.ts.map +1 -1
  52. package/dist/types/src/types/ExplorerAction.d.ts +1 -18
  53. package/dist/types/src/types/ExplorerAction.d.ts.map +1 -1
  54. package/dist/types/src/types/Graph.d.ts +14 -24
  55. package/dist/types/src/types/Graph.d.ts.map +1 -1
  56. package/dist/types/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +59 -45
  58. package/src/ExplorerPlugin.tsx +42 -54
  59. package/src/capabilities/index.ts +2 -3
  60. package/src/capabilities/react-surface.tsx +22 -18
  61. package/src/components/Chart/Chart.stories.tsx +3 -3
  62. package/src/components/Globe/Globe.stories.tsx +3 -3
  63. package/src/components/Graph/D3ForceGraph.stories.tsx +27 -21
  64. package/src/components/Graph/D3ForceGraph.tsx +82 -74
  65. package/src/components/Graph/ForceGraph.stories.tsx +27 -21
  66. package/src/components/Graph/adapter.ts +14 -8
  67. package/src/components/Graph/testing.ts +11 -8
  68. package/src/components/Tree/Tree.stories.tsx +7 -4
  69. package/src/components/Tree/Tree.tsx +8 -3
  70. package/src/components/Tree/testing/generator.ts +4 -2
  71. package/src/components/Tree/types/tree.test.ts +5 -3
  72. package/src/components/Tree/types/tree.ts +41 -20
  73. package/src/components/Tree/types/types.ts +1 -1
  74. package/src/components/index.ts +0 -4
  75. package/src/containers/ExplorerContainer/ExplorerContainer.tsx +53 -0
  76. package/src/containers/ExplorerContainer/index.ts +7 -0
  77. package/src/containers/index.ts +7 -0
  78. package/src/hooks/useGraphModel.ts +17 -10
  79. package/src/meta.ts +3 -3
  80. package/src/translations.ts +15 -12
  81. package/src/types/ExplorerAction.ts +10 -19
  82. package/src/types/Graph.ts +25 -21
  83. package/src/typings.d.ts +8 -0
  84. package/dist/lib/browser/ExplorerContainer-L5RVUJRL.mjs +0 -50
  85. package/dist/lib/browser/ExplorerContainer-L5RVUJRL.mjs.map +0 -7
  86. package/dist/lib/browser/chunk-2MKBRIUT.mjs +0 -31
  87. package/dist/lib/browser/chunk-2MKBRIUT.mjs.map +0 -7
  88. package/dist/lib/browser/chunk-6BVXZQPP.mjs +0 -188
  89. package/dist/lib/browser/chunk-6BVXZQPP.mjs.map +0 -7
  90. package/dist/lib/browser/chunk-BGNRYZUN.mjs +0 -79
  91. package/dist/lib/browser/chunk-BGNRYZUN.mjs.map +0 -7
  92. package/dist/lib/browser/chunk-CRN65FY3.mjs +0 -11089
  93. package/dist/lib/browser/chunk-CRN65FY3.mjs.map +0 -7
  94. package/dist/lib/browser/chunk-UBHZGWZQ.mjs.map +0 -7
  95. package/dist/lib/browser/intent-resolver-FX5H52QN.mjs +0 -31
  96. package/dist/lib/browser/intent-resolver-FX5H52QN.mjs.map +0 -7
  97. package/dist/lib/browser/react-surface-VS3ZFL2Y.mjs +0 -35
  98. package/dist/lib/browser/react-surface-VS3ZFL2Y.mjs.map +0 -7
  99. package/dist/lib/node-esm/ExplorerContainer-BBLPHH7K.mjs +0 -51
  100. package/dist/lib/node-esm/ExplorerContainer-BBLPHH7K.mjs.map +0 -7
  101. package/dist/lib/node-esm/chunk-3ODK27PU.mjs +0 -33
  102. package/dist/lib/node-esm/chunk-3ODK27PU.mjs.map +0 -7
  103. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs +0 -190
  104. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs.map +0 -7
  105. package/dist/lib/node-esm/chunk-RSZFBKZM.mjs +0 -11091
  106. package/dist/lib/node-esm/chunk-RSZFBKZM.mjs.map +0 -7
  107. package/dist/lib/node-esm/chunk-TQESRBUJ.mjs +0 -80
  108. package/dist/lib/node-esm/chunk-TQESRBUJ.mjs.map +0 -7
  109. package/dist/lib/node-esm/chunk-UXZM5VJB.mjs.map +0 -7
  110. package/dist/lib/node-esm/intent-resolver-RGBBXXYM.mjs +0 -32
  111. package/dist/lib/node-esm/intent-resolver-RGBBXXYM.mjs.map +0 -7
  112. package/dist/lib/node-esm/react-surface-SXPT2T37.mjs +0 -36
  113. package/dist/lib/node-esm/react-surface-SXPT2T37.mjs.map +0 -7
  114. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  115. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  116. package/dist/types/src/components/ExplorerContainer.d.ts +0 -9
  117. package/dist/types/src/components/ExplorerContainer.d.ts.map +0 -1
  118. package/src/capabilities/intent-resolver.ts +0 -21
  119. package/src/components/ExplorerContainer.tsx +0 -54
@@ -4,42 +4,46 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { Filter, Obj, Query, QueryAST, Type } from '@dxos/echo';
8
- import { LabelAnnotation, ViewAnnotation } from '@dxos/echo/internal';
9
- import { type CreateViewFromSpaceProps, createViewFromSpace } from '@dxos/schema';
7
+ import { Annotation, Filter, Obj, Query, QueryAST, Ref, Type } from '@dxos/echo';
8
+ import { View } from '@dxos/echo';
9
+ import { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
10
+ import { ViewAnnotation } from '@dxos/schema';
10
11
 
11
- export const Graph = Schema.Struct({
12
+ const GraphSchema = Schema.Struct({
12
13
  name: Schema.optional(Schema.String),
14
+
15
+ view: Ref.Ref(View.View).pipe(FormInputAnnotation.set(false)),
16
+
13
17
  query: Schema.Struct({
14
18
  raw: Schema.optional(Schema.String),
15
19
  ast: QueryAST.Query,
16
- }).pipe(Schema.mutable),
20
+ }).pipe(FormInputAnnotation.set(false)),
17
21
  }).pipe(
18
- Type.Obj({
19
- typename: 'dxos.org/type/Graph',
22
+ Type.object({
23
+ typename: 'org.dxos.type.graph',
20
24
  version: '0.1.0',
21
25
  }),
22
26
  LabelAnnotation.set(['name']),
23
27
  ViewAnnotation.set(true),
28
+ Annotation.IconAnnotation.set({
29
+ icon: 'ph--graph--regular',
30
+ hue: 'green',
31
+ }),
24
32
  );
33
+ export interface Graph extends Schema.Schema.Type<typeof GraphSchema> {}
34
+ export const Graph: Type.Obj<Graph> = GraphSchema as any;
25
35
 
26
- export type Graph = Schema.Schema.Type<typeof Graph>;
27
-
28
- /**
29
- * Make a graph object.
30
- */
31
- export const make = (
32
- props: Obj.MakeProps<typeof Graph> = { query: { raw: '', ast: Query.select(Filter.nothing()).ast } },
33
- ) => Obj.make(Graph, props);
34
-
35
- type MakeViewProps = Omit<CreateViewFromSpaceProps, 'presentation'> & {
36
- presentation?: Omit<Obj.MakeProps<typeof Graph>, 'name'>;
36
+ type MakeProps = Omit<Partial<Obj.MakeProps<typeof Graph>>, 'view'> & {
37
+ view: View.View;
37
38
  };
38
39
 
39
40
  /**
40
41
  * Make a graph as a view of a data set.
41
42
  */
42
- export const makeView = async ({ presentation, ...props }: MakeViewProps) => {
43
- const graph = make(presentation);
44
- return createViewFromSpace({ ...props, presentation: graph });
43
+ export const make = ({
44
+ name,
45
+ query = { raw: '', ast: Query.select(Filter.nothing()).ast },
46
+ view,
47
+ }: MakeProps): Graph => {
48
+ return Obj.make(Graph, { name, view: Ref.make(view), query });
45
49
  };
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ declare module '*.css' {
6
+ const content: undefined;
7
+ export default content;
8
+ }
@@ -1,50 +0,0 @@
1
- import {
2
- useGraphModel
3
- } from "./chunk-2MKBRIUT.mjs";
4
- import {
5
- D3ForceGraph
6
- } from "./chunk-6BVXZQPP.mjs";
7
- import "./chunk-J5LGTIGS.mjs";
8
-
9
- // src/components/ExplorerContainer.tsx
10
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
11
- import React, { useCallback, useMemo, useState } from "react";
12
- import { QueryBuilder } from "@dxos/echo-query";
13
- import { useGlobalSearch } from "@dxos/plugin-search";
14
- import { getSpace } from "@dxos/react-client/echo";
15
- import { Toolbar } from "@dxos/react-ui";
16
- import { QueryEditor } from "@dxos/react-ui-components";
17
- import { StackItem } from "@dxos/react-ui-stack";
18
- var ExplorerContainer = ({ role, view }) => {
19
- var _effect = _useSignals();
20
- try {
21
- const space = getSpace(view);
22
- const [filter, setFilter] = useState();
23
- const model = useGraphModel(space, filter);
24
- const { match } = useGlobalSearch();
25
- const builder = useMemo(() => new QueryBuilder(), []);
26
- const handleChange = useCallback((value) => {
27
- setFilter(builder.build(value).filter);
28
- }, []);
29
- const showToolbar = role === "article";
30
- if (!space || !model) {
31
- return null;
32
- }
33
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
34
- toolbar: showToolbar
35
- }, showToolbar && /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(QueryEditor, {
36
- db: space.db,
37
- onChange: handleChange
38
- })), /* @__PURE__ */ React.createElement(D3ForceGraph, {
39
- model,
40
- match
41
- }));
42
- } finally {
43
- _effect.f();
44
- }
45
- };
46
- var ExplorerContainer_default = ExplorerContainer;
47
- export {
48
- ExplorerContainer_default as default
49
- };
50
- //# sourceMappingURL=ExplorerContainer-L5RVUJRL.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ExplorerContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type Filter } from '@dxos/echo';\nimport { QueryBuilder } from '@dxos/echo-query';\nimport { useGlobalSearch } from '@dxos/plugin-search';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Toolbar } from '@dxos/react-ui';\nimport { QueryEditor, type QueryEditorProps } from '@dxos/react-ui-components';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { type DataType } from '@dxos/schema';\n\nimport { useGraphModel } from '../hooks';\n\nimport { D3ForceGraph } from './Graph';\n\ntype ExplorerContainerProps = {\n role: string;\n view: DataType.View;\n};\n\nconst ExplorerContainer = ({ role, view }: ExplorerContainerProps) => {\n const space = getSpace(view);\n const [filter, setFilter] = useState<Filter.Any>();\n const model = useGraphModel(space, filter);\n const { match } = useGlobalSearch();\n\n const builder = useMemo(() => new QueryBuilder(), []);\n const handleChange = useCallback<NonNullable<QueryEditorProps['onChange']>>((value) => {\n setFilter(builder.build(value).filter);\n }, []);\n\n const showToolbar = role === 'article';\n\n if (!space || !model) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar={showToolbar}>\n {showToolbar && (\n <Toolbar.Root>\n <QueryEditor db={space.db} onChange={handleChange} />\n </Toolbar.Root>\n )}\n <D3ForceGraph model={model} match={match} />\n </StackItem.Content>\n );\n};\n\nexport default ExplorerContainer;\n"],
5
- "mappings": ";;;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,SAASC,gBAAgB;AAGtD,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAChC,SAASC,gBAAgB;AACzB,SAASC,eAAe;AACxB,SAASC,mBAA0C;AACnD,SAASC,iBAAiB;AAY1B,IAAMC,oBAAoB,CAAC,EAAEC,MAAMC,KAAI,MAA0B;;;AAC/D,UAAMC,QAAQC,SAASF,IAAAA;AACvB,UAAM,CAACG,QAAQC,SAAAA,IAAaC,SAAAA;AAC5B,UAAMC,QAAQC,cAAcN,OAAOE,MAAAA;AACnC,UAAM,EAAEK,MAAK,IAAKC,gBAAAA;AAElB,UAAMC,UAAUC,QAAQ,MAAM,IAAIC,aAAAA,GAAgB,CAAA,CAAE;AACpD,UAAMC,eAAeC,YAAuD,CAACC,UAAAA;AAC3EX,gBAAUM,QAAQM,MAAMD,KAAAA,EAAOZ,MAAM;IACvC,GAAG,CAAA,CAAE;AAEL,UAAMc,cAAclB,SAAS;AAE7B,QAAI,CAACE,SAAS,CAACK,OAAO;AACpB,aAAO;IACT;AAEA,WACE,sBAAA,cAACY,UAAUC,SAAO;MAACC,SAASH;OACzBA,eACC,sBAAA,cAACI,QAAQC,MAAI,MACX,sBAAA,cAACC,aAAAA;MAAYC,IAAIvB,MAAMuB;MAAIC,UAAUZ;SAGzC,sBAAA,cAACa,cAAAA;MAAapB;MAAcE;;;;;AAGlC;AAEA,IAAA,4BAAeV;",
6
- "names": ["React", "useCallback", "useMemo", "useState", "QueryBuilder", "useGlobalSearch", "getSpace", "Toolbar", "QueryEditor", "StackItem", "ExplorerContainer", "role", "view", "space", "getSpace", "filter", "setFilter", "useState", "model", "useGraphModel", "match", "useGlobalSearch", "builder", "useMemo", "QueryBuilder", "handleChange", "useCallback", "value", "build", "showToolbar", "StackItem", "Content", "toolbar", "Toolbar", "Root", "QueryEditor", "db", "onChange", "D3ForceGraph"]
7
- }
@@ -1,31 +0,0 @@
1
- // src/hooks/useGraphModel.ts
2
- import { useEffect, useState } from "react";
3
- import { SpaceGraphModel } from "@dxos/schema";
4
- var useGraphModel = (space, filter, options, queue) => {
5
- const [model, setModel] = useState(void 0);
6
- useEffect(() => {
7
- if (!space) {
8
- void model?.close();
9
- setModel(void 0);
10
- return;
11
- }
12
- if (!model || model.queue !== queue) {
13
- const model2 = new SpaceGraphModel().setFilter(filter).setOptions(options);
14
- void model2.open(space, queue);
15
- setModel(model2);
16
- } else {
17
- model.setFilter(filter).setOptions(options);
18
- }
19
- }, [
20
- space,
21
- filter,
22
- options,
23
- queue
24
- ]);
25
- return model;
26
- };
27
-
28
- export {
29
- useGraphModel
30
- };
31
- //# sourceMappingURL=chunk-2MKBRIUT.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/hooks/useGraphModel.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Filter, type Queue, type Space } from '@dxos/client/echo';\nimport { SpaceGraphModel, type SpaceGraphModelOptions } from '@dxos/schema';\n\n// TODO(burdon): Factor out.\nexport const useGraphModel = (\n space: Space | undefined,\n filter?: Filter.Any | undefined,\n options?: SpaceGraphModelOptions,\n queue?: Queue,\n): SpaceGraphModel | undefined => {\n const [model, setModel] = useState<SpaceGraphModel | undefined>(undefined);\n useEffect(() => {\n if (!space) {\n void model?.close();\n setModel(undefined);\n return;\n }\n\n // TODO(burdon): Does this need to be a dependency?\n if (!model || model.queue !== queue) {\n const model = new SpaceGraphModel().setFilter(filter).setOptions(options);\n void model.open(space, queue);\n setModel(model);\n } else {\n model.setFilter(filter).setOptions(options);\n }\n }, [space, filter, options, queue]);\n\n return model;\n};\n"],
5
- "mappings": ";AAIA,SAASA,WAAWC,gBAAgB;AAGpC,SAASC,uBAAoD;AAGtD,IAAMC,gBAAgB,CAC3BC,OACAC,QACAC,SACAC,UAAAA;AAEA,QAAM,CAACC,OAAOC,QAAAA,IAAYC,SAAsCC,MAAAA;AAChEC,YAAU,MAAA;AACR,QAAI,CAACR,OAAO;AACV,WAAKI,OAAOK,MAAAA;AACZJ,eAASE,MAAAA;AACT;IACF;AAGA,QAAI,CAACH,SAASA,MAAMD,UAAUA,OAAO;AACnC,YAAMC,SAAQ,IAAIM,gBAAAA,EAAkBC,UAAUV,MAAAA,EAAQW,WAAWV,OAAAA;AACjE,WAAKE,OAAMS,KAAKb,OAAOG,KAAAA;AACvBE,eAASD,MAAAA;IACX,OAAO;AACLA,YAAMO,UAAUV,MAAAA,EAAQW,WAAWV,OAAAA;IACrC;EACF,GAAG;IAACF;IAAOC;IAAQC;IAASC;GAAM;AAElC,SAAOC;AACT;",
6
- "names": ["useEffect", "useState", "SpaceGraphModel", "useGraphModel", "space", "filter", "options", "queue", "model", "setModel", "useState", "undefined", "useEffect", "close", "SpaceGraphModel", "setFilter", "setOptions", "open"]
7
- }
@@ -1,188 +0,0 @@
1
- // src/components/Graph/D3ForceGraph.tsx
2
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
3
- import React, { useCallback, useEffect, useMemo, useRef } from "react";
4
- import { Obj } from "@dxos/echo";
5
- import { SelectionModel } from "@dxos/graph";
6
- import { GraphForceProjector, SVG } from "@dxos/react-ui-graph";
7
- import { getHashStyles } from "@dxos/react-ui-theme";
8
- import "@dxos/react-ui-graph/styles/graph.css";
9
- var D3ForceGraph = ({ classNames, model, selection: _selection, grid, ...props }) => {
10
- var _effect = _useSignals();
11
- try {
12
- const context = useRef(null);
13
- const projector = useMemo(() => {
14
- if (context.current) {
15
- return new GraphForceProjector(context.current, {
16
- attributes: {
17
- linkForce: (edge) => {
18
- return edge.data?.object?.active !== false;
19
- }
20
- },
21
- forces: {
22
- point: {
23
- strength: 0.01
24
- }
25
- }
26
- });
27
- }
28
- }, [
29
- context.current
30
- ]);
31
- const graph = useRef(null);
32
- const selection = useMemo(() => _selection ?? new SelectionModel(), [
33
- _selection
34
- ]);
35
- useEffect(() => graph.current?.repaint(), [
36
- selection.selected.value
37
- ]);
38
- const handleSelect = useCallback((node) => {
39
- if (selection.contains(node.id)) {
40
- selection.remove(node.id);
41
- } else {
42
- selection.add(node.id);
43
- }
44
- }, [
45
- selection
46
- ]);
47
- return /* @__PURE__ */ React.createElement(SVG.Root, {
48
- ref: context,
49
- classNames
50
- }, /* @__PURE__ */ React.createElement(SVG.Markers, null), grid && /* @__PURE__ */ React.createElement(SVG.Grid, {
51
- axis: true
52
- }), /* @__PURE__ */ React.createElement(SVG.Zoom, {
53
- extent: [
54
- 1 / 2,
55
- 2
56
- ]
57
- }, /* @__PURE__ */ React.createElement(SVG.Graph, {
58
- ...props,
59
- ref: graph,
60
- model,
61
- projector,
62
- labels: {
63
- text: (node) => {
64
- return node.data?.data.label ?? node.id;
65
- }
66
- },
67
- attributes: {
68
- node: (node) => {
69
- const obj = node.data?.data.object;
70
- return {
71
- data: {
72
- color: getHashStyles(obj && Obj.getTypename(obj))?.hue
73
- },
74
- classes: {
75
- "dx-selected": selection.contains(node.id)
76
- }
77
- };
78
- }
79
- },
80
- onSelect: handleSelect
81
- })));
82
- } finally {
83
- _effect.f();
84
- }
85
- };
86
-
87
- // src/components/Graph/ForceGraph.tsx
88
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
89
- import { forceLink, forceManyBody } from "d3";
90
- import NativeForceGraph from "force-graph";
91
- import React2, { useEffect as useEffect2, useRef as useRef2, useState } from "react";
92
- import { useResizeDetector } from "react-resize-detector";
93
- import { filterObjectsSync } from "@dxos/plugin-search";
94
-
95
- // src/components/Graph/adapter.ts
96
- var GraphAdapter = class {
97
- graph;
98
- _nodes = [];
99
- _links = [];
100
- constructor(graph) {
101
- this.graph = graph;
102
- this._nodes = graph.nodes.map((node) => ({
103
- id: node.id,
104
- type: node.type,
105
- data: node.data
106
- }));
107
- this._links = graph.edges.map((edge) => ({
108
- type: edge.type,
109
- source: edge.source,
110
- target: edge.target,
111
- data: edge.data
112
- }));
113
- }
114
- get nodes() {
115
- return this._nodes;
116
- }
117
- get links() {
118
- return this._links;
119
- }
120
- };
121
-
122
- // src/components/Graph/ForceGraph.tsx
123
- var ForceGraph = ({ model, match }) => {
124
- var _effect = _useSignals2();
125
- try {
126
- const { ref, width, height } = useResizeDetector({
127
- refreshRate: 200
128
- });
129
- const rootRef = useRef2(null);
130
- const forceGraph = useRef2(null);
131
- const filteredRef = useRef2([]);
132
- filteredRef.current = filterObjectsSync(model?.objects ?? [], match);
133
- const [data, setData] = useState();
134
- useEffect2(() => {
135
- return model?.subscribe((model2) => {
136
- setData(new GraphAdapter(model2.graph));
137
- });
138
- }, [
139
- model
140
- ]);
141
- useEffect2(() => {
142
- if (rootRef.current) {
143
- 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);
144
- }
145
- return () => {
146
- forceGraph.current?.pauseAnimation().graphData({
147
- nodes: [],
148
- links: []
149
- });
150
- forceGraph.current = null;
151
- };
152
- }, []);
153
- useEffect2(() => {
154
- if (!data || !width || !height || !forceGraph.current) {
155
- return;
156
- }
157
- forceGraph.current.pauseAnimation().width(width).height(height).onEngineStop(() => {
158
- handleZoomToFit();
159
- }).onNodeClick((node) => {
160
- forceGraph.current?.emitParticle(node);
161
- }).d3Force("link", forceLink().distance(160).strength(0.5)).d3Force("charge", forceManyBody().strength(-30)).graphData(data).warmupTicks(100).cooldownTime(1e3).resumeAnimation();
162
- }, [
163
- data,
164
- width,
165
- height,
166
- forceGraph.current
167
- ]);
168
- const handleZoomToFit = () => {
169
- forceGraph.current?.zoomToFit(400, 40);
170
- };
171
- return /* @__PURE__ */ React2.createElement("div", {
172
- ref,
173
- className: "relative grow",
174
- onClick: handleZoomToFit
175
- }, /* @__PURE__ */ React2.createElement("div", {
176
- ref: rootRef,
177
- className: "absolute inset-0"
178
- }));
179
- } finally {
180
- _effect.f();
181
- }
182
- };
183
-
184
- export {
185
- D3ForceGraph,
186
- ForceGraph
187
- };
188
- //# sourceMappingURL=chunk-6BVXZQPP.mjs.map
@@ -1,7 +0,0 @@
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 { getHashStyles } from '@dxos/react-ui-theme';\nimport { type SpaceGraphEdge, type SpaceGraphModel, type SpaceGraphNode } from '@dxos/schema';\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(() => graph.current?.repaint(), [selection.selected.value]);\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) {\n this._nodes = graph.nodes.map((node) => ({\n id: node.id,\n type: node.type,\n data: node.data,\n }));\n\n this._links = graph.edges.map((edge) => ({\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": "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",
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", "repaint", "selected", "value", "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", "edges", "edge", "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,79 +0,0 @@
1
- import {
2
- meta
3
- } from "./chunk-UBHZGWZQ.mjs";
4
- import {
5
- __export
6
- } from "./chunk-J5LGTIGS.mjs";
7
-
8
- // src/types/ExplorerAction.ts
9
- var ExplorerAction_exports = {};
10
- __export(ExplorerAction_exports, {
11
- CreateGraph: () => CreateGraph,
12
- GraphProps: () => GraphProps
13
- });
14
- import * as Schema from "effect/Schema";
15
- import { SpaceSchema } from "@dxos/react-client/echo";
16
- import { DataType, TypenameAnnotationId } from "@dxos/schema";
17
- var EXPLORER_ACTION = `${meta.id}/action`;
18
- var GraphProps = Schema.Struct({
19
- name: Schema.optional(Schema.String),
20
- typename: Schema.String.annotations({
21
- [TypenameAnnotationId]: [
22
- "used-static",
23
- "dynamic"
24
- ],
25
- title: "Select graph record type"
26
- })
27
- });
28
- var CreateGraph = class extends Schema.TaggedClass()(`${EXPLORER_ACTION}/create-graph`, {
29
- input: Schema.Struct({
30
- space: SpaceSchema
31
- }).pipe(Schema.extend(GraphProps)),
32
- output: Schema.Struct({
33
- object: DataType.View
34
- })
35
- }) {
36
- };
37
-
38
- // src/types/Graph.ts
39
- var Graph_exports = {};
40
- __export(Graph_exports, {
41
- Graph: () => Graph,
42
- make: () => make,
43
- makeView: () => makeView
44
- });
45
- import * as Schema2 from "effect/Schema";
46
- import { Filter, Obj, Query, QueryAST, Type } from "@dxos/echo";
47
- import { LabelAnnotation, ViewAnnotation } from "@dxos/echo/internal";
48
- import { createViewFromSpace } from "@dxos/schema";
49
- var Graph = Schema2.Struct({
50
- name: Schema2.optional(Schema2.String),
51
- query: Schema2.Struct({
52
- raw: Schema2.optional(Schema2.String),
53
- ast: QueryAST.Query
54
- }).pipe(Schema2.mutable)
55
- }).pipe(Type.Obj({
56
- typename: "dxos.org/type/Graph",
57
- version: "0.1.0"
58
- }), LabelAnnotation.set([
59
- "name"
60
- ]), ViewAnnotation.set(true));
61
- var make = (props = {
62
- query: {
63
- raw: "",
64
- ast: Query.select(Filter.nothing()).ast
65
- }
66
- }) => Obj.make(Graph, props);
67
- var makeView = async ({ presentation, ...props }) => {
68
- const graph = make(presentation);
69
- return createViewFromSpace({
70
- ...props,
71
- presentation: graph
72
- });
73
- };
74
-
75
- export {
76
- ExplorerAction_exports,
77
- Graph_exports
78
- };
79
- //# sourceMappingURL=chunk-BGNRYZUN.mjs.map
@@ -1,7 +0,0 @@
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 { SpaceSchema } from '@dxos/react-client/echo';\nimport { DataType, TypenameAnnotationId } from '@dxos/schema';\n\nimport { meta } from '../meta';\n\nconst EXPLORER_ACTION = `${meta.id}/action`;\n\nexport const GraphProps = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: Schema.String.annotations({\n [TypenameAnnotationId]: ['used-static', 'dynamic'],\n title: 'Select graph record type',\n }),\n});\n\nexport class CreateGraph extends Schema.TaggedClass<CreateGraph>()(`${EXPLORER_ACTION}/create-graph`, {\n input: Schema.Struct({\n space: SpaceSchema,\n }).pipe(Schema.extend(GraphProps)),\n output: Schema.Struct({\n object: DataType.View,\n }),\n}) {}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Filter, Obj, Query, QueryAST, Type } from '@dxos/echo';\nimport { LabelAnnotation, ViewAnnotation } from '@dxos/echo/internal';\nimport { type CreateViewFromSpaceProps, createViewFromSpace } from '@dxos/schema';\n\nexport const Graph = 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.Obj({\n typename: 'dxos.org/type/Graph',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['name']),\n ViewAnnotation.set(true),\n);\n\nexport type Graph = Schema.Schema.Type<typeof Graph>;\n\n/**\n * Make a graph object.\n */\nexport const make = (\n props: Obj.MakeProps<typeof Graph> = { query: { raw: '', ast: Query.select(Filter.nothing()).ast } },\n) => Obj.make(Graph, props);\n\ntype MakeViewProps = Omit<CreateViewFromSpaceProps, 'presentation'> & {\n presentation?: Omit<Obj.MakeProps<typeof Graph>, 'name'>;\n};\n\n/**\n * Make a graph as a view of a data set.\n */\nexport const makeView = async ({ presentation, ...props }: MakeViewProps) => {\n const graph = make(presentation);\n return createViewFromSpace({ ...props, presentation: graph });\n};\n"],
5
- "mappings": ";;;;;;;;AAAA;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,mBAAmB;AAC5B,SAASC,UAAUC,4BAA4B;AAI/C,IAAMC,kBAAkB,GAAGC,KAAKC,EAAE;AAE3B,IAAMC,aAAoBC,cAAO;EACtCC,MAAaC,gBAAgBC,aAAM;EACnCC,UAAiBD,cAAOE,YAAY;IAClC,CAACC,oBAAAA,GAAuB;MAAC;MAAe;;IACxCC,OAAO;EACT,CAAA;AACF,CAAA;AAEO,IAAMC,cAAN,cAAiCC,mBAAW,EAAgB,GAAGb,eAAAA,iBAAgC;EACpGc,OAAcV,cAAO;IACnBW,OAAOC;EACT,CAAA,EAAGC,KAAYC,cAAOf,UAAAA,CAAAA;EACtBgB,QAAef,cAAO;IACpBgB,QAAQC,SAASC;EACnB,CAAA;AACF,CAAA,EAAA;AAAI;;;AC5BJ;;;;;;AAIA,YAAYC,aAAY;AAExB,SAASC,QAAQC,KAAKC,OAAOC,UAAUC,YAAY;AACnD,SAASC,iBAAiBC,sBAAsB;AAChD,SAAwCC,2BAA2B;AAE5D,IAAMC,QAAeC,eAAO;EACjCC,MAAaC,iBAAgBC,cAAM;EACnCC,OAAcJ,eAAO;IACnBK,KAAYH,iBAAgBC,cAAM;IAClCG,KAAKC,SAASC;EAChB,CAAA,EAAGC,KAAYC,eAAO;AACxB,CAAA,EAAGD,KACDE,KAAKC,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBC,IAAI;EAAC;CAAO,GAC5BC,eAAeD,IAAI,IAAA,CAAA;AAQd,IAAME,OAAO,CAClBC,QAAqC;EAAEf,OAAO;IAAEC,KAAK;IAAIC,KAAKE,MAAMY,OAAOC,OAAOC,QAAO,CAAA,EAAIhB;EAAI;AAAE,MAChGM,IAAIM,KAAKnB,OAAOoB,KAAAA;AASd,IAAMI,WAAW,OAAO,EAAEC,cAAc,GAAGL,MAAAA,MAAsB;AACtE,QAAMM,QAAQP,KAAKM,YAAAA;AACnB,SAAOE,oBAAoB;IAAE,GAAGP;IAAOK,cAAcC;EAAM,CAAA;AAC7D;",
6
- "names": ["Schema", "SpaceSchema", "DataType", "TypenameAnnotationId", "EXPLORER_ACTION", "meta", "id", "GraphProps", "Struct", "name", "optional", "String", "typename", "annotations", "TypenameAnnotationId", "title", "CreateGraph", "TaggedClass", "input", "space", "SpaceSchema", "pipe", "extend", "output", "object", "DataType", "View", "Schema", "Filter", "Obj", "Query", "QueryAST", "Type", "LabelAnnotation", "ViewAnnotation", "createViewFromSpace", "Graph", "Struct", "name", "optional", "String", "query", "raw", "ast", "QueryAST", "Query", "pipe", "mutable", "Type", "Obj", "typename", "version", "LabelAnnotation", "set", "ViewAnnotation", "make", "props", "select", "Filter", "nothing", "makeView", "presentation", "graph", "createViewFromSpace"]
7
- }