@dxos/plugin-explorer 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7

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 (92) hide show
  1. package/dist/lib/browser/{ExplorerContainer-BFAWRIAJ.mjs → ExplorerContainer-JBCVWH3M.mjs} +19 -16
  2. package/dist/lib/browser/ExplorerContainer-JBCVWH3M.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-HIFLWHXR.mjs → chunk-3Y7INKYN.mjs} +6 -21
  4. package/dist/lib/browser/chunk-3Y7INKYN.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-YNQF4CPY.mjs → chunk-LSUP47BZ.mjs} +2 -2
  6. package/dist/lib/browser/{chunk-YNQF4CPY.mjs.map → chunk-LSUP47BZ.mjs.map} +1 -1
  7. package/dist/lib/{node-esm/chunk-QLMTN2XI.mjs → browser/chunk-WX7QIZMF.mjs} +218 -18
  8. package/dist/lib/browser/{chunk-AGZAGILW.mjs.map → chunk-WX7QIZMF.mjs.map} +4 -4
  9. package/dist/lib/browser/index.mjs +18 -22
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/meta.mjs +1 -1
  13. package/dist/lib/browser/{react-surface-RWVHQL3J.mjs → react-surface-FWNW2HFX.mjs} +13 -10
  14. package/dist/lib/browser/react-surface-FWNW2HFX.mjs.map +7 -0
  15. package/dist/lib/browser/types/index.mjs +1 -1
  16. package/dist/lib/node-esm/{ExplorerContainer-YQ2KKBVS.mjs → ExplorerContainer-5JTSMOCL.mjs} +19 -16
  17. package/dist/lib/node-esm/ExplorerContainer-5JTSMOCL.mjs.map +7 -0
  18. package/dist/lib/{browser/chunk-AGZAGILW.mjs → node-esm/chunk-3Z2WBI3N.mjs} +220 -16
  19. package/dist/lib/node-esm/{chunk-QLMTN2XI.mjs.map → chunk-3Z2WBI3N.mjs.map} +4 -4
  20. package/dist/lib/node-esm/{chunk-3OE6TBJI.mjs → chunk-6OG6G75N.mjs} +6 -21
  21. package/dist/lib/node-esm/chunk-6OG6G75N.mjs.map +7 -0
  22. package/dist/lib/node-esm/{chunk-DK77RB6M.mjs → chunk-EN3JZNEY.mjs} +2 -2
  23. package/dist/lib/node-esm/{chunk-DK77RB6M.mjs.map → chunk-EN3JZNEY.mjs.map} +1 -1
  24. package/dist/lib/node-esm/index.mjs +18 -22
  25. package/dist/lib/node-esm/index.mjs.map +3 -3
  26. package/dist/lib/node-esm/meta.json +1 -1
  27. package/dist/lib/node-esm/meta.mjs +1 -1
  28. package/dist/lib/node-esm/{react-surface-3REUS7KW.mjs → react-surface-BDRG4ZLM.mjs} +13 -10
  29. package/dist/lib/node-esm/react-surface-BDRG4ZLM.mjs.map +7 -0
  30. package/dist/lib/node-esm/types/index.mjs +1 -1
  31. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  33. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  35. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  36. package/dist/types/src/components/Graph/D3ForceGraph.d.ts +3 -3
  37. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -1
  38. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +2 -2
  39. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts +1 -1
  40. package/dist/types/src/components/Tree/types/tree.d.ts +3 -3
  41. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
  42. package/dist/types/src/components/index.d.ts +0 -2
  43. package/dist/types/src/components/index.d.ts.map +1 -1
  44. package/dist/types/src/containers/ExplorerContainer/ExplorerContainer.d.ts +6 -0
  45. package/dist/types/src/containers/ExplorerContainer/ExplorerContainer.d.ts.map +1 -0
  46. package/dist/types/src/containers/ExplorerContainer/index.d.ts +3 -0
  47. package/dist/types/src/containers/ExplorerContainer/index.d.ts.map +1 -0
  48. package/dist/types/src/containers/index.d.ts +3 -0
  49. package/dist/types/src/containers/index.d.ts.map +1 -0
  50. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  51. package/dist/types/src/translations.d.ts +2 -0
  52. package/dist/types/src/translations.d.ts.map +1 -1
  53. package/dist/types/src/types/ExplorerAction.d.ts.map +1 -1
  54. package/dist/types/src/types/Graph.d.ts +2 -9
  55. package/dist/types/src/types/Graph.d.ts.map +1 -1
  56. package/dist/types/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +38 -37
  58. package/src/ExplorerPlugin.tsx +8 -7
  59. package/src/capabilities/react-surface/react-surface.tsx +7 -6
  60. package/src/components/Chart/Chart.stories.tsx +2 -2
  61. package/src/components/Globe/Globe.stories.tsx +2 -2
  62. package/src/components/Graph/D3ForceGraph.stories.tsx +10 -10
  63. package/src/components/Graph/D3ForceGraph.tsx +6 -5
  64. package/src/components/Graph/ForceGraph.stories.tsx +10 -10
  65. package/src/components/Graph/testing.ts +2 -2
  66. package/src/components/Tree/Tree.stories.tsx +2 -2
  67. package/src/components/Tree/types/tree.ts +3 -3
  68. package/src/components/index.ts +0 -4
  69. package/src/{components → containers/ExplorerContainer}/ExplorerContainer.tsx +19 -18
  70. package/src/containers/ExplorerContainer/index.ts +7 -0
  71. package/src/containers/index.ts +7 -0
  72. package/src/hooks/useGraphModel.ts +4 -3
  73. package/src/meta.ts +1 -1
  74. package/src/translations.ts +1 -0
  75. package/src/types/ExplorerAction.ts +0 -1
  76. package/src/types/Graph.ts +5 -22
  77. package/dist/lib/browser/ExplorerContainer-BFAWRIAJ.mjs.map +0 -7
  78. package/dist/lib/browser/chunk-BZMTFAP3.mjs +0 -34
  79. package/dist/lib/browser/chunk-BZMTFAP3.mjs.map +0 -7
  80. package/dist/lib/browser/chunk-HIFLWHXR.mjs.map +0 -7
  81. package/dist/lib/browser/chunk-MGBT2ZFU.mjs +0 -177
  82. package/dist/lib/browser/chunk-MGBT2ZFU.mjs.map +0 -7
  83. package/dist/lib/browser/react-surface-RWVHQL3J.mjs.map +0 -7
  84. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs.map +0 -7
  85. package/dist/lib/node-esm/chunk-3OE6TBJI.mjs.map +0 -7
  86. package/dist/lib/node-esm/chunk-IPIGIQHX.mjs +0 -36
  87. package/dist/lib/node-esm/chunk-IPIGIQHX.mjs.map +0 -7
  88. package/dist/lib/node-esm/chunk-YWJBDETV.mjs +0 -179
  89. package/dist/lib/node-esm/chunk-YWJBDETV.mjs.map +0 -7
  90. package/dist/lib/node-esm/react-surface-3REUS7KW.mjs.map +0 -7
  91. package/dist/types/src/components/ExplorerContainer.d.ts +0 -7
  92. package/dist/types/src/components/ExplorerContainer.d.ts.map +0 -1
@@ -1,3 +1,5 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
1
3
  // src/components/Chart/Chart.tsx
2
4
  import * as Plot from "@observablehq/plot";
3
5
  import React, { useEffect } from "react";
@@ -10820,11 +10822,184 @@ var Globe = ({ items = [], accessor, projection = "orthographic", options = defa
10820
10822
  });
10821
10823
  };
10822
10824
 
10825
+ // src/components/Graph/D3ForceGraph.tsx
10826
+ import React3, { useCallback, useEffect as useEffect3, useMemo, useRef } from "react";
10827
+ import { Obj } from "@dxos/echo";
10828
+ import { SelectionModel } from "@dxos/graph";
10829
+ import { GraphForceProjector, SVG } from "@dxos/react-ui-graph";
10830
+ import { getHashStyles } from "@dxos/ui-theme";
10831
+ import "@dxos/react-ui-graph/styles/graph.css";
10832
+ var D3ForceGraph = ({ classNames, model, selection: _selection, grid, drag, ...props }) => {
10833
+ const context = useRef(null);
10834
+ const projector = useMemo(() => {
10835
+ if (context.current) {
10836
+ return new GraphForceProjector(context.current, {
10837
+ attributes: {
10838
+ linkForce: (edge) => {
10839
+ return edge.data?.object?.active !== false;
10840
+ }
10841
+ },
10842
+ forces: {
10843
+ point: {
10844
+ strength: 0.01
10845
+ }
10846
+ }
10847
+ });
10848
+ }
10849
+ }, [
10850
+ context.current
10851
+ ]);
10852
+ const graph = useRef(null);
10853
+ const selection = useMemo(() => _selection ?? new SelectionModel(), [
10854
+ _selection
10855
+ ]);
10856
+ useEffect3(() => selection.subscribe(() => graph.current?.repaint()), [
10857
+ selection
10858
+ ]);
10859
+ const handleSelect = useCallback((node) => {
10860
+ if (selection.contains(node.id)) {
10861
+ selection.remove(node.id);
10862
+ } else {
10863
+ selection.add(node.id);
10864
+ }
10865
+ }, [
10866
+ selection
10867
+ ]);
10868
+ return /* @__PURE__ */ React3.createElement(SVG.Root, {
10869
+ ref: context,
10870
+ classNames,
10871
+ ...props
10872
+ }, /* @__PURE__ */ React3.createElement(SVG.Markers, null), grid && /* @__PURE__ */ React3.createElement(SVG.Grid, {
10873
+ axis: true
10874
+ }), /* @__PURE__ */ React3.createElement(SVG.Zoom, {
10875
+ extent: [
10876
+ 1 / 2,
10877
+ 2
10878
+ ]
10879
+ }, /* @__PURE__ */ React3.createElement(SVG.Graph, {
10880
+ drag,
10881
+ ref: graph,
10882
+ model,
10883
+ projector,
10884
+ labels: {
10885
+ text: (node) => {
10886
+ return node.data?.data.label ?? node.id;
10887
+ }
10888
+ },
10889
+ attributes: {
10890
+ node: (node) => {
10891
+ const obj = node.data?.data.object;
10892
+ return {
10893
+ data: {
10894
+ color: getHashStyles(obj && Obj.getTypename(obj))?.hue
10895
+ },
10896
+ classes: {
10897
+ "dx-selected": selection.contains(node.id)
10898
+ }
10899
+ };
10900
+ }
10901
+ },
10902
+ onSelect: handleSelect
10903
+ })));
10904
+ };
10905
+
10906
+ // src/components/Graph/ForceGraph.tsx
10907
+ import { forceLink, forceManyBody } from "d3";
10908
+ import NativeForceGraph from "force-graph";
10909
+ import React4, { useEffect as useEffect4, useRef as useRef2, useState } from "react";
10910
+ import { useResizeDetector as useResizeDetector3 } from "react-resize-detector";
10911
+ import { filterObjectsSync } from "@dxos/plugin-search";
10912
+
10913
+ // src/components/Graph/adapter.ts
10914
+ var GraphAdapter = class {
10915
+ graph;
10916
+ _nodes = [];
10917
+ _links = [];
10918
+ constructor(graph) {
10919
+ this.graph = graph;
10920
+ this._nodes = graph.nodes.map((node) => ({
10921
+ id: node.id,
10922
+ type: node.type,
10923
+ data: node.data
10924
+ }));
10925
+ const nodeIds = new Set(this._nodes.map((node) => node.id));
10926
+ this._links = graph.edges.filter((edge) => nodeIds.has(edge.source) && nodeIds.has(edge.target)).map((edge) => ({
10927
+ type: edge.type,
10928
+ source: edge.source,
10929
+ target: edge.target,
10930
+ data: edge.data
10931
+ }));
10932
+ }
10933
+ get nodes() {
10934
+ return this._nodes;
10935
+ }
10936
+ get links() {
10937
+ return this._links;
10938
+ }
10939
+ };
10940
+
10941
+ // src/components/Graph/ForceGraph.tsx
10942
+ var ForceGraph = ({ model, match }) => {
10943
+ const { ref, width, height } = useResizeDetector3({
10944
+ refreshRate: 200
10945
+ });
10946
+ const rootRef = useRef2(null);
10947
+ const forceGraph = useRef2(null);
10948
+ const filteredRef = useRef2([]);
10949
+ filteredRef.current = filterObjectsSync(model?.objects ?? [], match);
10950
+ const [data, setData] = useState();
10951
+ useEffect4(() => {
10952
+ return model?.subscribe((model2) => {
10953
+ setData(new GraphAdapter(model2.graph));
10954
+ });
10955
+ }, [
10956
+ model
10957
+ ]);
10958
+ useEffect4(() => {
10959
+ if (rootRef.current) {
10960
+ forceGraph.current = new NativeForceGraph(rootRef.current).nodeRelSize(6).nodeLabel((node) => node.type === "schema" ? node.data.typename : node.data.label ?? node.id).nodeAutoColorBy((node) => node.type === "schema" ? "schema" : node.data.typename).linkAutoColorBy((link2) => link2.type);
10961
+ }
10962
+ return () => {
10963
+ forceGraph.current?.pauseAnimation().graphData({
10964
+ nodes: [],
10965
+ links: []
10966
+ });
10967
+ forceGraph.current = null;
10968
+ };
10969
+ }, []);
10970
+ useEffect4(() => {
10971
+ if (!data || !width || !height || !forceGraph.current) {
10972
+ return;
10973
+ }
10974
+ forceGraph.current.pauseAnimation().width(width).height(height).onEngineStop(() => {
10975
+ handleZoomToFit();
10976
+ }).onNodeClick((node) => {
10977
+ forceGraph.current?.emitParticle(node);
10978
+ }).d3Force("link", forceLink().distance(160).strength(0.5)).d3Force("charge", forceManyBody().strength(-30)).graphData(data).warmupTicks(100).cooldownTime(1e3).resumeAnimation();
10979
+ }, [
10980
+ data,
10981
+ width,
10982
+ height,
10983
+ forceGraph.current
10984
+ ]);
10985
+ const handleZoomToFit = () => {
10986
+ forceGraph.current?.zoomToFit(400, 40);
10987
+ };
10988
+ return /* @__PURE__ */ React4.createElement("div", {
10989
+ ref,
10990
+ className: "relative grow",
10991
+ onClick: handleZoomToFit
10992
+ }, /* @__PURE__ */ React4.createElement("div", {
10993
+ ref: rootRef,
10994
+ className: "absolute inset-0"
10995
+ }));
10996
+ };
10997
+
10823
10998
  // src/components/Tree/Tree.tsx
10824
10999
  import { RegistryContext } from "@effect-atom/atom-react";
10825
- import React3, { useContext, useEffect as useEffect3, useRef, useState } from "react";
11000
+ import React5, { useContext, useEffect as useEffect5, useRef as useRef3, useState as useState2 } from "react";
10826
11001
  import { useAsyncState } from "@dxos/react-ui";
10827
- import { SVG } from "@dxos/react-ui-graph";
11002
+ import { SVG as SVG2 } from "@dxos/react-ui-graph";
10828
11003
  import { SpaceGraphModel } from "@dxos/schema";
10829
11004
 
10830
11005
  // src/components/Tree/layout/HierarchicalEdgeBundling.ts
@@ -10962,7 +11137,7 @@ var TidyTree_default = TidyTree;
10962
11137
 
10963
11138
  // src/components/Tree/types/tree.ts
10964
11139
  import * as Schema from "effect/Schema";
10965
- import { Key, Obj, Type } from "@dxos/echo";
11140
+ import { Key, Obj as Obj2, Ref, Type } from "@dxos/echo";
10966
11141
  import { TestSchema } from "@dxos/echo/testing";
10967
11142
  import { invariant } from "@dxos/invariant";
10968
11143
  var TreeNodeType = Schema.Struct({
@@ -10972,7 +11147,7 @@ var TreeNodeType = Schema.Struct({
10972
11147
  key: Schema.String,
10973
11148
  value: Schema.Any
10974
11149
  })),
10975
- ref: Schema.optional(Type.Ref(TestSchema.Expando))
11150
+ ref: Schema.optional(Ref.Ref(TestSchema.Expando))
10976
11151
  }).pipe(Schema.mutable);
10977
11152
  var TreeType = Schema.Struct({
10978
11153
  root: Key.ObjectId,
@@ -10981,7 +11156,7 @@ var TreeType = Schema.Struct({
10981
11156
  value: TreeNodeType
10982
11157
  }))
10983
11158
  }).pipe(Type.object({
10984
- typename: "dxos.org/type/Tree",
11159
+ typename: "org.dxos.type.tree",
10985
11160
  version: "0.1.0"
10986
11161
  }));
10987
11162
 
@@ -11018,8 +11193,8 @@ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
11018
11193
  selected,
11019
11194
  registry
11020
11195
  ]);
11021
- const [tree3, setTree] = useState();
11022
- useEffect3(() => {
11196
+ const [tree3, setTree] = useState2();
11197
+ useEffect5(() => {
11023
11198
  return model?.subscribe(() => {
11024
11199
  const tree4 = mapGraphToTreeData(model);
11025
11200
  setTree(tree4);
@@ -11027,8 +11202,8 @@ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
11027
11202
  }, [
11028
11203
  model
11029
11204
  ]);
11030
- const context = useRef(null);
11031
- useEffect3(() => {
11205
+ const context = useRef3(null);
11206
+ useEffect5(() => {
11032
11207
  if (context.current?.size) {
11033
11208
  const { width, height } = context.current.size;
11034
11209
  const size = Math.min(width, height);
@@ -11054,23 +11229,52 @@ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
11054
11229
  context.current,
11055
11230
  tree3
11056
11231
  ]);
11057
- return /* @__PURE__ */ React3.createElement("div", {
11232
+ return /* @__PURE__ */ React5.createElement("div", {
11058
11233
  className: "grow",
11059
11234
  onClick: () => onNodeClick?.()
11060
- }, /* @__PURE__ */ React3.createElement(SVG.Root, {
11235
+ }, /* @__PURE__ */ React5.createElement(SVG2.Root, {
11061
11236
  ref: context
11062
11237
  }));
11063
11238
  };
11064
11239
 
11065
- // src/components/index.ts
11066
- import { lazy } from "react";
11067
- var ExplorerContainer = lazy(() => import("./ExplorerContainer-BFAWRIAJ.mjs"));
11240
+ // src/hooks/useGraphModel.ts
11241
+ import { useEffect as useEffect6, useState as useState3 } from "react";
11242
+ import { Capabilities } from "@dxos/app-framework";
11243
+ import { useCapability } from "@dxos/app-framework/ui";
11244
+ import { SpaceGraphModel as SpaceGraphModel2 } from "@dxos/schema";
11245
+ var useGraphModel = (space, filter, options, queue) => {
11246
+ const registry = useCapability(Capabilities.AtomRegistry);
11247
+ const [model, setModel] = useState3(void 0);
11248
+ useEffect6(() => {
11249
+ if (!space) {
11250
+ void model?.close();
11251
+ setModel(void 0);
11252
+ return;
11253
+ }
11254
+ if (!model || model.queue !== queue) {
11255
+ const model2 = new SpaceGraphModel2(registry).setFilter(filter).setOptions(options);
11256
+ void model2.open(space.db, queue);
11257
+ setModel(model2);
11258
+ } else {
11259
+ model.setFilter(filter).setOptions(options);
11260
+ }
11261
+ }, [
11262
+ space,
11263
+ filter,
11264
+ options,
11265
+ queue,
11266
+ registry
11267
+ ]);
11268
+ return model;
11269
+ };
11068
11270
 
11069
11271
  export {
11070
11272
  Chart,
11071
11273
  Globe,
11274
+ D3ForceGraph,
11275
+ ForceGraph,
11072
11276
  defaultTreeLayoutSlots,
11073
11277
  Tree,
11074
- ExplorerContainer
11278
+ useGraphModel
11075
11279
  };
11076
- //# sourceMappingURL=chunk-AGZAGILW.mjs.map
11280
+ //# sourceMappingURL=chunk-3Z2WBI3N.mjs.map