@dxos/plugin-explorer 0.8.4-main.c85a9c8dae → 0.8.4-main.dfabb4ec29
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.
- package/dist/lib/{browser/ExplorerContainer-4RB2TY3G.mjs → neutral/ExplorerContainer-5TOK2ZEY.mjs} +8 -16
- package/dist/lib/neutral/ExplorerContainer-5TOK2ZEY.mjs.map +7 -0
- package/dist/lib/neutral/ExplorerPlugin.mjs +26 -0
- package/dist/lib/neutral/ExplorerPlugin.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +11 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/{browser/chunk-4NFGHCGO.mjs → neutral/chunk-5X5ATGCS.mjs} +11 -22
- package/dist/lib/neutral/chunk-5X5ATGCS.mjs.map +7 -0
- package/dist/lib/{browser/chunk-YNQF4CPY.mjs → neutral/chunk-HPIS2WXY.mjs} +2 -2
- package/dist/lib/{browser/chunk-YNQF4CPY.mjs.map → neutral/chunk-HPIS2WXY.mjs.map} +3 -3
- package/dist/lib/{browser/chunk-6AZY4CDH.mjs → neutral/components/index.mjs} +144 -148
- package/dist/lib/{node-esm/chunk-DOXAIJEC.mjs.map → neutral/components/index.mjs.map} +4 -4
- package/dist/lib/neutral/containers/index.mjs +9 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/create-object-F6TKVAGV.mjs +39 -0
- package/dist/lib/neutral/create-object-F6TKVAGV.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +40 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +14 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/{browser → neutral}/meta.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +12 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-U3JEY7V7.mjs +26 -0
- package/dist/lib/neutral/react-surface-U3JEY7V7.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +33 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/types/index.mjs +1 -1
- package/dist/types/data/cities.d.ts +4 -4
- package/dist/types/data/cities.d.ts.map +1 -1
- package/dist/types/data/countries-110m.d.ts +19 -22
- package/dist/types/data/countries-110m.d.ts.map +1 -1
- package/dist/types/src/ExplorerPlugin.d.ts +1 -0
- package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
- package/dist/types/src/ExplorerPlugin.test.d.ts +2 -0
- package/dist/types/src/ExplorerPlugin.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/create-object.d.ts +11 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +8 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/components/Chart/Chart.d.ts.map +1 -1
- package/dist/types/src/components/Chart/Chart.stories.d.ts +4 -1
- package/dist/types/src/components/Chart/Chart.stories.d.ts.map +1 -1
- package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
- package/dist/types/src/components/Globe/Globe.stories.d.ts +5 -2
- package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
- package/dist/types/src/components/Graph/CanvasForceGraph.d.ts +13 -0
- package/dist/types/src/components/Graph/CanvasForceGraph.d.ts.map +1 -0
- package/dist/types/src/components/Graph/CanvasForceGraph.stories.d.ts +17 -0
- package/dist/types/src/components/Graph/CanvasForceGraph.stories.d.ts.map +1 -0
- package/dist/types/src/components/Graph/ForceGraph.d.ts +12 -5
- package/dist/types/src/components/Graph/ForceGraph.d.ts.map +1 -1
- package/dist/types/src/components/Graph/ForceGraph.stories.d.ts +4 -2
- package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
- package/dist/types/src/components/Graph/{adapter.d.ts → graph-adapter.d.ts} +1 -1
- package/dist/types/src/components/Graph/graph-adapter.d.ts.map +1 -0
- package/dist/types/src/components/Graph/index.d.ts +1 -1
- package/dist/types/src/components/Graph/index.d.ts.map +1 -1
- package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
- package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
- package/dist/types/src/components/Tree/Tree.stories.d.ts +5 -1
- package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tree/layout/HierarchicalEdgeBundling.d.ts.map +1 -1
- package/dist/types/src/components/Tree/layout/RadialTree.d.ts.map +1 -1
- package/dist/types/src/components/Tree/layout/TidyTree.d.ts.map +1 -1
- package/dist/types/src/components/Tree/testing/generator.d.ts.map +1 -1
- package/dist/types/src/components/Tree/types/tree.d.ts +6 -6
- package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
- package/dist/types/src/components/Tree/types/types.d.ts.map +1 -1
- package/dist/types/src/components/plot.d.ts.map +1 -1
- package/dist/types/src/containers/ExplorerContainer/ExplorerContainer.d.ts +3 -3
- package/dist/types/src/containers/ExplorerContainer/ExplorerContainer.d.ts.map +1 -1
- package/dist/types/src/containers/ExplorerContainer/index.d.ts +1 -2
- package/dist/types/src/containers/ExplorerContainer/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +3 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +28 -26
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/ExplorerAction.d.ts.map +1 -1
- package/dist/types/src/types/Graph.d.ts +2 -9
- package/dist/types/src/types/Graph.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +98 -57
- package/src/ExplorerPlugin.test.ts +26 -0
- package/src/ExplorerPlugin.tsx +7 -24
- package/src/capabilities/create-object.ts +36 -0
- package/src/capabilities/index.ts +4 -1
- package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +10 -9
- package/src/components/Chart/Chart.stories.tsx +14 -21
- package/src/components/Globe/Globe.stories.tsx +17 -20
- package/src/components/Graph/CanvasForceGraph.stories.tsx +83 -0
- package/src/components/Graph/CanvasForceGraph.tsx +124 -0
- package/src/components/Graph/ForceGraph.stories.tsx +75 -44
- package/src/components/Graph/ForceGraph.tsx +104 -85
- package/src/components/Graph/index.ts +1 -1
- package/src/components/Tree/Tree.stories.tsx +43 -36
- package/src/components/Tree/testing/generator.ts +1 -1
- package/src/components/Tree/types/tree.test.ts +3 -4
- package/src/components/Tree/types/tree.ts +13 -13
- package/src/containers/ExplorerContainer/ExplorerContainer.tsx +7 -9
- package/src/containers/ExplorerContainer/index.ts +1 -3
- package/src/hooks/useGraphModel.ts +14 -10
- package/src/index.ts +1 -4
- package/src/meta.ts +1 -1
- package/src/plugin.ts +9 -0
- package/src/translations.ts +14 -13
- package/src/types/ExplorerAction.ts +1 -2
- package/src/types/Graph.ts +8 -22
- package/src/typings.d.ts +8 -0
- package/dist/lib/browser/ExplorerContainer-4RB2TY3G.mjs.map +0 -7
- package/dist/lib/browser/chunk-4NFGHCGO.mjs.map +0 -7
- package/dist/lib/browser/chunk-6AZY4CDH.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -95
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-surface-KAHVDMFX.mjs +0 -38
- package/dist/lib/browser/react-surface-KAHVDMFX.mjs.map +0 -7
- package/dist/lib/node-esm/ExplorerContainer-LCG425I7.mjs +0 -49
- package/dist/lib/node-esm/ExplorerContainer-LCG425I7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DK77RB6M.mjs +0 -26
- package/dist/lib/node-esm/chunk-DK77RB6M.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DOXAIJEC.mjs +0 -11280
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-V42OFY7B.mjs +0 -85
- package/dist/lib/node-esm/chunk-V42OFY7B.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -96
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/meta.mjs +0 -9
- package/dist/lib/node-esm/meta.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-7XILIUI4.mjs +0 -39
- package/dist/lib/node-esm/react-surface-7XILIUI4.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -11
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/components/Graph/D3ForceGraph.d.ts +0 -14
- package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +0 -1
- package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +0 -15
- package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +0 -1
- package/dist/types/src/components/Graph/adapter.d.ts.map +0 -1
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/components/Graph/D3ForceGraph.stories.tsx +0 -84
- package/src/components/Graph/D3ForceGraph.tsx +0 -102
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
- /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/meta.mjs.map +0 -0
- /package/dist/lib/{node-esm → neutral}/types/index.mjs.map +0 -0
- /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
- /package/src/components/Graph/{adapter.ts → graph-adapter.ts} +0 -0
package/dist/lib/{browser/ExplorerContainer-4RB2TY3G.mjs → neutral/ExplorerContainer-5TOK2ZEY.mjs}
RENAMED
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
D3ForceGraph,
|
|
3
|
-
useGraphModel
|
|
4
|
-
} from "./chunk-6AZY4CDH.mjs";
|
|
5
1
|
import "./chunk-J5LGTIGS.mjs";
|
|
6
2
|
|
|
7
3
|
// src/containers/ExplorerContainer/ExplorerContainer.tsx
|
|
8
4
|
import React, { useCallback, useMemo, useState } from "react";
|
|
9
5
|
import { QueryBuilder } from "@dxos/echo-query";
|
|
10
|
-
import { useGlobalSearch } from "@dxos/plugin-search";
|
|
11
6
|
import { getSpace, useObject } from "@dxos/react-client/echo";
|
|
12
7
|
import { Panel, Toolbar } from "@dxos/react-ui";
|
|
13
8
|
import { QueryEditor } from "@dxos/react-ui-components";
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
import { ForceGraph } from "#components";
|
|
10
|
+
import { useGraphModel } from "#hooks";
|
|
11
|
+
var ExplorerContainer = ({ role, subject, attendableId: _attendableId }) => {
|
|
12
|
+
const [view] = useObject(subject);
|
|
16
13
|
const space = view && getSpace(view);
|
|
17
14
|
const [filter, setFilter] = useState();
|
|
18
15
|
const model = useGraphModel(space, filter);
|
|
19
|
-
const { match } = useGlobalSearch();
|
|
20
16
|
const builder = useMemo(() => new QueryBuilder(), []);
|
|
21
17
|
const handleChange = useCallback((value) => {
|
|
22
18
|
setFilter(builder.build(value).filter);
|
|
@@ -34,15 +30,11 @@ var ExplorerContainer = ({ role, subject: view }) => {
|
|
|
34
30
|
onChange: handleChange
|
|
35
31
|
}))), /* @__PURE__ */ React.createElement(Panel.Content, {
|
|
36
32
|
asChild: true
|
|
37
|
-
}, /* @__PURE__ */ React.createElement(
|
|
38
|
-
model
|
|
39
|
-
match
|
|
33
|
+
}, /* @__PURE__ */ React.createElement(ForceGraph, {
|
|
34
|
+
model
|
|
40
35
|
})));
|
|
41
36
|
};
|
|
42
|
-
|
|
43
|
-
// src/containers/ExplorerContainer/index.ts
|
|
44
|
-
var ExplorerContainer_default = ExplorerContainer;
|
|
45
37
|
export {
|
|
46
|
-
|
|
38
|
+
ExplorerContainer as default
|
|
47
39
|
};
|
|
48
|
-
//# sourceMappingURL=ExplorerContainer-
|
|
40
|
+
//# sourceMappingURL=ExplorerContainer-5TOK2ZEY.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/ExplorerContainer/ExplorerContainer.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Filter } from '@dxos/echo';\nimport { type View } from '@dxos/echo';\nimport { QueryBuilder } from '@dxos/echo-query';\nimport { getSpace, useObject } from '@dxos/react-client/echo';\nimport { Panel, Toolbar } from '@dxos/react-ui';\nimport { QueryEditor, type QueryEditorProps } from '@dxos/react-ui-components';\n\nimport { ForceGraph } from '#components';\nimport { useGraphModel } from '#hooks';\n\nexport type ExplorerContainerProps = AppSurface.ObjectArticleProps<View.View>;\n\nexport const ExplorerContainer = ({ role, subject, attendableId: _attendableId }: ExplorerContainerProps) => {\n const [view] = useObject(subject);\n const space = view && getSpace(view);\n const [filter, setFilter] = useState<Filter.Any>();\n const model = useGraphModel(space, filter);\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 <Panel.Root role={role}>\n {showToolbar && (\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <QueryEditor db={space.db} onChange={handleChange} />\n </Toolbar.Root>\n </Panel.Toolbar>\n )}\n <Panel.Content asChild>\n <ForceGraph model={model} />\n </Panel.Content>\n </Panel.Root>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,SAASC,gBAAgB;AAKtD,SAASC,oBAAoB;AAC7B,SAASC,UAAUC,iBAAiB;AACpC,SAASC,OAAOC,eAAe;AAC/B,SAASC,mBAA0C;AAEnD,SAASC,kBAAkB;AAC3B,SAASC,qBAAqB;AAIvB,IAAMC,oBAAoB,CAAC,EAAEC,MAAMC,SAASC,cAAcC,cAAa,MAA0B;AACtG,QAAM,CAACC,IAAAA,IAAQX,UAAUQ,OAAAA;AACzB,QAAMI,QAAQD,QAAQZ,SAASY,IAAAA;AAC/B,QAAM,CAACE,QAAQC,SAAAA,IAAajB,SAAAA;AAC5B,QAAMkB,QAAQV,cAAcO,OAAOC,MAAAA;AAEnC,QAAMG,UAAUpB,QAAQ,MAAM,IAAIE,aAAAA,GAAgB,CAAA,CAAE;AACpD,QAAMmB,eAAetB,YAAuD,CAACuB,UAAAA;AAC3EJ,cAAUE,QAAQG,MAAMD,KAAAA,EAAOL,MAAM;EACvC,GAAG,CAAA,CAAE;AAEL,QAAMO,cAAcb,SAAS;AAE7B,MAAI,CAACK,SAAS,CAACG,OAAO;AACpB,WAAO;EACT;AAEA,SACE,sBAAA,cAACd,MAAMoB,MAAI;IAACd;KACTa,eACC,sBAAA,cAACnB,MAAMC,SAAO;IAACoB,SAAAA;KACb,sBAAA,cAACpB,QAAQmB,MAAI,MACX,sBAAA,cAAClB,aAAAA;IAAYoB,IAAIX,MAAMW;IAAIC,UAAUP;QAI3C,sBAAA,cAAChB,MAAMwB,SAAO;IAACH,SAAAA;KACb,sBAAA,cAAClB,YAAAA;IAAWW;;AAIpB;",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "useState", "QueryBuilder", "getSpace", "useObject", "Panel", "Toolbar", "QueryEditor", "ForceGraph", "useGraphModel", "ExplorerContainer", "role", "subject", "attendableId", "_attendableId", "view", "space", "filter", "setFilter", "model", "builder", "handleChange", "value", "build", "showToolbar", "Root", "asChild", "db", "onChange", "Content"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/ExplorerPlugin.tsx
|
|
4
|
+
import { Plugin } from "@dxos/app-framework";
|
|
5
|
+
import { AppPlugin } from "@dxos/app-toolkit";
|
|
6
|
+
import { CreateObject, ReactSurface } from "#capabilities";
|
|
7
|
+
import { meta } from "#meta";
|
|
8
|
+
import { translations } from "#translations";
|
|
9
|
+
import { Graph } from "#types";
|
|
10
|
+
var ExplorerPlugin = Plugin.define(meta).pipe(AppPlugin.addCreateObjectModule({
|
|
11
|
+
activate: CreateObject
|
|
12
|
+
}), AppPlugin.addSchemaModule({
|
|
13
|
+
schema: [
|
|
14
|
+
Graph.Graph
|
|
15
|
+
]
|
|
16
|
+
}), AppPlugin.addSurfaceModule({
|
|
17
|
+
activate: ReactSurface
|
|
18
|
+
}), AppPlugin.addTranslationsModule({
|
|
19
|
+
translations
|
|
20
|
+
}), Plugin.make);
|
|
21
|
+
var ExplorerPlugin_default = ExplorerPlugin;
|
|
22
|
+
export {
|
|
23
|
+
ExplorerPlugin,
|
|
24
|
+
ExplorerPlugin_default as default
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=ExplorerPlugin.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/ExplorerPlugin.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\n\nimport { CreateObject, ReactSurface } from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { Graph } from '#types';\n\nexport const ExplorerPlugin = Plugin.define(meta).pipe(\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addSchemaModule({ schema: [Graph.Graph] }),\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.make,\n);\n\nexport default ExplorerPlugin;\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAE1B,SAASC,cAAcC,oBAAoB;AAC3C,SAASC,YAAY;AACrB,SAASC,oBAAoB;AAC7B,SAASC,aAAa;AAEf,IAAMC,iBAAiBP,OAAOQ,OAAOJ,IAAAA,EAAMK,KAChDR,UAAUS,sBAAsB;EAAEC,UAAUT;AAAa,CAAA,GACzDD,UAAUW,gBAAgB;EAAEC,QAAQ;IAACP,MAAMA;;AAAO,CAAA,GAClDL,UAAUa,iBAAiB;EAAEH,UAAUR;AAAa,CAAA,GACpDF,UAAUc,sBAAsB;EAAEV;AAAa,CAAA,GAC/CL,OAAOgB,IAAI;AAGb,IAAA,yBAAeT;",
|
|
6
|
+
"names": ["Plugin", "AppPlugin", "CreateObject", "ReactSurface", "meta", "translations", "Graph", "ExplorerPlugin", "define", "pipe", "addCreateObjectModule", "activate", "addSchemaModule", "schema", "addSurfaceModule", "addTranslationsModule", "make"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/capabilities/index.ts
|
|
4
|
+
import { Capability } from "@dxos/app-framework";
|
|
5
|
+
var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-F6TKVAGV.mjs"));
|
|
6
|
+
var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-U3JEY7V7.mjs"));
|
|
7
|
+
export {
|
|
8
|
+
CreateObject,
|
|
9
|
+
ReactSurface
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/capabilities/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,kBAAkB;AAEpB,IAAMC,eAAeD,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMC,eAAeH,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["Capability", "CreateObject", "lazy", "ReactSurface"]
|
|
7
|
+
}
|
|
@@ -8,7 +8,7 @@ __export(ExplorerAction_exports, {
|
|
|
8
8
|
GraphProps: () => GraphProps
|
|
9
9
|
});
|
|
10
10
|
import * as Schema from "effect/Schema";
|
|
11
|
-
import { TypeInputOptionsAnnotation } from "@dxos/plugin-space
|
|
11
|
+
import { TypeInputOptionsAnnotation } from "@dxos/plugin-space";
|
|
12
12
|
var GraphProps = Schema.Struct({
|
|
13
13
|
name: Schema.optional(Schema.String),
|
|
14
14
|
// TODO(wittjosiah): This should be a query input instead.
|
|
@@ -21,9 +21,6 @@ var GraphProps = Schema.Struct({
|
|
|
21
21
|
],
|
|
22
22
|
kind: [
|
|
23
23
|
"user"
|
|
24
|
-
],
|
|
25
|
-
registered: [
|
|
26
|
-
"registered"
|
|
27
24
|
]
|
|
28
25
|
}), Schema.optional)
|
|
29
26
|
});
|
|
@@ -32,11 +29,10 @@ var GraphProps = Schema.Struct({
|
|
|
32
29
|
var Graph_exports = {};
|
|
33
30
|
__export(Graph_exports, {
|
|
34
31
|
Graph: () => Graph,
|
|
35
|
-
GraphV1: () => GraphV1,
|
|
36
32
|
make: () => make
|
|
37
33
|
});
|
|
38
34
|
import * as Schema2 from "effect/Schema";
|
|
39
|
-
import { Filter, Obj, Query, QueryAST, Ref, Type } from "@dxos/echo";
|
|
35
|
+
import { Annotation, Filter, Obj, Query, QueryAST, Ref, Type } from "@dxos/echo";
|
|
40
36
|
import { View } from "@dxos/echo";
|
|
41
37
|
import { FormInputAnnotation, LabelAnnotation } from "@dxos/echo/internal";
|
|
42
38
|
import { ViewAnnotation } from "@dxos/schema";
|
|
@@ -48,11 +44,16 @@ var GraphSchema = Schema2.Struct({
|
|
|
48
44
|
ast: QueryAST.Query
|
|
49
45
|
}).pipe(FormInputAnnotation.set(false))
|
|
50
46
|
}).pipe(Type.object({
|
|
51
|
-
typename: "dxos.
|
|
52
|
-
version: "0.
|
|
47
|
+
typename: "org.dxos.type.graph",
|
|
48
|
+
version: "0.1.0"
|
|
53
49
|
}), LabelAnnotation.set([
|
|
54
50
|
"name"
|
|
55
|
-
]), ViewAnnotation.set(
|
|
51
|
+
]), ViewAnnotation.set([
|
|
52
|
+
"view"
|
|
53
|
+
]), Annotation.IconAnnotation.set({
|
|
54
|
+
icon: "ph--graph--regular",
|
|
55
|
+
hue: "green"
|
|
56
|
+
}));
|
|
56
57
|
var Graph = GraphSchema;
|
|
57
58
|
var make = ({ name, query = {
|
|
58
59
|
raw: "",
|
|
@@ -64,21 +65,9 @@ var make = ({ name, query = {
|
|
|
64
65
|
query
|
|
65
66
|
});
|
|
66
67
|
};
|
|
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
|
-
})
|
|
73
|
-
}).pipe(Type.object({
|
|
74
|
-
typename: "dxos.org/type/Graph",
|
|
75
|
-
version: "0.1.0"
|
|
76
|
-
}), LabelAnnotation.set([
|
|
77
|
-
"name"
|
|
78
|
-
]));
|
|
79
68
|
|
|
80
69
|
export {
|
|
81
70
|
ExplorerAction_exports,
|
|
82
71
|
Graph_exports
|
|
83
72
|
};
|
|
84
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-5X5ATGCS.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';\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 }),\n Schema.optional,\n ),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Annotation, Filter, Obj, Query, QueryAST, Ref, Type } from '@dxos/echo';\nimport { View } from '@dxos/echo';\nimport { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';\nimport { ViewAnnotation } from '@dxos/schema';\n\nconst GraphSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n\n view: Ref.Ref(View.View).pipe(FormInputAnnotation.set(false)),\n\n query: Schema.Struct({\n raw: Schema.optional(Schema.String),\n ast: QueryAST.Query,\n }).pipe(FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.graph',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['name']),\n ViewAnnotation.set(['view']),\n Annotation.IconAnnotation.set({\n icon: 'ph--graph--regular',\n hue: 'green',\n }),\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"],
|
|
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,GAC1CT,2BAA2BU,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;EACT,CAAA,GACOR,eAAQ;AAEnB,CAAA;;;ACnBA;;;;;AAIA,YAAYS,aAAY;AAExB,SAASC,YAAYC,QAAQC,KAAKC,OAAOC,UAAUC,KAAKC,YAAY;AACpE,SAASC,YAAY;AACrB,SAASC,qBAAqBC,uBAAuB;AACrD,SAASC,sBAAsB;AAE/B,IAAMC,cAAqBC,eAAO;EAChCC,MAAaC,iBAAgBC,cAAM;EAEnCC,MAAMX,IAAIA,IAAIE,KAAKA,IAAI,EAAEU,KAAKT,oBAAoBU,IAAI,KAAA,CAAA;EAEtDC,OAAcP,eAAO;IACnBQ,KAAYN,iBAAgBC,cAAM;IAClCM,KAAKjB,SAASD;EAChB,CAAA,EAAGc,KAAKT,oBAAoBU,IAAI,KAAA,CAAA;AAClC,CAAA,EAAGD,KACDX,KAAKgB,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACAf,gBAAgBS,IAAI;EAAC;CAAO,GAC5BR,eAAeQ,IAAI;EAAC;CAAO,GAC3BlB,WAAWyB,eAAeP,IAAI;EAC5BQ,MAAM;EACNC,KAAK;AACP,CAAA,CAAA;AAGK,IAAMC,QAAyBjB;AAS/B,IAAMkB,OAAO,CAAC,EACnBhB,MACAM,QAAQ;EAAEC,KAAK;EAAIC,KAAKlB,MAAM2B,OAAO7B,OAAO8B,QAAO,CAAA,EAAIV;AAAI,GAC3DL,KAAI,MACM;AACV,SAAOd,IAAI2B,KAAKD,OAAO;IAAEf;IAAMG,MAAMX,IAAIwB,KAAKb,IAAAA;IAAOG;EAAM,CAAA;AAC7D;",
|
|
6
|
+
"names": ["Schema", "TypeInputOptionsAnnotation", "GraphProps", "Struct", "name", "optional", "String", "typename", "pipe", "annotations", "title", "set", "location", "kind", "Schema", "Annotation", "Filter", "Obj", "Query", "QueryAST", "Ref", "Type", "View", "FormInputAnnotation", "LabelAnnotation", "ViewAnnotation", "GraphSchema", "Struct", "name", "optional", "String", "view", "pipe", "set", "query", "raw", "ast", "object", "typename", "version", "IconAnnotation", "icon", "hue", "Graph", "make", "select", "nothing"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/meta.ts
|
|
2
2
|
import { trim } from "@dxos/util";
|
|
3
3
|
var meta = {
|
|
4
|
-
id: "dxos.
|
|
4
|
+
id: "org.dxos.plugin.explorer",
|
|
5
5
|
name: "Explorer",
|
|
6
6
|
description: trim`
|
|
7
7
|
Interactive hypergraph visualization that reveals relationships between objects in your workspace.
|
|
@@ -21,4 +21,4 @@ var meta = {
|
|
|
21
21
|
export {
|
|
22
22
|
meta
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
24
|
+
//# sourceMappingURL=chunk-HPIS2WXY.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.
|
|
5
|
-
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,
|
|
6
|
-
"names": ["trim", "meta", "id", "name", "description", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.explorer',\n name: 'Explorer',\n description: trim`\n Interactive hypergraph visualization that reveals relationships between objects in your workspace.\n Navigate complex data structures and discover connections through a dynamic network view.\n `,\n icon: 'ph--graph--regular',\n iconHue: 'green',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',\n tags: ['labs'],\n screenshots: ['https://dxos.network/plugin-details-explorer-dark.png'],\n};\n"],
|
|
5
|
+
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaJ;;;;EAIbK,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "icon", "iconHue", "source", "tags", "screenshots"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
1
3
|
// src/components/Chart/Chart.tsx
|
|
2
4
|
import * as Plot from "@observablehq/plot";
|
|
3
5
|
import React, { useEffect } from "react";
|
|
@@ -10820,95 +10822,14 @@ var Globe = ({ items = [], accessor, projection = "orthographic", options = defa
|
|
|
10820
10822
|
});
|
|
10821
10823
|
};
|
|
10822
10824
|
|
|
10823
|
-
// src/components/Graph/
|
|
10824
|
-
import React3, { useCallback, useEffect as useEffect3, useMemo, useRef } from "react";
|
|
10825
|
-
import { Obj } from "@dxos/echo";
|
|
10826
|
-
import { SelectionModel } from "@dxos/graph";
|
|
10827
|
-
import { GraphForceProjector, SVG } from "@dxos/react-ui-graph";
|
|
10828
|
-
import { getHashStyles } from "@dxos/ui-theme";
|
|
10829
|
-
import "@dxos/react-ui-graph/styles/graph.css";
|
|
10830
|
-
var D3ForceGraph = ({ classNames, model, selection: _selection, grid, drag, ...props }) => {
|
|
10831
|
-
const context = useRef(null);
|
|
10832
|
-
const projector = useMemo(() => {
|
|
10833
|
-
if (context.current) {
|
|
10834
|
-
return new GraphForceProjector(context.current, {
|
|
10835
|
-
attributes: {
|
|
10836
|
-
linkForce: (edge) => {
|
|
10837
|
-
return edge.data?.object?.active !== false;
|
|
10838
|
-
}
|
|
10839
|
-
},
|
|
10840
|
-
forces: {
|
|
10841
|
-
point: {
|
|
10842
|
-
strength: 0.01
|
|
10843
|
-
}
|
|
10844
|
-
}
|
|
10845
|
-
});
|
|
10846
|
-
}
|
|
10847
|
-
}, [
|
|
10848
|
-
context.current
|
|
10849
|
-
]);
|
|
10850
|
-
const graph = useRef(null);
|
|
10851
|
-
const selection = useMemo(() => _selection ?? new SelectionModel(), [
|
|
10852
|
-
_selection
|
|
10853
|
-
]);
|
|
10854
|
-
useEffect3(() => selection.subscribe(() => graph.current?.repaint()), [
|
|
10855
|
-
selection
|
|
10856
|
-
]);
|
|
10857
|
-
const handleSelect = useCallback((node) => {
|
|
10858
|
-
if (selection.contains(node.id)) {
|
|
10859
|
-
selection.remove(node.id);
|
|
10860
|
-
} else {
|
|
10861
|
-
selection.add(node.id);
|
|
10862
|
-
}
|
|
10863
|
-
}, [
|
|
10864
|
-
selection
|
|
10865
|
-
]);
|
|
10866
|
-
return /* @__PURE__ */ React3.createElement(SVG.Root, {
|
|
10867
|
-
ref: context,
|
|
10868
|
-
classNames,
|
|
10869
|
-
...props
|
|
10870
|
-
}, /* @__PURE__ */ React3.createElement(SVG.Markers, null), grid && /* @__PURE__ */ React3.createElement(SVG.Grid, {
|
|
10871
|
-
axis: true
|
|
10872
|
-
}), /* @__PURE__ */ React3.createElement(SVG.Zoom, {
|
|
10873
|
-
extent: [
|
|
10874
|
-
1 / 2,
|
|
10875
|
-
2
|
|
10876
|
-
]
|
|
10877
|
-
}, /* @__PURE__ */ React3.createElement(SVG.Graph, {
|
|
10878
|
-
drag,
|
|
10879
|
-
ref: graph,
|
|
10880
|
-
model,
|
|
10881
|
-
projector,
|
|
10882
|
-
labels: {
|
|
10883
|
-
text: (node) => {
|
|
10884
|
-
return node.data?.data.label ?? node.id;
|
|
10885
|
-
}
|
|
10886
|
-
},
|
|
10887
|
-
attributes: {
|
|
10888
|
-
node: (node) => {
|
|
10889
|
-
const obj = node.data?.data.object;
|
|
10890
|
-
return {
|
|
10891
|
-
data: {
|
|
10892
|
-
color: getHashStyles(obj && Obj.getTypename(obj))?.hue
|
|
10893
|
-
},
|
|
10894
|
-
classes: {
|
|
10895
|
-
"dx-selected": selection.contains(node.id)
|
|
10896
|
-
}
|
|
10897
|
-
};
|
|
10898
|
-
}
|
|
10899
|
-
},
|
|
10900
|
-
onSelect: handleSelect
|
|
10901
|
-
})));
|
|
10902
|
-
};
|
|
10903
|
-
|
|
10904
|
-
// src/components/Graph/ForceGraph.tsx
|
|
10825
|
+
// src/components/Graph/CanvasForceGraph.tsx
|
|
10905
10826
|
import { forceLink, forceManyBody } from "d3";
|
|
10906
10827
|
import NativeForceGraph from "force-graph";
|
|
10907
|
-
import
|
|
10828
|
+
import React3, { useCallback, useEffect as useEffect3, useRef, useState } from "react";
|
|
10908
10829
|
import { useResizeDetector as useResizeDetector3 } from "react-resize-detector";
|
|
10909
|
-
import {
|
|
10830
|
+
import { composable, composableProps } from "@dxos/ui-theme";
|
|
10910
10831
|
|
|
10911
|
-
// src/components/Graph/adapter.ts
|
|
10832
|
+
// src/components/Graph/graph-adapter.ts
|
|
10912
10833
|
var GraphAdapter = class {
|
|
10913
10834
|
graph;
|
|
10914
10835
|
_nodes = [];
|
|
@@ -10936,24 +10857,27 @@ var GraphAdapter = class {
|
|
|
10936
10857
|
}
|
|
10937
10858
|
};
|
|
10938
10859
|
|
|
10939
|
-
// src/components/Graph/
|
|
10940
|
-
var
|
|
10941
|
-
const { ref, width, height } = useResizeDetector3({
|
|
10860
|
+
// src/components/Graph/CanvasForceGraph.tsx
|
|
10861
|
+
var CanvasForceGraph = composable(({ model, match, onClick, ...props }, forwardedRef) => {
|
|
10862
|
+
const { ref: resizeRef, width, height } = useResizeDetector3({
|
|
10942
10863
|
refreshRate: 200
|
|
10943
10864
|
});
|
|
10944
|
-
const
|
|
10945
|
-
|
|
10946
|
-
|
|
10947
|
-
|
|
10865
|
+
const setRef = useCallback((node) => {
|
|
10866
|
+
resizeRef(node);
|
|
10867
|
+
assignRef(forwardedRef, node);
|
|
10868
|
+
}, [
|
|
10869
|
+
resizeRef,
|
|
10870
|
+
forwardedRef
|
|
10871
|
+
]);
|
|
10872
|
+
const rootRef = useRef(null);
|
|
10873
|
+
const forceGraph = useRef(null);
|
|
10948
10874
|
const [data, setData] = useState();
|
|
10949
|
-
|
|
10950
|
-
return model?.subscribe((model2) =>
|
|
10951
|
-
setData(new GraphAdapter(model2.graph));
|
|
10952
|
-
});
|
|
10875
|
+
useEffect3(() => {
|
|
10876
|
+
return model?.subscribe((model2) => setData(new GraphAdapter(model2.graph)));
|
|
10953
10877
|
}, [
|
|
10954
10878
|
model
|
|
10955
10879
|
]);
|
|
10956
|
-
|
|
10880
|
+
useEffect3(() => {
|
|
10957
10881
|
if (rootRef.current) {
|
|
10958
10882
|
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((link2) => link2.type);
|
|
10959
10883
|
}
|
|
@@ -10965,37 +10889,142 @@ var ForceGraph = ({ model, match }) => {
|
|
|
10965
10889
|
forceGraph.current = null;
|
|
10966
10890
|
};
|
|
10967
10891
|
}, []);
|
|
10968
|
-
|
|
10892
|
+
useEffect3(() => {
|
|
10969
10893
|
if (!data || !width || !height || !forceGraph.current) {
|
|
10970
10894
|
return;
|
|
10971
10895
|
}
|
|
10972
|
-
forceGraph.current.pauseAnimation().width(width).height(height).onEngineStop(() => {
|
|
10973
|
-
handleZoomToFit();
|
|
10974
|
-
}).onNodeClick((node) => {
|
|
10896
|
+
forceGraph.current.pauseAnimation().width(width).height(height).onEngineStop(() => handleZoomToFit()).onNodeClick((node) => {
|
|
10975
10897
|
forceGraph.current?.emitParticle(node);
|
|
10976
10898
|
}).d3Force("link", forceLink().distance(160).strength(0.5)).d3Force("charge", forceManyBody().strength(-30)).graphData(data).warmupTicks(100).cooldownTime(1e3).resumeAnimation();
|
|
10977
10899
|
}, [
|
|
10978
10900
|
data,
|
|
10979
10901
|
width,
|
|
10980
|
-
height
|
|
10981
|
-
forceGraph.current
|
|
10902
|
+
height
|
|
10982
10903
|
]);
|
|
10983
10904
|
const handleZoomToFit = () => {
|
|
10984
10905
|
forceGraph.current?.zoomToFit(400, 40);
|
|
10985
10906
|
};
|
|
10986
|
-
|
|
10987
|
-
|
|
10988
|
-
|
|
10989
|
-
|
|
10990
|
-
|
|
10907
|
+
const handleClick = useCallback((event) => {
|
|
10908
|
+
onClick?.(event);
|
|
10909
|
+
if (!event.defaultPrevented) {
|
|
10910
|
+
handleZoomToFit();
|
|
10911
|
+
}
|
|
10912
|
+
}, [
|
|
10913
|
+
onClick
|
|
10914
|
+
]);
|
|
10915
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
|
10916
|
+
...composableProps(props, {
|
|
10917
|
+
classNames: "relative grow"
|
|
10918
|
+
}),
|
|
10919
|
+
onClick: handleClick,
|
|
10920
|
+
ref: setRef
|
|
10921
|
+
}, /* @__PURE__ */ React3.createElement("div", {
|
|
10991
10922
|
ref: rootRef,
|
|
10992
10923
|
className: "absolute inset-0"
|
|
10993
10924
|
}));
|
|
10925
|
+
});
|
|
10926
|
+
var assignRef = (ref, value) => {
|
|
10927
|
+
if (typeof ref === "function") {
|
|
10928
|
+
ref(value);
|
|
10929
|
+
} else if (ref) {
|
|
10930
|
+
ref.current = value;
|
|
10931
|
+
}
|
|
10994
10932
|
};
|
|
10995
10933
|
|
|
10934
|
+
// src/components/Graph/ForceGraph.tsx
|
|
10935
|
+
import { Atom, useAtomValue } from "@effect-atom/atom-react";
|
|
10936
|
+
import React4, { useCallback as useCallback2, useEffect as useEffect4, useMemo, useRef as useRef2, useState as useState2 } from "react";
|
|
10937
|
+
import { Obj } from "@dxos/echo";
|
|
10938
|
+
import { SelectionModel } from "@dxos/graph";
|
|
10939
|
+
import { GraphForceProjector, SVG } from "@dxos/react-ui-graph";
|
|
10940
|
+
import { composable as composable2, composableProps as composableProps2, getHashStyles } from "@dxos/ui-theme";
|
|
10941
|
+
import "@dxos/react-ui-graph/styles/graph.css";
|
|
10942
|
+
var EMPTY_ATOM = Atom.make({
|
|
10943
|
+
nodes: [],
|
|
10944
|
+
edges: []
|
|
10945
|
+
});
|
|
10946
|
+
var ForceGraph = composable2(({ model, selection: selectionProp, grid, drag, onInspect, ...props }, forwardedRef) => {
|
|
10947
|
+
useAtomValue(model?.graphAtom ?? EMPTY_ATOM);
|
|
10948
|
+
const graph = useRef2(null);
|
|
10949
|
+
const selection = useMemo(() => selectionProp ?? new SelectionModel(), [
|
|
10950
|
+
selectionProp
|
|
10951
|
+
]);
|
|
10952
|
+
useEffect4(() => {
|
|
10953
|
+
const unsubscribe = selection.subscribe(() => graph.current?.repaint());
|
|
10954
|
+
return unsubscribe;
|
|
10955
|
+
}, [
|
|
10956
|
+
selection
|
|
10957
|
+
]);
|
|
10958
|
+
const svgRef = useRef2(null);
|
|
10959
|
+
const [projector, setProjector] = useState2();
|
|
10960
|
+
useEffect4(() => {
|
|
10961
|
+
if (svgRef.current) {
|
|
10962
|
+
setProjector(new GraphForceProjector(svgRef.current, {
|
|
10963
|
+
attributes: {
|
|
10964
|
+
// TODO(burdon): Check type (currently assumes Employee property).
|
|
10965
|
+
// Edge shouldn't contribute to force if it's not active.
|
|
10966
|
+
linkForce: (edge) => edge.data?.object?.active !== false
|
|
10967
|
+
},
|
|
10968
|
+
forces: {
|
|
10969
|
+
point: {
|
|
10970
|
+
strength: 0.01
|
|
10971
|
+
}
|
|
10972
|
+
}
|
|
10973
|
+
}));
|
|
10974
|
+
}
|
|
10975
|
+
}, []);
|
|
10976
|
+
const handleSelect = useCallback2((node) => {
|
|
10977
|
+
if (selection.contains(node.id)) {
|
|
10978
|
+
selection.remove(node.id);
|
|
10979
|
+
} else {
|
|
10980
|
+
selection.add(node.id);
|
|
10981
|
+
}
|
|
10982
|
+
}, [
|
|
10983
|
+
selection
|
|
10984
|
+
]);
|
|
10985
|
+
return /* @__PURE__ */ React4.createElement("div", {
|
|
10986
|
+
...composableProps2(props, {
|
|
10987
|
+
classNames: "dx-container"
|
|
10988
|
+
}),
|
|
10989
|
+
ref: forwardedRef
|
|
10990
|
+
}, /* @__PURE__ */ React4.createElement(SVG.Root, {
|
|
10991
|
+
ref: svgRef
|
|
10992
|
+
}, /* @__PURE__ */ React4.createElement(SVG.Markers, null), grid && /* @__PURE__ */ React4.createElement(SVG.Grid, {
|
|
10993
|
+
axis: true
|
|
10994
|
+
}), /* @__PURE__ */ React4.createElement(SVG.Zoom, {
|
|
10995
|
+
extent: [
|
|
10996
|
+
1 / 2,
|
|
10997
|
+
2
|
|
10998
|
+
]
|
|
10999
|
+
}, /* @__PURE__ */ React4.createElement(SVG.Graph, {
|
|
11000
|
+
drag,
|
|
11001
|
+
ref: graph,
|
|
11002
|
+
model,
|
|
11003
|
+
projector,
|
|
11004
|
+
labels: {
|
|
11005
|
+
text: (node) => node.data?.data.label ?? node.id
|
|
11006
|
+
},
|
|
11007
|
+
attributes: {
|
|
11008
|
+
node: (node) => {
|
|
11009
|
+
const obj = node.data?.data.object;
|
|
11010
|
+
return {
|
|
11011
|
+
data: {
|
|
11012
|
+
color: getHashStyles(obj && Obj.getTypename(obj))?.hue
|
|
11013
|
+
},
|
|
11014
|
+
classes: {
|
|
11015
|
+
"dx-selected": selection.contains(node.id)
|
|
11016
|
+
}
|
|
11017
|
+
};
|
|
11018
|
+
}
|
|
11019
|
+
},
|
|
11020
|
+
onSelect: handleSelect,
|
|
11021
|
+
onInspect
|
|
11022
|
+
}))));
|
|
11023
|
+
});
|
|
11024
|
+
|
|
10996
11025
|
// src/components/Tree/Tree.tsx
|
|
10997
11026
|
import { RegistryContext } from "@effect-atom/atom-react";
|
|
10998
|
-
import React5, { useContext, useEffect as useEffect5, useRef as useRef3, useState as
|
|
11027
|
+
import React5, { useContext, useEffect as useEffect5, useRef as useRef3, useState as useState3 } from "react";
|
|
10999
11028
|
import { useAsyncState } from "@dxos/react-ui";
|
|
11000
11029
|
import { SVG as SVG2 } from "@dxos/react-ui-graph";
|
|
11001
11030
|
import { SpaceGraphModel } from "@dxos/schema";
|
|
@@ -11154,7 +11183,7 @@ var TreeType = Schema.Struct({
|
|
|
11154
11183
|
value: TreeNodeType
|
|
11155
11184
|
}))
|
|
11156
11185
|
}).pipe(Type.object({
|
|
11157
|
-
typename: "dxos.
|
|
11186
|
+
typename: "org.dxos.type.tree",
|
|
11158
11187
|
version: "0.1.0"
|
|
11159
11188
|
}));
|
|
11160
11189
|
|
|
@@ -11191,7 +11220,7 @@ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
|
|
|
11191
11220
|
selected,
|
|
11192
11221
|
registry
|
|
11193
11222
|
]);
|
|
11194
|
-
const [tree3, setTree] =
|
|
11223
|
+
const [tree3, setTree] = useState3();
|
|
11195
11224
|
useEffect5(() => {
|
|
11196
11225
|
return model?.subscribe(() => {
|
|
11197
11226
|
const tree4 = mapGraphToTreeData(model);
|
|
@@ -11234,45 +11263,12 @@ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
|
|
|
11234
11263
|
ref: context
|
|
11235
11264
|
}));
|
|
11236
11265
|
};
|
|
11237
|
-
|
|
11238
|
-
// src/hooks/useGraphModel.ts
|
|
11239
|
-
import { useEffect as useEffect6, useState as useState3 } from "react";
|
|
11240
|
-
import { Capabilities } from "@dxos/app-framework";
|
|
11241
|
-
import { useCapability } from "@dxos/app-framework/ui";
|
|
11242
|
-
import { SpaceGraphModel as SpaceGraphModel2 } from "@dxos/schema";
|
|
11243
|
-
var useGraphModel = (space, filter, options, queue) => {
|
|
11244
|
-
const registry = useCapability(Capabilities.AtomRegistry);
|
|
11245
|
-
const [model, setModel] = useState3(void 0);
|
|
11246
|
-
useEffect6(() => {
|
|
11247
|
-
if (!space) {
|
|
11248
|
-
void model?.close();
|
|
11249
|
-
setModel(void 0);
|
|
11250
|
-
return;
|
|
11251
|
-
}
|
|
11252
|
-
if (!model || model.queue !== queue) {
|
|
11253
|
-
const model2 = new SpaceGraphModel2(registry).setFilter(filter).setOptions(options);
|
|
11254
|
-
void model2.open(space.db, queue);
|
|
11255
|
-
setModel(model2);
|
|
11256
|
-
} else {
|
|
11257
|
-
model.setFilter(filter).setOptions(options);
|
|
11258
|
-
}
|
|
11259
|
-
}, [
|
|
11260
|
-
space,
|
|
11261
|
-
filter,
|
|
11262
|
-
options,
|
|
11263
|
-
queue,
|
|
11264
|
-
registry
|
|
11265
|
-
]);
|
|
11266
|
-
return model;
|
|
11267
|
-
};
|
|
11268
|
-
|
|
11269
11266
|
export {
|
|
11267
|
+
CanvasForceGraph,
|
|
11270
11268
|
Chart,
|
|
11271
|
-
Globe,
|
|
11272
|
-
D3ForceGraph,
|
|
11273
11269
|
ForceGraph,
|
|
11274
|
-
|
|
11270
|
+
Globe,
|
|
11275
11271
|
Tree,
|
|
11276
|
-
|
|
11272
|
+
defaultTreeLayoutSlots
|
|
11277
11273
|
};
|
|
11278
|
-
//# sourceMappingURL=
|
|
11274
|
+
//# sourceMappingURL=index.mjs.map
|