@dxos/plugin-explorer 0.8.4-main.67995b8 → 0.8.4-main.69d29f4

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 (158) 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-PVFZFKQ6.mjs → chunk-AGZAGILW.mjs} +138 -391
  4. package/dist/lib/{node-esm/chunk-S5A2EUSJ.mjs.map → browser/chunk-AGZAGILW.mjs.map} +3 -3
  5. package/dist/lib/browser/chunk-BZMTFAP3.mjs +34 -0
  6. package/dist/lib/browser/chunk-BZMTFAP3.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-HIFLWHXR.mjs +83 -0
  8. package/dist/lib/browser/chunk-HIFLWHXR.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  10. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-MGBT2ZFU.mjs +177 -0
  12. package/dist/lib/browser/chunk-MGBT2ZFU.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-YNQF4CPY.mjs +24 -0
  14. package/dist/lib/browser/chunk-YNQF4CPY.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +53 -65
  16. package/dist/lib/browser/index.mjs.map +4 -4
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/meta.mjs +2 -3
  19. package/dist/lib/browser/react-surface-RWVHQL3J.mjs +35 -0
  20. package/dist/lib/browser/react-surface-RWVHQL3J.mjs.map +7 -0
  21. package/dist/lib/browser/types/index.mjs +6 -6
  22. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs +46 -0
  23. package/dist/lib/node-esm/ExplorerContainer-YQ2KKBVS.mjs.map +7 -0
  24. package/dist/lib/node-esm/chunk-3OE6TBJI.mjs +84 -0
  25. package/dist/lib/node-esm/chunk-3OE6TBJI.mjs.map +7 -0
  26. package/dist/lib/node-esm/{chunk-PIAXA43R.mjs → chunk-DK77RB6M.mjs} +8 -5
  27. package/dist/lib/node-esm/chunk-DK77RB6M.mjs.map +7 -0
  28. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  29. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  30. package/dist/lib/node-esm/{chunk-PPBUWC7F.mjs → chunk-IPIGIQHX.mjs} +11 -7
  31. package/dist/lib/node-esm/chunk-IPIGIQHX.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-S5A2EUSJ.mjs → chunk-QLMTN2XI.mjs} +138 -391
  33. package/dist/lib/{browser/chunk-PVFZFKQ6.mjs.map → node-esm/chunk-QLMTN2XI.mjs.map} +3 -3
  34. package/dist/lib/node-esm/chunk-YWJBDETV.mjs +179 -0
  35. package/dist/lib/node-esm/chunk-YWJBDETV.mjs.map +7 -0
  36. package/dist/lib/node-esm/index.mjs +53 -65
  37. package/dist/lib/node-esm/index.mjs.map +4 -4
  38. package/dist/lib/node-esm/meta.json +1 -1
  39. package/dist/lib/node-esm/meta.mjs +2 -3
  40. package/dist/lib/node-esm/react-surface-3REUS7KW.mjs +36 -0
  41. package/dist/lib/node-esm/react-surface-3REUS7KW.mjs.map +7 -0
  42. package/dist/lib/node-esm/types/index.mjs +6 -6
  43. package/dist/types/src/ExplorerPlugin.d.ts +2 -1
  44. package/dist/types/src/ExplorerPlugin.d.ts.map +1 -1
  45. package/dist/types/src/capabilities/index.d.ts +1 -2
  46. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  48. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  50. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  51. package/dist/types/src/components/Chart/Chart.d.ts.map +1 -1
  52. package/dist/types/src/components/Chart/Chart.stories.d.ts +8 -4
  53. package/dist/types/src/components/Chart/Chart.stories.d.ts.map +1 -1
  54. package/dist/types/src/components/ExplorerContainer.d.ts +4 -6
  55. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  56. package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
  57. package/dist/types/src/components/Globe/Globe.stories.d.ts +8 -4
  58. package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/Graph/D3ForceGraph.d.ts +2 -2
  60. package/dist/types/src/components/Graph/D3ForceGraph.d.ts.map +1 -1
  61. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +13 -4
  62. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts +13 -4
  64. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/Graph/adapter.d.ts +1 -1
  66. package/dist/types/src/components/Graph/adapter.d.ts.map +1 -1
  67. package/dist/types/src/components/Graph/testing.d.ts +1 -1
  68. package/dist/types/src/components/Graph/testing.d.ts.map +1 -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 +13 -16
  71. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/Tree/testing/generator.d.ts.map +1 -1
  73. package/dist/types/src/components/Tree/types/tree.d.ts +18 -16
  74. package/dist/types/src/components/Tree/types/tree.d.ts.map +1 -1
  75. package/dist/types/src/components/Tree/types/types.d.ts +1 -1
  76. package/dist/types/src/components/Tree/types/types.d.ts.map +1 -1
  77. package/dist/types/src/components/index.d.ts +2 -4
  78. package/dist/types/src/components/index.d.ts.map +1 -1
  79. package/dist/types/src/hooks/useGraphModel.d.ts +2 -2
  80. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  81. package/dist/types/src/meta.d.ts +2 -3
  82. package/dist/types/src/meta.d.ts.map +1 -1
  83. package/dist/types/src/translations.d.ts +24 -5
  84. package/dist/types/src/translations.d.ts.map +1 -1
  85. package/dist/types/src/types/ExplorerAction.d.ts +6 -0
  86. package/dist/types/src/types/ExplorerAction.d.ts.map +1 -0
  87. package/dist/types/src/types/Graph.d.ts +30 -0
  88. package/dist/types/src/types/Graph.d.ts.map +1 -0
  89. package/dist/types/src/types/index.d.ts +2 -2
  90. package/dist/types/src/types/index.d.ts.map +1 -1
  91. package/dist/types/tsconfig.tsbuildinfo +1 -1
  92. package/package.json +50 -44
  93. package/src/ExplorerPlugin.tsx +29 -52
  94. package/src/capabilities/index.ts +1 -4
  95. package/src/capabilities/react-surface/index.ts +7 -0
  96. package/src/capabilities/react-surface/react-surface.tsx +30 -0
  97. package/src/components/Chart/Chart.stories.tsx +9 -7
  98. package/src/components/Chart/Chart.tsx +1 -1
  99. package/src/components/ExplorerContainer.tsx +28 -12
  100. package/src/components/Globe/Globe.stories.tsx +14 -12
  101. package/src/components/Globe/Globe.tsx +1 -1
  102. package/src/components/Graph/D3ForceGraph.stories.tsx +40 -21
  103. package/src/components/Graph/D3ForceGraph.tsx +6 -6
  104. package/src/components/Graph/ForceGraph.stories.tsx +40 -21
  105. package/src/components/Graph/ForceGraph.tsx +4 -4
  106. package/src/components/Graph/adapter.ts +14 -8
  107. package/src/components/Graph/testing.ts +13 -10
  108. package/src/components/Tree/Tree.stories.tsx +29 -22
  109. package/src/components/Tree/Tree.tsx +11 -6
  110. package/src/components/Tree/testing/generator.ts +4 -2
  111. package/src/components/Tree/types/tree.test.ts +7 -4
  112. package/src/components/Tree/types/tree.ts +40 -19
  113. package/src/components/Tree/types/types.ts +1 -1
  114. package/src/components/index.ts +3 -3
  115. package/src/hooks/useGraphModel.ts +9 -6
  116. package/src/meta.ts +9 -6
  117. package/src/translations.ts +6 -2
  118. package/src/types/ExplorerAction.ts +21 -0
  119. package/src/types/Graph.ts +62 -0
  120. package/src/types/index.ts +2 -2
  121. package/dist/lib/browser/ExplorerContainer-OGHSHZD5.mjs +0 -37
  122. package/dist/lib/browser/ExplorerContainer-OGHSHZD5.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-EF4BFHTI.mjs +0 -38
  124. package/dist/lib/browser/chunk-EF4BFHTI.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-J2BBZOSF.mjs +0 -187
  126. package/dist/lib/browser/chunk-J2BBZOSF.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-OAOY7SHY.mjs +0 -30
  128. package/dist/lib/browser/chunk-OAOY7SHY.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-UL5EDJPE.mjs +0 -21
  130. package/dist/lib/browser/chunk-UL5EDJPE.mjs.map +0 -7
  131. package/dist/lib/browser/intent-resolver-XH2UO2FM.mjs +0 -24
  132. package/dist/lib/browser/intent-resolver-XH2UO2FM.mjs.map +0 -7
  133. package/dist/lib/browser/react-surface-65VQ42HX.mjs +0 -31
  134. package/dist/lib/browser/react-surface-65VQ42HX.mjs.map +0 -7
  135. package/dist/lib/node-esm/ExplorerContainer-6ON5NA2P.mjs +0 -38
  136. package/dist/lib/node-esm/ExplorerContainer-6ON5NA2P.mjs.map +0 -7
  137. package/dist/lib/node-esm/chunk-4VMSNXYL.mjs +0 -189
  138. package/dist/lib/node-esm/chunk-4VMSNXYL.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-PIAXA43R.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-PPBUWC7F.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-VKCOKQRG.mjs +0 -39
  142. package/dist/lib/node-esm/chunk-VKCOKQRG.mjs.map +0 -7
  143. package/dist/lib/node-esm/intent-resolver-AGBBNA67.mjs +0 -25
  144. package/dist/lib/node-esm/intent-resolver-AGBBNA67.mjs.map +0 -7
  145. package/dist/lib/node-esm/react-surface-IJIMYAST.mjs +0 -32
  146. package/dist/lib/node-esm/react-surface-IJIMYAST.mjs.map +0 -7
  147. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  148. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  149. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  150. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  151. package/dist/types/src/types/schema.d.ts +0 -12
  152. package/dist/types/src/types/schema.d.ts.map +0 -1
  153. package/dist/types/src/types/types.d.ts +0 -18
  154. package/dist/types/src/types/types.d.ts.map +0 -1
  155. package/src/capabilities/intent-resolver.ts +0 -19
  156. package/src/capabilities/react-surface.tsx +0 -23
  157. package/src/types/schema.ts +0 -16
  158. package/src/types/types.ts +0 -21
@@ -0,0 +1,45 @@
1
+ import {
2
+ useGraphModel
3
+ } from "./chunk-BZMTFAP3.mjs";
4
+ import {
5
+ D3ForceGraph
6
+ } from "./chunk-MGBT2ZFU.mjs";
7
+ import "./chunk-J5LGTIGS.mjs";
8
+
9
+ // src/components/ExplorerContainer.tsx
10
+ import React, { useCallback, useMemo, useState } from "react";
11
+ import { QueryBuilder } from "@dxos/echo-query";
12
+ import { useGlobalSearch } from "@dxos/plugin-search";
13
+ import { getSpace } from "@dxos/react-client/echo";
14
+ import { Toolbar } from "@dxos/react-ui";
15
+ import { QueryEditor } from "@dxos/react-ui-components";
16
+ import { Layout } from "@dxos/react-ui-mosaic";
17
+ var ExplorerContainer = ({ role, subject: view }) => {
18
+ const space = getSpace(view);
19
+ const [filter, setFilter] = useState();
20
+ const model = useGraphModel(space, filter);
21
+ const { match } = useGlobalSearch();
22
+ const builder = useMemo(() => new QueryBuilder(), []);
23
+ const handleChange = useCallback((value) => {
24
+ setFilter(builder.build(value).filter);
25
+ }, []);
26
+ const showToolbar = role === "article";
27
+ if (!space || !model) {
28
+ return null;
29
+ }
30
+ return /* @__PURE__ */ React.createElement(Layout.Main, {
31
+ role,
32
+ toolbar: showToolbar
33
+ }, showToolbar && /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(QueryEditor, {
34
+ db: space.db,
35
+ onChange: handleChange
36
+ })), /* @__PURE__ */ React.createElement(D3ForceGraph, {
37
+ model,
38
+ match
39
+ }));
40
+ };
41
+ var ExplorerContainer_default = ExplorerContainer;
42
+ export {
43
+ ExplorerContainer_default as default
44
+ };
45
+ //# sourceMappingURL=ExplorerContainer-BFAWRIAJ.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 SurfaceComponentProps } from '@dxos/app-framework/react';\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 { Layout } from '@dxos/react-ui-mosaic';\nimport { type View } from '@dxos/schema';\n\nimport { useGraphModel } from '../hooks';\n\nimport { D3ForceGraph } from './Graph';\n\nexport type ExplorerContainerProps = SurfaceComponentProps<View.View>;\n\nconst ExplorerContainer = ({ role, subject: 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 <Layout.Main role={role} 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 </Layout.Main>\n );\n};\n\nexport default ExplorerContainer;\n"],
5
+ "mappings": ";;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,SAASC,gBAAgB;AAItD,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAChC,SAASC,gBAAgB;AACzB,SAASC,eAAe;AACxB,SAASC,mBAA0C;AACnD,SAASC,cAAc;AASvB,IAAMC,oBAAoB,CAAC,EAAEC,MAAMC,SAASC,KAAI,MAA0B;AACxE,QAAMC,QAAQC,SAASF,IAAAA;AACvB,QAAM,CAACG,QAAQC,SAAAA,IAAaC,SAAAA;AAC5B,QAAMC,QAAQC,cAAcN,OAAOE,MAAAA;AACnC,QAAM,EAAEK,MAAK,IAAKC,gBAAAA;AAElB,QAAMC,UAAUC,QAAQ,MAAM,IAAIC,aAAAA,GAAgB,CAAA,CAAE;AACpD,QAAMC,eAAeC,YAAuD,CAACC,UAAAA;AAC3EX,cAAUM,QAAQM,MAAMD,KAAAA,EAAOZ,MAAM;EACvC,GAAG,CAAA,CAAE;AAEL,QAAMc,cAAcnB,SAAS;AAE7B,MAAI,CAACG,SAAS,CAACK,OAAO;AACpB,WAAO;EACT;AAEA,SACE,sBAAA,cAACY,OAAOC,MAAI;IAACrB;IAAYsB,SAASH;KAC/BA,eACC,sBAAA,cAACI,QAAQC,MAAI,MACX,sBAAA,cAACC,aAAAA;IAAYC,IAAIvB,MAAMuB;IAAIC,UAAUZ;OAGzC,sBAAA,cAACa,cAAAA;IAAapB;IAAcE;;AAGlC;AAEA,IAAA,4BAAeX;",
6
+ "names": ["React", "useCallback", "useMemo", "useState", "QueryBuilder", "useGlobalSearch", "getSpace", "Toolbar", "QueryEditor", "Layout", "ExplorerContainer", "role", "subject", "view", "space", "getSpace", "filter", "setFilter", "useState", "model", "useGraphModel", "match", "useGlobalSearch", "builder", "useMemo", "QueryBuilder", "handleChange", "useCallback", "value", "build", "showToolbar", "Layout", "Main", "toolbar", "Toolbar", "Root", "QueryEditor", "db", "onChange", "D3ForceGraph"]
7
+ }
@@ -1,5 +1,4 @@
1
1
  // src/components/Chart/Chart.tsx
2
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
3
2
  import * as Plot from "@observablehq/plot";
4
3
  import React, { useEffect } from "react";
5
4
  import { useResizeDetector } from "react-resize-detector";
@@ -17,49 +16,43 @@ var defaultOptions = {
17
16
  fillOpacity: 0.2
18
17
  };
19
18
  var Chart = ({ items = [], accessor, options = defaultOptions }) => {
20
- var _effect = _useSignals();
21
- try {
22
- const { ref: containerRef, width = 0, height = 0 } = useResizeDetector({
23
- refreshRate: 200
24
- });
25
- useEffect(() => {
26
- if (!width || !height) {
27
- return;
28
- }
29
- const plot3 = Plot.plot({
30
- grid: true,
31
- width,
32
- height,
33
- style: {
34
- background: "transparent"
35
- },
36
- marks: [
37
- Plot.frame(),
38
- Plot.dot(items, {
39
- x: createAdapter("x", accessor),
40
- y: createAdapter("y", accessor),
41
- ...options
42
- })
43
- ]
44
- });
45
- containerRef.current.append(plot3);
46
- return () => plot3?.remove();
47
- }, [
48
- items,
19
+ const { ref: containerRef, width = 0, height = 0 } = useResizeDetector({
20
+ refreshRate: 200
21
+ });
22
+ useEffect(() => {
23
+ if (!width || !height) {
24
+ return;
25
+ }
26
+ const plot3 = Plot.plot({
27
+ grid: true,
49
28
  width,
50
- height
51
- ]);
52
- return /* @__PURE__ */ React.createElement("div", {
53
- ref: containerRef,
54
- className: "grow"
29
+ height,
30
+ style: {
31
+ background: "transparent"
32
+ },
33
+ marks: [
34
+ Plot.frame(),
35
+ Plot.dot(items, {
36
+ x: createAdapter("x", accessor),
37
+ y: createAdapter("y", accessor),
38
+ ...options
39
+ })
40
+ ]
55
41
  });
56
- } finally {
57
- _effect.f();
58
- }
42
+ containerRef.current.append(plot3);
43
+ return () => plot3?.remove();
44
+ }, [
45
+ items,
46
+ width,
47
+ height
48
+ ]);
49
+ return /* @__PURE__ */ React.createElement("div", {
50
+ ref: containerRef,
51
+ className: "grow"
52
+ });
59
53
  };
60
54
 
61
55
  // src/components/Globe/Globe.tsx
62
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
63
56
  import * as Plot2 from "@observablehq/plot";
64
57
  import React2, { useEffect as useEffect2 } from "react";
65
58
  import { useResizeDetector as useResizeDetector2 } from "react-resize-detector";
@@ -10773,68 +10766,63 @@ var defaultOptions2 = {
10773
10766
  fill: "#003300"
10774
10767
  };
10775
10768
  var Globe = ({ items = [], accessor, projection = "orthographic", options = defaultOptions2 }) => {
10776
- var _effect = _useSignals2();
10777
- try {
10778
- const { ref: containerRef, width = 0, height = 0 } = useResizeDetector2({
10779
- refreshRate: 200
10780
- });
10781
- const land = topojson.feature(countries_110m_default, countries_110m_default.objects.land);
10782
- useEffect2(() => {
10783
- if (!width || !height) {
10784
- return;
10785
- }
10786
- const plot3 = Plot2.plot({
10787
- // https://observablehq.com/plot/features/projections
10788
- projection: {
10789
- type: projection,
10790
- rotate: [
10791
- -100,
10792
- -20
10793
- ]
10794
- },
10795
- // projection: { type: 'equirectangular', rotate: [-140, -30] },
10796
- width,
10797
- height,
10798
- style: {
10799
- background: "transparent"
10800
- },
10801
- // TODO(burdon): Create simple wrapper for Plot with good defaults.
10802
- marks: [
10803
- Plot2.sphere({
10804
- fill: "lightblue",
10805
- fillOpacity: 0.5
10806
- }),
10807
- Plot2.geo(land, {
10808
- fill: "darkgreen",
10809
- fillOpacity: 0.5
10810
- }),
10811
- Plot2.graticule(),
10812
- Plot2.dot(items, {
10813
- x: createAdapter("lat", accessor),
10814
- y: createAdapter("lng", accessor),
10815
- ...options
10816
- })
10769
+ const { ref: containerRef, width = 0, height = 0 } = useResizeDetector2({
10770
+ refreshRate: 200
10771
+ });
10772
+ const land = topojson.feature(countries_110m_default, countries_110m_default.objects.land);
10773
+ useEffect2(() => {
10774
+ if (!width || !height) {
10775
+ return;
10776
+ }
10777
+ const plot3 = Plot2.plot({
10778
+ // https://observablehq.com/plot/features/projections
10779
+ projection: {
10780
+ type: projection,
10781
+ rotate: [
10782
+ -100,
10783
+ -20
10817
10784
  ]
10818
- });
10819
- containerRef.current.append(plot3);
10820
- return () => plot3?.remove();
10821
- }, [
10822
- items,
10785
+ },
10786
+ // projection: { type: 'equirectangular', rotate: [-140, -30] },
10823
10787
  width,
10824
- height
10825
- ]);
10826
- return /* @__PURE__ */ React2.createElement("div", {
10827
- ref: containerRef,
10828
- className: "grow p-4"
10788
+ height,
10789
+ style: {
10790
+ background: "transparent"
10791
+ },
10792
+ // TODO(burdon): Create simple wrapper for Plot with good defaults.
10793
+ marks: [
10794
+ Plot2.sphere({
10795
+ fill: "lightblue",
10796
+ fillOpacity: 0.5
10797
+ }),
10798
+ Plot2.geo(land, {
10799
+ fill: "darkgreen",
10800
+ fillOpacity: 0.5
10801
+ }),
10802
+ Plot2.graticule(),
10803
+ Plot2.dot(items, {
10804
+ x: createAdapter("lat", accessor),
10805
+ y: createAdapter("lng", accessor),
10806
+ ...options
10807
+ })
10808
+ ]
10829
10809
  });
10830
- } finally {
10831
- _effect.f();
10832
- }
10810
+ containerRef.current.append(plot3);
10811
+ return () => plot3?.remove();
10812
+ }, [
10813
+ items,
10814
+ width,
10815
+ height
10816
+ ]);
10817
+ return /* @__PURE__ */ React2.createElement("div", {
10818
+ ref: containerRef,
10819
+ className: "grow p-4"
10820
+ });
10833
10821
  };
10834
10822
 
10835
10823
  // src/components/Tree/Tree.tsx
10836
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
10837
- import React3, { useEffect as useEffect3, useRef, useState } from "react";
10824
+ import { RegistryContext } from "@effect-atom/atom-react";
10825
+ import React3, { useContext, useEffect as useEffect3, useRef, useState } from "react";
10838
10826
  import { useAsyncState } from "@dxos/react-ui";
10839
10827
  import { SVG } from "@dxos/react-ui-graph";
10840
10828
  import { SpaceGraphModel } from "@dxos/schema";
@@ -10973,10 +10961,10 @@ var TidyTree = (s, data, options) => {
10973
10961
  var TidyTree_default = TidyTree;
10974
10962
 
10975
10963
  // src/components/Tree/types/tree.ts
10976
- import { Schema } from "effect";
10964
+ import * as Schema from "effect/Schema";
10977
10965
  import { Key, Obj, Type } from "@dxos/echo";
10966
+ import { TestSchema } from "@dxos/echo/testing";
10978
10967
  import { invariant } from "@dxos/invariant";
10979
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-explorer/src/components/Tree/types/tree.ts";
10980
10968
  var TreeNodeType = Schema.Struct({
10981
10969
  id: Key.ObjectId,
10982
10970
  children: Schema.mutable(Schema.Array(Key.ObjectId)),
@@ -10984,7 +10972,7 @@ var TreeNodeType = Schema.Struct({
10984
10972
  key: Schema.String,
10985
10973
  value: Schema.Any
10986
10974
  })),
10987
- ref: Schema.optional(Type.Ref(Type.Expando))
10975
+ ref: Schema.optional(Type.Ref(TestSchema.Expando))
10988
10976
  }).pipe(Schema.mutable);
10989
10977
  var TreeType = Schema.Struct({
10990
10978
  root: Key.ObjectId,
@@ -10992,249 +10980,10 @@ var TreeType = Schema.Struct({
10992
10980
  key: Key.ObjectId,
10993
10981
  value: TreeNodeType
10994
10982
  }))
10995
- }).pipe(Type.Obj({
10983
+ }).pipe(Type.object({
10996
10984
  typename: "dxos.org/type/Tree",
10997
10985
  version: "0.1.0"
10998
10986
  }));
10999
- var Tree = class _Tree {
11000
- static {
11001
- this.create = () => {
11002
- const id = Key.ObjectId.random();
11003
- return Obj.make(TreeType, {
11004
- root: id,
11005
- nodes: {
11006
- [id]: {
11007
- id,
11008
- children: [],
11009
- data: {
11010
- text: ""
11011
- }
11012
- }
11013
- }
11014
- });
11015
- };
11016
- }
11017
- constructor(tree3) {
11018
- this._tree = tree3 ?? _Tree.create();
11019
- }
11020
- get tree() {
11021
- return this._tree;
11022
- }
11023
- // TODO(burdon): Make reactive.
11024
- get size() {
11025
- return Object.keys(this._tree.nodes).length;
11026
- }
11027
- get root() {
11028
- return this.getNode(this._tree.root);
11029
- }
11030
- //
11031
- // Traversal
11032
- //
11033
- /**
11034
- * Recursively traverse the tree until the callback returns a value.
11035
- */
11036
- tranverse(callback, root = this._tree.root, depth = 0) {
11037
- const node = this._tree.nodes[root];
11038
- const result = callback(node, depth);
11039
- if (result !== void 0) {
11040
- return result;
11041
- }
11042
- for (const childId of node.children) {
11043
- const result2 = this.tranverse(callback, childId, depth + 1);
11044
- if (result2 !== void 0) {
11045
- return result2;
11046
- }
11047
- }
11048
- }
11049
- getNode(id) {
11050
- const node = this._tree.nodes[id];
11051
- invariant(node, void 0, {
11052
- F: __dxlog_file,
11053
- L: 98,
11054
- S: this,
11055
- A: [
11056
- "node",
11057
- ""
11058
- ]
11059
- });
11060
- return node;
11061
- }
11062
- /**
11063
- * Get the children of a node.
11064
- */
11065
- getChildNodes(node) {
11066
- return node.children.map((id) => this.getNode(id));
11067
- }
11068
- /**
11069
- * Get the parent of a node.
11070
- */
11071
- getParent(node) {
11072
- const parent = this.tranverse((n) => {
11073
- if (n.children.includes(node.id)) {
11074
- return n;
11075
- }
11076
- });
11077
- return parent ?? null;
11078
- }
11079
- /**
11080
- * Get the next node in the tree.
11081
- */
11082
- getNext(node, hierarchical = true) {
11083
- if (hierarchical && node.children.length) {
11084
- return this.getChildNodes(node)[0];
11085
- } else {
11086
- const parent = this.getParent(node);
11087
- if (parent) {
11088
- const idx = this.getChildNodes(parent).findIndex(({ id }) => id === node.id);
11089
- if (idx < parent.children.length - 1) {
11090
- return this.getNode(parent.children[idx + 1]);
11091
- } else {
11092
- return this.getNext(parent, false);
11093
- }
11094
- }
11095
- }
11096
- }
11097
- /**
11098
- * Get the previous node in the tree.
11099
- */
11100
- getPrevious(node, hierarchical = true) {
11101
- const parent = this.getParent(node);
11102
- const idx = this.getChildNodes(parent).findIndex(({ id }) => id === node.id);
11103
- if (idx === 0) {
11104
- if (hierarchical) {
11105
- return parent;
11106
- }
11107
- } else {
11108
- const previous = this.getNode(parent.children[idx - 1]);
11109
- if (hierarchical && previous.children.length) {
11110
- return this.getLastDescendent(previous);
11111
- }
11112
- return previous;
11113
- }
11114
- }
11115
- /**
11116
- * Get the last descendent of a node.
11117
- */
11118
- getLastDescendent(node) {
11119
- const children = this.getChildNodes(node);
11120
- const last = children.length ? children[children.length - 1] : void 0;
11121
- if (last) {
11122
- return this.getLastDescendent(last);
11123
- }
11124
- return node;
11125
- }
11126
- //
11127
- // Mutations
11128
- //
11129
- /**
11130
- * Clear tree.
11131
- */
11132
- clear() {
11133
- const root = this._tree.nodes[this._tree.root];
11134
- root.children.length = 0;
11135
- this._tree.nodes = {
11136
- [root.id]: root
11137
- };
11138
- }
11139
- /**
11140
- * Add node.
11141
- */
11142
- addNode(parent, node, index) {
11143
- if (!node) {
11144
- const id = Key.ObjectId.random();
11145
- node = {
11146
- id,
11147
- children: [],
11148
- data: {
11149
- text: ""
11150
- }
11151
- };
11152
- }
11153
- this._tree.nodes[node.id] = node;
11154
- parent.children.splice(index ?? parent.children.length, 0, node.id);
11155
- return node;
11156
- }
11157
- /**
11158
- * Delete node.
11159
- */
11160
- deleteNode(parent, id) {
11161
- const node = this._tree.nodes[id];
11162
- if (!node) {
11163
- return void 0;
11164
- }
11165
- delete this._tree.nodes[node.id];
11166
- const idx = parent.children.findIndex((child) => child === id);
11167
- if (idx !== -1) {
11168
- parent.children.splice(idx, 1);
11169
- }
11170
- return node;
11171
- }
11172
- /**
11173
- * Move child node.
11174
- */
11175
- moveNode(node, from, to) {
11176
- invariant(from >= 0 && from < node.children.length, void 0, {
11177
- F: __dxlog_file,
11178
- L: 228,
11179
- S: this,
11180
- A: [
11181
- "from >= 0 && from < node.children.length",
11182
- ""
11183
- ]
11184
- });
11185
- invariant(to >= 0 && to < node.children.length, void 0, {
11186
- F: __dxlog_file,
11187
- L: 229,
11188
- S: this,
11189
- A: [
11190
- "to >= 0 && to < node.children.length",
11191
- ""
11192
- ]
11193
- });
11194
- if (from === to) {
11195
- return null;
11196
- }
11197
- const child = node.children[from];
11198
- node.children.splice(from, 1);
11199
- node.children.splice(to, 0, child);
11200
- return this.getNode(child);
11201
- }
11202
- /**
11203
- * Indent node.
11204
- */
11205
- indentNode(node) {
11206
- const parent = this.getParent(node);
11207
- if (!parent) {
11208
- return;
11209
- }
11210
- const idx = parent.children.findIndex((child) => child === node.id);
11211
- if (idx < 1 || idx >= parent.children.length) {
11212
- return;
11213
- }
11214
- const previous = this.getNode(parent.children[idx - 1]);
11215
- parent.children.splice(idx, 1);
11216
- previous.children.push(node.id);
11217
- }
11218
- /**
11219
- * Unindent node.
11220
- */
11221
- unindentNode(node) {
11222
- const parent = this.getParent(node);
11223
- if (!parent) {
11224
- return;
11225
- }
11226
- const ancestor = this.getParent(parent);
11227
- if (!ancestor) {
11228
- return;
11229
- }
11230
- const nodeIdx = parent.children.findIndex((id) => id === node.id);
11231
- const [_, ...rest] = parent.children.splice(nodeIdx, parent.children.length - nodeIdx);
11232
- parent.children.splice(nodeIdx, parent.children.length - nodeIdx);
11233
- const parentIdx = this.getChildNodes(ancestor).findIndex((n) => n.id === parent.id);
11234
- ancestor.children.splice(parentIdx + 1, 0, node.id);
11235
- node.children.push(...rest);
11236
- }
11237
- };
11238
10987
 
11239
10988
  // src/components/Tree/types/types.ts
11240
10989
  var mapGraphToTreeData = (model, maxDepth = 8) => {
@@ -11262,68 +11011,66 @@ var renderers = /* @__PURE__ */ new Map([
11262
11011
  HierarchicalEdgeBundling_default
11263
11012
  ]
11264
11013
  ]);
11265
- var Tree2 = ({ space, selected, variant = "tidy", onNodeClick }) => {
11266
- var _effect = _useSignals3();
11267
- try {
11268
- const [model] = useAsyncState(async () => space ? new SpaceGraphModel().open(space) : void 0, [
11269
- space,
11270
- selected
11271
- ]);
11272
- const [tree3, setTree] = useState();
11273
- useEffect3(() => {
11274
- return model?.subscribe(() => {
11275
- const tree4 = mapGraphToTreeData(model);
11276
- setTree(tree4);
11277
- }, true);
11278
- }, [
11279
- model
11280
- ]);
11281
- const context = useRef(null);
11282
- useEffect3(() => {
11283
- if (context.current) {
11284
- const { width, height } = context.current.size;
11285
- const size = Math.min(width, height);
11286
- const radius = size * 0.4;
11287
- const options = {
11288
- // TODO(burdon): Type.
11289
- label: (d) => d.label ?? d.id,
11290
- width,
11291
- height,
11292
- radius,
11293
- marginLeft: (width - radius * 2) / 2,
11294
- marginRight: (width - radius * 2) / 2,
11295
- marginTop: (height - radius * 2) / 2,
11296
- marginBottom: (height - radius * 2) / 2,
11297
- slots: defaultTreeLayoutSlots
11298
- };
11299
- if (tree3) {
11300
- const renderer = renderers.get(variant);
11301
- renderer?.(context.current.svg, tree3, options);
11302
- }
11014
+ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
11015
+ const registry = useContext(RegistryContext);
11016
+ const [model] = useAsyncState(async () => space ? new SpaceGraphModel(registry).open(space.db) : void 0, [
11017
+ space,
11018
+ selected,
11019
+ registry
11020
+ ]);
11021
+ const [tree3, setTree] = useState();
11022
+ useEffect3(() => {
11023
+ return model?.subscribe(() => {
11024
+ const tree4 = mapGraphToTreeData(model);
11025
+ setTree(tree4);
11026
+ }, true);
11027
+ }, [
11028
+ model
11029
+ ]);
11030
+ const context = useRef(null);
11031
+ useEffect3(() => {
11032
+ if (context.current?.size) {
11033
+ const { width, height } = context.current.size;
11034
+ const size = Math.min(width, height);
11035
+ const radius = size * 0.4;
11036
+ const options = {
11037
+ // TODO(burdon): Type.
11038
+ label: (d) => d.label ?? d.id,
11039
+ width,
11040
+ height,
11041
+ radius,
11042
+ marginLeft: (width - radius * 2) / 2,
11043
+ marginRight: (width - radius * 2) / 2,
11044
+ marginTop: (height - radius * 2) / 2,
11045
+ marginBottom: (height - radius * 2) / 2,
11046
+ slots: defaultTreeLayoutSlots
11047
+ };
11048
+ if (tree3) {
11049
+ const renderer = renderers.get(variant);
11050
+ renderer?.(context.current.svg, tree3, options);
11303
11051
  }
11304
- }, [
11305
- context.current,
11306
- tree3
11307
- ]);
11308
- return /* @__PURE__ */ React3.createElement("div", {
11309
- onClick: () => onNodeClick?.()
11310
- }, /* @__PURE__ */ React3.createElement(SVG.Root, {
11311
- ref: context
11312
- }));
11313
- } finally {
11314
- _effect.f();
11315
- }
11052
+ }
11053
+ }, [
11054
+ context.current,
11055
+ tree3
11056
+ ]);
11057
+ return /* @__PURE__ */ React3.createElement("div", {
11058
+ className: "grow",
11059
+ onClick: () => onNodeClick?.()
11060
+ }, /* @__PURE__ */ React3.createElement(SVG.Root, {
11061
+ ref: context
11062
+ }));
11316
11063
  };
11317
11064
 
11318
11065
  // src/components/index.ts
11319
11066
  import { lazy } from "react";
11320
- var ExplorerContainer = lazy(() => import("./ExplorerContainer-OGHSHZD5.mjs"));
11067
+ var ExplorerContainer = lazy(() => import("./ExplorerContainer-BFAWRIAJ.mjs"));
11321
11068
 
11322
11069
  export {
11323
11070
  Chart,
11324
11071
  Globe,
11325
11072
  defaultTreeLayoutSlots,
11326
- Tree2 as Tree,
11073
+ Tree,
11327
11074
  ExplorerContainer
11328
11075
  };
11329
- //# sourceMappingURL=chunk-PVFZFKQ6.mjs.map
11076
+ //# sourceMappingURL=chunk-AGZAGILW.mjs.map