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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/lib/browser/ExplorerContainer-BFAWRIAJ.mjs +45 -0
  2. package/dist/lib/browser/ExplorerContainer-BFAWRIAJ.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-ARBGXQFH.mjs → chunk-AGZAGILW.mjs} +135 -148
  4. package/dist/lib/{node-esm/chunk-NPIP4VEH.mjs.map → browser/chunk-AGZAGILW.mjs.map} +3 -3
  5. package/dist/lib/browser/{chunk-2MKBRIUT.mjs → chunk-BZMTFAP3.mjs} +8 -5
  6. package/dist/lib/browser/chunk-BZMTFAP3.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-DXORXPUJ.mjs +83 -0
  8. package/dist/lib/browser/chunk-DXORXPUJ.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-MGBT2ZFU.mjs +177 -0
  10. package/dist/lib/browser/chunk-MGBT2ZFU.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-UBHZGWZQ.mjs → chunk-YNQF4CPY.mjs} +1 -1
  12. package/dist/lib/browser/chunk-YNQF4CPY.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +46 -65
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/meta.mjs +1 -1
  17. package/dist/lib/browser/react-surface-24INQLMB.mjs +35 -0
  18. package/dist/lib/browser/react-surface-24INQLMB.mjs.map +7 -0
  19. package/dist/lib/browser/types/index.mjs +1 -2
  20. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs +46 -0
  21. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs.map +7 -0
  22. package/dist/lib/node-esm/{chunk-UXZM5VJB.mjs → chunk-DK77RB6M.mjs} +1 -1
  23. package/dist/lib/node-esm/chunk-DK77RB6M.mjs.map +7 -0
  24. package/dist/lib/node-esm/{chunk-3ODK27PU.mjs → chunk-IPIGIQHX.mjs} +8 -5
  25. package/dist/lib/node-esm/chunk-IPIGIQHX.mjs.map +7 -0
  26. package/dist/lib/node-esm/{chunk-NPIP4VEH.mjs → chunk-QLMTN2XI.mjs} +135 -148
  27. package/dist/lib/{browser/chunk-ARBGXQFH.mjs.map → node-esm/chunk-QLMTN2XI.mjs.map} +3 -3
  28. package/dist/lib/node-esm/chunk-UCH3WYRD.mjs +84 -0
  29. package/dist/lib/node-esm/chunk-UCH3WYRD.mjs.map +7 -0
  30. package/dist/lib/node-esm/chunk-YWJBDETV.mjs +179 -0
  31. package/dist/lib/node-esm/chunk-YWJBDETV.mjs.map +7 -0
  32. package/dist/lib/node-esm/index.mjs +46 -65
  33. package/dist/lib/node-esm/index.mjs.map +4 -4
  34. package/dist/lib/node-esm/meta.json +1 -1
  35. package/dist/lib/node-esm/meta.mjs +1 -1
  36. package/dist/lib/node-esm/react-surface-F465WXH7.mjs +36 -0
  37. package/dist/lib/node-esm/react-surface-F465WXH7.mjs.map +7 -0
  38. package/dist/lib/node-esm/types/index.mjs +1 -2
  39. package/dist/types/src/ExplorerPlugin.d.ts +2 -1
  40. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  41. package/dist/types/src/capabilities/index.d.ts +1 -2
  42. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  43. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  44. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  45. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  46. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  47. package/dist/types/src/components/ExplorerContainer.d.ts +3 -5
  48. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  49. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -1
  50. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
  52. package/dist/types/src/components/Graph/adapter.d.ts +1 -1
  53. package/dist/types/src/components/Graph/adapter.d.ts.map +1 -1
  54. package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
  55. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  56. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  57. package/dist/types/src/components/Tree/testing/generator.d.ts.map +1 -1
  58. package/dist/types/src/components/Tree/types/tree.d.ts +17 -15
  59. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
  60. package/dist/types/src/components/Tree/types/types.d.ts +1 -1
  61. package/dist/types/src/components/Tree/types/types.d.ts.map +1 -1
  62. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  63. package/dist/types/src/meta.d.ts +2 -2
  64. package/dist/types/src/meta.d.ts.map +1 -1
  65. package/dist/types/src/translations.d.ts +17 -10
  66. package/dist/types/src/translations.d.ts.map +1 -1
  67. package/dist/types/src/types/ExplorerAction.d.ts +1 -18
  68. package/dist/types/src/types/ExplorerAction.d.ts.map +1 -1
  69. package/dist/types/src/types/Graph.d.ts +19 -22
  70. package/dist/types/src/types/Graph.d.ts.map +1 -1
  71. package/dist/types/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +52 -48
  73. package/src/ExplorerPlugin.tsx +27 -52
  74. package/src/capabilities/index.ts +1 -4
  75. package/src/capabilities/react-surface/index.ts +7 -0
  76. package/src/capabilities/react-surface/react-surface.tsx +30 -0
  77. package/src/components/Chart/Chart.stories.tsx +2 -2
  78. package/src/components/ExplorerContainer.tsx +6 -8
  79. package/src/components/Globe/Globe.stories.tsx +2 -2
  80. package/src/components/Graph/D3ForceGraph.stories.tsx +12 -7
  81. package/src/components/Graph/D3ForceGraph.tsx +2 -2
  82. package/src/components/Graph/ForceGraph.stories.tsx +12 -7
  83. package/src/components/Graph/adapter.ts +14 -8
  84. package/src/components/Graph/testing.ts +6 -3
  85. package/src/components/Tree/Tree.stories.tsx +3 -2
  86. package/src/components/Tree/Tree.tsx +8 -3
  87. package/src/components/Tree/testing/generator.ts +4 -2
  88. package/src/components/Tree/types/tree.test.ts +3 -1
  89. package/src/components/Tree/types/tree.ts +39 -18
  90. package/src/components/Tree/types/types.ts +1 -1
  91. package/src/hooks/useGraphModel.ts +6 -4
  92. package/src/meta.ts +2 -2
  93. package/src/translations.ts +3 -1
  94. package/src/types/ExplorerAction.ts +10 -19
  95. package/src/types/Graph.ts +38 -22
  96. package/dist/lib/browser/ExplorerContainer-NOLLVUTE.mjs +0 -50
  97. package/dist/lib/browser/ExplorerContainer-NOLLVUTE.mjs.map +0 -7
  98. package/dist/lib/browser/chunk-2MKBRIUT.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-6BVXZQPP.mjs +0 -188
  100. package/dist/lib/browser/chunk-6BVXZQPP.mjs.map +0 -7
  101. package/dist/lib/browser/chunk-JDSUIUNR.mjs +0 -80
  102. package/dist/lib/browser/chunk-JDSUIUNR.mjs.map +0 -7
  103. package/dist/lib/browser/chunk-UBHZGWZQ.mjs.map +0 -7
  104. package/dist/lib/browser/intent-resolver-YS5LZC3A.mjs +0 -31
  105. package/dist/lib/browser/intent-resolver-YS5LZC3A.mjs.map +0 -7
  106. package/dist/lib/browser/react-surface-BVTCOVLK.mjs +0 -35
  107. package/dist/lib/browser/react-surface-BVTCOVLK.mjs.map +0 -7
  108. package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs +0 -51
  109. package/dist/lib/node-esm/ExplorerContainer-N3S5KSUX.mjs.map +0 -7
  110. package/dist/lib/node-esm/chunk-3ODK27PU.mjs.map +0 -7
  111. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs +0 -190
  112. package/dist/lib/node-esm/chunk-CRSVAZNA.mjs.map +0 -7
  113. package/dist/lib/node-esm/chunk-MS72BATS.mjs +0 -81
  114. package/dist/lib/node-esm/chunk-MS72BATS.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-UXZM5VJB.mjs.map +0 -7
  116. package/dist/lib/node-esm/intent-resolver-VCEC67WX.mjs +0 -32
  117. package/dist/lib/node-esm/intent-resolver-VCEC67WX.mjs.map +0 -7
  118. package/dist/lib/node-esm/react-surface-4HFEX52O.mjs +0 -36
  119. package/dist/lib/node-esm/react-surface-4HFEX52O.mjs.map +0 -7
  120. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  121. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  122. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  123. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  124. package/src/capabilities/intent-resolver.ts +0 -21
  125. package/src/capabilities/react-surface.tsx +0 -27
@@ -1,80 +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 { TypenameAnnotationId, View } from "@dxos/schema";
17
- var EXPLORER_ACTION = `${meta.id}/action`;
18
- var GraphProps = Schema.Struct({
19
- name: Schema.optional(Schema.String),
20
- // TODO(wittjosiah): This should be a query input instead.
21
- typename: Schema.String.annotations({
22
- [TypenameAnnotationId]: [
23
- "used-static",
24
- "dynamic"
25
- ],
26
- title: "Select graph record type"
27
- })
28
- });
29
- var CreateGraph = class extends Schema.TaggedClass()(`${EXPLORER_ACTION}/create-graph`, {
30
- input: Schema.Struct({
31
- space: SpaceSchema
32
- }).pipe(Schema.extend(GraphProps)),
33
- output: Schema.Struct({
34
- object: View.View
35
- })
36
- }) {
37
- };
38
-
39
- // src/types/Graph.ts
40
- var Graph_exports = {};
41
- __export(Graph_exports, {
42
- Graph: () => Graph,
43
- make: () => make,
44
- makeView: () => makeView
45
- });
46
- import * as Schema2 from "effect/Schema";
47
- import { Filter, Obj, Query, QueryAST, Type } from "@dxos/echo";
48
- import { LabelAnnotation, ViewAnnotation } from "@dxos/echo/internal";
49
- import { View as View2 } from "@dxos/schema";
50
- var Graph = Schema2.Struct({
51
- name: Schema2.optional(Schema2.String),
52
- query: Schema2.Struct({
53
- raw: Schema2.optional(Schema2.String),
54
- ast: QueryAST.Query
55
- }).pipe(Schema2.mutable)
56
- }).pipe(Type.Obj({
57
- typename: "dxos.org/type/Graph",
58
- version: "0.1.0"
59
- }), LabelAnnotation.set([
60
- "name"
61
- ]), ViewAnnotation.set(true));
62
- var make = (props = {
63
- query: {
64
- raw: "",
65
- ast: Query.select(Filter.nothing()).ast
66
- }
67
- }) => Obj.make(Graph, props);
68
- var makeView = async ({ presentation, ...props }) => {
69
- const graph = make(presentation);
70
- return View2.makeFromSpace({
71
- ...props,
72
- presentation: graph
73
- });
74
- };
75
-
76
- export {
77
- ExplorerAction_exports,
78
- Graph_exports
79
- };
80
- //# sourceMappingURL=chunk-JDSUIUNR.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 { TypenameAnnotationId, View } 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 // TODO(wittjosiah): This should be a query input instead.\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: View.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 { View } 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<View.MakeFromSpaceProps, 'presentation'> & {\n presentation?: Omit<Obj.MakeProps<typeof Graph>, 'name'>;\n};\n\n/**\n * Make a graph as a view of a data set.\n */\n// TODO(burdon): Move to @dxos/schema.\nexport const makeView = async ({ presentation, ...props }: MakeViewProps) => {\n const graph = make(presentation);\n return View.makeFromSpace({ ...props, presentation: graph });\n};\n"],
5
- "mappings": ";;;;;;;;AAAA;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,mBAAmB;AAC5B,SAASC,sBAAsBC,YAAY;AAI3C,IAAMC,kBAAkB,GAAGC,KAAKC,EAAE;AAE3B,IAAMC,aAAoBC,cAAO;EACtCC,MAAaC,gBAAgBC,aAAM;;EAEnCC,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,KAAKA;EACf,CAAA;AACF,CAAA,EAAA;AAAI;;;AC7BJ;;;;;;AAIA,YAAYC,aAAY;AAExB,SAASC,QAAQC,KAAKC,OAAOC,UAAUC,YAAY;AACnD,SAASC,iBAAiBC,sBAAsB;AAChD,SAASC,QAAAA,aAAY;AAEd,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;AAUd,IAAMI,WAAW,OAAO,EAAEC,cAAc,GAAGL,MAAAA,MAAsB;AACtE,QAAMM,QAAQP,KAAKM,YAAAA;AACnB,SAAOE,MAAKC,cAAc;IAAE,GAAGR;IAAOK,cAAcC;EAAM,CAAA;AAC5D;",
6
- "names": ["Schema", "SpaceSchema", "TypenameAnnotationId", "View", "EXPLORER_ACTION", "meta", "id", "GraphProps", "Struct", "name", "optional", "String", "typename", "annotations", "TypenameAnnotationId", "title", "CreateGraph", "TaggedClass", "input", "space", "SpaceSchema", "pipe", "extend", "output", "object", "View", "Schema", "Filter", "Obj", "Query", "QueryAST", "Type", "LabelAnnotation", "ViewAnnotation", "View", "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", "View", "makeFromSpace"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/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,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "tags", "screenshots"]
7
- }
@@ -1,31 +0,0 @@
1
- import {
2
- ExplorerAction_exports,
3
- Graph_exports
4
- } from "./chunk-JDSUIUNR.mjs";
5
- import "./chunk-UBHZGWZQ.mjs";
6
- import "./chunk-J5LGTIGS.mjs";
7
-
8
- // src/capabilities/intent-resolver.ts
9
- import { Capabilities, contributes, createResolver } from "@dxos/app-framework";
10
- import { ClientCapabilities } from "@dxos/plugin-client";
11
- var intent_resolver_default = ((context) => contributes(Capabilities.IntentResolver, createResolver({
12
- intent: ExplorerAction_exports.CreateGraph,
13
- resolve: async ({ space, name, typename }) => {
14
- const client = context.getCapability(ClientCapabilities.Client);
15
- const { view } = await Graph_exports.makeView({
16
- client,
17
- space,
18
- name,
19
- typename
20
- });
21
- return {
22
- data: {
23
- object: view
24
- }
25
- };
26
- }
27
- })));
28
- export {
29
- intent_resolver_default as default
30
- };
31
- //# sourceMappingURL=intent-resolver-YS5LZC3A.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, type PluginContext, contributes, createResolver } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { ExplorerAction, Graph } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: ExplorerAction.CreateGraph,\n resolve: async ({ space, name, typename }) => {\n const client = context.getCapability(ClientCapabilities.Client);\n const { view } = await Graph.makeView({ client, space, name, typename });\n return { data: { object: view } };\n },\n }),\n );\n"],
5
- "mappings": ";;;;;;;;AAIA,SAASA,cAAkCC,aAAaC,sBAAsB;AAC9E,SAASC,0BAA0B;AAInC,IAAA,2BAAe,CAACC,YACdC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,uBAAeC;EACvBC,SAAS,OAAO,EAAEC,OAAOC,MAAMC,SAAQ,MAAE;AACvC,UAAMC,SAASZ,QAAQa,cAAcC,mBAAmBC,MAAM;AAC9D,UAAM,EAAEC,KAAI,IAAK,MAAMC,cAAMC,SAAS;MAAEN;MAAQH;MAAOC;MAAMC;IAAS,CAAA;AACtE,WAAO;MAAEQ,MAAM;QAAEC,QAAQJ;MAAK;IAAE;EAClC;AACF,CAAA,CAAA;",
6
- "names": ["Capabilities", "contributes", "createResolver", "ClientCapabilities", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "ExplorerAction", "CreateGraph", "resolve", "space", "name", "typename", "client", "getCapability", "ClientCapabilities", "Client", "view", "Graph", "makeView", "data", "object"]
7
- }
@@ -1,35 +0,0 @@
1
- import {
2
- ExplorerContainer
3
- } from "./chunk-ARBGXQFH.mjs";
4
- import "./chunk-6BVXZQPP.mjs";
5
- import {
6
- Graph_exports
7
- } from "./chunk-JDSUIUNR.mjs";
8
- import {
9
- meta
10
- } from "./chunk-UBHZGWZQ.mjs";
11
- import "./chunk-J5LGTIGS.mjs";
12
-
13
- // src/capabilities/react-surface.tsx
14
- import React from "react";
15
- import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
16
- import { Obj } from "@dxos/echo";
17
- import { View } from "@dxos/schema";
18
- var react_surface_default = (() => contributes(Capabilities.ReactSurface, createSurface({
19
- id: `${meta.id}/article`,
20
- role: [
21
- "article",
22
- "section"
23
- ],
24
- filter: (data) => Obj.instanceOf(View.View, data.subject) && Obj.instanceOf(Graph_exports.Graph, data.subject.presentation.target),
25
- component: ({ data, role }) => {
26
- return /* @__PURE__ */ React.createElement(ExplorerContainer, {
27
- view: data.subject,
28
- role
29
- });
30
- }
31
- })));
32
- export {
33
- react_surface_default as default
34
- };
35
- //# sourceMappingURL=react-surface-BVTCOVLK.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { View } from '@dxos/schema';\n\nimport { ExplorerContainer } from '../components';\nimport { meta } from '../meta';\nimport { Graph } from '../types';\n\nexport default () =>\n contributes(\n Capabilities.ReactSurface,\n createSurface({\n id: `${meta.id}/article`,\n role: ['article', 'section'],\n filter: (data): data is { subject: View.View } =>\n Obj.instanceOf(View.View, data.subject) && Obj.instanceOf(Graph.Graph, data.subject.presentation.target),\n component: ({ data, role }) => {\n return <ExplorerContainer view={data.subject} role={role} />;\n },\n }),\n );\n"],
5
- "mappings": ";;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,WAAW;AACpB,SAASC,YAAY;AAMrB,IAAA,yBAAe,MACbC,YACEC,aAAaC,cACbC,cAAc;EACZC,IAAI,GAAGC,KAAKD,EAAE;EACdE,MAAM;IAAC;IAAW;;EAClBC,QAAQ,CAACC,SACPC,IAAIC,WAAWC,KAAKA,MAAMH,KAAKI,OAAO,KAAKH,IAAIC,WAAWG,cAAMA,OAAOL,KAAKI,QAAQE,aAAaC,MAAM;EACzGC,WAAW,CAAC,EAAER,MAAMF,KAAI,MAAE;AACxB,WAAO,sBAAA,cAACW,mBAAAA;MAAkBC,MAAMV,KAAKI;MAASN;;EAChD;AACF,CAAA,CAAA;",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "Obj", "View", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "View", "subject", "Graph", "presentation", "target", "component", "ExplorerContainer", "view"]
7
- }
@@ -1,51 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- useGraphModel
4
- } from "./chunk-3ODK27PU.mjs";
5
- import {
6
- D3ForceGraph
7
- } from "./chunk-CRSVAZNA.mjs";
8
- import "./chunk-HSLMI22Q.mjs";
9
-
10
- // src/components/ExplorerContainer.tsx
11
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
12
- import React, { useCallback, useMemo, useState } from "react";
13
- import { QueryBuilder } from "@dxos/echo-query";
14
- import { useGlobalSearch } from "@dxos/plugin-search";
15
- import { getSpace } from "@dxos/react-client/echo";
16
- import { Toolbar } from "@dxos/react-ui";
17
- import { QueryEditor } from "@dxos/react-ui-components";
18
- import { StackItem } from "@dxos/react-ui-stack";
19
- var ExplorerContainer = ({ role, view }) => {
20
- var _effect = _useSignals();
21
- try {
22
- const space = getSpace(view);
23
- const [filter, setFilter] = useState();
24
- const model = useGraphModel(space, filter);
25
- const { match } = useGlobalSearch();
26
- const builder = useMemo(() => new QueryBuilder(), []);
27
- const handleChange = useCallback((value) => {
28
- setFilter(builder.build(value).filter);
29
- }, []);
30
- const showToolbar = role === "article";
31
- if (!space || !model) {
32
- return null;
33
- }
34
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
35
- toolbar: showToolbar
36
- }, showToolbar && /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(QueryEditor, {
37
- db: space.db,
38
- onChange: handleChange
39
- })), /* @__PURE__ */ React.createElement(D3ForceGraph, {
40
- model,
41
- match
42
- }));
43
- } finally {
44
- _effect.f();
45
- }
46
- };
47
- var ExplorerContainer_default = ExplorerContainer;
48
- export {
49
- ExplorerContainer_default as default
50
- };
51
- //# sourceMappingURL=ExplorerContainer-N3S5KSUX.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 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
- }
@@ -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,190 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
-
3
- // src/components/Graph/D3ForceGraph.tsx
4
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
5
- import React, { useCallback, useEffect, useMemo, useRef } from "react";
6
- import { Obj } from "@dxos/echo";
7
- import { SelectionModel } from "@dxos/graph";
8
- import { GraphForceProjector, SVG } from "@dxos/react-ui-graph";
9
- import { getHashStyles } from "@dxos/react-ui-theme";
10
- import "@dxos/react-ui-graph/styles/graph.css";
11
- var D3ForceGraph = ({ classNames, model, selection: _selection, grid, ...props }) => {
12
- var _effect = _useSignals();
13
- try {
14
- const context = useRef(null);
15
- const projector = useMemo(() => {
16
- if (context.current) {
17
- return new GraphForceProjector(context.current, {
18
- attributes: {
19
- linkForce: (edge) => {
20
- return edge.data?.object?.active !== false;
21
- }
22
- },
23
- forces: {
24
- point: {
25
- strength: 0.01
26
- }
27
- }
28
- });
29
- }
30
- }, [
31
- context.current
32
- ]);
33
- const graph = useRef(null);
34
- const selection = useMemo(() => _selection ?? new SelectionModel(), [
35
- _selection
36
- ]);
37
- useEffect(() => graph.current?.repaint(), [
38
- selection.selected.value
39
- ]);
40
- const handleSelect = useCallback((node) => {
41
- if (selection.contains(node.id)) {
42
- selection.remove(node.id);
43
- } else {
44
- selection.add(node.id);
45
- }
46
- }, [
47
- selection
48
- ]);
49
- return /* @__PURE__ */ React.createElement(SVG.Root, {
50
- ref: context,
51
- classNames
52
- }, /* @__PURE__ */ React.createElement(SVG.Markers, null), grid && /* @__PURE__ */ React.createElement(SVG.Grid, {
53
- axis: true
54
- }), /* @__PURE__ */ React.createElement(SVG.Zoom, {
55
- extent: [
56
- 1 / 2,
57
- 2
58
- ]
59
- }, /* @__PURE__ */ React.createElement(SVG.Graph, {
60
- ...props,
61
- ref: graph,
62
- model,
63
- projector,
64
- labels: {
65
- text: (node) => {
66
- return node.data?.data.label ?? node.id;
67
- }
68
- },
69
- attributes: {
70
- node: (node) => {
71
- const obj = node.data?.data.object;
72
- return {
73
- data: {
74
- color: getHashStyles(obj && Obj.getTypename(obj))?.hue
75
- },
76
- classes: {
77
- "dx-selected": selection.contains(node.id)
78
- }
79
- };
80
- }
81
- },
82
- onSelect: handleSelect
83
- })));
84
- } finally {
85
- _effect.f();
86
- }
87
- };
88
-
89
- // src/components/Graph/ForceGraph.tsx
90
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
91
- import { forceLink, forceManyBody } from "d3";
92
- import NativeForceGraph from "force-graph";
93
- import React2, { useEffect as useEffect2, useRef as useRef2, useState } from "react";
94
- import { useResizeDetector } from "react-resize-detector";
95
- import { filterObjectsSync } from "@dxos/plugin-search";
96
-
97
- // src/components/Graph/adapter.ts
98
- var GraphAdapter = class {
99
- graph;
100
- _nodes = [];
101
- _links = [];
102
- constructor(graph) {
103
- this.graph = graph;
104
- this._nodes = graph.nodes.map((node) => ({
105
- id: node.id,
106
- type: node.type,
107
- data: node.data
108
- }));
109
- this._links = graph.edges.map((edge) => ({
110
- type: edge.type,
111
- source: edge.source,
112
- target: edge.target,
113
- data: edge.data
114
- }));
115
- }
116
- get nodes() {
117
- return this._nodes;
118
- }
119
- get links() {
120
- return this._links;
121
- }
122
- };
123
-
124
- // src/components/Graph/ForceGraph.tsx
125
- var ForceGraph = ({ model, match }) => {
126
- var _effect = _useSignals2();
127
- try {
128
- const { ref, width, height } = useResizeDetector({
129
- refreshRate: 200
130
- });
131
- const rootRef = useRef2(null);
132
- const forceGraph = useRef2(null);
133
- const filteredRef = useRef2([]);
134
- filteredRef.current = filterObjectsSync(model?.objects ?? [], match);
135
- const [data, setData] = useState();
136
- useEffect2(() => {
137
- return model?.subscribe((model2) => {
138
- setData(new GraphAdapter(model2.graph));
139
- });
140
- }, [
141
- model
142
- ]);
143
- useEffect2(() => {
144
- if (rootRef.current) {
145
- 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);
146
- }
147
- return () => {
148
- forceGraph.current?.pauseAnimation().graphData({
149
- nodes: [],
150
- links: []
151
- });
152
- forceGraph.current = null;
153
- };
154
- }, []);
155
- useEffect2(() => {
156
- if (!data || !width || !height || !forceGraph.current) {
157
- return;
158
- }
159
- forceGraph.current.pauseAnimation().width(width).height(height).onEngineStop(() => {
160
- handleZoomToFit();
161
- }).onNodeClick((node) => {
162
- forceGraph.current?.emitParticle(node);
163
- }).d3Force("link", forceLink().distance(160).strength(0.5)).d3Force("charge", forceManyBody().strength(-30)).graphData(data).warmupTicks(100).cooldownTime(1e3).resumeAnimation();
164
- }, [
165
- data,
166
- width,
167
- height,
168
- forceGraph.current
169
- ]);
170
- const handleZoomToFit = () => {
171
- forceGraph.current?.zoomToFit(400, 40);
172
- };
173
- return /* @__PURE__ */ React2.createElement("div", {
174
- ref,
175
- className: "relative grow",
176
- onClick: handleZoomToFit
177
- }, /* @__PURE__ */ React2.createElement("div", {
178
- ref: rootRef,
179
- className: "absolute inset-0"
180
- }));
181
- } finally {
182
- _effect.f();
183
- }
184
- };
185
-
186
- export {
187
- D3ForceGraph,
188
- ForceGraph
189
- };
190
- //# sourceMappingURL=chunk-CRSVAZNA.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,81 +0,0 @@
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 Schema from "effect/Schema";
16
- import { SpaceSchema } from "@dxos/react-client/echo";
17
- import { TypenameAnnotationId, View } from "@dxos/schema";
18
- var EXPLORER_ACTION = `${meta.id}/action`;
19
- var GraphProps = Schema.Struct({
20
- name: Schema.optional(Schema.String),
21
- // TODO(wittjosiah): This should be a query input instead.
22
- typename: Schema.String.annotations({
23
- [TypenameAnnotationId]: [
24
- "used-static",
25
- "dynamic"
26
- ],
27
- title: "Select graph record type"
28
- })
29
- });
30
- var CreateGraph = class extends Schema.TaggedClass()(`${EXPLORER_ACTION}/create-graph`, {
31
- input: Schema.Struct({
32
- space: SpaceSchema
33
- }).pipe(Schema.extend(GraphProps)),
34
- output: Schema.Struct({
35
- object: View.View
36
- })
37
- }) {
38
- };
39
-
40
- // src/types/Graph.ts
41
- var Graph_exports = {};
42
- __export(Graph_exports, {
43
- Graph: () => Graph,
44
- make: () => make,
45
- makeView: () => makeView
46
- });
47
- import * as Schema2 from "effect/Schema";
48
- import { Filter, Obj, Query, QueryAST, Type } from "@dxos/echo";
49
- import { LabelAnnotation, ViewAnnotation } from "@dxos/echo/internal";
50
- import { View as View2 } from "@dxos/schema";
51
- var Graph = Schema2.Struct({
52
- name: Schema2.optional(Schema2.String),
53
- query: Schema2.Struct({
54
- raw: Schema2.optional(Schema2.String),
55
- ast: QueryAST.Query
56
- }).pipe(Schema2.mutable)
57
- }).pipe(Type.Obj({
58
- typename: "dxos.org/type/Graph",
59
- version: "0.1.0"
60
- }), LabelAnnotation.set([
61
- "name"
62
- ]), ViewAnnotation.set(true));
63
- var make = (props = {
64
- query: {
65
- raw: "",
66
- ast: Query.select(Filter.nothing()).ast
67
- }
68
- }) => Obj.make(Graph, props);
69
- var makeView = async ({ presentation, ...props }) => {
70
- const graph = make(presentation);
71
- return View2.makeFromSpace({
72
- ...props,
73
- presentation: graph
74
- });
75
- };
76
-
77
- export {
78
- ExplorerAction_exports,
79
- Graph_exports
80
- };
81
- //# sourceMappingURL=chunk-MS72BATS.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 { TypenameAnnotationId, View } 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 // TODO(wittjosiah): This should be a query input instead.\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: View.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 { View } 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<View.MakeFromSpaceProps, 'presentation'> & {\n presentation?: Omit<Obj.MakeProps<typeof Graph>, 'name'>;\n};\n\n/**\n * Make a graph as a view of a data set.\n */\n// TODO(burdon): Move to @dxos/schema.\nexport const makeView = async ({ presentation, ...props }: MakeViewProps) => {\n const graph = make(presentation);\n return View.makeFromSpace({ ...props, presentation: graph });\n};\n"],
5
- "mappings": ";;;;;;;;;AAAA;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,mBAAmB;AAC5B,SAASC,sBAAsBC,YAAY;AAI3C,IAAMC,kBAAkB,GAAGC,KAAKC,EAAE;AAE3B,IAAMC,aAAoBC,cAAO;EACtCC,MAAaC,gBAAgBC,aAAM;;EAEnCC,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,KAAKA;EACf,CAAA;AACF,CAAA,EAAA;AAAI;;;AC7BJ;;;;;;AAIA,YAAYC,aAAY;AAExB,SAASC,QAAQC,KAAKC,OAAOC,UAAUC,YAAY;AACnD,SAASC,iBAAiBC,sBAAsB;AAChD,SAASC,QAAAA,aAAY;AAEd,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;AAUd,IAAMI,WAAW,OAAO,EAAEC,cAAc,GAAGL,MAAAA,MAAsB;AACtE,QAAMM,QAAQP,KAAKM,YAAAA;AACnB,SAAOE,MAAKC,cAAc;IAAE,GAAGR;IAAOK,cAAcC;EAAM,CAAA;AAC5D;",
6
- "names": ["Schema", "SpaceSchema", "TypenameAnnotationId", "View", "EXPLORER_ACTION", "meta", "id", "GraphProps", "Struct", "name", "optional", "String", "typename", "annotations", "TypenameAnnotationId", "title", "CreateGraph", "TaggedClass", "input", "space", "SpaceSchema", "pipe", "extend", "output", "object", "View", "Schema", "Filter", "Obj", "Query", "QueryAST", "Type", "LabelAnnotation", "ViewAnnotation", "View", "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", "View", "makeFromSpace"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/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,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "tags", "screenshots"]
7
- }
@@ -1,32 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- ExplorerAction_exports,
4
- Graph_exports
5
- } from "./chunk-MS72BATS.mjs";
6
- import "./chunk-UXZM5VJB.mjs";
7
- import "./chunk-HSLMI22Q.mjs";
8
-
9
- // src/capabilities/intent-resolver.ts
10
- import { Capabilities, contributes, createResolver } from "@dxos/app-framework";
11
- import { ClientCapabilities } from "@dxos/plugin-client";
12
- var intent_resolver_default = ((context) => contributes(Capabilities.IntentResolver, createResolver({
13
- intent: ExplorerAction_exports.CreateGraph,
14
- resolve: async ({ space, name, typename }) => {
15
- const client = context.getCapability(ClientCapabilities.Client);
16
- const { view } = await Graph_exports.makeView({
17
- client,
18
- space,
19
- name,
20
- typename
21
- });
22
- return {
23
- data: {
24
- object: view
25
- }
26
- };
27
- }
28
- })));
29
- export {
30
- intent_resolver_default as default
31
- };
32
- //# sourceMappingURL=intent-resolver-VCEC67WX.mjs.map