@dxos/plugin-explorer 0.8.0 → 0.8.1-main.013e445

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 (110) hide show
  1. package/dist/lib/browser/{ExplorerContainer-GJTCBEM4.mjs → ExplorerContainer-3FC557MG.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-S3QNIEBS.mjs → chunk-4OFGICWF.mjs} +241 -2
  3. package/dist/lib/{node-esm/chunk-BRJI3QC2.mjs.map → browser/chunk-4OFGICWF.mjs.map} +4 -4
  4. package/dist/lib/browser/{chunk-PMHCTMKT.mjs → chunk-B3EX52V3.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-QOKAZK4V.mjs → chunk-KYB47PZA.mjs} +1 -1
  6. package/dist/lib/browser/chunk-KYB47PZA.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-X5CI43J6.mjs +205 -0
  8. package/dist/lib/browser/chunk-X5CI43J6.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +13 -20
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/{intent-resolver-UJNDAIDZ.mjs → intent-resolver-5UXBTZAM.mjs} +3 -3
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/meta.mjs +1 -1
  14. package/dist/lib/browser/{react-surface-3X2V3VPN.mjs → react-surface-7HHUAS3J.mjs} +7 -6
  15. package/dist/lib/browser/react-surface-7HHUAS3J.mjs.map +7 -0
  16. package/dist/lib/browser/types/index.mjs +2 -2
  17. package/dist/lib/node/{ExplorerContainer-RJT54IOS.cjs → ExplorerContainer-2DQFUEG7.cjs} +6 -6
  18. package/dist/lib/node/{chunk-5MTMJYC4.cjs → chunk-6VLMSRD5.cjs} +4 -4
  19. package/dist/lib/node/chunk-6VLMSRD5.cjs.map +7 -0
  20. package/dist/lib/node/chunk-AABHIUUW.cjs +236 -0
  21. package/dist/lib/node/chunk-AABHIUUW.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-YUY7P7R2.cjs → chunk-C4DXEIBU.cjs} +6 -6
  23. package/dist/lib/node/{chunk-VSACDC6F.cjs → chunk-ZJL53DLS.cjs} +234 -8
  24. package/dist/lib/node/chunk-ZJL53DLS.cjs.map +7 -0
  25. package/dist/lib/node/index.cjs +31 -38
  26. package/dist/lib/node/index.cjs.map +3 -3
  27. package/dist/lib/node/{intent-resolver-XQV24IAA.cjs → intent-resolver-WDMZJTJ5.cjs} +8 -8
  28. package/dist/lib/node/meta.cjs +3 -3
  29. package/dist/lib/node/meta.cjs.map +1 -1
  30. package/dist/lib/node/meta.json +1 -1
  31. package/dist/lib/node/{react-surface-36YIY7NA.cjs → react-surface-UKU6NFBS.cjs} +12 -11
  32. package/dist/lib/node/react-surface-UKU6NFBS.cjs.map +7 -0
  33. package/dist/lib/node/types/index.cjs +4 -4
  34. package/dist/lib/node/types/index.cjs.map +1 -1
  35. package/dist/lib/node-esm/{ExplorerContainer-TM3VIXVK.mjs → ExplorerContainer-RBGUFI5X.mjs} +2 -2
  36. package/dist/lib/node-esm/{chunk-BRJI3QC2.mjs → chunk-PIOV7IOO.mjs} +240 -2
  37. package/dist/lib/{browser/chunk-S3QNIEBS.mjs.map → node-esm/chunk-PIOV7IOO.mjs.map} +4 -4
  38. package/dist/lib/node-esm/{chunk-UHJZUVRI.mjs → chunk-RKQR2GVZ.mjs} +1 -1
  39. package/dist/lib/node-esm/chunk-RKQR2GVZ.mjs.map +7 -0
  40. package/dist/lib/node-esm/chunk-TI3P4L2P.mjs +207 -0
  41. package/dist/lib/node-esm/chunk-TI3P4L2P.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-57K7ORAW.mjs → chunk-WJ6AML7W.mjs} +2 -2
  43. package/dist/lib/node-esm/index.mjs +13 -20
  44. package/dist/lib/node-esm/index.mjs.map +3 -3
  45. package/dist/lib/node-esm/{intent-resolver-RZQ3EEOE.mjs → intent-resolver-KBRYGW6I.mjs} +3 -3
  46. package/dist/lib/node-esm/meta.json +1 -1
  47. package/dist/lib/node-esm/meta.mjs +1 -1
  48. package/dist/lib/node-esm/{react-surface-YDY7IBMY.mjs → react-surface-UZYRBRXP.mjs} +7 -6
  49. package/dist/lib/node-esm/react-surface-UZYRBRXP.mjs.map +7 -0
  50. package/dist/lib/node-esm/types/index.mjs +2 -2
  51. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  52. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  53. package/dist/types/src/components/Chart/Chart.d.ts +2 -1
  54. package/dist/types/src/components/Chart/Chart.d.ts.map +1 -1
  55. package/dist/types/src/components/Chart/Chart.stories.d.ts +2 -1
  56. package/dist/types/src/components/Chart/Chart.stories.d.ts.map +1 -1
  57. package/dist/types/src/components/ExplorerContainer.d.ts +2 -1
  58. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  59. package/dist/types/src/components/Globe/Globe.d.ts +2 -1
  60. package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
  61. package/dist/types/src/components/Globe/Globe.stories.d.ts +3 -2
  62. package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Graph/Graph.d.ts +0 -3
  64. package/dist/types/src/components/Graph/Graph.d.ts.map +1 -1
  65. package/dist/types/src/components/Graph/Graph.stories.d.ts +1 -1
  66. package/dist/types/src/components/Graph/Graph.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Graph/graph-model.d.ts.map +1 -1
  68. package/dist/types/src/components/Tree/Tree.d.ts +2 -1
  69. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  70. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/Tree/types.d.ts +1 -1
  72. package/dist/types/src/components/Tree/types.d.ts.map +1 -1
  73. package/dist/types/src/components/index.d.ts +1 -1
  74. package/dist/types/src/components/index.d.ts.map +1 -1
  75. package/dist/types/src/meta.d.ts +2 -9
  76. package/dist/types/src/meta.d.ts.map +1 -1
  77. package/dist/types/src/translations.d.ts +2 -6
  78. package/dist/types/src/translations.d.ts.map +1 -1
  79. package/package.json +26 -26
  80. package/src/ExplorerPlugin.tsx +1 -2
  81. package/src/capabilities/react-surface.tsx +2 -1
  82. package/src/components/Graph/Graph.stories.tsx +2 -2
  83. package/src/components/Graph/Graph.tsx +16 -142
  84. package/src/components/Graph/graph-model.ts +2 -0
  85. package/src/components/Tree/Tree.stories.tsx +3 -36
  86. package/src/components/Tree/types.ts +2 -1
  87. package/src/meta.ts +2 -2
  88. package/src/translations.ts +1 -2
  89. package/dist/lib/browser/chunk-QOKAZK4V.mjs.map +0 -7
  90. package/dist/lib/browser/chunk-YQL7YE6N.mjs +0 -546
  91. package/dist/lib/browser/chunk-YQL7YE6N.mjs.map +0 -7
  92. package/dist/lib/browser/react-surface-3X2V3VPN.mjs.map +0 -7
  93. package/dist/lib/node/chunk-5MTMJYC4.cjs.map +0 -7
  94. package/dist/lib/node/chunk-VSACDC6F.cjs.map +0 -7
  95. package/dist/lib/node/chunk-YH4QYCZH.cjs +0 -567
  96. package/dist/lib/node/chunk-YH4QYCZH.cjs.map +0 -7
  97. package/dist/lib/node/react-surface-36YIY7NA.cjs.map +0 -7
  98. package/dist/lib/node-esm/chunk-3KRWHGBM.mjs +0 -548
  99. package/dist/lib/node-esm/chunk-3KRWHGBM.mjs.map +0 -7
  100. package/dist/lib/node-esm/chunk-UHJZUVRI.mjs.map +0 -7
  101. package/dist/lib/node-esm/react-surface-YDY7IBMY.mjs.map +0 -7
  102. /package/dist/lib/browser/{ExplorerContainer-GJTCBEM4.mjs.map → ExplorerContainer-3FC557MG.mjs.map} +0 -0
  103. /package/dist/lib/browser/{chunk-PMHCTMKT.mjs.map → chunk-B3EX52V3.mjs.map} +0 -0
  104. /package/dist/lib/browser/{intent-resolver-UJNDAIDZ.mjs.map → intent-resolver-5UXBTZAM.mjs.map} +0 -0
  105. /package/dist/lib/node/{ExplorerContainer-RJT54IOS.cjs.map → ExplorerContainer-2DQFUEG7.cjs.map} +0 -0
  106. /package/dist/lib/node/{chunk-YUY7P7R2.cjs.map → chunk-C4DXEIBU.cjs.map} +0 -0
  107. /package/dist/lib/node/{intent-resolver-XQV24IAA.cjs.map → intent-resolver-WDMZJTJ5.cjs.map} +0 -0
  108. /package/dist/lib/node-esm/{ExplorerContainer-TM3VIXVK.mjs.map → ExplorerContainer-RBGUFI5X.mjs.map} +0 -0
  109. /package/dist/lib/node-esm/{chunk-57K7ORAW.mjs.map → chunk-WJ6AML7W.mjs.map} +0 -0
  110. /package/dist/lib/node-esm/{intent-resolver-RZQ3EEOE.mjs.map → intent-resolver-KBRYGW6I.mjs.map} +0 -0
@@ -1,4 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ SpaceGraphModel
4
+ } from "./chunk-TI3P4L2P.mjs";
2
5
 
3
6
  // packages/plugins/experimental/plugin-explorer/src/components/Chart/Chart.tsx
4
7
  import * as Plot from "@observablehq/plot";
@@ -10822,13 +10825,248 @@ var Globe = ({ items = [], accessor, projection = "orthographic", options = defa
10822
10825
  });
10823
10826
  };
10824
10827
 
10828
+ // packages/plugins/experimental/plugin-explorer/src/components/Tree/Tree.tsx
10829
+ import React3, { useEffect as useEffect3, useState } from "react";
10830
+ import { useResizeDetector as useResizeDetector3 } from "react-resize-detector";
10831
+ import { createSvgContext, SVG, SVGRoot } from "@dxos/gem-core";
10832
+ import { useAsyncState } from "@dxos/react-ui";
10833
+
10834
+ // packages/plugins/experimental/plugin-explorer/src/components/Tree/layout/HierarchicalEdgeBundling.ts
10835
+ import * as d3 from "d3";
10836
+ var HierarchicalEdgeBundling = (s, data, options) => {
10837
+ const svg = d3.select(s);
10838
+ svg.selectAll("*").remove();
10839
+ const { radius = 600, padding = 100, slots } = options;
10840
+ const root = d3.hierarchy(flatten(data));
10841
+ const tree3 = d3.cluster().size([
10842
+ 2 * Math.PI,
10843
+ radius - padding
10844
+ ]);
10845
+ const layout = tree3(addLinks(root));
10846
+ const node = svg.append("g").selectAll().data(layout.leaves()).join("g").attr("transform", (d) => `rotate(${d.x * (180 / Math.PI) - 90}) translate(${d.y},0)`).append("text").attr("class", slots?.text ?? "").attr("dy", "0.31em").attr("x", (d) => d.x < Math.PI ? 6 : -6).attr("text-anchor", (d) => d.x < Math.PI ? "start" : "end").attr("transform", (d) => d.x >= Math.PI ? "rotate(180)" : null).call((text) => text.text((d) => d.data.id.slice(0, 8)));
10847
+ const line = d3.lineRadial().curve(d3.curveBundle.beta(0.85)).radius((d) => d.y).angle((d) => d.x);
10848
+ const links = svg.append("g").selectAll().data(layout.leaves().flatMap((leaf) => leaf.outgoing)).join("path").style("mix-blend-mode", "multiply").attr("class", slots?.path ?? "").attr("d", ([i, o]) => {
10849
+ return line(i.path(o));
10850
+ }).each(function(d) {
10851
+ d.path = this;
10852
+ });
10853
+ };
10854
+ var addLinks = (root) => {
10855
+ const nodes = new Map(root.descendants().map((d) => [
10856
+ d.data.id,
10857
+ d
10858
+ ]));
10859
+ const parents = root.descendants().reduce((map, d) => {
10860
+ if (d.children?.length) {
10861
+ map.set(d.data.id, d);
10862
+ }
10863
+ return map;
10864
+ }, /* @__PURE__ */ new Map());
10865
+ for (const d of root.leaves()) {
10866
+ const parent = parents.get(d.data.id);
10867
+ if (parent) {
10868
+ d.outgoing = parent.data.children?.slice(1).map((child) => {
10869
+ return [
10870
+ d,
10871
+ nodes.get(child.id)
10872
+ ];
10873
+ }) ?? [];
10874
+ } else {
10875
+ d.outgoing = [];
10876
+ }
10877
+ }
10878
+ return root;
10879
+ };
10880
+ var flatten = (node) => {
10881
+ const clone = {
10882
+ id: node.id
10883
+ };
10884
+ if (node.children?.length) {
10885
+ const children = node.children.map((child) => flatten(child));
10886
+ clone.children = [
10887
+ {
10888
+ id: node.id
10889
+ },
10890
+ ...children
10891
+ ];
10892
+ }
10893
+ return clone;
10894
+ };
10895
+ var HierarchicalEdgeBundling_default = HierarchicalEdgeBundling;
10896
+
10897
+ // packages/plugins/experimental/plugin-explorer/src/components/Tree/layout/RadialTree.ts
10898
+ import * as d32 from "d3";
10899
+ var RadialTree = (s, data, options) => {
10900
+ const svg = d32.select(s);
10901
+ svg.selectAll("*").remove();
10902
+ const { label, radius = 400, r = 4, slots } = options;
10903
+ const arc = 2 * Math.PI;
10904
+ const root = d32.hierarchy(data);
10905
+ const descendants = root.descendants();
10906
+ const getLabel = label === null ? null : descendants.map((d) => label(d.data));
10907
+ const layout = d32.tree().size([
10908
+ arc,
10909
+ radius
10910
+ ]).separation((a, b) => (a.parent === b.parent ? 1 : 2) / a.depth);
10911
+ layout(root);
10912
+ svg.append("g").selectAll("path").data(root.links()).join("path").attr("class", slots?.path ?? "").attr("d", d32.linkRadial().angle((d) => d.x + Math.PI / 2).radius((d) => d.y));
10913
+ const node = svg.append("g").selectAll("a").data(root.descendants()).join("a").attr("transform", (d) => `rotate(${d.x * 180 / Math.PI}) translate(${d.y},0)`);
10914
+ node.append("circle").attr("class", slots?.node ?? "").attr("r", r);
10915
+ if (getLabel) {
10916
+ node.append("text").attr("transform", (d) => `rotate(${d.x >= Math.PI ? 180 : 0})`).attr("dy", "0.32em").attr("x", (d) => d.x < Math.PI === !d.children ? 6 : -6).attr("text-anchor", (d) => d.x < Math.PI === !d.children ? "start" : "end").attr("class", slots?.text ?? "").text((d, i) => getLabel[i]);
10917
+ }
10918
+ return svg.node();
10919
+ };
10920
+ var RadialTree_default = RadialTree;
10921
+
10922
+ // packages/plugins/experimental/plugin-explorer/src/components/Tree/layout/TidyTree.ts
10923
+ import * as d33 from "d3";
10924
+ var TidyTree = (s, data, options) => {
10925
+ const svg = d33.select(s);
10926
+ svg.selectAll("*").remove();
10927
+ const { label, width, height, r = 4, padding = 4, margin = 60, slots } = options;
10928
+ const root = d33.hierarchy(data);
10929
+ const descendants = root.descendants();
10930
+ const getLabel = label == null ? null : descendants.map((d) => label(d.data));
10931
+ const dx = 16;
10932
+ const dy = width / (root.height + padding);
10933
+ const layout = d33.tree().nodeSize([
10934
+ dx,
10935
+ dy
10936
+ ]);
10937
+ layout(root);
10938
+ let x0 = Infinity;
10939
+ let x1 = -x0;
10940
+ let y0 = Infinity;
10941
+ let y1 = -y0;
10942
+ root.each((d) => {
10943
+ if (d.x > x1) {
10944
+ x1 = d.x;
10945
+ }
10946
+ if (d.x < x0) {
10947
+ x0 = d.x;
10948
+ }
10949
+ if (d.y > y1) {
10950
+ y1 = d.y;
10951
+ }
10952
+ if (d.y < y0) {
10953
+ y0 = d.y;
10954
+ }
10955
+ });
10956
+ const sx = Math.min(2, Math.max(1, (height - margin * 2) / (x1 - x0)));
10957
+ const oy = -(width - (y1 - y0)) / 2;
10958
+ svg.append("g").selectAll("path").data(root.links()).join("path").attr("class", slots?.path ?? "").attr("d", d33.link(d33.curveBumpX).x((d) => d.y + oy).y((d) => d.x * sx));
10959
+ const node = svg.append("g").selectAll("a").data(root.descendants()).join("a").attr("transform", (d) => `translate(${d.y + oy},${d.x * sx})`);
10960
+ node.append("circle").attr("class", slots?.node ?? "").attr("r", r);
10961
+ if (getLabel) {
10962
+ node.append("text").attr("dy", "0.32em").attr("x", (d) => d.children ? -6 : 6).attr("text-anchor", (d) => d.children ? "end" : "start").attr("class", slots?.text ?? "").text((d, i) => getLabel[i]);
10963
+ }
10964
+ };
10965
+ var TidyTree_default = TidyTree;
10966
+
10967
+ // packages/plugins/experimental/plugin-explorer/src/components/Tree/types.ts
10968
+ var mapGraphToTreeData = (model, maxDepth = 8) => {
10969
+ const mapNode = (node, depth = 0) => {
10970
+ const treeNode = {
10971
+ id: model.idAccessor(node),
10972
+ label: model.idAccessor(node).slice(0, 8)
10973
+ };
10974
+ const links = model.graph.links.filter((link2) => link2.source === treeNode.id);
10975
+ if (depth < maxDepth) {
10976
+ treeNode.children = links.map((link2) => mapNode(model.graph.nodes.find((node2) => model.idAccessor(node2) === link2.target), depth + 1));
10977
+ }
10978
+ return treeNode;
10979
+ };
10980
+ let data;
10981
+ if (model.selected) {
10982
+ const node = model.graph.nodes.find((node2) => model.idAccessor(node2) === model.selected);
10983
+ if (node) {
10984
+ data = mapNode(node);
10985
+ }
10986
+ }
10987
+ return data;
10988
+ };
10989
+
10990
+ // packages/plugins/experimental/plugin-explorer/src/components/Tree/Tree.tsx
10991
+ var defaultTreeLayoutSlots = {
10992
+ node: "fill-blue-600",
10993
+ path: "fill-none stroke-blue-400 stroke-[0.5px]",
10994
+ text: "stroke-[0.5px] stroke-neutral-700 text-xs"
10995
+ };
10996
+ var renderers = /* @__PURE__ */ new Map([
10997
+ [
10998
+ "tidy",
10999
+ TidyTree_default
11000
+ ],
11001
+ [
11002
+ "radial",
11003
+ RadialTree_default
11004
+ ],
11005
+ [
11006
+ "edge",
11007
+ HierarchicalEdgeBundling_default
11008
+ ]
11009
+ ]);
11010
+ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
11011
+ const [model] = useAsyncState(async () => space ? new SpaceGraphModel().open(space, selected) : void 0, [
11012
+ space,
11013
+ selected
11014
+ ]);
11015
+ const [tree3, setTree] = useState();
11016
+ useEffect3(() => {
11017
+ return model?.subscribe(() => {
11018
+ const tree4 = mapGraphToTreeData(model);
11019
+ setTree(tree4);
11020
+ }, true);
11021
+ }, [
11022
+ model
11023
+ ]);
11024
+ const context = createSvgContext();
11025
+ const { ref, width = 0, height = 0 } = useResizeDetector3();
11026
+ useEffect3(() => {
11027
+ if (width && height) {
11028
+ const size = Math.min(width, height);
11029
+ const radius = size * 0.4;
11030
+ const options = {
11031
+ // TODO(burdon): Type.
11032
+ label: (d) => d.label ?? d.id,
11033
+ width,
11034
+ height,
11035
+ radius,
11036
+ marginLeft: (width - radius * 2) / 2,
11037
+ marginRight: (width - radius * 2) / 2,
11038
+ marginTop: (height - radius * 2) / 2,
11039
+ marginBottom: (height - radius * 2) / 2,
11040
+ slots: defaultTreeLayoutSlots
11041
+ };
11042
+ if (tree3) {
11043
+ const renderer = renderers.get(variant);
11044
+ renderer?.(context.ref.current, tree3, options);
11045
+ }
11046
+ }
11047
+ }, [
11048
+ tree3,
11049
+ width,
11050
+ height
11051
+ ]);
11052
+ return /* @__PURE__ */ React3.createElement("div", {
11053
+ ref,
11054
+ className: "flex grow overflow-hidden",
11055
+ onClick: () => onNodeClick?.()
11056
+ }, /* @__PURE__ */ React3.createElement(SVGRoot, {
11057
+ context
11058
+ }, /* @__PURE__ */ React3.createElement(SVG, null)));
11059
+ };
11060
+
10825
11061
  // packages/plugins/experimental/plugin-explorer/src/components/index.ts
10826
11062
  import { lazy } from "react";
10827
- var ExplorerContainer = lazy(() => import("./ExplorerContainer-TM3VIXVK.mjs"));
11063
+ var ExplorerContainer = lazy(() => import("./ExplorerContainer-RBGUFI5X.mjs"));
10828
11064
 
10829
11065
  export {
10830
11066
  Chart,
10831
11067
  Globe,
11068
+ defaultTreeLayoutSlots,
11069
+ Tree,
10832
11070
  ExplorerContainer
10833
11071
  };
10834
- //# sourceMappingURL=chunk-BRJI3QC2.mjs.map
11072
+ //# sourceMappingURL=chunk-PIOV7IOO.mjs.map