@dxos/plugin-explorer 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d
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-S66JDOAF.mjs → ExplorerContainer-NOLLVUTE.mjs} +8 -7
- package/dist/lib/browser/ExplorerContainer-NOLLVUTE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-NXGP6NTP.mjs → chunk-6BVXZQPP.mjs} +10 -25
- package/dist/lib/browser/{chunk-NXGP6NTP.mjs.map → chunk-6BVXZQPP.mjs.map} +2 -2
- package/dist/lib/browser/{chunk-UCDNCIRV.mjs → chunk-ARBGXQFH.mjs} +4 -256
- package/dist/lib/browser/{chunk-UCDNCIRV.mjs.map → chunk-ARBGXQFH.mjs.map} +3 -3
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/browser/chunk-P6FFFVPM.mjs +100 -0
- package/dist/lib/browser/chunk-P6FFFVPM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-2DGFNLRO.mjs → chunk-UBHZGWZQ.mjs} +7 -2
- package/dist/lib/browser/chunk-UBHZGWZQ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +23 -23
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-EWB3H5KH.mjs +35 -0
- package/dist/lib/browser/intent-resolver-EWB3H5KH.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +2 -1
- package/dist/lib/browser/{react-surface-C4EC6ZDZ.mjs → react-surface-BY2DYCTH.mjs} +14 -11
- package/dist/lib/browser/react-surface-BY2DYCTH.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +7 -6
- package/dist/lib/node-esm/{ExplorerContainer-GIJN67DO.mjs → ExplorerContainer-N3S5KSUX.mjs} +8 -7
- package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4BY2XZET.mjs +101 -0
- package/dist/lib/node-esm/chunk-4BY2XZET.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6JACZE7E.mjs → chunk-CRSVAZNA.mjs} +10 -25
- package/dist/lib/node-esm/{chunk-6JACZE7E.mjs.map → chunk-CRSVAZNA.mjs.map} +2 -2
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-WHKUQG5M.mjs → chunk-NPIP4VEH.mjs} +4 -256
- package/dist/lib/node-esm/{chunk-WHKUQG5M.mjs.map → chunk-NPIP4VEH.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-PX6LHR2N.mjs → chunk-UXZM5VJB.mjs} +7 -2
- package/dist/lib/node-esm/chunk-UXZM5VJB.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +23 -23
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-SH6PW7VF.mjs +36 -0
- package/dist/lib/node-esm/intent-resolver-SH6PW7VF.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/meta.mjs +2 -1
- package/dist/lib/node-esm/{react-surface-YGGLTBF3.mjs → react-surface-7AAV7GBG.mjs} +14 -11
- package/dist/lib/node-esm/react-surface-7AAV7GBG.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +7 -6
- package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/ExplorerContainer.d.ts +2 -2
- package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
- package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
- package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
- package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
- package/dist/types/src/components/Tree/types/tree.d.ts +6 -6
- package/dist/types/src/components/index.d.ts +2 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +14 -6
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/ExplorerAction.d.ts +23 -0
- package/dist/types/src/types/ExplorerAction.d.ts.map +1 -0
- package/dist/types/src/types/Graph.d.ts +32 -0
- package/dist/types/src/types/Graph.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -29
- package/src/ExplorerPlugin.tsx +9 -17
- package/src/capabilities/intent-resolver.ts +12 -8
- package/src/capabilities/react-surface.tsx +6 -3
- package/src/components/ExplorerContainer.tsx +11 -7
- package/src/components/Graph/D3ForceGraph.stories.tsx +22 -10
- package/src/components/Graph/ForceGraph.stories.tsx +22 -10
- package/src/components/Graph/testing.ts +6 -6
- package/src/components/Tree/types/tree.test.ts +2 -2
- package/src/components/index.ts +3 -3
- package/src/meta.ts +6 -1
- package/src/translations.ts +4 -2
- package/src/types/ExplorerAction.ts +37 -0
- package/src/types/Graph.ts +63 -0
- package/src/types/index.ts +2 -2
- package/dist/lib/browser/ExplorerContainer-S66JDOAF.mjs.map +0 -7
- package/dist/lib/browser/chunk-2DGFNLRO.mjs.map +0 -7
- package/dist/lib/browser/chunk-4ETQJYX4.mjs +0 -38
- package/dist/lib/browser/chunk-4ETQJYX4.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-OXJJ3PII.mjs +0 -24
- package/dist/lib/browser/intent-resolver-OXJJ3PII.mjs.map +0 -7
- package/dist/lib/browser/react-surface-C4EC6ZDZ.mjs.map +0 -7
- package/dist/lib/node-esm/ExplorerContainer-GIJN67DO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AGHU3KVI.mjs +0 -39
- package/dist/lib/node-esm/chunk-AGHU3KVI.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PX6LHR2N.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-GVM36TJX.mjs +0 -25
- package/dist/lib/node-esm/intent-resolver-GVM36TJX.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-YGGLTBF3.mjs.map +0 -7
- package/dist/types/src/types/schema.d.ts +0 -12
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/dist/types/src/types/types.d.ts +0 -18
- package/dist/types/src/types/types.d.ts.map +0 -1
- package/src/types/schema.ts +0 -16
- package/src/types/types.ts +0 -22
|
@@ -4,7 +4,8 @@ import {
|
|
|
4
4
|
} from "./chunk-3ODK27PU.mjs";
|
|
5
5
|
import {
|
|
6
6
|
D3ForceGraph
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CRSVAZNA.mjs";
|
|
8
|
+
import "./chunk-HSLMI22Q.mjs";
|
|
8
9
|
|
|
9
10
|
// src/components/ExplorerContainer.tsx
|
|
10
11
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
@@ -24,16 +25,16 @@ var ExplorerContainer = ({ role, view }) => {
|
|
|
24
25
|
const { match } = useGlobalSearch();
|
|
25
26
|
const builder = useMemo(() => new QueryBuilder(), []);
|
|
26
27
|
const handleChange = useCallback((value) => {
|
|
27
|
-
setFilter(builder.build(value));
|
|
28
|
+
setFilter(builder.build(value).filter);
|
|
28
29
|
}, []);
|
|
30
|
+
const showToolbar = role === "article";
|
|
29
31
|
if (!space || !model) {
|
|
30
32
|
return null;
|
|
31
33
|
}
|
|
32
34
|
return /* @__PURE__ */ React.createElement(StackItem.Content, {
|
|
33
|
-
toolbar:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
space,
|
|
35
|
+
toolbar: showToolbar
|
|
36
|
+
}, showToolbar && /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(QueryEditor, {
|
|
37
|
+
db: space.db,
|
|
37
38
|
onChange: handleChange
|
|
38
39
|
})), /* @__PURE__ */ React.createElement(D3ForceGraph, {
|
|
39
40
|
model,
|
|
@@ -47,4 +48,4 @@ var ExplorerContainer_default = ExplorerContainer;
|
|
|
47
48
|
export {
|
|
48
49
|
ExplorerContainer_default as default
|
|
49
50
|
};
|
|
50
|
-
//# sourceMappingURL=ExplorerContainer-
|
|
51
|
+
//# sourceMappingURL=ExplorerContainer-N3S5KSUX.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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 View } from '@dxos/schema';\n\nimport { useGraphModel } from '../hooks';\n\nimport { D3ForceGraph } from './Graph';\n\ntype ExplorerContainerProps = {\n role: string;\n view: View.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
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
meta
|
|
4
|
+
} from "./chunk-UXZM5VJB.mjs";
|
|
5
|
+
import {
|
|
6
|
+
__export
|
|
7
|
+
} from "./chunk-HSLMI22Q.mjs";
|
|
8
|
+
|
|
9
|
+
// src/types/ExplorerAction.ts
|
|
10
|
+
var ExplorerAction_exports = {};
|
|
11
|
+
__export(ExplorerAction_exports, {
|
|
12
|
+
CreateGraph: () => CreateGraph,
|
|
13
|
+
GraphProps: () => GraphProps
|
|
14
|
+
});
|
|
15
|
+
import * as Schema2 from "effect/Schema";
|
|
16
|
+
import { TypeInputOptionsAnnotation } from "@dxos/plugin-space/types";
|
|
17
|
+
import { SpaceSchema } from "@dxos/react-client/echo";
|
|
18
|
+
|
|
19
|
+
// src/types/Graph.ts
|
|
20
|
+
var Graph_exports = {};
|
|
21
|
+
__export(Graph_exports, {
|
|
22
|
+
Graph: () => Graph,
|
|
23
|
+
GraphV1: () => GraphV1,
|
|
24
|
+
make: () => make
|
|
25
|
+
});
|
|
26
|
+
import * as Schema from "effect/Schema";
|
|
27
|
+
import { Filter, Obj, Query, QueryAST, Ref, Type } from "@dxos/echo";
|
|
28
|
+
import { FormInputAnnotation, LabelAnnotation } from "@dxos/echo/internal";
|
|
29
|
+
import { View, ViewAnnotation } from "@dxos/schema";
|
|
30
|
+
var GraphSchema = Schema.Struct({
|
|
31
|
+
name: Schema.optional(Schema.String),
|
|
32
|
+
view: Type.Ref(View.View).pipe(FormInputAnnotation.set(false)),
|
|
33
|
+
query: Schema.Struct({
|
|
34
|
+
raw: Schema.optional(Schema.String),
|
|
35
|
+
ast: QueryAST.Query
|
|
36
|
+
}).pipe(Schema.mutable, FormInputAnnotation.set(false))
|
|
37
|
+
}).pipe(Type.Obj({
|
|
38
|
+
typename: "dxos.org/type/Graph",
|
|
39
|
+
version: "0.2.0"
|
|
40
|
+
}), LabelAnnotation.set([
|
|
41
|
+
"name"
|
|
42
|
+
]), ViewAnnotation.set(true));
|
|
43
|
+
var Graph = GraphSchema;
|
|
44
|
+
var make = ({ name, query = {
|
|
45
|
+
raw: "",
|
|
46
|
+
ast: Query.select(Filter.nothing()).ast
|
|
47
|
+
}, view }) => {
|
|
48
|
+
return Obj.make(Graph, {
|
|
49
|
+
name,
|
|
50
|
+
view: Ref.make(view),
|
|
51
|
+
query
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
var GraphV1 = Schema.Struct({
|
|
55
|
+
name: Schema.optional(Schema.String),
|
|
56
|
+
query: Schema.Struct({
|
|
57
|
+
raw: Schema.optional(Schema.String),
|
|
58
|
+
ast: QueryAST.Query
|
|
59
|
+
}).pipe(Schema.mutable)
|
|
60
|
+
}).pipe(Type.Obj({
|
|
61
|
+
typename: "dxos.org/type/Graph",
|
|
62
|
+
version: "0.1.0"
|
|
63
|
+
}), LabelAnnotation.set([
|
|
64
|
+
"name"
|
|
65
|
+
]));
|
|
66
|
+
|
|
67
|
+
// src/types/ExplorerAction.ts
|
|
68
|
+
var EXPLORER_ACTION = `${meta.id}/action`;
|
|
69
|
+
var GraphProps = Schema2.Struct({
|
|
70
|
+
name: Schema2.optional(Schema2.String),
|
|
71
|
+
// TODO(wittjosiah): This should be a query input instead.
|
|
72
|
+
typename: Schema2.String.pipe(Schema2.annotations({
|
|
73
|
+
title: "Select type"
|
|
74
|
+
}), TypeInputOptionsAnnotation.set({
|
|
75
|
+
location: [
|
|
76
|
+
"database",
|
|
77
|
+
"runtime"
|
|
78
|
+
],
|
|
79
|
+
kind: [
|
|
80
|
+
"user"
|
|
81
|
+
],
|
|
82
|
+
registered: [
|
|
83
|
+
"registered"
|
|
84
|
+
]
|
|
85
|
+
}), Schema2.optional)
|
|
86
|
+
});
|
|
87
|
+
var CreateGraph = class extends Schema2.TaggedClass()(`${EXPLORER_ACTION}/create-graph`, {
|
|
88
|
+
input: Schema2.Struct({
|
|
89
|
+
space: SpaceSchema
|
|
90
|
+
}).pipe(Schema2.extend(GraphProps)),
|
|
91
|
+
output: Schema2.Struct({
|
|
92
|
+
object: Graph
|
|
93
|
+
})
|
|
94
|
+
}) {
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export {
|
|
98
|
+
Graph_exports,
|
|
99
|
+
ExplorerAction_exports
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=chunk-4BY2XZET.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';\nimport { SpaceSchema } from '@dxos/react-client/echo';\n\nimport { meta } from '../meta';\n\nimport * as Graph from './Graph';\n\nconst EXPLORER_ACTION = `${meta.id}/action`;\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\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: Graph.Graph,\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.Obj({\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 interface GraphEncoded extends Schema.Schema.Encoded<typeof GraphSchema> {}\nexport const Graph: Schema.Schema<Graph, GraphEncoded> = GraphSchema;\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.Obj({\n typename: 'dxos.org/type/Graph',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['name']),\n);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AAAA;;;;;AAIA,YAAYA,aAAY;AAExB,SAASC,kCAAkC;AAC3C,SAASC,mBAAmB;;;ACP5B;;;;;;AAIA,YAAYC,YAAY;AAExB,SAASC,QAAQC,KAAKC,OAAOC,UAAUC,KAAKC,YAAY;AACxD,SAASC,qBAAqBC,uBAAuB;AACrD,SAASC,MAAMC,sBAAsB;AAErC,IAAMC,cAAqBC,cAAO;EAChCC,MAAaC,gBAAgBC,aAAM;EAEnCC,MAAMC,KAAKC,IAAIC,KAAKA,IAAI,EAAEC,KAAKC,oBAAoBC,IAAI,KAAA,CAAA;EAEvDC,OAAcX,cAAO;IACnBY,KAAYV,gBAAgBC,aAAM;IAClCU,KAAKC,SAASC;EAChB,CAAA,EAAGP,KAAYQ,gBAASP,oBAAoBC,IAAI,KAAA,CAAA;AAClD,CAAA,EAAGF,KACDH,KAAKY,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBV,IAAI;EAAC;CAAO,GAC5BW,eAAeX,IAAI,IAAA,CAAA;AAId,IAAMY,QAA4CvB;AASlD,IAAMwB,OAAO,CAAC,EACnBtB,MACAU,QAAQ;EAAEC,KAAK;EAAIC,KAAKE,MAAMS,OAAOC,OAAOC,QAAO,CAAA,EAAIb;AAAI,GAC3DT,KAAI,MACM;AACV,SAAOa,IAAIM,KAAKD,OAAO;IAAErB;IAAMG,MAAME,IAAIiB,KAAKnB,IAAAA;IAAOO;EAAM,CAAA;AAC7D;AAMO,IAAMgB,UAAiB3B,cAAO;EACnCC,MAAaC,gBAAgBC,aAAM;EACnCQ,OAAcX,cAAO;IACnBY,KAAYV,gBAAgBC,aAAM;IAClCU,KAAKC,SAASC;EAChB,CAAA,EAAGP,KAAYQ,cAAO;AACxB,CAAA,EAAGR,KACDH,KAAKY,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBV,IAAI;EAAC;CAAO,CAAA;;;ADhD9B,IAAMkB,kBAAkB,GAAGC,KAAKC,EAAE;AAE3B,IAAMC,aAAoBC,eAAO;EACtCC,MAAaC,iBAAgBC,cAAM;;EAEnCC,UAAiBD,eAAOE,KACfC,oBAAY;IAAEC,OAAO;EAAc,CAAA,GAC1CC,2BAA2BC,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;IACPC,YAAY;MAAC;;EACf,CAAA,GACOV,gBAAQ;AAEnB,CAAA;AAEO,IAAMW,cAAN,cAAiCC,oBAAW,EAAgB,GAAGlB,eAAAA,iBAAgC;EACpGmB,OAAcf,eAAO;IACnBgB,OAAOC;EACT,CAAA,EAAGZ,KAAYa,eAAOnB,UAAAA,CAAAA;EACtBoB,QAAenB,eAAO;IACpBoB,QAAcC;EAChB,CAAA;AACF,CAAA,EAAA;AAAI;",
|
|
6
|
+
"names": ["Schema", "TypeInputOptionsAnnotation", "SpaceSchema", "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", "Obj", "typename", "version", "LabelAnnotation", "ViewAnnotation", "Graph", "make", "select", "Filter", "nothing", "GraphV1", "EXPLORER_ACTION", "meta", "id", "GraphProps", "Struct", "name", "optional", "String", "typename", "pipe", "annotations", "title", "TypeInputOptionsAnnotation", "set", "location", "kind", "registered", "CreateGraph", "TaggedClass", "input", "space", "SpaceSchema", "extend", "output", "object", "Graph"]
|
|
7
|
+
}
|
|
@@ -95,33 +95,12 @@ import { useResizeDetector } from "react-resize-detector";
|
|
|
95
95
|
import { filterObjectsSync } from "@dxos/plugin-search";
|
|
96
96
|
|
|
97
97
|
// src/components/Graph/adapter.ts
|
|
98
|
-
function _define_property(obj, key, value) {
|
|
99
|
-
if (key in obj) {
|
|
100
|
-
Object.defineProperty(obj, key, {
|
|
101
|
-
value,
|
|
102
|
-
enumerable: true,
|
|
103
|
-
configurable: true,
|
|
104
|
-
writable: true
|
|
105
|
-
});
|
|
106
|
-
} else {
|
|
107
|
-
obj[key] = value;
|
|
108
|
-
}
|
|
109
|
-
return obj;
|
|
110
|
-
}
|
|
111
98
|
var GraphAdapter = class {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
get links() {
|
|
116
|
-
return this._links;
|
|
117
|
-
}
|
|
99
|
+
graph;
|
|
100
|
+
_nodes = [];
|
|
101
|
+
_links = [];
|
|
118
102
|
constructor(graph) {
|
|
119
|
-
_define_property(this, "graph", void 0);
|
|
120
|
-
_define_property(this, "_nodes", void 0);
|
|
121
|
-
_define_property(this, "_links", void 0);
|
|
122
103
|
this.graph = graph;
|
|
123
|
-
this._nodes = [];
|
|
124
|
-
this._links = [];
|
|
125
104
|
this._nodes = graph.nodes.map((node) => ({
|
|
126
105
|
id: node.id,
|
|
127
106
|
type: node.type,
|
|
@@ -134,6 +113,12 @@ var GraphAdapter = class {
|
|
|
134
113
|
data: edge.data
|
|
135
114
|
}));
|
|
136
115
|
}
|
|
116
|
+
get nodes() {
|
|
117
|
+
return this._nodes;
|
|
118
|
+
}
|
|
119
|
+
get links() {
|
|
120
|
+
return this._links;
|
|
121
|
+
}
|
|
137
122
|
};
|
|
138
123
|
|
|
139
124
|
// src/components/Graph/ForceGraph.tsx
|
|
@@ -202,4 +187,4 @@ export {
|
|
|
202
187
|
D3ForceGraph,
|
|
203
188
|
ForceGraph
|
|
204
189
|
};
|
|
205
|
-
//# sourceMappingURL=chunk-
|
|
190
|
+
//# sourceMappingURL=chunk-CRSVAZNA.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/Graph/D3ForceGraph.tsx", "../../../src/components/Graph/ForceGraph.tsx", "../../../src/components/Graph/adapter.ts"],
|
|
4
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": ";;;;AAIA,OAAOA,SAASC,aAAaC,WAAWC,SAASC,cAAc;AAE/D,SAASC,WAAW;AACpB,SAASC,sBAAsB;AAE/B,SAEEC,qBAGAC,WAEK;AACP,SAASC,qBAAqB;AAG9B,OAAO;AAWA,IAAMC,eAAe,CAAC,EAAEC,YAAYC,OAAOC,WAAWC,YAAYC,MAAM,GAAGC,MAAAA,MAA0B;;;AAC1G,UAAMC,UAAUC,OAAmB,IAAA;AACnC,UAAMC,YAAYC,QAAyC,MAAA;AACzD,UAAIH,QAAQI,SAAS;AACnB,eAAO,IAAIC,oBAAoBL,QAAQI,SAAS;UAC9CE,YAAY;YACVC,WAAW,CAACC,SAAAA;AAGV,qBAAOA,KAAKC,MAAMC,QAAQC,WAAW;YACvC;UACF;UACAC,QAAQ;YACNC,OAAO;cACLC,UAAU;YACZ;UACF;QACF,CAAA;MACF;IACF,GAAG;MAACd,QAAQI;KAAQ;AAEpB,UAAMW,QAAQd,OAAwB,IAAA;AACtC,UAAML,YAAYO,QAAQ,MAAMN,cAAc,IAAImB,eAAAA,GAAkB;MAACnB;KAAW;AAChFoB,cAAU,MAAMF,MAAMX,SAASc,QAAAA,GAAW;MAACtB,UAAUuB,SAASC;KAAM;AAEpE,UAAMC,eAAeC,YACnB,CAACC,SAAAA;AACC,UAAI3B,UAAU4B,SAASD,KAAKE,EAAE,GAAG;AAC/B7B,kBAAU8B,OAAOH,KAAKE,EAAE;MAC1B,OAAO;AACL7B,kBAAU+B,IAAIJ,KAAKE,EAAE;MACvB;IACF,GACA;MAAC7B;KAAU;AAGb,WACE,sBAAA,cAACgC,IAAIC,MAAI;MAACC,KAAK9B;MAASN;OACtB,sBAAA,cAACkC,IAAIG,SAAO,IAAA,GACXjC,QAAQ,sBAAA,cAAC8B,IAAII,MAAI;MAACC,MAAAA;QACnB,sBAAA,cAACL,IAAIM,MAAI;MAACC,QAAQ;QAAC,IAAI;QAAG;;OACxB,sBAAA,cAACP,IAAIQ,OAAK;MACP,GAAGrC;MACJ+B,KAAKf;MACLpB;MACAO;MACAmC,QAAQ;QACNC,MAAM,CAACf,SAAAA;AACL,iBAAOA,KAAKd,MAAMA,KAAK8B,SAAShB,KAAKE;QACvC;MACF;MACAnB,YAAY;QACViB,MAAM,CAACA,SAAAA;AACL,gBAAMiB,MAAMjB,KAAKd,MAAMA,KAAKC;AAC5B,iBAAO;YACLD,MAAM;cACJgC,OAAOC,cAAcF,OAAOG,IAAIC,YAAYJ,GAAAA,CAAAA,GAAOK;YACrD;YACAC,SAAS;cACP,eAAelD,UAAU4B,SAASD,KAAKE,EAAE;YAC3C;UACF;QACF;MACF;MACAsB,UAAU1B;;;;;AAKpB;;;;AChGA,SAAS2B,WAAWC,qBAAqB;AACzC,OAAOC,sBAAsB;AAC7B,OAAOC,UAAkBC,aAAAA,YAAWC,UAAAA,SAAQC,gBAAgB;AAC5D,SAASC,yBAAyB;AAElC,SAA4BC,yBAAyB
|
|
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", "
|
|
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
7
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
__export
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-HSLMI22Q.mjs.map
|
|
@@ -10978,20 +10978,6 @@ var TidyTree_default = TidyTree;
|
|
|
10978
10978
|
import * as Schema from "effect/Schema";
|
|
10979
10979
|
import { Key, Obj, Type } from "@dxos/echo";
|
|
10980
10980
|
import { invariant } from "@dxos/invariant";
|
|
10981
|
-
function _define_property(obj, key, value) {
|
|
10982
|
-
if (key in obj) {
|
|
10983
|
-
Object.defineProperty(obj, key, {
|
|
10984
|
-
value,
|
|
10985
|
-
enumerable: true,
|
|
10986
|
-
configurable: true,
|
|
10987
|
-
writable: true
|
|
10988
|
-
});
|
|
10989
|
-
} else {
|
|
10990
|
-
obj[key] = value;
|
|
10991
|
-
}
|
|
10992
|
-
return obj;
|
|
10993
|
-
}
|
|
10994
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-explorer/src/components/Tree/types/tree.ts";
|
|
10995
10981
|
var TreeNodeType = Schema.Struct({
|
|
10996
10982
|
id: Key.ObjectId,
|
|
10997
10983
|
children: Schema.mutable(Schema.Array(Key.ObjectId)),
|
|
@@ -11011,244 +10997,6 @@ var TreeType = Schema.Struct({
|
|
|
11011
10997
|
typename: "dxos.org/type/Tree",
|
|
11012
10998
|
version: "0.1.0"
|
|
11013
10999
|
}));
|
|
11014
|
-
var Tree = class _Tree {
|
|
11015
|
-
get tree() {
|
|
11016
|
-
return this._tree;
|
|
11017
|
-
}
|
|
11018
|
-
// TODO(burdon): Make reactive.
|
|
11019
|
-
get size() {
|
|
11020
|
-
return Object.keys(this._tree.nodes).length;
|
|
11021
|
-
}
|
|
11022
|
-
get root() {
|
|
11023
|
-
return this.getNode(this._tree.root);
|
|
11024
|
-
}
|
|
11025
|
-
//
|
|
11026
|
-
// Traversal
|
|
11027
|
-
//
|
|
11028
|
-
/**
|
|
11029
|
-
* Recursively traverse the tree until the callback returns a value.
|
|
11030
|
-
*/
|
|
11031
|
-
tranverse(callback, root = this._tree.root, depth = 0) {
|
|
11032
|
-
const node = this._tree.nodes[root];
|
|
11033
|
-
const result = callback(node, depth);
|
|
11034
|
-
if (result !== void 0) {
|
|
11035
|
-
return result;
|
|
11036
|
-
}
|
|
11037
|
-
for (const childId of node.children) {
|
|
11038
|
-
const result2 = this.tranverse(callback, childId, depth + 1);
|
|
11039
|
-
if (result2 !== void 0) {
|
|
11040
|
-
return result2;
|
|
11041
|
-
}
|
|
11042
|
-
}
|
|
11043
|
-
}
|
|
11044
|
-
getNode(id) {
|
|
11045
|
-
const node = this._tree.nodes[id];
|
|
11046
|
-
invariant(node, void 0, {
|
|
11047
|
-
F: __dxlog_file,
|
|
11048
|
-
L: 98,
|
|
11049
|
-
S: this,
|
|
11050
|
-
A: [
|
|
11051
|
-
"node",
|
|
11052
|
-
""
|
|
11053
|
-
]
|
|
11054
|
-
});
|
|
11055
|
-
return node;
|
|
11056
|
-
}
|
|
11057
|
-
/**
|
|
11058
|
-
* Get the children of a node.
|
|
11059
|
-
*/
|
|
11060
|
-
getChildNodes(node) {
|
|
11061
|
-
return node.children.map((id) => this.getNode(id));
|
|
11062
|
-
}
|
|
11063
|
-
/**
|
|
11064
|
-
* Get the parent of a node.
|
|
11065
|
-
*/
|
|
11066
|
-
getParent(node) {
|
|
11067
|
-
const parent = this.tranverse((n) => {
|
|
11068
|
-
if (n.children.includes(node.id)) {
|
|
11069
|
-
return n;
|
|
11070
|
-
}
|
|
11071
|
-
});
|
|
11072
|
-
return parent ?? null;
|
|
11073
|
-
}
|
|
11074
|
-
/**
|
|
11075
|
-
* Get the next node in the tree.
|
|
11076
|
-
*/
|
|
11077
|
-
getNext(node, hierarchical = true) {
|
|
11078
|
-
if (hierarchical && node.children.length) {
|
|
11079
|
-
return this.getChildNodes(node)[0];
|
|
11080
|
-
} else {
|
|
11081
|
-
const parent = this.getParent(node);
|
|
11082
|
-
if (parent) {
|
|
11083
|
-
const idx = this.getChildNodes(parent).findIndex(({ id }) => id === node.id);
|
|
11084
|
-
if (idx < parent.children.length - 1) {
|
|
11085
|
-
return this.getNode(parent.children[idx + 1]);
|
|
11086
|
-
} else {
|
|
11087
|
-
return this.getNext(parent, false);
|
|
11088
|
-
}
|
|
11089
|
-
}
|
|
11090
|
-
}
|
|
11091
|
-
}
|
|
11092
|
-
/**
|
|
11093
|
-
* Get the previous node in the tree.
|
|
11094
|
-
*/
|
|
11095
|
-
getPrevious(node, hierarchical = true) {
|
|
11096
|
-
const parent = this.getParent(node);
|
|
11097
|
-
const idx = this.getChildNodes(parent).findIndex(({ id }) => id === node.id);
|
|
11098
|
-
if (idx === 0) {
|
|
11099
|
-
if (hierarchical) {
|
|
11100
|
-
return parent;
|
|
11101
|
-
}
|
|
11102
|
-
} else {
|
|
11103
|
-
const previous = this.getNode(parent.children[idx - 1]);
|
|
11104
|
-
if (hierarchical && previous.children.length) {
|
|
11105
|
-
return this.getLastDescendent(previous);
|
|
11106
|
-
}
|
|
11107
|
-
return previous;
|
|
11108
|
-
}
|
|
11109
|
-
}
|
|
11110
|
-
/**
|
|
11111
|
-
* Get the last descendent of a node.
|
|
11112
|
-
*/
|
|
11113
|
-
getLastDescendent(node) {
|
|
11114
|
-
const children = this.getChildNodes(node);
|
|
11115
|
-
const last = children.length ? children[children.length - 1] : void 0;
|
|
11116
|
-
if (last) {
|
|
11117
|
-
return this.getLastDescendent(last);
|
|
11118
|
-
}
|
|
11119
|
-
return node;
|
|
11120
|
-
}
|
|
11121
|
-
//
|
|
11122
|
-
// Mutations
|
|
11123
|
-
//
|
|
11124
|
-
/**
|
|
11125
|
-
* Clear tree.
|
|
11126
|
-
*/
|
|
11127
|
-
clear() {
|
|
11128
|
-
const root = this._tree.nodes[this._tree.root];
|
|
11129
|
-
root.children.length = 0;
|
|
11130
|
-
this._tree.nodes = {
|
|
11131
|
-
[root.id]: root
|
|
11132
|
-
};
|
|
11133
|
-
}
|
|
11134
|
-
/**
|
|
11135
|
-
* Add node.
|
|
11136
|
-
*/
|
|
11137
|
-
addNode(parent, node, index) {
|
|
11138
|
-
if (!node) {
|
|
11139
|
-
const id = Key.ObjectId.random();
|
|
11140
|
-
node = {
|
|
11141
|
-
id,
|
|
11142
|
-
children: [],
|
|
11143
|
-
data: {
|
|
11144
|
-
text: ""
|
|
11145
|
-
}
|
|
11146
|
-
};
|
|
11147
|
-
}
|
|
11148
|
-
this._tree.nodes[node.id] = node;
|
|
11149
|
-
parent.children.splice(index ?? parent.children.length, 0, node.id);
|
|
11150
|
-
return node;
|
|
11151
|
-
}
|
|
11152
|
-
/**
|
|
11153
|
-
* Delete node.
|
|
11154
|
-
*/
|
|
11155
|
-
deleteNode(parent, id) {
|
|
11156
|
-
const node = this._tree.nodes[id];
|
|
11157
|
-
if (!node) {
|
|
11158
|
-
return void 0;
|
|
11159
|
-
}
|
|
11160
|
-
delete this._tree.nodes[node.id];
|
|
11161
|
-
const idx = parent.children.findIndex((child) => child === id);
|
|
11162
|
-
if (idx !== -1) {
|
|
11163
|
-
parent.children.splice(idx, 1);
|
|
11164
|
-
}
|
|
11165
|
-
return node;
|
|
11166
|
-
}
|
|
11167
|
-
/**
|
|
11168
|
-
* Move child node.
|
|
11169
|
-
*/
|
|
11170
|
-
moveNode(node, from, to) {
|
|
11171
|
-
invariant(from >= 0 && from < node.children.length, void 0, {
|
|
11172
|
-
F: __dxlog_file,
|
|
11173
|
-
L: 228,
|
|
11174
|
-
S: this,
|
|
11175
|
-
A: [
|
|
11176
|
-
"from >= 0 && from < node.children.length",
|
|
11177
|
-
""
|
|
11178
|
-
]
|
|
11179
|
-
});
|
|
11180
|
-
invariant(to >= 0 && to < node.children.length, void 0, {
|
|
11181
|
-
F: __dxlog_file,
|
|
11182
|
-
L: 229,
|
|
11183
|
-
S: this,
|
|
11184
|
-
A: [
|
|
11185
|
-
"to >= 0 && to < node.children.length",
|
|
11186
|
-
""
|
|
11187
|
-
]
|
|
11188
|
-
});
|
|
11189
|
-
if (from === to) {
|
|
11190
|
-
return null;
|
|
11191
|
-
}
|
|
11192
|
-
const child = node.children[from];
|
|
11193
|
-
node.children.splice(from, 1);
|
|
11194
|
-
node.children.splice(to, 0, child);
|
|
11195
|
-
return this.getNode(child);
|
|
11196
|
-
}
|
|
11197
|
-
/**
|
|
11198
|
-
* Indent node.
|
|
11199
|
-
*/
|
|
11200
|
-
indentNode(node) {
|
|
11201
|
-
const parent = this.getParent(node);
|
|
11202
|
-
if (!parent) {
|
|
11203
|
-
return;
|
|
11204
|
-
}
|
|
11205
|
-
const idx = parent.children.findIndex((child) => child === node.id);
|
|
11206
|
-
if (idx < 1 || idx >= parent.children.length) {
|
|
11207
|
-
return;
|
|
11208
|
-
}
|
|
11209
|
-
const previous = this.getNode(parent.children[idx - 1]);
|
|
11210
|
-
parent.children.splice(idx, 1);
|
|
11211
|
-
previous.children.push(node.id);
|
|
11212
|
-
}
|
|
11213
|
-
/**
|
|
11214
|
-
* Unindent node.
|
|
11215
|
-
*/
|
|
11216
|
-
unindentNode(node) {
|
|
11217
|
-
const parent = this.getParent(node);
|
|
11218
|
-
if (!parent) {
|
|
11219
|
-
return;
|
|
11220
|
-
}
|
|
11221
|
-
const ancestor = this.getParent(parent);
|
|
11222
|
-
if (!ancestor) {
|
|
11223
|
-
return;
|
|
11224
|
-
}
|
|
11225
|
-
const nodeIdx = parent.children.findIndex((id) => id === node.id);
|
|
11226
|
-
const [_, ...rest] = parent.children.splice(nodeIdx, parent.children.length - nodeIdx);
|
|
11227
|
-
parent.children.splice(nodeIdx, parent.children.length - nodeIdx);
|
|
11228
|
-
const parentIdx = this.getChildNodes(ancestor).findIndex((n) => n.id === parent.id);
|
|
11229
|
-
ancestor.children.splice(parentIdx + 1, 0, node.id);
|
|
11230
|
-
node.children.push(...rest);
|
|
11231
|
-
}
|
|
11232
|
-
constructor(tree3) {
|
|
11233
|
-
_define_property(this, "_tree", void 0);
|
|
11234
|
-
this._tree = tree3 ?? _Tree.create();
|
|
11235
|
-
}
|
|
11236
|
-
};
|
|
11237
|
-
_define_property(Tree, "create", () => {
|
|
11238
|
-
const id = Key.ObjectId.random();
|
|
11239
|
-
return Obj.make(TreeType, {
|
|
11240
|
-
root: id,
|
|
11241
|
-
nodes: {
|
|
11242
|
-
[id]: {
|
|
11243
|
-
id,
|
|
11244
|
-
children: [],
|
|
11245
|
-
data: {
|
|
11246
|
-
text: ""
|
|
11247
|
-
}
|
|
11248
|
-
}
|
|
11249
|
-
}
|
|
11250
|
-
});
|
|
11251
|
-
});
|
|
11252
11000
|
|
|
11253
11001
|
// src/components/Tree/types/types.ts
|
|
11254
11002
|
var mapGraphToTreeData = (model, maxDepth = 8) => {
|
|
@@ -11276,7 +11024,7 @@ var renderers = /* @__PURE__ */ new Map([
|
|
|
11276
11024
|
HierarchicalEdgeBundling_default
|
|
11277
11025
|
]
|
|
11278
11026
|
]);
|
|
11279
|
-
var
|
|
11027
|
+
var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
|
|
11280
11028
|
var _effect = _useSignals3();
|
|
11281
11029
|
try {
|
|
11282
11030
|
const [model] = useAsyncState(async () => space ? new SpaceGraphModel().open(space) : void 0, [
|
|
@@ -11331,13 +11079,13 @@ var Tree2 = ({ space, selected, variant = "tidy", onNodeClick }) => {
|
|
|
11331
11079
|
|
|
11332
11080
|
// src/components/index.ts
|
|
11333
11081
|
import { lazy } from "react";
|
|
11334
|
-
var ExplorerContainer = lazy(() => import("./ExplorerContainer-
|
|
11082
|
+
var ExplorerContainer = lazy(() => import("./ExplorerContainer-N3S5KSUX.mjs"));
|
|
11335
11083
|
|
|
11336
11084
|
export {
|
|
11337
11085
|
Chart,
|
|
11338
11086
|
Globe,
|
|
11339
11087
|
defaultTreeLayoutSlots,
|
|
11340
|
-
|
|
11088
|
+
Tree,
|
|
11341
11089
|
ExplorerContainer
|
|
11342
11090
|
};
|
|
11343
|
-
//# sourceMappingURL=chunk-
|
|
11091
|
+
//# sourceMappingURL=chunk-NPIP4VEH.mjs.map
|