@dxos/plugin-explorer 0.8.3 → 0.8.4-main.28f8d3d

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 (108) hide show
  1. package/dist/lib/browser/{ExplorerContainer-DXL34I3F.mjs → ExplorerContainer-5QHLD2B2.mjs} +4 -4
  2. package/dist/lib/browser/{ExplorerContainer-DXL34I3F.mjs.map → ExplorerContainer-5QHLD2B2.mjs.map} +2 -2
  3. package/dist/lib/browser/{chunk-SLB2F5AO.mjs → chunk-2MKBRIUT.mjs} +7 -6
  4. package/dist/lib/browser/chunk-2MKBRIUT.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-73YTQHOT.mjs → chunk-CZZ3DDR7.mjs} +4 -4
  6. package/dist/lib/browser/{chunk-73YTQHOT.mjs.map → chunk-CZZ3DDR7.mjs.map} +2 -2
  7. package/dist/lib/browser/{chunk-Z5BGAHLD.mjs → chunk-L4U4MPSZ.mjs} +8 -5
  8. package/dist/lib/browser/{chunk-Z5BGAHLD.mjs.map → chunk-L4U4MPSZ.mjs.map} +3 -3
  9. package/dist/lib/browser/{chunk-JRKQNHS6.mjs → chunk-LGK64HLU.mjs} +18 -258
  10. package/dist/lib/browser/{chunk-JRKQNHS6.mjs.map → chunk-LGK64HLU.mjs.map} +3 -3
  11. package/dist/lib/browser/{chunk-OBAFAA5V.mjs → chunk-UL5EDJPE.mjs} +2 -2
  12. package/dist/lib/browser/index.mjs +19 -18
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/{intent-resolver-JZKYVFQJ.mjs → intent-resolver-7MVEYNX7.mjs} +5 -5
  15. package/dist/lib/browser/{intent-resolver-JZKYVFQJ.mjs.map → intent-resolver-7MVEYNX7.mjs.map} +3 -3
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/meta.mjs +1 -1
  18. package/dist/lib/browser/{react-surface-IAEP2GBT.mjs → react-surface-FABRDFTF.mjs} +6 -6
  19. package/dist/lib/browser/types/index.mjs +2 -2
  20. package/dist/lib/node-esm/{ExplorerContainer-MFE7PXF4.mjs → ExplorerContainer-AMYAVLO4.mjs} +4 -4
  21. package/dist/lib/node-esm/{ExplorerContainer-MFE7PXF4.mjs.map → ExplorerContainer-AMYAVLO4.mjs.map} +2 -2
  22. package/dist/lib/node-esm/{chunk-VSORIAHH.mjs → chunk-3ODK27PU.mjs} +7 -6
  23. package/dist/lib/node-esm/chunk-3ODK27PU.mjs.map +7 -0
  24. package/dist/lib/node-esm/{chunk-N6VEANUZ.mjs → chunk-4GWDNZ4Z.mjs} +4 -4
  25. package/dist/lib/node-esm/{chunk-N6VEANUZ.mjs.map → chunk-4GWDNZ4Z.mjs.map} +2 -2
  26. package/dist/lib/node-esm/{chunk-AE7VHUJM.mjs → chunk-MCOXQ3ML.mjs} +8 -5
  27. package/dist/lib/node-esm/{chunk-AE7VHUJM.mjs.map → chunk-MCOXQ3ML.mjs.map} +3 -3
  28. package/dist/lib/node-esm/{chunk-3CMBLK6W.mjs → chunk-PIAXA43R.mjs} +2 -2
  29. package/dist/lib/node-esm/{chunk-IUFYOE44.mjs → chunk-W4ZNCGOD.mjs} +18 -258
  30. package/dist/lib/node-esm/{chunk-IUFYOE44.mjs.map → chunk-W4ZNCGOD.mjs.map} +3 -3
  31. package/dist/lib/node-esm/index.mjs +19 -18
  32. package/dist/lib/node-esm/index.mjs.map +3 -3
  33. package/dist/lib/node-esm/{intent-resolver-7G6ZKM6E.mjs → intent-resolver-NL3SR2XF.mjs} +5 -5
  34. package/dist/lib/node-esm/{intent-resolver-7G6ZKM6E.mjs.map → intent-resolver-NL3SR2XF.mjs.map} +3 -3
  35. package/dist/lib/node-esm/meta.json +1 -1
  36. package/dist/lib/node-esm/meta.mjs +1 -1
  37. package/dist/lib/node-esm/{react-surface-XBH3WZDL.mjs → react-surface-EYCZUAAI.mjs} +6 -6
  38. package/dist/lib/node-esm/types/index.mjs +2 -2
  39. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  40. package/dist/types/src/components/Chart/Chart.d.ts.map +1 -1
  41. package/dist/types/src/components/Chart/Chart.stories.d.ts +1 -1
  42. package/dist/types/src/components/Chart/Chart.stories.d.ts.map +1 -1
  43. package/dist/types/src/components/ExplorerContainer.d.ts.map +1 -1
  44. package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
  45. package/dist/types/src/components/Globe/Globe.stories.d.ts +1 -1
  46. package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
  47. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts +1 -1
  48. package/dist/types/src/components/Graph/D3ForceGraph.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts +1 -1
  50. package/dist/types/src/components/Graph/ForceGraph.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Graph/testing.d.ts +1 -1
  52. package/dist/types/src/components/Graph/testing.d.ts.map +1 -1
  53. package/dist/types/src/components/Tree/Tree.stories.d.ts +1 -1
  54. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  55. package/dist/types/src/hooks/useGraphModel.d.ts +2 -2
  56. package/dist/types/src/hooks/useGraphModel.d.ts.map +1 -1
  57. package/dist/types/src/translations.d.ts +16 -23
  58. package/dist/types/src/translations.d.ts.map +1 -1
  59. package/dist/types/src/types/types.d.ts.map +1 -1
  60. package/dist/types/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +40 -30
  62. package/src/ExplorerPlugin.tsx +3 -3
  63. package/src/capabilities/intent-resolver.ts +1 -1
  64. package/src/components/Chart/Chart.stories.tsx +3 -2
  65. package/src/components/Chart/Chart.tsx +1 -1
  66. package/src/components/ExplorerContainer.tsx +2 -1
  67. package/src/components/Globe/Globe.stories.tsx +4 -3
  68. package/src/components/Globe/Globe.tsx +1 -1
  69. package/src/components/Graph/D3ForceGraph.stories.tsx +5 -4
  70. package/src/components/Graph/D3ForceGraph.tsx +1 -1
  71. package/src/components/Graph/ForceGraph.stories.tsx +5 -4
  72. package/src/components/Graph/ForceGraph.tsx +2 -2
  73. package/src/components/Graph/testing.ts +2 -2
  74. package/src/components/Tree/Tree.stories.tsx +2 -2
  75. package/src/components/Tree/Tree.tsx +1 -1
  76. package/src/components/Tree/types/tree.test.ts +4 -3
  77. package/src/hooks/useGraphModel.ts +5 -4
  78. package/src/translations.ts +8 -6
  79. package/src/types/types.ts +2 -1
  80. package/dist/lib/browser/chunk-SLB2F5AO.mjs.map +0 -7
  81. package/dist/lib/node/ExplorerContainer-VUXH55VV.cjs +0 -61
  82. package/dist/lib/node/ExplorerContainer-VUXH55VV.cjs.map +0 -7
  83. package/dist/lib/node/chunk-4T4LCT5R.cjs +0 -52
  84. package/dist/lib/node/chunk-4T4LCT5R.cjs.map +0 -7
  85. package/dist/lib/node/chunk-BCDVG2CH.cjs +0 -44
  86. package/dist/lib/node/chunk-BCDVG2CH.cjs.map +0 -7
  87. package/dist/lib/node/chunk-MLRYW4WQ.cjs +0 -56
  88. package/dist/lib/node/chunk-MLRYW4WQ.cjs.map +0 -7
  89. package/dist/lib/node/chunk-SVU4VMYX.cjs +0 -11339
  90. package/dist/lib/node/chunk-SVU4VMYX.cjs.map +0 -7
  91. package/dist/lib/node/chunk-TY543HPV.cjs +0 -214
  92. package/dist/lib/node/chunk-TY543HPV.cjs.map +0 -7
  93. package/dist/lib/node/index.cjs +0 -130
  94. package/dist/lib/node/index.cjs.map +0 -7
  95. package/dist/lib/node/intent-resolver-G2MFNIXA.cjs +0 -39
  96. package/dist/lib/node/intent-resolver-G2MFNIXA.cjs.map +0 -7
  97. package/dist/lib/node/meta.cjs +0 -31
  98. package/dist/lib/node/meta.cjs.map +0 -7
  99. package/dist/lib/node/meta.json +0 -1
  100. package/dist/lib/node/react-surface-UJD5RGRZ.cjs +0 -53
  101. package/dist/lib/node/react-surface-UJD5RGRZ.cjs.map +0 -7
  102. package/dist/lib/node/types/index.cjs +0 -32
  103. package/dist/lib/node/types/index.cjs.map +0 -7
  104. package/dist/lib/node-esm/chunk-VSORIAHH.mjs.map +0 -7
  105. /package/dist/lib/browser/{chunk-OBAFAA5V.mjs.map → chunk-UL5EDJPE.mjs.map} +0 -0
  106. /package/dist/lib/browser/{react-surface-IAEP2GBT.mjs.map → react-surface-FABRDFTF.mjs.map} +0 -0
  107. /package/dist/lib/node-esm/{chunk-3CMBLK6W.mjs.map → chunk-PIAXA43R.mjs.map} +0 -0
  108. /package/dist/lib/node-esm/{react-surface-XBH3WZDL.mjs.map → react-surface-EYCZUAAI.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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, { type FC, 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 { getHashColor } from '@dxos/react-ui-theme';\nimport { type SpaceGraphNode, type SpaceGraphModel, type SpaceGraphEdge } 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: FC<D3ForceGraphProps> = ({ classNames, model, selection: _selection, grid, ...props }) => {\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: getHashColor(obj && Obj.getTypename(obj))?.color,\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 { filterObjectsSync, type SearchResult } 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>();\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 = undefined;\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", "getHashColor", "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", "getHashColor", "Obj", "getTypename", "classes", "onSelect", "forceLink", "forceManyBody", "NativeForceGraph", "React", "useEffect", "useRef", "useState", "useResizeDetector", "filterObjectsSync", "GraphAdapter", "graph", "_nodes", "_links", "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", "undefined", "onEngineStop", "handleZoomToFit", "onNodeClick", "emitParticle", "d3Force", "forceLink", "distance", "strength", "forceManyBody", "warmupTicks", "cooldownTime", "resumeAnimation", "zoomToFit", "React", "div", "className", "onClick"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, 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 { getHashColor } 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: FC<D3ForceGraphProps> = ({ classNames, model, selection: _selection, grid, ...props }) => {\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: getHashColor(obj && Obj.getTypename(obj))?.color,\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>();\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 = undefined;\n };\n }, []);\n\n useEffect(() => {\n if (!data || !width || !height || !forceGraph.current) {\n return;\n }\n\n // https://github.com/vasturiano/force-graph?tab=readme-ov-file#container-layout\n forceGraph.current\n .pauseAnimation()\n .width(width)\n .height(height)\n .onEngineStop(() => {\n handleZoomToFit();\n })\n .onNodeClick((node: any) => {\n forceGraph.current?.emitParticle(node);\n })\n\n // https://github.com/vasturiano/force-graph?tab=readme-ov-file#force-engine-d3-force-configuration\n // .d3Force('center', forceCenter().strength(0.9))\n .d3Force('link', forceLink().distance(160).strength(0.5))\n .d3Force('charge', forceManyBody().strength(-30))\n\n .graphData(data)\n .warmupTicks(100)\n .cooldownTime(1_000)\n .resumeAnimation();\n }, [data, width, height, forceGraph.current]);\n\n const handleZoomToFit = () => {\n forceGraph.current?.zoomToFit(400, 40);\n };\n\n return (\n <div ref={ref} className='relative grow' onClick={handleZoomToFit}>\n <div ref={rootRef} className='absolute inset-0' />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Graph } from '@dxos/graph';\n\nexport type GraphNode = {\n id?: string;\n};\n\nexport type GraphLink = {\n source?: string;\n target?: string;\n};\n\nexport type GraphData = {\n nodes: GraphNode[];\n links: GraphLink[];\n};\n\n/**\n * Map common graph to force-graph format.\n */\nexport class GraphAdapter implements GraphData {\n private readonly _nodes: GraphNode[] = [];\n private readonly _links: GraphLink[] = [];\n\n constructor(private readonly graph: Graph) {\n this._nodes = graph.nodes.map((node) => ({\n id: node.id,\n type: node.type,\n data: node.data,\n }));\n\n this._links = graph.edges.map((edge) => ({\n type: edge.type,\n source: edge.source,\n target: edge.target,\n data: edge.data,\n }));\n }\n\n get nodes() {\n return this._nodes;\n }\n\n get links() {\n return this._links;\n }\n}\n"],
5
+ "mappings": ";;;;AAIA,OAAOA,SAAkBC,aAAaC,WAAWC,SAASC,cAAc;AAExE,SAASC,WAAW;AACpB,SAASC,sBAAsB;AAE/B,SAEEC,qBAGAC,WAEK;AACP,SAASC,oBAAoB;AAG7B,OAAO;AAWA,IAAMC,eAAsC,CAAC,EAAEC,YAAYC,OAAOC,WAAWC,YAAYC,MAAM,GAAGC,MAAAA,MAAO;;;AAC9G,UAAMC,UAAUC,OAAmB,IAAA;AACnC,UAAMC,YAAYC,QAAyC,MAAA;AACzD,UAAIH,QAAQI,SAAS;AACnB,eAAO,IAAIC,oBAAoBL,QAAQI,SAAS;UAC9CE,YAAY;YACVC,WAAW,CAACC,SAAAA;AAGV,qBAAOA,KAAKC,MAAMC,QAAQC,WAAW;YACvC;UACF;UACAC,QAAQ;YACNC,OAAO;cACLC,UAAU;YACZ;UACF;QACF,CAAA;MACF;IACF,GAAG;MAACd,QAAQI;KAAQ;AAEpB,UAAMW,QAAQd,OAAwB,IAAA;AACtC,UAAML,YAAYO,QAAQ,MAAMN,cAAc,IAAImB,eAAAA,GAAkB;MAACnB;KAAW;AAChFoB,cAAU,MAAMF,MAAMX,SAASc,QAAAA,GAAW;MAACtB,UAAUuB,SAASC;KAAM;AAEpE,UAAMC,eAAeC,YACnB,CAACC,SAAAA;AACC,UAAI3B,UAAU4B,SAASD,KAAKE,EAAE,GAAG;AAC/B7B,kBAAU8B,OAAOH,KAAKE,EAAE;MAC1B,OAAO;AACL7B,kBAAU+B,IAAIJ,KAAKE,EAAE;MACvB;IACF,GACA;MAAC7B;KAAU;AAGb,WACE,sBAAA,cAACgC,IAAIC,MAAI;MAACC,KAAK9B;MAASN;OACtB,sBAAA,cAACkC,IAAIG,SAAO,IAAA,GACXjC,QAAQ,sBAAA,cAAC8B,IAAII,MAAI;MAACC,MAAAA;QACnB,sBAAA,cAACL,IAAIM,MAAI;MAACC,QAAQ;QAAC,IAAI;QAAG;;OACxB,sBAAA,cAACP,IAAIQ,OAAK;MACP,GAAGrC;MACJ+B,KAAKf;MACLpB;MACAO;MACAmC,QAAQ;QACNC,MAAM,CAACf,SAAAA;AACL,iBAAOA,KAAKd,MAAMA,KAAK8B,SAAShB,KAAKE;QACvC;MACF;MACAnB,YAAY;QACViB,MAAM,CAACA,SAAAA;AACL,gBAAMiB,MAAMjB,KAAKd,MAAMA,KAAKC;AAC5B,iBAAO;YACLD,MAAM;cACJgC,OAAOC,aAAaF,OAAOG,IAAIC,YAAYJ,GAAAA,CAAAA,GAAOC;YACpD;YACAI,SAAS;cACP,eAAejD,UAAU4B,SAASD,KAAKE,EAAE;YAC3C;UACF;QACF;MACF;MACAqB,UAAUzB;;;;;AAKpB;;;;AChGA,SAAS0B,WAAWC,qBAAqB;AACzC,OAAOC,sBAAsB;AAC7B,OAAOC,UAAkBC,aAAAA,YAAWC,UAAAA,SAAQC,gBAAgB;AAC5D,SAASC,yBAAyB;AAElC,SAA4BC,yBAAyB;;;ACc9C,IAAMC,eAAN,MAAMA;;EACMC;EACAC;EAEjB,YAA6BC,OAAc;SAAdA,QAAAA;SAHZF,SAAsB,CAAA;SACtBC,SAAsB,CAAA;AAGrC,SAAKD,SAASE,MAAMC,MAAMC,IAAI,CAACC,UAAU;MACvCC,IAAID,KAAKC;MACTC,MAAMF,KAAKE;MACXC,MAAMH,KAAKG;IACb,EAAA;AAEA,SAAKP,SAASC,MAAMO,MAAML,IAAI,CAACM,UAAU;MACvCH,MAAMG,KAAKH;MACXI,QAAQD,KAAKC;MACbC,QAAQF,KAAKE;MACbJ,MAAME,KAAKF;IACb,EAAA;EACF;EAEA,IAAIL,QAAQ;AACV,WAAO,KAAKH;EACd;EAEA,IAAIa,QAAQ;AACV,WAAO,KAAKZ;EACd;AACF;;;AD9BO,IAAMa,aAAkC,CAAC,EAAEC,OAAOC,MAAK,MAAE;;;AAC9D,UAAM,EAAEC,KAAKC,OAAOC,OAAM,IAAKC,kBAAkB;MAAEC,aAAa;IAAI,CAAA;AACpE,UAAMC,UAAUC,QAAuB,IAAA;AACvC,UAAMC,aAAaD,QAAAA;AAEnB,UAAME,cAAcF,QAAAA;AACpBE,gBAAYC,UAAUC,kBAAkBZ,OAAOa,WAAW,CAAA,GAAIZ,KAAAA;AAE9D,UAAM,CAACa,MAAMC,OAAAA,IAAWC,SAAAA;AACxBC,IAAAA,WAAU,MAAA;AACR,aAAOjB,OAAOkB,UAAU,CAAClB,WAAAA;AACvBe,gBAAQ,IAAII,aAAanB,OAAMoB,KAAK,CAAA;MACtC,CAAA;IACF,GAAG;MAACpB;KAAM;AAEViB,IAAAA,WAAU,MAAA;AACR,UAAIV,QAAQI,SAAS;AAGnBF,mBAAWE,UAAU,IAAIU,iBAAiBd,QAAQI,OAAO,EAEtDW,YAAY,CAAA,EACZC,UAAU,CAACC,SAAeA,KAAKC,SAAS,WAAWD,KAAKV,KAAKY,WAAYF,KAAKV,KAAKa,SAASH,KAAKI,EAAE,EACnGC,gBAAgB,CAACL,SAAeA,KAAKC,SAAS,WAAW,WAAWD,KAAKV,KAAKY,QAAQ,EAGtFI,gBAAgB,CAACC,SAAcA,KAAKN,IAAI;MAC7C;AAEA,aAAO,MAAA;AACLhB,mBAAWE,SAASqB,eAAAA,EAAiBC,UAAU;UAAEC,OAAO,CAAA;UAAIC,OAAO,CAAA;QAAG,CAAA;AACtE1B,mBAAWE,UAAUyB;MACvB;IACF,GAAG,CAAA,CAAE;AAELnB,IAAAA,WAAU,MAAA;AACR,UAAI,CAACH,QAAQ,CAACX,SAAS,CAACC,UAAU,CAACK,WAAWE,SAAS;AACrD;MACF;AAGAF,iBAAWE,QACRqB,eAAc,EACd7B,MAAMA,KAAAA,EACNC,OAAOA,MAAAA,EACPiC,aAAa,MAAA;AACZC,wBAAAA;MACF,CAAA,EACCC,YAAY,CAACf,SAAAA;AACZf,mBAAWE,SAAS6B,aAAahB,IAAAA;MACnC,CAAA,EAICiB,QAAQ,QAAQC,UAAAA,EAAYC,SAAS,GAAA,EAAKC,SAAS,GAAA,CAAA,EACnDH,QAAQ,UAAUI,cAAAA,EAAgBD,SAAS,GAAC,CAAA,EAE5CX,UAAUnB,IAAAA,EACVgC,YAAY,GAAA,EACZC,aAAa,GAAA,EACbC,gBAAe;IACpB,GAAG;MAAClC;MAAMX;MAAOC;MAAQK,WAAWE;KAAQ;AAE5C,UAAM2B,kBAAkB,MAAA;AACtB7B,iBAAWE,SAASsC,UAAU,KAAK,EAAA;IACrC;AAEA,WACE,gBAAAC,OAAA,cAACC,OAAAA;MAAIjD;MAAUkD,WAAU;MAAgBC,SAASf;OAChD,gBAAAY,OAAA,cAACC,OAAAA;MAAIjD,KAAKK;MAAS6C,WAAU;;;;;AAGnC;",
6
+ "names": ["React", "useCallback", "useEffect", "useMemo", "useRef", "Obj", "SelectionModel", "GraphForceProjector", "SVG", "getHashColor", "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", "getHashColor", "Obj", "getTypename", "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", "undefined", "onEngineStop", "handleZoomToFit", "onNodeClick", "emitParticle", "d3Force", "forceLink", "distance", "strength", "forceManyBody", "warmupTicks", "cooldownTime", "resumeAnimation", "zoomToFit", "React", "div", "className", "onClick"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/plugins/plugin-explorer/src/meta.ts
3
+ // src/meta.ts
4
4
  var EXPLORER_PLUGIN = "dxos.org/plugin/explorer";
5
5
  var meta = {
6
6
  id: EXPLORER_PLUGIN,
@@ -20,4 +20,4 @@ export {
20
20
  EXPLORER_PLUGIN,
21
21
  meta
22
22
  };
23
- //# sourceMappingURL=chunk-3CMBLK6W.mjs.map
23
+ //# sourceMappingURL=chunk-PIAXA43R.mjs.map
@@ -1,17 +1,17 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/plugins/plugin-explorer/src/components/Chart/Chart.tsx
3
+ // src/components/Chart/Chart.tsx
4
4
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
5
5
  import * as Plot from "@observablehq/plot";
6
6
  import React, { useEffect } from "react";
7
7
  import { useResizeDetector } from "react-resize-detector";
8
8
 
9
- // packages/plugins/plugin-explorer/src/components/plot.ts
9
+ // src/components/plot.ts
10
10
  var createAdapter = (prop, accessor) => accessor ? {
11
11
  transform: (values) => values.map((value) => accessor(value)[prop])
12
12
  } : prop;
13
13
 
14
- // packages/plugins/plugin-explorer/src/components/Chart/Chart.tsx
14
+ // src/components/Chart/Chart.tsx
15
15
  var defaultOptions = {
16
16
  r: 4,
17
17
  stroke: "gray",
@@ -60,14 +60,14 @@ var Chart = ({ items = [], accessor, options = defaultOptions }) => {
60
60
  }
61
61
  };
62
62
 
63
- // packages/plugins/plugin-explorer/src/components/Globe/Globe.tsx
63
+ // src/components/Globe/Globe.tsx
64
64
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
65
65
  import * as Plot2 from "@observablehq/plot";
66
66
  import React2, { useEffect as useEffect2 } from "react";
67
67
  import { useResizeDetector as useResizeDetector2 } from "react-resize-detector";
68
68
  import * as topojson from "topojson-client";
69
69
 
70
- // packages/plugins/plugin-explorer/data/countries-110m.js
70
+ // data/countries-110m.js
71
71
  var countries_110m_default = {
72
72
  type: "Topology",
73
73
  objects: {
@@ -10769,7 +10769,7 @@ var countries_110m_default = {
10769
10769
  }
10770
10770
  };
10771
10771
 
10772
- // packages/plugins/plugin-explorer/src/components/Globe/Globe.tsx
10772
+ // src/components/Globe/Globe.tsx
10773
10773
  var defaultOptions2 = {
10774
10774
  r: 4,
10775
10775
  fill: "#003300"
@@ -10834,14 +10834,14 @@ var Globe = ({ items = [], accessor, projection = "orthographic", options = defa
10834
10834
  }
10835
10835
  };
10836
10836
 
10837
- // packages/plugins/plugin-explorer/src/components/Tree/Tree.tsx
10837
+ // src/components/Tree/Tree.tsx
10838
10838
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
10839
10839
  import React3, { useEffect as useEffect3, useRef, useState } from "react";
10840
10840
  import { useAsyncState } from "@dxos/react-ui";
10841
10841
  import { SVG } from "@dxos/react-ui-graph";
10842
10842
  import { SpaceGraphModel } from "@dxos/schema";
10843
10843
 
10844
- // packages/plugins/plugin-explorer/src/components/Tree/layout/HierarchicalEdgeBundling.ts
10844
+ // src/components/Tree/layout/HierarchicalEdgeBundling.ts
10845
10845
  import { cluster, curveBundle, hierarchy, lineRadial, select } from "d3";
10846
10846
  var HierarchicalEdgeBundling = (s, data, options) => {
10847
10847
  const svg = select(s);
@@ -10904,7 +10904,7 @@ var flatten = (node) => {
10904
10904
  };
10905
10905
  var HierarchicalEdgeBundling_default = HierarchicalEdgeBundling;
10906
10906
 
10907
- // packages/plugins/plugin-explorer/src/components/Tree/layout/RadialTree.ts
10907
+ // src/components/Tree/layout/RadialTree.ts
10908
10908
  import { hierarchy as hierarchy2, linkRadial, select as select2, tree } from "d3";
10909
10909
  var RadialTree = (s, data, options) => {
10910
10910
  const svg = select2(s);
@@ -10929,7 +10929,7 @@ var RadialTree = (s, data, options) => {
10929
10929
  };
10930
10930
  var RadialTree_default = RadialTree;
10931
10931
 
10932
- // packages/plugins/plugin-explorer/src/components/Tree/layout/TidyTree.ts
10932
+ // src/components/Tree/layout/TidyTree.ts
10933
10933
  import { curveBumpX, hierarchy as hierarchy3, link, select as select3, tree as tree2 } from "d3";
10934
10934
  var TidyTree = (s, data, options) => {
10935
10935
  const svg = select3(s);
@@ -10974,11 +10974,10 @@ var TidyTree = (s, data, options) => {
10974
10974
  };
10975
10975
  var TidyTree_default = TidyTree;
10976
10976
 
10977
- // packages/plugins/plugin-explorer/src/components/Tree/types/tree.ts
10977
+ // src/components/Tree/types/tree.ts
10978
10978
  import { Schema } from "effect";
10979
10979
  import { Key, Obj, Type } from "@dxos/echo";
10980
10980
  import { invariant } from "@dxos/invariant";
10981
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-explorer/src/components/Tree/types/tree.ts";
10982
10981
  var TreeNodeType = Schema.Struct({
10983
10982
  id: Key.ObjectId,
10984
10983
  children: Schema.mutable(Schema.Array(Key.ObjectId)),
@@ -10998,253 +10997,14 @@ var TreeType = Schema.Struct({
10998
10997
  typename: "dxos.org/type/Tree",
10999
10998
  version: "0.1.0"
11000
10999
  }));
11001
- var Tree = class _Tree {
11002
- static {
11003
- this.create = () => {
11004
- const id = Key.ObjectId.random();
11005
- return Obj.make(TreeType, {
11006
- root: id,
11007
- nodes: {
11008
- [id]: {
11009
- id,
11010
- children: [],
11011
- data: {
11012
- text: ""
11013
- }
11014
- }
11015
- }
11016
- });
11017
- };
11018
- }
11019
- constructor(tree3) {
11020
- this._tree = tree3 ?? _Tree.create();
11021
- }
11022
- get tree() {
11023
- return this._tree;
11024
- }
11025
- // TODO(burdon): Make reactive.
11026
- get size() {
11027
- return Object.keys(this._tree.nodes).length;
11028
- }
11029
- get root() {
11030
- return this.getNode(this._tree.root);
11031
- }
11032
- //
11033
- // Traversal
11034
- //
11035
- /**
11036
- * Recursively traverse the tree until the callback returns a value.
11037
- */
11038
- tranverse(callback, root = this._tree.root, depth = 0) {
11039
- const node = this._tree.nodes[root];
11040
- const result = callback(node, depth);
11041
- if (result !== void 0) {
11042
- return result;
11043
- }
11044
- for (const childId of node.children) {
11045
- const result2 = this.tranverse(callback, childId, depth + 1);
11046
- if (result2 !== void 0) {
11047
- return result2;
11048
- }
11049
- }
11050
- }
11051
- getNode(id) {
11052
- const node = this._tree.nodes[id];
11053
- invariant(node, void 0, {
11054
- F: __dxlog_file,
11055
- L: 98,
11056
- S: this,
11057
- A: [
11058
- "node",
11059
- ""
11060
- ]
11061
- });
11062
- return node;
11063
- }
11064
- /**
11065
- * Get the children of a node.
11066
- */
11067
- getChildNodes(node) {
11068
- return node.children.map((id) => this.getNode(id));
11069
- }
11070
- /**
11071
- * Get the parent of a node.
11072
- */
11073
- getParent(node) {
11074
- const parent = this.tranverse((n) => {
11075
- if (n.children.includes(node.id)) {
11076
- return n;
11077
- }
11078
- });
11079
- return parent ?? null;
11080
- }
11081
- /**
11082
- * Get the next node in the tree.
11083
- */
11084
- getNext(node, hierarchical = true) {
11085
- if (hierarchical && node.children.length) {
11086
- return this.getChildNodes(node)[0];
11087
- } else {
11088
- const parent = this.getParent(node);
11089
- if (parent) {
11090
- const idx = this.getChildNodes(parent).findIndex(({ id }) => id === node.id);
11091
- if (idx < parent.children.length - 1) {
11092
- return this.getNode(parent.children[idx + 1]);
11093
- } else {
11094
- return this.getNext(parent, false);
11095
- }
11096
- }
11097
- }
11098
- }
11099
- /**
11100
- * Get the previous node in the tree.
11101
- */
11102
- getPrevious(node, hierarchical = true) {
11103
- const parent = this.getParent(node);
11104
- const idx = this.getChildNodes(parent).findIndex(({ id }) => id === node.id);
11105
- if (idx === 0) {
11106
- if (hierarchical) {
11107
- return parent;
11108
- }
11109
- } else {
11110
- const previous = this.getNode(parent.children[idx - 1]);
11111
- if (hierarchical && previous.children.length) {
11112
- return this.getLastDescendent(previous);
11113
- }
11114
- return previous;
11115
- }
11116
- }
11117
- /**
11118
- * Get the last descendent of a node.
11119
- */
11120
- getLastDescendent(node) {
11121
- const children = this.getChildNodes(node);
11122
- const last = children.length ? children[children.length - 1] : void 0;
11123
- if (last) {
11124
- return this.getLastDescendent(last);
11125
- }
11126
- return node;
11127
- }
11128
- //
11129
- // Mutations
11130
- //
11131
- /**
11132
- * Clear tree.
11133
- */
11134
- clear() {
11135
- const root = this._tree.nodes[this._tree.root];
11136
- root.children.length = 0;
11137
- this._tree.nodes = {
11138
- [root.id]: root
11139
- };
11140
- }
11141
- /**
11142
- * Add node.
11143
- */
11144
- addNode(parent, node, index) {
11145
- if (!node) {
11146
- const id = Key.ObjectId.random();
11147
- node = {
11148
- id,
11149
- children: [],
11150
- data: {
11151
- text: ""
11152
- }
11153
- };
11154
- }
11155
- this._tree.nodes[node.id] = node;
11156
- parent.children.splice(index ?? parent.children.length, 0, node.id);
11157
- return node;
11158
- }
11159
- /**
11160
- * Delete node.
11161
- */
11162
- deleteNode(parent, id) {
11163
- const node = this._tree.nodes[id];
11164
- if (!node) {
11165
- return void 0;
11166
- }
11167
- delete this._tree.nodes[node.id];
11168
- const idx = parent.children.findIndex((child) => child === id);
11169
- if (idx !== -1) {
11170
- parent.children.splice(idx, 1);
11171
- }
11172
- return node;
11173
- }
11174
- /**
11175
- * Move child node.
11176
- */
11177
- moveNode(node, from, to) {
11178
- invariant(from >= 0 && from < node.children.length, void 0, {
11179
- F: __dxlog_file,
11180
- L: 228,
11181
- S: this,
11182
- A: [
11183
- "from >= 0 && from < node.children.length",
11184
- ""
11185
- ]
11186
- });
11187
- invariant(to >= 0 && to < node.children.length, void 0, {
11188
- F: __dxlog_file,
11189
- L: 229,
11190
- S: this,
11191
- A: [
11192
- "to >= 0 && to < node.children.length",
11193
- ""
11194
- ]
11195
- });
11196
- if (from === to) {
11197
- return null;
11198
- }
11199
- const child = node.children[from];
11200
- node.children.splice(from, 1);
11201
- node.children.splice(to, 0, child);
11202
- return this.getNode(child);
11203
- }
11204
- /**
11205
- * Indent node.
11206
- */
11207
- indentNode(node) {
11208
- const parent = this.getParent(node);
11209
- if (!parent) {
11210
- return;
11211
- }
11212
- const idx = parent.children.findIndex((child) => child === node.id);
11213
- if (idx < 1 || idx >= parent.children.length) {
11214
- return;
11215
- }
11216
- const previous = this.getNode(parent.children[idx - 1]);
11217
- parent.children.splice(idx, 1);
11218
- previous.children.push(node.id);
11219
- }
11220
- /**
11221
- * Unindent node.
11222
- */
11223
- unindentNode(node) {
11224
- const parent = this.getParent(node);
11225
- if (!parent) {
11226
- return;
11227
- }
11228
- const ancestor = this.getParent(parent);
11229
- if (!ancestor) {
11230
- return;
11231
- }
11232
- const nodeIdx = parent.children.findIndex((id) => id === node.id);
11233
- const [_, ...rest] = parent.children.splice(nodeIdx, parent.children.length - nodeIdx);
11234
- parent.children.splice(nodeIdx, parent.children.length - nodeIdx);
11235
- const parentIdx = this.getChildNodes(ancestor).findIndex((n) => n.id === parent.id);
11236
- ancestor.children.splice(parentIdx + 1, 0, node.id);
11237
- node.children.push(...rest);
11238
- }
11239
- };
11240
11000
 
11241
- // packages/plugins/plugin-explorer/src/components/Tree/types/types.ts
11001
+ // src/components/Tree/types/types.ts
11242
11002
  var mapGraphToTreeData = (model, maxDepth = 8) => {
11243
11003
  let data;
11244
11004
  return data;
11245
11005
  };
11246
11006
 
11247
- // packages/plugins/plugin-explorer/src/components/Tree/Tree.tsx
11007
+ // src/components/Tree/Tree.tsx
11248
11008
  var defaultTreeLayoutSlots = {
11249
11009
  node: "fill-blue-600",
11250
11010
  path: "fill-none stroke-blue-400 stroke-[0.5px]",
@@ -11264,7 +11024,7 @@ var renderers = /* @__PURE__ */ new Map([
11264
11024
  HierarchicalEdgeBundling_default
11265
11025
  ]
11266
11026
  ]);
11267
- var Tree2 = ({ space, selected, variant = "tidy", onNodeClick }) => {
11027
+ var Tree = ({ space, selected, variant = "tidy", onNodeClick }) => {
11268
11028
  var _effect = _useSignals3();
11269
11029
  try {
11270
11030
  const [model] = useAsyncState(async () => space ? new SpaceGraphModel().open(space) : void 0, [
@@ -11317,15 +11077,15 @@ var Tree2 = ({ space, selected, variant = "tidy", onNodeClick }) => {
11317
11077
  }
11318
11078
  };
11319
11079
 
11320
- // packages/plugins/plugin-explorer/src/components/index.ts
11080
+ // src/components/index.ts
11321
11081
  import { lazy } from "react";
11322
- var ExplorerContainer = lazy(() => import("./ExplorerContainer-MFE7PXF4.mjs"));
11082
+ var ExplorerContainer = lazy(() => import("./ExplorerContainer-AMYAVLO4.mjs"));
11323
11083
 
11324
11084
  export {
11325
11085
  Chart,
11326
11086
  Globe,
11327
11087
  defaultTreeLayoutSlots,
11328
- Tree2 as Tree,
11088
+ Tree,
11329
11089
  ExplorerContainer
11330
11090
  };
11331
- //# sourceMappingURL=chunk-IUFYOE44.mjs.map
11091
+ //# sourceMappingURL=chunk-W4ZNCGOD.mjs.map