@dxos/plugin-debug 0.7.2 → 0.7.3-staging.971cd8d

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 (39) hide show
  1. package/dist/lib/browser/{DebugSpace-ZLGGNDAR.mjs → DebugSpace-DHKEAMIC.mjs} +3 -3
  2. package/dist/lib/browser/{DebugSpace-ZLGGNDAR.mjs.map → DebugSpace-DHKEAMIC.mjs.map} +2 -2
  3. package/dist/lib/browser/SpaceGenerator-2Z5WFX4T.mjs +469 -0
  4. package/dist/lib/browser/SpaceGenerator-2Z5WFX4T.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +35 -34
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  9. package/dist/types/src/components/DebugObjectPanel.d.ts.map +1 -1
  10. package/dist/types/src/components/DebugSpace/DebugSpace.d.ts +1 -1
  11. package/dist/types/src/components/{SurfaceDebug.d.ts → DebugSurface.d.ts} +2 -2
  12. package/dist/types/src/components/{SurfaceDebug.d.ts.map → DebugSurface.d.ts.map} +1 -1
  13. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +7 -0
  14. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -0
  15. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts +9 -0
  16. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +1 -0
  17. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +9 -0
  18. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
  19. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +6 -0
  20. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -0
  21. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts +8 -0
  22. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -0
  23. package/dist/types/src/components/SpaceGenerator/index.d.ts +3 -0
  24. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -0
  25. package/dist/types/src/components/index.d.ts +2 -1
  26. package/dist/types/src/components/index.d.ts.map +1 -1
  27. package/package.json +45 -38
  28. package/src/DebugPlugin.tsx +58 -39
  29. package/src/components/DebugObjectPanel.tsx +2 -1
  30. package/src/components/DebugSpace/DebugSpace.tsx +2 -2
  31. package/src/components/DebugSpace/ObjectCreator.tsx +1 -1
  32. package/src/components/{SurfaceDebug.tsx → DebugSurface.tsx} +1 -1
  33. package/src/components/SpaceGenerator/ObjectGenerator.tsx +178 -0
  34. package/src/components/SpaceGenerator/SchemaTable.tsx +38 -0
  35. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +37 -0
  36. package/src/components/SpaceGenerator/SpaceGenerator.tsx +113 -0
  37. package/src/components/SpaceGenerator/draw-util.ts +199 -0
  38. package/src/components/SpaceGenerator/index.ts +7 -0
  39. package/src/components/index.ts +1 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SpaceGenerator/SpaceGenerator.tsx", "../../../src/components/SpaceGenerator/ObjectGenerator.tsx", "../../../src/components/SpaceGenerator/draw-util.ts", "../../../src/components/SpaceGenerator/SchemaTable.tsx", "../../../src/components/SpaceGenerator/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { SheetType } from '@dxos/plugin-sheet/types';\nimport { DiagramType } from '@dxos/plugin-sketch/types';\nimport { useClient } from '@dxos/react-client';\nimport { getTypename, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, Toolbar, useAsyncEffect } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { Testing } from '@dxos/schema/testing';\nimport { jsonKeyReplacer, sortKeys } from '@dxos/util';\n\nimport { type ObjectGenerator, createGenerator, staticGenerators } from './ObjectGenerator';\nimport { SchemaTable } from './SchemaTable';\n\nexport type SpaceGeneratorProps = {\n space: Space;\n onCreateObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps) => {\n const client = useClient();\n const staticTypes = [DocumentType, DiagramType, SheetType]; // TODO(burdon): Make extensible.\n const mutableTypes = [Testing.OrgType, Testing.ProjectType, Testing.ContactType];\n const [count, setCount] = useState(1);\n const [info, setInfo] = useState<any>({});\n\n // Create type generators.\n const typeMap = useMemo(() => {\n client.addTypes(staticTypes);\n const mutableGenerators = new Map<string, ObjectGenerator<any>>(\n mutableTypes.map((type) => [type.typename, createGenerator(type)]),\n );\n\n return new Map([...staticGenerators, ...mutableGenerators]);\n }, [client, mutableTypes]);\n\n // Query space to get info.\n const updateInfo = async () => {\n // Create schema map.\n const mutableSchema = await space.db.schemaRegistry.query();\n const staticSchema = space.db.graph.schemaRegistry.schemas;\n\n // Create object map.\n const { objects } = await space.db.query().run();\n const objectMap = sortKeys(\n objects.reduce<Record<string, number>>((map, obj) => {\n const type = getTypename(obj);\n if (type) {\n const count = map[type] ?? 0;\n map[type] = count + 1;\n }\n return map;\n }, {}),\n );\n\n setInfo({\n schema: {\n static: staticSchema.length,\n mutable: mutableSchema.length,\n },\n objects: objectMap,\n });\n };\n\n useAsyncEffect(updateInfo, [space]);\n\n const handleCreateData = useCallback(\n async (typename: string) => {\n const constructor = typeMap.get(typename);\n if (constructor) {\n // TODO(burdon): Input to specify number of objects.\n await constructor(space, count, onCreateObjects);\n await updateInfo();\n }\n },\n [typeMap, count],\n );\n\n return (\n <div role='none' className='flex flex-col divide-y divide-separator'>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />\n <Toolbar.Expander />\n <div className='flex'>\n <Input.Root>\n <Input.TextInput\n type='number'\n min={1}\n max={100}\n placeholder={'Count'}\n classNames='w-[80px]'\n value={count}\n onChange={(ev) => setCount(parseInt(ev.target.value))}\n />\n </Input.Root>\n </div>\n </Toolbar.Root>\n\n <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />\n <SchemaTable types={mutableTypes} objects={info.objects} label='Mutable Types' onClick={handleCreateData} />\n\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify({ space, ...info }, jsonKeyReplacer({ truncate: true }), 2)}\n </SyntaxHighlighter>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n createTLStore,\n defaultBindingUtils,\n defaultShapeUtils,\n defaultShapeTools,\n defaultTools,\n Editor,\n type TLEditorOptions,\n} from '@tldraw/tldraw';\n\nimport { type AbstractSchema, type BaseObject } from '@dxos/echo-schema';\nimport { create, type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType, TextType } from '@dxos/plugin-markdown/types';\nimport { addressToA1Notation, createSheet } from '@dxos/plugin-sheet';\nimport { type CellValue } from '@dxos/plugin-sheet/types';\nimport { SheetType } from '@dxos/plugin-sheet/types';\nimport { TLDRAW_SCHEMA, CanvasType, DiagramType } from '@dxos/plugin-sketch/types';\nimport { faker } from '@dxos/random';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { TableType } from '@dxos/react-ui-table';\nimport { createView } from '@dxos/schema';\nimport { createAsyncGenerator, type ValueGenerator } from '@dxos/schema/testing';\nimport { range } from '@dxos/util';\n\nimport { drawGraph, generateGraph } from './draw-util';\n\nconst generator: ValueGenerator = faker as any;\n\n// TODO(burdon): Add objects to collections.\n// TODO(burdon): Create comments.\n// TODO(burdon): Reuse in testbench-app.\n// TODO(burdon): Mutator running in background (factor out): from echo-generator.\n\nexport type ObjectGenerator<T extends BaseObject> = (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n) => Promise<ReactiveObject<T>[]>;\n\n// TODO(burdon): Factor out and create unit tests. See \"fuzz\" patterns.\nexport const staticGenerators = new Map<string, ObjectGenerator<any>>([\n //\n // DocumentType\n //\n [\n DocumentType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n const content = range(faker.number.int({ min: 3, max: 8 }))\n .map(() => faker.lorem.sentences(faker.number.int({ min: 3, max: 16 })))\n .join('\\n\\n');\n\n const obj = space.db.add(\n create(DocumentType, {\n name: faker.commerce.productName(),\n content: create(TextType, { content }),\n threads: [],\n }),\n );\n\n return obj;\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n //\n // DiagramType\n //\n [\n DiagramType.typename,\n async (space, n, cb) => {\n const options: Pick<TLEditorOptions, 'bindingUtils' | 'shapeUtils' | 'tools' | 'getContainer'> = {\n bindingUtils: defaultBindingUtils,\n shapeUtils: defaultShapeUtils,\n tools: [...defaultTools, ...defaultShapeTools],\n getContainer: () => document.body, // TODO(burdon): Fake via JSDOM?\n };\n\n const objects = await Promise.all(\n range(n).map(async () => {\n const store = createTLStore();\n const editor = new Editor({ ...options, store });\n const graph = generateGraph();\n const content = await drawGraph(editor, graph);\n editor.dispose();\n store.dispose();\n\n const obj = space.db.add(\n create(DiagramType, {\n name: faker.commerce.productName(),\n canvas: create(CanvasType, { schema: TLDRAW_SCHEMA, content }),\n }),\n );\n\n return obj;\n }),\n );\n\n cb?.(objects);\n return objects;\n },\n ],\n //\n // SheetType\n //\n [\n SheetType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n // TODO(burdon): Reconcile with plugin-sheet/testing\n const year = new Date().getFullYear();\n const cols = 4;\n const rows = 20;\n const cells: Record<string, CellValue> = {};\n for (let col = 1; col <= cols; col++) {\n for (let row = 1; row <= 10; row++) {\n const cell = addressToA1Notation({ col, row });\n if (row === 1) {\n cells[cell] = { value: `${year} Q${col}` };\n } else if (row === rows) {\n const from = addressToA1Notation({ col, row: 2 });\n const to = addressToA1Notation({ col, row: rows - 1 });\n cells[cell] = { value: `=SUM(${from}:${to})` };\n } else if (row > 2 && row < rows - 1) {\n cells[cell] = { value: Math.floor(Math.random() * 10_000) };\n }\n }\n }\n\n // TODO(burdon): Set width.\n return space.db.add(\n createSheet({\n name: faker.commerce.productName(),\n cells,\n }),\n );\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n]);\n\nexport const createGenerator = <T extends BaseObject>(type: AbstractSchema<T>): ObjectGenerator<T> => {\n return async (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n ): Promise<ReactiveObject<T>[]> => {\n // Find or create mutable schema.\n const mutableSchema = await space.db.schemaRegistry.query();\n const schema =\n mutableSchema.find((schema) => schema.typename === type.typename) ?? space.db.schemaRegistry.addSchema(type);\n\n // Create objects.\n const generate = createAsyncGenerator(generator, schema.schema, space.db);\n const objects = await generate.createObjects(n);\n\n // Find or create table and view.\n const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();\n const table = tables.find((table) => table.view?.query?.typename === type.typename);\n if (!table) {\n const name = type.typename.split('/').pop() ?? type.typename;\n const view = createView({ name, typename: type.typename, jsonSchema: schema.jsonSchema });\n const table = space.db.add(create(TableType, { name, view }));\n cb?.([table]);\n }\n\n return objects;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): workerize-loader dep.\nimport { Graph, type Edge, type PlainObject } from '@antv/graphlib';\nimport {\n D3ForceLayout,\n type D3ForceLayoutOptions,\n GridLayout,\n type GridLayoutOptions,\n RadialLayout,\n type RadialLayoutOptions,\n} from '@antv/layout';\nimport { type Layout } from '@antv/layout/lib/types';\nimport { createBindingId, createShapeId, type Editor, type SerializedStore, type TLRecord } from '@tldraw/tldraw';\n\nimport { faker } from '@dxos/random';\nimport { isNotFalsy, range } from '@dxos/util';\n\n// TODO(burdon): Graph layout:\n// - https://www.npmjs.com/package/@antv/layout (uses d3)\n// - https://observablehq.com/d/2db6b0cc5e97d8d6\n// - https://github.com/antvis/graphlib\n// - https://www.npmjs.com/package/@dagrejs/dagre\n// - https://github.com/dagrejs/dagre/wiki\n// - https://www.npmjs.com/package/elkjs\n\n// TLDraw structure:\n// svg tl-svg-context\n// div tl-html-layer tl-shapes\n// div tl-shape\n// svg tl-svg-container\n// div class tl-html-container\n// div tl-overlays\n// svg\n\n/**\n * https://github.com/antvis/graphlib/blob/master/docs/classes/Graph.md\n */\n// TODO(burdon): Factor out.\n// TODO(burdon): Map ECHO to Graph.\nexport const generateGraph = (): Graph<PlainObject, PlainObject> => {\n const nodes = range(faker.number.int({ min: 8, max: 32 })).map(() => ({\n id: faker.string.uuid(),\n data: {\n label: faker.lorem\n .words(2)\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase())\n .join('-'),\n },\n }));\n\n const unlinked = new Set(nodes.map((node) => node.id));\n const pop = () => {\n if (unlinked.size) {\n const id = faker.helpers.arrayElement(Array.from(unlinked));\n unlinked.delete(id);\n return id;\n }\n };\n\n const edges: Edge<PlainObject>[] = [];\n const link = (source: string, target: string) => {\n edges.push({ id: faker.string.uuid(), source, target, data: {} });\n };\n\n const branching = 3;\n const traverse = (source: string) => {\n const targets = range(faker.number.int({ min: 1, max: branching }))\n .map(() => {\n const target = pop();\n if (target) {\n link(source, target);\n }\n return target;\n })\n .filter(isNotFalsy);\n\n for (const target of targets) {\n traverse(target);\n }\n };\n\n const source = pop();\n if (source) {\n traverse(source);\n }\n\n return new Graph<PlainObject, PlainObject>({ nodes, edges });\n};\n\nexport const drawGraph = async (\n editor: Editor,\n graph: Graph<PlainObject, PlainObject>,\n): Promise<SerializedStore<TLRecord>> => {\n const grid = 40;\n const nodeSize = 80;\n\n const snap = (n: number) => Math.round(n / grid) * grid;\n\n type Intersection<Types extends readonly unknown[]> = Types extends [infer First, ...infer Rest]\n ? First & Intersection<Rest>\n : unknown;\n\n const defaultOptions: Intersection<[D3ForceLayoutOptions, GridLayoutOptions, RadialLayoutOptions]> = {\n center: [0, 0],\n width: grid * 20,\n height: grid * 20,\n linkDistance: grid * 2,\n nodeSize,\n nodeSpacing: nodeSize,\n preventOverlap: true,\n };\n\n const layoutType = faker.helpers.arrayElement(['d3force', 'grid', 'radial']);\n let layout: Layout<any>;\n switch (layoutType) {\n case 'd3force': {\n layout = new D3ForceLayout({\n ...defaultOptions,\n nodeStrength: 0.3,\n collideStrength: 0.8,\n });\n break;\n }\n\n case 'grid': {\n layout = new GridLayout({\n ...defaultOptions,\n });\n break;\n }\n\n case 'radial':\n default: {\n layout = new RadialLayout({\n ...defaultOptions,\n focusNode: graph.getAllNodes()[0],\n unitRadius: grid * 2,\n });\n }\n }\n\n const { nodes, edges } = await layout.execute(graph);\n\n for (const node of nodes) {\n const id = createShapeId(node.id as string);\n editor.createShape({\n id,\n type: 'geo',\n x: snap(node.data.x),\n y: snap(node.data.y),\n props: {\n w: nodeSize,\n h: nodeSize,\n text: node.data.label,\n },\n });\n }\n\n for (const edge of edges) {\n const arrowId = createShapeId(edge.id as string);\n editor.createShape({ id: arrowId, type: 'arrow' });\n\n editor.createBinding({\n id: createBindingId(),\n type: 'arrow',\n fromId: arrowId,\n toId: createShapeId(edge.source as string),\n props: {\n terminal: 'start',\n isExact: false,\n isPrecise: false,\n normalizedAnchor: { x: 0.5, y: 0.5 },\n },\n });\n\n editor.createBinding({\n id: createBindingId(),\n type: 'arrow',\n fromId: arrowId,\n toId: createShapeId(edge.target as string),\n props: {\n terminal: 'end',\n isExact: false,\n isPrecise: false,\n normalizedAnchor: { x: 0.5, y: 0.5 },\n },\n });\n }\n\n const data = editor.store.getStoreSnapshot();\n // TODO(burdon): Strip readonly properties (e.g., `meta`). Factor out.\n const content: SerializedStore<TLRecord> = JSON.parse(JSON.stringify(data.store));\n\n return content;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton } from '@dxos/react-ui';\n\nexport type SchemaTableProps = {\n types: any[];\n objects?: Record<string, number | undefined>;\n label: string;\n onClick: (typename: string) => void;\n};\n\nexport const SchemaTable = ({ types, objects = {}, label, onClick }: SchemaTableProps) => {\n return (\n <div className='grid grid-cols-[1fr_80px_40px] gap-1 overflow-hidden'>\n <div className='grid grid-cols-subgrid col-span-3'>\n <div className='px-2 text-sm text-primary-500'>{label}</div>\n <div className='px-2 text-xs text-subdued text-right'>count</div>\n </div>\n {types.map((type) => (\n <div key={type.typename} className='grid grid-cols-subgrid col-span-3 items-center'>\n <div className='px-2 text-sm font-mono text-green-500'>{type.typename}</div>\n <div className='px-2 text-right font-mono'>{objects[type.typename] ?? 0}</div>\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n iconOnly\n label='Create data'\n onClick={() => onClick(type.typename)}\n />\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SpaceGenerator } from './SpaceGenerator';\n\nexport default SpaceGenerator;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useMemo", "useState", "DocumentType", "SheetType", "DiagramType", "useClient", "getTypename", "IconButton", "Input", "Toolbar", "useAsyncEffect", "SyntaxHighlighter", "Testing", "jsonKeyReplacer", "sortKeys", "createTLStore", "defaultBindingUtils", "defaultShapeUtils", "defaultShapeTools", "defaultTools", "Editor", "create", "DocumentType", "TextType", "addressToA1Notation", "createSheet", "SheetType", "TLDRAW_SCHEMA", "CanvasType", "DiagramType", "faker", "Filter", "TableType", "createView", "createAsyncGenerator", "range", "Graph", "D3ForceLayout", "GridLayout", "RadialLayout", "createBindingId", "createShapeId", "faker", "isNotFalsy", "range", "generateGraph", "nodes", "range", "faker", "number", "int", "min", "max", "map", "id", "string", "uuid", "data", "label", "lorem", "words", "split", "word", "charAt", "toUpperCase", "join", "unlinked", "Set", "node", "pop", "size", "helpers", "arrayElement", "Array", "from", "delete", "edges", "link", "source", "target", "push", "branching", "traverse", "targets", "filter", "isNotFalsy", "Graph", "drawGraph", "editor", "graph", "grid", "nodeSize", "snap", "n", "Math", "round", "defaultOptions", "center", "width", "height", "linkDistance", "nodeSpacing", "preventOverlap", "layoutType", "layout", "D3ForceLayout", "nodeStrength", "collideStrength", "GridLayout", "RadialLayout", "focusNode", "getAllNodes", "unitRadius", "execute", "createShapeId", "createShape", "type", "x", "y", "props", "w", "h", "text", "edge", "arrowId", "createBinding", "createBindingId", "fromId", "toId", "terminal", "isExact", "isPrecise", "normalizedAnchor", "store", "getStoreSnapshot", "content", "JSON", "parse", "stringify", "generator", "faker", "staticGenerators", "Map", "DocumentType", "typename", "space", "n", "cb", "objects", "range", "map", "content", "number", "int", "min", "max", "lorem", "sentences", "join", "obj", "db", "add", "create", "name", "commerce", "productName", "TextType", "threads", "DiagramType", "options", "bindingUtils", "defaultBindingUtils", "shapeUtils", "defaultShapeUtils", "tools", "defaultTools", "defaultShapeTools", "getContainer", "document", "body", "Promise", "all", "store", "createTLStore", "editor", "Editor", "graph", "generateGraph", "drawGraph", "dispose", "canvas", "CanvasType", "schema", "TLDRAW_SCHEMA", "SheetType", "year", "Date", "getFullYear", "cols", "rows", "cells", "col", "row", "cell", "addressToA1Notation", "value", "from", "to", "Math", "floor", "random", "createSheet", "createGenerator", "type", "mutableSchema", "schemaRegistry", "query", "find", "addSchema", "generate", "createAsyncGenerator", "createObjects", "tables", "Filter", "TableType", "run", "table", "view", "split", "pop", "createView", "jsonSchema", "React", "IconButton", "SchemaTable", "types", "objects", "label", "onClick", "div", "className", "map", "type", "key", "typename", "IconButton", "variant", "icon", "iconOnly", "SpaceGenerator", "space", "onCreateObjects", "client", "useClient", "staticTypes", "DocumentType", "DiagramType", "SheetType", "mutableTypes", "Testing", "OrgType", "ProjectType", "ContactType", "count", "setCount", "useState", "info", "setInfo", "typeMap", "useMemo", "addTypes", "mutableGenerators", "Map", "map", "type", "typename", "createGenerator", "staticGenerators", "updateInfo", "mutableSchema", "db", "schemaRegistry", "query", "staticSchema", "graph", "schemas", "objects", "run", "objectMap", "sortKeys", "reduce", "obj", "getTypename", "schema", "static", "length", "mutable", "useAsyncEffect", "handleCreateData", "useCallback", "constructor", "get", "React", "div", "role", "className", "Toolbar", "Root", "classNames", "IconButton", "icon", "iconOnly", "label", "onClick", "Expander", "Input", "TextInput", "min", "max", "placeholder", "value", "onChange", "ev", "parseInt", "target", "SchemaTable", "types", "SyntaxHighlighter", "language", "JSON", "stringify", "jsonKeyReplacer", "truncate", "SpaceGenerator"]
7
+ }
@@ -16,7 +16,7 @@ import { Devtools } from "@dxos/devtools";
16
16
  import { invariant } from "@dxos/invariant";
17
17
  import { parseClientPlugin } from "@dxos/plugin-client";
18
18
  import { createExtension, Graph, toSignal } from "@dxos/plugin-graph";
19
- import { SpaceAction } from "@dxos/plugin-space";
19
+ import { memoizeQuery, SpaceAction } from "@dxos/plugin-space";
20
20
  import { CollectionType } from "@dxos/plugin-space/types";
21
21
  import { create, getTypename, isEchoObject, isSpace, parseId, SpaceState } from "@dxos/react-client/echo";
22
22
  import { Main } from "@dxos/react-ui";
@@ -30,7 +30,6 @@ import React from "react";
30
30
  import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
31
31
  var DebugObjectPanel = ({ object }) => {
32
32
  return /* @__PURE__ */ React.createElement("div", {
33
- role: "form",
34
33
  className: "flex flex-col"
35
34
  }, /* @__PURE__ */ React.createElement(SyntaxHighlighter, {
36
35
  classNames: "flex text-xs",
@@ -388,7 +387,8 @@ var Wireframe = ({ classNames, label, object }) => {
388
387
 
389
388
  // packages/plugins/plugin-debug/src/components/index.ts
390
389
  var DebugApp = lazy(() => import("./DebugApp-HCHR6GKO.mjs"));
391
- var DebugSpace = lazy(() => import("./DebugSpace-ZLGGNDAR.mjs"));
390
+ var DebugSpace = lazy(() => import("./DebugSpace-DHKEAMIC.mjs"));
391
+ var SpaceGenerator = lazy(() => import("./SpaceGenerator-2Z5WFX4T.mjs"));
392
392
 
393
393
  // packages/plugins/plugin-debug/src/translations.ts
394
394
  var translations_default = [
@@ -498,7 +498,7 @@ var DebugPlugin = definePlugin((context) => {
498
498
  const client = clientPlugin?.provides.client;
499
499
  invariant(resolve, void 0, {
500
500
  F: __dxlog_file3,
501
- L: 111,
501
+ L: 128,
502
502
  S: void 0,
503
503
  A: [
504
504
  "resolve",
@@ -507,7 +507,7 @@ var DebugPlugin = definePlugin((context) => {
507
507
  });
508
508
  invariant(client, void 0, {
509
509
  F: __dxlog_file3,
510
- L: 112,
510
+ L: 129,
511
511
  S: void 0,
512
512
  A: [
513
513
  "client",
@@ -571,7 +571,8 @@ var DebugPlugin = definePlugin((context) => {
571
571
  id: `${space.id}-debug`,
572
572
  type: "dxos.org/plugin/debug/space",
573
573
  data: {
574
- space
574
+ space,
575
+ type: "dxos.org/plugin/debug/space"
575
576
  },
576
577
  properties: {
577
578
  label: [
@@ -597,7 +598,8 @@ var DebugPlugin = definePlugin((context) => {
597
598
  const icon = "ph--bug--regular";
598
599
  const [subjectId] = id.split("~");
599
600
  const { spaceId, objectId } = parseId(subjectId);
600
- const space = client.spaces.get().find((space2) => space2.id === spaceId);
601
+ const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
602
+ const space = spaces?.find((space2) => space2.state.get() === SpaceState.SPACE_READY && space2.id === spaceId);
601
603
  if (!objectId) {
602
604
  const label2 = space ? space.properties.name || [
603
605
  "unnamed space label",
@@ -623,15 +625,9 @@ var DebugPlugin = definePlugin((context) => {
623
625
  }
624
626
  };
625
627
  }
626
- const object = toSignal((onChange) => {
627
- const timeout = setTimeout(async () => {
628
- await space?.db.query({
629
- id: objectId
630
- }).first();
631
- onChange();
632
- });
633
- return () => clearTimeout(timeout);
634
- }, () => space?.db.getObjectById(objectId), subjectId);
628
+ const [object] = memoizeQuery(space, {
629
+ id: objectId
630
+ });
635
631
  if (!object || !subjectId) {
636
632
  return;
637
633
  }
@@ -700,25 +696,30 @@ var DebugPlugin = definePlugin((context) => {
700
696
  component = /* @__PURE__ */ React5.createElement(Devtools, null);
701
697
  } else if (!primary || typeof primary !== "object" || !settings.debug) {
702
698
  component = null;
703
- } else if ("space" in primary && isSpace(primary.space)) {
704
- component = /* @__PURE__ */ React5.createElement(DebugSpace, {
705
- space: primary.space,
706
- onAddObjects: (objects) => {
707
- if (!isSpace(primary.space)) {
708
- return;
709
- }
710
- const collection = primary.space.state.get() === SpaceState.SPACE_READY && primary.space.properties[CollectionType.typename];
711
- if (!(collection instanceof CollectionType)) {
712
- return;
713
- }
714
- void context.resolvePlugin(parseIntentPlugin).provides.intent.dispatch(objects.map((object) => ({
715
- action: SpaceAction.ADD_OBJECT,
716
- data: {
717
- target: collection,
718
- object
719
- }
720
- })));
699
+ } else if ("type" in primary && primary.type === "dxos.org/plugin/debug/space" && "space" in primary && isSpace(primary.space)) {
700
+ const handleCreateObject = (objects) => {
701
+ if (!isSpace(primary.space)) {
702
+ return;
721
703
  }
704
+ const collection = primary.space.state.get() === SpaceState.SPACE_READY && primary.space.properties[CollectionType.typename];
705
+ if (!(collection instanceof CollectionType)) {
706
+ return;
707
+ }
708
+ void context.resolvePlugin(parseIntentPlugin).provides.intent.dispatch(objects.map((object) => ({
709
+ action: SpaceAction.ADD_OBJECT,
710
+ data: {
711
+ target: collection,
712
+ object
713
+ }
714
+ })));
715
+ };
716
+ const deprecated = false;
717
+ component = deprecated ? /* @__PURE__ */ React5.createElement(DebugSpace, {
718
+ space: primary.space,
719
+ onAddObjects: handleCreateObject
720
+ }) : /* @__PURE__ */ React5.createElement(SpaceGenerator, {
721
+ space: primary.space,
722
+ onCreateObjects: handleCreateObject
722
723
  });
723
724
  } else if ("graph" in primary && primary.graph instanceof Graph) {
724
725
  component = /* @__PURE__ */ React5.createElement(DebugApp, {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/DebugPlugin.tsx", "../../../src/components/index.ts", "../../../src/components/DebugObjectPanel.tsx", "../../../src/components/DebugSettings.tsx", "../../../src/components/DebugStatus.tsx", "../../../src/components/Wireframe.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ReactNode, useEffect, useState } from 'react';\n\nimport {\n definePlugin,\n parseGraphPlugin,\n parseIntentPlugin,\n parseMetadataResolverPlugin,\n parseSettingsPlugin,\n resolvePlugin,\n} from '@dxos/app-framework';\nimport { Timer } from '@dxos/async';\nimport { Devtools } from '@dxos/devtools';\nimport { invariant } from '@dxos/invariant';\nimport { type ClientPluginProvides, parseClientPlugin } from '@dxos/plugin-client';\nimport { createExtension, Graph, type Node, toSignal } from '@dxos/plugin-graph';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { CollectionType } from '@dxos/plugin-space/types';\nimport { type Client } from '@dxos/react-client';\nimport { create, getTypename, isEchoObject, isSpace, parseId, type Space, SpaceState } from '@dxos/react-client/echo';\nimport { Main } from '@dxos/react-ui';\nimport {\n baseSurface,\n bottombarBlockPaddingEnd,\n fixedInsetFlexLayout,\n topbarBlockPaddingStart,\n} from '@dxos/react-ui-theme';\n\nimport { DebugApp, DebugObjectPanel, DebugSettings, DebugSpace, DebugStatus, Wireframe } from './components';\nimport meta, { DEBUG_PLUGIN } from './meta';\nimport translations from './translations';\nimport {\n DebugAction,\n DebugContext,\n type DebugPluginProvides,\n type DebugSettingsProps,\n DebugSettingsSchema,\n} from './types';\n\nexport const DebugPlugin = definePlugin<DebugPluginProvides>((context) => {\n const settings = create<DebugSettingsProps>({\n debug: true,\n devtools: true,\n });\n\n return {\n meta,\n ready: async (plugins) => {\n context.init(plugins);\n context.resolvePlugin(parseSettingsPlugin).provides.settingsStore.createStore({\n schema: DebugSettingsSchema,\n prefix: DEBUG_PLUGIN,\n value: settings,\n });\n\n // TODO(burdon): Remove hacky dependency on global variable.\n // Used to test how composer handles breaking protocol changes.\n const composer = (window as any).composer;\n composer.changeStorageVersionInMetadata = async (version: number) => {\n const { changeStorageVersionInMetadata } = await import('@dxos/echo-pipeline/testing');\n const { createStorageObjects } = await import('@dxos/client-services');\n const client: Client = (window as any).dxos.client;\n const config = client.config;\n await client.destroy();\n const { storage } = createStorageObjects(config.values?.runtime?.client?.storage ?? {});\n await changeStorageVersionInMetadata(storage, version);\n location.pathname = '/';\n };\n },\n unload: async () => {\n context.dispose();\n },\n provides: {\n settings,\n translations,\n complementary: {\n panels: [{ id: 'debug', label: ['open debug panel label', { ns: DEBUG_PLUGIN }], icon: 'ph--bug--regular' }],\n },\n context: ({ children }) => {\n const [timer, setTimer] = useState<Timer>();\n useEffect(() => timer?.state.on((value) => !value && setTimer(undefined)), [timer]);\n useEffect(() => {\n timer?.stop();\n }, []);\n\n return (\n <DebugContext.Provider\n value={{\n running: !!timer,\n start: (cb, options) => {\n timer?.stop();\n setTimer(new Timer(cb).start(options));\n },\n stop: () => timer?.stop(),\n }}\n >\n {children}\n </DebugContext.Provider>\n );\n },\n graph: {\n builder: (plugins) => {\n const clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n const metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);\n const graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n const resolve = metadataPlugin?.provides.metadata.resolver;\n const client = clientPlugin?.provides.client;\n invariant(resolve);\n invariant(client);\n\n return [\n // Devtools node.\n createExtension({\n id: 'dxos.org/plugin/debug/devtools',\n filter: (node): node is Node<null> => !!settings.devtools && node.id === 'root',\n connector: () => [\n {\n // TODO(zan): Removed `/` because it breaks deck layout reload. Fix?\n id: 'dxos.org.plugin.debug.devtools',\n data: 'devtools',\n type: 'dxos.org/plugin/debug/devtools',\n properties: {\n label: ['devtools label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--hammer--regular',\n },\n },\n ],\n }),\n\n // Debug node.\n createExtension({\n id: 'dxos.org/plugin/debug/debug',\n filter: (node): node is Node<null> => !!settings.debug && node.id === 'root',\n connector: () => [\n {\n id: 'dxos.org/plugin/debug/debug',\n type: 'dxos.org/plugin/debug/debug',\n data: { graph: graphPlugin?.provides.graph },\n properties: {\n label: ['debug label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--bug--regular',\n },\n },\n ],\n }),\n\n // Space debug nodes.\n createExtension({\n id: 'dxos.org/plugin/debug/spaces',\n filter: (node): node is Node<Space> => !!settings.debug && isSpace(node.data),\n connector: ({ node }) => {\n const space = node.data;\n return [\n {\n id: `${space.id}-debug`, // TODO(burdon): Change to slashes consistently.\n type: 'dxos.org/plugin/debug/space',\n data: { space },\n properties: {\n label: ['debug label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--bug--regular',\n },\n },\n ];\n },\n }),\n\n // Create nodes for debug sidebar.\n createExtension({\n id: `${DEBUG_PLUGIN}/debug-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~debug')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--bug--regular';\n\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const space = client.spaces.get().find((space) => space.id === spaceId);\n if (!objectId) {\n // TODO(burdon): Ref SPACE_PLUGIN ns.\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: DEBUG_PLUGIN }]\n : ['unnamed object settings label', { ns: DEBUG_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const object = toSignal(\n (onChange) => {\n const timeout = setTimeout(async () => {\n await space?.db.query({ id: objectId }).first();\n onChange();\n });\n\n return () => clearTimeout(timeout);\n },\n () => space?.db.getObjectById(objectId),\n subjectId,\n );\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: DEBUG_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n ];\n },\n },\n intent: {\n resolver: async (intent, plugins) => {\n switch (intent.action) {\n case DebugAction.OPEN_DEVTOOLS: {\n const clientPlugin = context.getPlugin<ClientPluginProvides>('dxos.org/plugin/client');\n const client = clientPlugin.provides.client;\n const vaultUrl = client.config.values?.runtime?.client?.remoteSource ?? 'https://halo.dxos.org';\n\n // Check if we're serving devtools locally on the usual port.\n let devtoolsUrl = 'http://localhost:5174';\n try {\n // TODO(burdon): Test header to see if this is actually devtools.\n await fetch(devtoolsUrl);\n } catch {\n // Match devtools to running app.\n const isDev = window.location.href.includes('.dev.') || window.location.href.includes('localhost');\n devtoolsUrl = `https://devtools${isDev ? '.dev.' : '.'}dxos.org`;\n }\n\n window.open(`${devtoolsUrl}?target=${vaultUrl}`, '_blank');\n return { data: true };\n }\n }\n },\n },\n surface: {\n component: ({ name, data, role }) => {\n switch (role) {\n case 'settings':\n return data.plugin === meta.id ? <DebugSettings settings={settings} /> : null;\n case 'status':\n return <DebugStatus />;\n case 'complementary--debug':\n return isEchoObject(data.subject) ? <DebugObjectPanel object={data.subject} /> : null;\n }\n\n const primary = data.active ?? data.object;\n let component: ReactNode = null;\n if (role === 'main' || role === 'article') {\n if (primary === 'devtools' && settings.devtools) {\n component = <Devtools />;\n } else if (!primary || typeof primary !== 'object' || !settings.debug) {\n component = null;\n } else if ('space' in primary && isSpace(primary.space)) {\n component = (\n <DebugSpace\n space={primary.space}\n onAddObjects={(objects) => {\n if (!isSpace(primary.space)) {\n return;\n }\n\n const collection =\n primary.space.state.get() === SpaceState.SPACE_READY &&\n primary.space.properties[CollectionType.typename];\n if (!(collection instanceof CollectionType)) {\n return;\n }\n\n void context.resolvePlugin(parseIntentPlugin).provides.intent.dispatch(\n objects.map((object) => ({\n action: SpaceAction.ADD_OBJECT,\n data: { target: collection, object },\n })),\n );\n }}\n />\n );\n } else if ('graph' in primary && primary.graph instanceof Graph) {\n component = <DebugApp graph={primary.graph} />;\n }\n }\n\n if (!component) {\n if (settings.wireframe) {\n if (role === 'main' || role === 'article' || role === 'section') {\n const primary = data.active ?? data.object;\n const isCollection = primary instanceof CollectionType;\n // TODO(burdon): Move into Container abstraction.\n if (!isCollection) {\n return {\n node: (\n <Wireframe label={`${role}:${name}`} object={primary} classNames='row-span-2 overflow-hidden' />\n ),\n disposition: 'hoist',\n };\n }\n }\n }\n\n return null;\n }\n\n switch (role) {\n case 'article':\n return <>{component}</>;\n case 'main':\n return (\n <Main.Content\n classNames={[baseSurface, fixedInsetFlexLayout, topbarBlockPaddingStart, bottombarBlockPaddingEnd]}\n >\n {component}\n </Main.Content>\n );\n }\n\n return null;\n },\n },\n },\n };\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const DebugApp = lazy(() => import('./DebugApp'));\nexport const DebugSpace = lazy(() => import('./DebugSpace'));\n\nexport * from './DebugObjectPanel';\nexport * from './DebugSettings';\nexport * from './DebugStatus';\nexport * from './Wireframe';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ReactiveEchoObject } from '@dxos/client/echo';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\n\nexport type DebugObjectPanelProps = {\n object: ReactiveEchoObject<any>;\n};\n\nexport const DebugObjectPanel = ({ object }: DebugObjectPanelProps) => {\n return (\n <div role='form' className='flex flex-col'>\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify(object, null, 2)}\n </SyntaxHighlighter>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gift, DownloadSimple, FirstAidKit } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { parseFileManagerPlugin, useResolvePlugin } from '@dxos/app-framework';\nimport { type ConfigProto, defs, SaveConfig, Storage } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { useTranslation, Button, Toast, Input, useFileDownload, Select } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { setDeep } from '@dxos/util';\n\nimport { DEBUG_PLUGIN } from '../meta';\nimport { type DebugSettingsProps } from '../types';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime.Client.Storage.StorageDriver.WEBFS,\n idb: defs.Runtime.Client.Storage.StorageDriver.IDB,\n} as const;\n\nexport const DebugSettings = ({ settings }: { settings: DebugSettingsProps }) => {\n const { t } = useTranslation(DEBUG_PLUGIN);\n const [toast, setToast] = useState<Toast>();\n const client = useClient();\n const download = useFileDownload();\n // TODO(mykola): Get updates from other places that change Config.\n const [storageConfig, setStorageConfig] = useState<ConfigProto>({});\n const fileManagerPlugin = useResolvePlugin(parseFileManagerPlugin);\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = (toast: Toast) => {\n setToast(toast);\n const t = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(t);\n };\n\n const handleDownload = async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (fileManagerPlugin?.provides.file.upload) {\n const info = await fileManagerPlugin.provides.file.upload(new File([file], fileName), client.spaces.default);\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({ title: t('settings uploaded'), description: t('settings uploaded to clipboard') });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({ title: t('settings uploaded'), description: t('settings uploaded to clipboard') });\n log.info('diagnostics', { url });\n }\n };\n\n const handleRepair = async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({ title: t('settings repair success'), description: JSON.stringify(info, undefined, 2) });\n } catch (err: any) {\n handleToast({ title: t('settings repair failed'), description: err.message });\n }\n };\n\n return (\n <>\n <DeprecatedFormInput label={t('settings show debug panel')}>\n <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings show devtools panel')}>\n <Input.Switch checked={settings.devtools} onCheckedChange={(checked) => (settings.devtools = !!checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings wireframe')}>\n <Input.Switch checked={settings.wireframe} onCheckedChange={(checked) => (settings.wireframe = !!checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings download diagnostics')}>\n <Button onClick={handleDownload}>\n <DownloadSimple className={getSize(5)} />\n </Button>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings repair')}>\n <Button onClick={handleRepair}>\n <FirstAidKit className={getSize(5)} />\n </Button>\n </DeprecatedFormInput>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <Toast.Root>\n <Toast.Body>\n <Toast.Title>\n <Gift className={mx(getSize(5), 'inline mr-1')} weight='duotone' />\n <span>{toast.title}</span>\n </Toast.Title>\n {toast.description && <Toast.Description>{toast.description}</Toast.Description>}\n </Toast.Body>\n </Toast.Root>\n )}\n\n <DeprecatedFormInput label={t('settings choose storage adaptor')}>\n <Select.Root\n value={\n Object.entries(StorageAdapters).find(\n ([name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,\n )?.[0]\n }\n onValueChange={(value) => {\n if (confirm(t('settings storage adapter changed alert'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n }}\n >\n <Select.TriggerButton placeholder={t('settings data store label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Option key={key} value={key}>\n {t(`settings storage adaptor ${key} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n </>\n );\n};\n\nconst updateConfig = (config: ConfigProto, setConfig: (newConfig: ConfigProto) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { firstIdInPart, parseGraphPlugin, parseNavigationPlugin, useResolvePlugin } from '@dxos/app-framework';\nimport { TimeoutError } from '@dxos/async';\nimport { StatsPanel, useStats } from '@dxos/devtools';\nimport { log } from '@dxos/log';\nimport { getActiveSpace } from '@dxos/plugin-space';\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';\nimport { useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Icon } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst styles = {\n success: 'text-sky-300 dark:text-green-700',\n warning: 'text-orange-300 dark:text-orange-600',\n error: 'text-red-300 dark:text-red-600',\n};\n\n// TODO(burdon): Move out of debug plugin.\n// TODO(burdon): Make pluggable (move indicators to relevant plugins).\n// TODO(burdon): Vault heartbeat indicator (global scope)?\n\n/**\n * Ensure light doesn't flicker immediately after start.\n */\n// TODO(burdon): Move to @dxos/async (debounce?)\nconst _timer = (cb: (err?: Error) => void, options?: { min?: number; max?: number }) => {\n const min = options?.min ?? 500;\n let start: number;\n let pending: NodeJS.Timeout;\n let timeout: NodeJS.Timeout;\n return {\n start: () => {\n start = Date.now();\n clearTimeout(pending);\n if (options?.max) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n cb(new TimeoutError(options.max));\n }, options.max);\n }\n },\n stop: () => {\n clearTimeout(timeout);\n const delta = Date.now() - start;\n if (delta < min) {\n pending = setTimeout(() => {\n cb();\n }, min - delta);\n }\n },\n };\n};\n\n/**\n * Global error handler.\n */\n// TODO(burdon): Integrate with Sentry?\nconst ErrorIndicator = () => {\n const [, forceUpdate] = useState({});\n const errorRef = useRef<Error>();\n useEffect(() => {\n const errorListener = (event: any) => {\n const error: Error = event.error ?? event.reason;\n // event.preventDefault();\n if (errorRef.current !== error) {\n // eslint-disable-next-line no-console\n log.error('onError', { event });\n errorRef.current = error;\n forceUpdate({});\n }\n };\n\n // TODO(burdon): Register globally?\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event\n window.addEventListener('error', errorListener);\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n window.addEventListener('unhandledrejection', errorListener);\n\n return () => {\n window.removeEventListener('error', errorListener);\n window.removeEventListener('unhandledrejection', errorListener);\n };\n }, []);\n\n const handleReset = () => {\n errorRef.current = undefined;\n forceUpdate({});\n };\n\n if (errorRef.current) {\n return (\n <StatusBar.Button title={errorRef.current.message} onClick={handleReset}>\n <Icon icon='ph--warning-circle--duotone' size={4} classNames={styles.error} />\n </StatusBar.Button>\n );\n } else {\n return (\n <StatusBar.Item title='No errors.'>\n <Icon icon='ph--check--regular' size={4} />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Swarm connection handler.\n */\nconst SwarmIndicator = () => {\n const [state, setState] = useState(0);\n const { swarm } = useNetworkStatus();\n useEffect(() => {\n setState(swarm === ConnectionState.ONLINE ? 0 : 1);\n }, [swarm]);\n\n if (state === 0) {\n return (\n <StatusBar.Item title='Connected to swarm.'>\n <Icon icon='ph--lightning--regular' size={4} />\n </StatusBar.Item>\n );\n } else {\n return (\n <StatusBar.Item title='Disconnected from swarm.'>\n <Icon icon='ph--lightning-slash--regular' size={4} classNames={styles.warning} />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Data saving indicator.\n */\n// TODO(burdon): Merge with SaveStatus.\nconst SavingIndicator = () => {\n const [state, _setState] = useState(0);\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n const graphPlugin = useResolvePlugin(parseGraphPlugin);\n const location = navigationPlugin?.provides.location;\n const graph = graphPlugin?.provides.graph;\n const _space = location && graph ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // if (!space) {\n // return;\n // }\n // const { start, stop } = timer(() => setState(0), { min: 250 });\n // return space.db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setState(2);\n // stop();\n // } else if (duration === undefined) {\n // setState(1);\n // start();\n // } else {\n // stop();\n // }\n // });\n // }, [space]);\n\n switch (state) {\n case 2:\n return (\n <StatusBar.Item title='Edit not saved.'>\n <Icon icon='ph--circle--duotone' size={4} classNames={styles.warning} />\n </StatusBar.Item>\n );\n case 1:\n return (\n <StatusBar.Item title='Saving...'>\n <Icon icon='ph--circle--duotone' size={4} classNames={styles.success} />\n </StatusBar.Item>\n );\n case 0:\n default:\n return (\n <StatusBar.Item title='Modified indicator.'>\n <Icon icon='ph--circle--duotone' size={4} />\n </StatusBar.Item>\n );\n }\n};\n\nconst PerformanceIndicator = () => {\n const [visible, setVisible] = useState(false);\n const [stats, refreshStats] = useStats();\n\n return (\n <>\n <StatusBar.Button onClick={() => setVisible((visible) => !visible)} title='Performance panels'>\n <Icon icon='ph--chart-bar--regular' size={4} />\n </StatusBar.Button>\n {visible && (\n <div\n className={mx(\n 'z-20 absolute bottom-[--statusbar-size] right-4 w-[450px]',\n 'overflow-x-hidden overflow-y-auto scrollbar-thin',\n 'border-x border-y border-separator',\n )}\n >\n <StatsPanel stats={stats} onRefresh={refreshStats} />\n </div>\n )}\n </>\n );\n};\n\nconst indicators = [SavingIndicator, SwarmIndicator, PerformanceIndicator, ErrorIndicator];\n\nexport const DebugStatus = () => {\n return (\n <>\n {indicators.map((Indicator) => (\n <Indicator key={Indicator.name} />\n ))}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\n// TODO(burdon): Create generic container with wireframe mode.\nexport type WireframeProps = ThemedClassName<{\n label?: string;\n object?: any;\n}>;\n\n// TODO(burdon): Make focusable and attendable with input.\nexport const Wireframe = ({ classNames, label, object }: WireframeProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(object));\n const { width, height, ref } = useResizeDetector();\n return (\n <div ref={ref} className={mx('relative grow min-bs-96', classNames)} {...attendableAttrs}>\n <div className='absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono'>\n <div className='flex justify-between'>\n <div>{label}</div>\n <div>{`[${width}x${height}]`}</div>\n </div>\n {object && (\n <SyntaxHighlighter language='json' classNames='flex w-full text-xs opacity-75 rounded'>\n {JSON.stringify(object, undefined, 2)}\n </SyntaxHighlighter>\n )}\n </div>\n <svg width={width} height={height} className='bg-transparent [&>*]:text-subdued'>\n <rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />\n <line x1={0} y1={0} x2={width} y2={height} strokeWidth={1} />\n <line x1={0} y1={height} x2={width} y2={0} strokeWidth={1} />\n </svg>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DEBUG_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [DEBUG_PLUGIN]: {\n 'plugin name': 'Debug',\n 'mutation count': 'Number of mutations',\n 'mutation period': 'Mutation period',\n 'open devtools label': 'Open DevTools',\n 'devtools label': 'DevTools',\n 'debug label': 'Debug',\n 'settings show debug panel': 'Show Debug panel.',\n 'settings show devtools panel': 'Show DevTools panel.',\n 'settings wireframe': 'Show wireframes.',\n 'settings repair': 'Run repair tool.',\n 'settings download diagnostics': 'Download diagnostics.',\n 'settings uploaded': 'Uploaded to IPFS',\n 'settings uploaded to clipboard': 'URL copied to clipboard.',\n 'settings repair success': 'Repair succeeded',\n 'settings repair failed': 'Repair failed',\n 'settings choose storage adaptor': 'Storage adaptor (worker reload required).',\n 'settings storage adaptor idb label': 'IndexedDB',\n 'settings storage adaptor opfs label': 'OPFS',\n 'settings data store label': 'Data Store',\n 'settings storage adapter changed alert':\n 'Warning: Swapping the storage adapter will make your data unavailable.',\n 'settings space fragmentation': 'Enable AM space fragmentation',\n 'open debug panel label': 'Show Debug',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugPlugin } from './DebugPlugin';\n\nexport * from './DebugPlugin';\n\nexport default DebugPlugin;\n"],
5
- "mappings": "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",
6
- "names": ["React", "useEffect", "useState", "definePlugin", "parseGraphPlugin", "parseIntentPlugin", "parseMetadataResolverPlugin", "parseSettingsPlugin", "resolvePlugin", "Timer", "Devtools", "invariant", "parseClientPlugin", "createExtension", "Graph", "toSignal", "SpaceAction", "CollectionType", "create", "getTypename", "isEchoObject", "isSpace", "parseId", "SpaceState", "Main", "baseSurface", "bottombarBlockPaddingEnd", "fixedInsetFlexLayout", "topbarBlockPaddingStart", "lazy", "React", "SyntaxHighlighter", "DebugObjectPanel", "object", "div", "role", "className", "SyntaxHighlighter", "classNames", "language", "JSON", "stringify", "Gift", "DownloadSimple", "FirstAidKit", "React", "useEffect", "useState", "parseFileManagerPlugin", "useResolvePlugin", "defs", "SaveConfig", "Storage", "log", "useClient", "useTranslation", "Button", "Toast", "Input", "useFileDownload", "Select", "DeprecatedFormInput", "getSize", "mx", "setDeep", "StorageAdapters", "opfs", "defs", "Runtime", "Client", "Storage", "StorageDriver", "WEBFS", "idb", "IDB", "DebugSettings", "settings", "t", "useTranslation", "DEBUG_PLUGIN", "toast", "setToast", "useState", "client", "useClient", "download", "useFileDownload", "storageConfig", "setStorageConfig", "fileManagerPlugin", "useResolvePlugin", "parseFileManagerPlugin", "useEffect", "then", "config", "handleToast", "setTimeout", "undefined", "clearTimeout", "handleDownload", "data", "diagnostics", "file", "Blob", "JSON", "stringify", "type", "fileName", "Date", "toISOString", "replace", "provides", "upload", "info", "File", "spaces", "default", "log", "error", "title", "description", "url", "values", "runtime", "services", "ipfs", "gateway", "cid", "navigator", "clipboard", "writeText", "handleRepair", "repair", "err", "message", "React", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "debug", "onCheckedChange", "devtools", "wireframe", "Button", "onClick", "DownloadSimple", "className", "getSize", "FirstAidKit", "Toast", "Root", "Body", "Title", "Gift", "mx", "weight", "span", "Description", "Select", "value", "Object", "entries", "find", "name", "storage", "dataStore", "onValueChange", "confirm", "updateConfig", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "keys", "map", "key", "Option", "setConfig", "path", "storageConfigCopy", "parse", "setDeep", "queueMicrotask", "SaveConfig", "React", "useEffect", "useRef", "useState", "firstIdInPart", "parseGraphPlugin", "parseNavigationPlugin", "useResolvePlugin", "TimeoutError", "StatsPanel", "useStats", "log", "getActiveSpace", "StatusBar", "ConnectionState", "useNetworkStatus", "Icon", "mx", "styles", "success", "warning", "error", "ErrorIndicator", "forceUpdate", "useState", "errorRef", "useRef", "useEffect", "errorListener", "event", "error", "reason", "current", "log", "window", "addEventListener", "removeEventListener", "handleReset", "undefined", "React", "StatusBar", "Button", "title", "message", "onClick", "Icon", "icon", "size", "classNames", "styles", "Item", "SwarmIndicator", "state", "setState", "swarm", "useNetworkStatus", "ConnectionState", "ONLINE", "warning", "SavingIndicator", "_setState", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "graphPlugin", "parseGraphPlugin", "location", "provides", "graph", "_space", "getActiveSpace", "firstIdInPart", "active", "success", "PerformanceIndicator", "visible", "setVisible", "stats", "refreshStats", "useStats", "div", "className", "mx", "StatsPanel", "onRefresh", "indicators", "DebugStatus", "map", "Indicator", "key", "name", "React", "useResizeDetector", "fullyQualifiedId", "useAttendableAttributes", "SyntaxHighlighter", "mx", "Wireframe", "classNames", "label", "object", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId", "width", "height", "ref", "useResizeDetector", "React", "div", "className", "mx", "SyntaxHighlighter", "language", "JSON", "stringify", "undefined", "svg", "rect", "x", "y", "strokeWidth", "fill", "line", "x1", "y1", "x2", "y2", "DebugApp", "lazy", "DebugSpace", "DEBUG_PLUGIN", "DebugPlugin", "definePlugin", "context", "settings", "create", "debug", "devtools", "meta", "ready", "plugins", "init", "resolvePlugin", "parseSettingsPlugin", "provides", "settingsStore", "createStore", "schema", "DebugSettingsSchema", "prefix", "DEBUG_PLUGIN", "value", "composer", "window", "changeStorageVersionInMetadata", "version", "createStorageObjects", "client", "dxos", "config", "destroy", "storage", "values", "runtime", "location", "pathname", "unload", "dispose", "translations", "complementary", "panels", "id", "label", "ns", "icon", "children", "timer", "setTimer", "useState", "useEffect", "state", "on", "undefined", "stop", "React", "DebugContext", "Provider", "running", "start", "cb", "options", "Timer", "graph", "builder", "clientPlugin", "parseClientPlugin", "metadataPlugin", "parseMetadataResolverPlugin", "graphPlugin", "parseGraphPlugin", "resolve", "metadata", "resolver", "invariant", "createExtension", "filter", "node", "connector", "data", "type", "properties", "isSpace", "space", "endsWith", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "get", "find", "name", "showResolvedThreads", "object", "toSignal", "onChange", "timeout", "setTimeout", "db", "query", "first", "clearTimeout", "getObjectById", "getTypename", "placeholder", "intent", "action", "DebugAction", "OPEN_DEVTOOLS", "getPlugin", "vaultUrl", "remoteSource", "devtoolsUrl", "fetch", "isDev", "href", "includes", "open", "surface", "component", "role", "plugin", "DebugSettings", "DebugStatus", "isEchoObject", "subject", "DebugObjectPanel", "primary", "active", "Devtools", "DebugSpace", "onAddObjects", "objects", "collection", "SpaceState", "SPACE_READY", "CollectionType", "typename", "parseIntentPlugin", "dispatch", "map", "SpaceAction", "ADD_OBJECT", "target", "Graph", "DebugApp", "wireframe", "isCollection", "Wireframe", "classNames", "disposition", "Main", "Content", "baseSurface", "fixedInsetFlexLayout", "topbarBlockPaddingStart", "bottombarBlockPaddingEnd", "DebugPlugin"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ReactNode, useEffect, useState } from 'react';\n\nimport {\n definePlugin,\n parseGraphPlugin,\n parseIntentPlugin,\n parseMetadataResolverPlugin,\n parseSettingsPlugin,\n resolvePlugin,\n} from '@dxos/app-framework';\nimport { Timer } from '@dxos/async';\nimport { Devtools } from '@dxos/devtools';\nimport { invariant } from '@dxos/invariant';\nimport { type ClientPluginProvides, parseClientPlugin } from '@dxos/plugin-client';\nimport { createExtension, Graph, type Node, toSignal } from '@dxos/plugin-graph';\nimport { memoizeQuery, SpaceAction } from '@dxos/plugin-space';\nimport { CollectionType } from '@dxos/plugin-space/types';\nimport { type Client } from '@dxos/react-client';\nimport {\n create,\n getTypename,\n isEchoObject,\n isSpace,\n parseId,\n type ReactiveObject,\n type Space,\n SpaceState,\n} from '@dxos/react-client/echo';\nimport { Main } from '@dxos/react-ui';\nimport {\n baseSurface,\n bottombarBlockPaddingEnd,\n fixedInsetFlexLayout,\n topbarBlockPaddingStart,\n} from '@dxos/react-ui-theme';\n\nimport {\n DebugApp,\n DebugObjectPanel,\n DebugSettings,\n DebugSpace,\n DebugStatus,\n SpaceGenerator,\n Wireframe,\n} from './components';\nimport meta, { DEBUG_PLUGIN } from './meta';\nimport translations from './translations';\nimport {\n DebugAction,\n DebugContext,\n type DebugPluginProvides,\n type DebugSettingsProps,\n DebugSettingsSchema,\n} from './types';\n\nexport const DebugPlugin = definePlugin<DebugPluginProvides>((context) => {\n const settings = create<DebugSettingsProps>({\n debug: true,\n devtools: true,\n });\n\n return {\n meta,\n ready: async (plugins) => {\n context.init(plugins);\n context.resolvePlugin(parseSettingsPlugin).provides.settingsStore.createStore({\n schema: DebugSettingsSchema,\n prefix: DEBUG_PLUGIN,\n value: settings,\n });\n\n // TODO(burdon): Remove hacky dependency on global variable.\n // Used to test how composer handles breaking protocol changes.\n const composer = (window as any).composer;\n composer.changeStorageVersionInMetadata = async (version: number) => {\n const { changeStorageVersionInMetadata } = await import('@dxos/echo-pipeline/testing');\n const { createStorageObjects } = await import('@dxos/client-services');\n const client: Client = (window as any).dxos.client;\n const config = client.config;\n await client.destroy();\n const { storage } = createStorageObjects(config.values?.runtime?.client?.storage ?? {});\n await changeStorageVersionInMetadata(storage, version);\n location.pathname = '/';\n };\n },\n unload: async () => {\n context.dispose();\n },\n provides: {\n settings,\n translations,\n complementary: {\n panels: [{ id: 'debug', label: ['open debug panel label', { ns: DEBUG_PLUGIN }], icon: 'ph--bug--regular' }],\n },\n context: ({ children }) => {\n const [timer, setTimer] = useState<Timer>();\n useEffect(() => timer?.state.on((value) => !value && setTimer(undefined)), [timer]);\n useEffect(() => {\n timer?.stop();\n }, []);\n\n return (\n <DebugContext.Provider\n value={{\n running: !!timer,\n start: (cb, options) => {\n timer?.stop();\n setTimer(new Timer(cb).start(options));\n },\n stop: () => timer?.stop(),\n }}\n >\n {children}\n </DebugContext.Provider>\n );\n },\n graph: {\n builder: (plugins) => {\n const clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n const metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);\n const graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n const resolve = metadataPlugin?.provides.metadata.resolver;\n const client = clientPlugin?.provides.client;\n invariant(resolve);\n invariant(client);\n\n return [\n // Devtools node.\n createExtension({\n id: 'dxos.org/plugin/debug/devtools',\n filter: (node): node is Node<null> => !!settings.devtools && node.id === 'root',\n connector: () => [\n {\n // TODO(zan): Removed `/` because it breaks deck layout reload. Fix?\n id: 'dxos.org.plugin.debug.devtools',\n data: 'devtools',\n type: 'dxos.org/plugin/debug/devtools',\n properties: {\n label: ['devtools label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--hammer--regular',\n },\n },\n ],\n }),\n\n // Debug node.\n createExtension({\n id: 'dxos.org/plugin/debug/debug',\n filter: (node): node is Node<null> => !!settings.debug && node.id === 'root',\n connector: () => [\n {\n id: 'dxos.org/plugin/debug/debug',\n type: 'dxos.org/plugin/debug/debug',\n data: { graph: graphPlugin?.provides.graph },\n properties: {\n label: ['debug label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--bug--regular',\n },\n },\n ],\n }),\n\n // Space debug nodes.\n createExtension({\n id: 'dxos.org/plugin/debug/spaces',\n filter: (node): node is Node<Space> => !!settings.debug && isSpace(node.data),\n connector: ({ node }) => {\n const space = node.data;\n return [\n {\n id: `${space.id}-debug`, // TODO(burdon): Change to slashes consistently.\n type: 'dxos.org/plugin/debug/space',\n data: { space, type: 'dxos.org/plugin/debug/space' },\n properties: {\n label: ['debug label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--bug--regular',\n },\n },\n ];\n },\n }),\n\n // Create nodes for debug sidebar.\n createExtension({\n id: `${DEBUG_PLUGIN}/debug-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~debug')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--bug--regular';\n\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find(\n (space) => space.state.get() === SpaceState.SPACE_READY && space.id === spaceId,\n );\n if (!objectId) {\n // TODO(burdon): Ref SPACE_PLUGIN ns.\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: DEBUG_PLUGIN }]\n : ['unnamed object settings label', { ns: DEBUG_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: DEBUG_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n ];\n },\n },\n intent: {\n resolver: async (intent, plugins) => {\n switch (intent.action) {\n case DebugAction.OPEN_DEVTOOLS: {\n const clientPlugin = context.getPlugin<ClientPluginProvides>('dxos.org/plugin/client');\n const client = clientPlugin.provides.client;\n const vaultUrl = client.config.values?.runtime?.client?.remoteSource ?? 'https://halo.dxos.org';\n\n // Check if we're serving devtools locally on the usual port.\n let devtoolsUrl = 'http://localhost:5174';\n try {\n // TODO(burdon): Test header to see if this is actually devtools.\n await fetch(devtoolsUrl);\n } catch {\n // Match devtools to running app.\n const isDev = window.location.href.includes('.dev.') || window.location.href.includes('localhost');\n devtoolsUrl = `https://devtools${isDev ? '.dev.' : '.'}dxos.org`;\n }\n\n window.open(`${devtoolsUrl}?target=${vaultUrl}`, '_blank');\n return { data: true };\n }\n }\n },\n },\n surface: {\n component: ({ name, data, role }) => {\n switch (role) {\n case 'settings':\n return data.plugin === meta.id ? <DebugSettings settings={settings} /> : null;\n case 'status':\n return <DebugStatus />;\n case 'complementary--debug':\n return isEchoObject(data.subject) ? <DebugObjectPanel object={data.subject} /> : null;\n }\n\n const primary = data.active ?? data.object;\n let component: ReactNode = null;\n if (role === 'main' || role === 'article') {\n if (primary === 'devtools' && settings.devtools) {\n component = <Devtools />;\n } else if (!primary || typeof primary !== 'object' || !settings.debug) {\n component = null;\n } else if (\n 'type' in primary &&\n primary.type === 'dxos.org/plugin/debug/space' &&\n 'space' in primary &&\n isSpace(primary.space)\n ) {\n const handleCreateObject = (objects: ReactiveObject<any>[]) => {\n if (!isSpace(primary.space)) {\n return;\n }\n\n const collection =\n primary.space.state.get() === SpaceState.SPACE_READY &&\n primary.space.properties[CollectionType.typename];\n if (!(collection instanceof CollectionType)) {\n return;\n }\n\n void context.resolvePlugin(parseIntentPlugin).provides.intent.dispatch(\n objects.map((object) => ({\n action: SpaceAction.ADD_OBJECT,\n data: { target: collection, object },\n })),\n );\n };\n\n const deprecated = false;\n component = deprecated ? (\n <DebugSpace space={primary.space} onAddObjects={handleCreateObject} />\n ) : (\n <SpaceGenerator space={primary.space} onCreateObjects={handleCreateObject} />\n );\n } else if ('graph' in primary && primary.graph instanceof Graph) {\n component = <DebugApp graph={primary.graph} />;\n }\n }\n\n if (!component) {\n if (settings.wireframe) {\n if (role === 'main' || role === 'article' || role === 'section') {\n const primary = data.active ?? data.object;\n const isCollection = primary instanceof CollectionType;\n // TODO(burdon): Move into Container abstraction.\n if (!isCollection) {\n return {\n node: (\n <Wireframe label={`${role}:${name}`} object={primary} classNames='row-span-2 overflow-hidden' />\n ),\n disposition: 'hoist',\n };\n }\n }\n }\n\n return null;\n }\n\n switch (role) {\n case 'article':\n return <>{component}</>;\n case 'main':\n return (\n <Main.Content\n classNames={[baseSurface, fixedInsetFlexLayout, topbarBlockPaddingStart, bottombarBlockPaddingEnd]}\n >\n {component}\n </Main.Content>\n );\n }\n\n return null;\n },\n },\n },\n };\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const DebugApp = lazy(() => import('./DebugApp'));\nexport const DebugSpace = lazy(() => import('./DebugSpace'));\nexport const SpaceGenerator = lazy(() => import('./SpaceGenerator'));\n\nexport * from './DebugObjectPanel';\nexport * from './DebugSettings';\nexport * from './DebugStatus';\nexport * from './Wireframe';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ReactiveEchoObject } from '@dxos/client/echo';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\n\nexport type DebugObjectPanelProps = {\n object: ReactiveEchoObject<any>;\n};\n\n// TODO(burdon): Get schema and traverse references.\nexport const DebugObjectPanel = ({ object }: DebugObjectPanelProps) => {\n return (\n <div className='flex flex-col'>\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify(object, null, 2)}\n </SyntaxHighlighter>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gift, DownloadSimple, FirstAidKit } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { parseFileManagerPlugin, useResolvePlugin } from '@dxos/app-framework';\nimport { type ConfigProto, defs, SaveConfig, Storage } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { useTranslation, Button, Toast, Input, useFileDownload, Select } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { setDeep } from '@dxos/util';\n\nimport { DEBUG_PLUGIN } from '../meta';\nimport { type DebugSettingsProps } from '../types';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime.Client.Storage.StorageDriver.WEBFS,\n idb: defs.Runtime.Client.Storage.StorageDriver.IDB,\n} as const;\n\nexport const DebugSettings = ({ settings }: { settings: DebugSettingsProps }) => {\n const { t } = useTranslation(DEBUG_PLUGIN);\n const [toast, setToast] = useState<Toast>();\n const client = useClient();\n const download = useFileDownload();\n // TODO(mykola): Get updates from other places that change Config.\n const [storageConfig, setStorageConfig] = useState<ConfigProto>({});\n const fileManagerPlugin = useResolvePlugin(parseFileManagerPlugin);\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = (toast: Toast) => {\n setToast(toast);\n const t = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(t);\n };\n\n const handleDownload = async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (fileManagerPlugin?.provides.file.upload) {\n const info = await fileManagerPlugin.provides.file.upload(new File([file], fileName), client.spaces.default);\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({ title: t('settings uploaded'), description: t('settings uploaded to clipboard') });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({ title: t('settings uploaded'), description: t('settings uploaded to clipboard') });\n log.info('diagnostics', { url });\n }\n };\n\n const handleRepair = async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({ title: t('settings repair success'), description: JSON.stringify(info, undefined, 2) });\n } catch (err: any) {\n handleToast({ title: t('settings repair failed'), description: err.message });\n }\n };\n\n return (\n <>\n <DeprecatedFormInput label={t('settings show debug panel')}>\n <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings show devtools panel')}>\n <Input.Switch checked={settings.devtools} onCheckedChange={(checked) => (settings.devtools = !!checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings wireframe')}>\n <Input.Switch checked={settings.wireframe} onCheckedChange={(checked) => (settings.wireframe = !!checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings download diagnostics')}>\n <Button onClick={handleDownload}>\n <DownloadSimple className={getSize(5)} />\n </Button>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings repair')}>\n <Button onClick={handleRepair}>\n <FirstAidKit className={getSize(5)} />\n </Button>\n </DeprecatedFormInput>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <Toast.Root>\n <Toast.Body>\n <Toast.Title>\n <Gift className={mx(getSize(5), 'inline mr-1')} weight='duotone' />\n <span>{toast.title}</span>\n </Toast.Title>\n {toast.description && <Toast.Description>{toast.description}</Toast.Description>}\n </Toast.Body>\n </Toast.Root>\n )}\n\n <DeprecatedFormInput label={t('settings choose storage adaptor')}>\n <Select.Root\n value={\n Object.entries(StorageAdapters).find(\n ([name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,\n )?.[0]\n }\n onValueChange={(value) => {\n if (confirm(t('settings storage adapter changed alert'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n }}\n >\n <Select.TriggerButton placeholder={t('settings data store label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Option key={key} value={key}>\n {t(`settings storage adaptor ${key} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n </>\n );\n};\n\nconst updateConfig = (config: ConfigProto, setConfig: (newConfig: ConfigProto) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { firstIdInPart, parseGraphPlugin, parseNavigationPlugin, useResolvePlugin } from '@dxos/app-framework';\nimport { TimeoutError } from '@dxos/async';\nimport { StatsPanel, useStats } from '@dxos/devtools';\nimport { log } from '@dxos/log';\nimport { getActiveSpace } from '@dxos/plugin-space';\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';\nimport { useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Icon } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst styles = {\n success: 'text-sky-300 dark:text-green-700',\n warning: 'text-orange-300 dark:text-orange-600',\n error: 'text-red-300 dark:text-red-600',\n};\n\n// TODO(burdon): Move out of debug plugin.\n// TODO(burdon): Make pluggable (move indicators to relevant plugins).\n// TODO(burdon): Vault heartbeat indicator (global scope)?\n\n/**\n * Ensure light doesn't flicker immediately after start.\n */\n// TODO(burdon): Move to @dxos/async (debounce?)\nconst _timer = (cb: (err?: Error) => void, options?: { min?: number; max?: number }) => {\n const min = options?.min ?? 500;\n let start: number;\n let pending: NodeJS.Timeout;\n let timeout: NodeJS.Timeout;\n return {\n start: () => {\n start = Date.now();\n clearTimeout(pending);\n if (options?.max) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n cb(new TimeoutError(options.max));\n }, options.max);\n }\n },\n stop: () => {\n clearTimeout(timeout);\n const delta = Date.now() - start;\n if (delta < min) {\n pending = setTimeout(() => {\n cb();\n }, min - delta);\n }\n },\n };\n};\n\n/**\n * Global error handler.\n */\n// TODO(burdon): Integrate with Sentry?\nconst ErrorIndicator = () => {\n const [, forceUpdate] = useState({});\n const errorRef = useRef<Error>();\n useEffect(() => {\n const errorListener = (event: any) => {\n const error: Error = event.error ?? event.reason;\n // event.preventDefault();\n if (errorRef.current !== error) {\n // eslint-disable-next-line no-console\n log.error('onError', { event });\n errorRef.current = error;\n forceUpdate({});\n }\n };\n\n // TODO(burdon): Register globally?\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event\n window.addEventListener('error', errorListener);\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n window.addEventListener('unhandledrejection', errorListener);\n\n return () => {\n window.removeEventListener('error', errorListener);\n window.removeEventListener('unhandledrejection', errorListener);\n };\n }, []);\n\n const handleReset = () => {\n errorRef.current = undefined;\n forceUpdate({});\n };\n\n if (errorRef.current) {\n return (\n <StatusBar.Button title={errorRef.current.message} onClick={handleReset}>\n <Icon icon='ph--warning-circle--duotone' size={4} classNames={styles.error} />\n </StatusBar.Button>\n );\n } else {\n return (\n <StatusBar.Item title='No errors.'>\n <Icon icon='ph--check--regular' size={4} />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Swarm connection handler.\n */\nconst SwarmIndicator = () => {\n const [state, setState] = useState(0);\n const { swarm } = useNetworkStatus();\n useEffect(() => {\n setState(swarm === ConnectionState.ONLINE ? 0 : 1);\n }, [swarm]);\n\n if (state === 0) {\n return (\n <StatusBar.Item title='Connected to swarm.'>\n <Icon icon='ph--lightning--regular' size={4} />\n </StatusBar.Item>\n );\n } else {\n return (\n <StatusBar.Item title='Disconnected from swarm.'>\n <Icon icon='ph--lightning-slash--regular' size={4} classNames={styles.warning} />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Data saving indicator.\n */\n// TODO(burdon): Merge with SaveStatus.\nconst SavingIndicator = () => {\n const [state, _setState] = useState(0);\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n const graphPlugin = useResolvePlugin(parseGraphPlugin);\n const location = navigationPlugin?.provides.location;\n const graph = graphPlugin?.provides.graph;\n const _space = location && graph ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // if (!space) {\n // return;\n // }\n // const { start, stop } = timer(() => setState(0), { min: 250 });\n // return space.db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setState(2);\n // stop();\n // } else if (duration === undefined) {\n // setState(1);\n // start();\n // } else {\n // stop();\n // }\n // });\n // }, [space]);\n\n switch (state) {\n case 2:\n return (\n <StatusBar.Item title='Edit not saved.'>\n <Icon icon='ph--circle--duotone' size={4} classNames={styles.warning} />\n </StatusBar.Item>\n );\n case 1:\n return (\n <StatusBar.Item title='Saving...'>\n <Icon icon='ph--circle--duotone' size={4} classNames={styles.success} />\n </StatusBar.Item>\n );\n case 0:\n default:\n return (\n <StatusBar.Item title='Modified indicator.'>\n <Icon icon='ph--circle--duotone' size={4} />\n </StatusBar.Item>\n );\n }\n};\n\nconst PerformanceIndicator = () => {\n const [visible, setVisible] = useState(false);\n const [stats, refreshStats] = useStats();\n\n return (\n <>\n <StatusBar.Button onClick={() => setVisible((visible) => !visible)} title='Performance panels'>\n <Icon icon='ph--chart-bar--regular' size={4} />\n </StatusBar.Button>\n {visible && (\n <div\n className={mx(\n 'z-20 absolute bottom-[--statusbar-size] right-4 w-[450px]',\n 'overflow-x-hidden overflow-y-auto scrollbar-thin',\n 'border-x border-y border-separator',\n )}\n >\n <StatsPanel stats={stats} onRefresh={refreshStats} />\n </div>\n )}\n </>\n );\n};\n\nconst indicators = [SavingIndicator, SwarmIndicator, PerformanceIndicator, ErrorIndicator];\n\nexport const DebugStatus = () => {\n return (\n <>\n {indicators.map((Indicator) => (\n <Indicator key={Indicator.name} />\n ))}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\n// TODO(burdon): Create generic container with wireframe mode.\nexport type WireframeProps = ThemedClassName<{\n label?: string;\n object?: any;\n}>;\n\n// TODO(burdon): Make focusable and attendable with input.\nexport const Wireframe = ({ classNames, label, object }: WireframeProps) => {\n const attendableAttrs = useAttendableAttributes(fullyQualifiedId(object));\n const { width, height, ref } = useResizeDetector();\n return (\n <div ref={ref} className={mx('relative grow min-bs-96', classNames)} {...attendableAttrs}>\n <div className='absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono'>\n <div className='flex justify-between'>\n <div>{label}</div>\n <div>{`[${width}x${height}]`}</div>\n </div>\n {object && (\n <SyntaxHighlighter language='json' classNames='flex w-full text-xs opacity-75 rounded'>\n {JSON.stringify(object, undefined, 2)}\n </SyntaxHighlighter>\n )}\n </div>\n <svg width={width} height={height} className='bg-transparent [&>*]:text-subdued'>\n <rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />\n <line x1={0} y1={0} x2={width} y2={height} strokeWidth={1} />\n <line x1={0} y1={height} x2={width} y2={0} strokeWidth={1} />\n </svg>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DEBUG_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [DEBUG_PLUGIN]: {\n 'plugin name': 'Debug',\n 'mutation count': 'Number of mutations',\n 'mutation period': 'Mutation period',\n 'open devtools label': 'Open DevTools',\n 'devtools label': 'DevTools',\n 'debug label': 'Debug',\n 'settings show debug panel': 'Show Debug panel.',\n 'settings show devtools panel': 'Show DevTools panel.',\n 'settings wireframe': 'Show wireframes.',\n 'settings repair': 'Run repair tool.',\n 'settings download diagnostics': 'Download diagnostics.',\n 'settings uploaded': 'Uploaded to IPFS',\n 'settings uploaded to clipboard': 'URL copied to clipboard.',\n 'settings repair success': 'Repair succeeded',\n 'settings repair failed': 'Repair failed',\n 'settings choose storage adaptor': 'Storage adaptor (worker reload required).',\n 'settings storage adaptor idb label': 'IndexedDB',\n 'settings storage adaptor opfs label': 'OPFS',\n 'settings data store label': 'Data Store',\n 'settings storage adapter changed alert':\n 'Warning: Swapping the storage adapter will make your data unavailable.',\n 'settings space fragmentation': 'Enable AM space fragmentation',\n 'open debug panel label': 'Show Debug',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugPlugin } from './DebugPlugin';\n\nexport * from './DebugPlugin';\n\nexport default DebugPlugin;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useEffect", "useState", "definePlugin", "parseGraphPlugin", "parseIntentPlugin", "parseMetadataResolverPlugin", "parseSettingsPlugin", "resolvePlugin", "Timer", "Devtools", "invariant", "parseClientPlugin", "createExtension", "Graph", "toSignal", "memoizeQuery", "SpaceAction", "CollectionType", "create", "getTypename", "isEchoObject", "isSpace", "parseId", "SpaceState", "Main", "baseSurface", "bottombarBlockPaddingEnd", "fixedInsetFlexLayout", "topbarBlockPaddingStart", "lazy", "React", "SyntaxHighlighter", "DebugObjectPanel", "object", "div", "className", "SyntaxHighlighter", "classNames", "language", "JSON", "stringify", "Gift", "DownloadSimple", "FirstAidKit", "React", "useEffect", "useState", "parseFileManagerPlugin", "useResolvePlugin", "defs", "SaveConfig", "Storage", "log", "useClient", "useTranslation", "Button", "Toast", "Input", "useFileDownload", "Select", "DeprecatedFormInput", "getSize", "mx", "setDeep", "StorageAdapters", "opfs", "defs", "Runtime", "Client", "Storage", "StorageDriver", "WEBFS", "idb", "IDB", "DebugSettings", "settings", "t", "useTranslation", "DEBUG_PLUGIN", "toast", "setToast", "useState", "client", "useClient", "download", "useFileDownload", "storageConfig", "setStorageConfig", "fileManagerPlugin", "useResolvePlugin", "parseFileManagerPlugin", "useEffect", "then", "config", "handleToast", "setTimeout", "undefined", "clearTimeout", "handleDownload", "data", "diagnostics", "file", "Blob", "JSON", "stringify", "type", "fileName", "Date", "toISOString", "replace", "provides", "upload", "info", "File", "spaces", "default", "log", "error", "title", "description", "url", "values", "runtime", "services", "ipfs", "gateway", "cid", "navigator", "clipboard", "writeText", "handleRepair", "repair", "err", "message", "React", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "debug", "onCheckedChange", "devtools", "wireframe", "Button", "onClick", "DownloadSimple", "className", "getSize", "FirstAidKit", "Toast", "Root", "Body", "Title", "Gift", "mx", "weight", "span", "Description", "Select", "value", "Object", "entries", "find", "name", "storage", "dataStore", "onValueChange", "confirm", "updateConfig", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "keys", "map", "key", "Option", "setConfig", "path", "storageConfigCopy", "parse", "setDeep", "queueMicrotask", "SaveConfig", "React", "useEffect", "useRef", "useState", "firstIdInPart", "parseGraphPlugin", "parseNavigationPlugin", "useResolvePlugin", "TimeoutError", "StatsPanel", "useStats", "log", "getActiveSpace", "StatusBar", "ConnectionState", "useNetworkStatus", "Icon", "mx", "styles", "success", "warning", "error", "ErrorIndicator", "forceUpdate", "useState", "errorRef", "useRef", "useEffect", "errorListener", "event", "error", "reason", "current", "log", "window", "addEventListener", "removeEventListener", "handleReset", "undefined", "React", "StatusBar", "Button", "title", "message", "onClick", "Icon", "icon", "size", "classNames", "styles", "Item", "SwarmIndicator", "state", "setState", "swarm", "useNetworkStatus", "ConnectionState", "ONLINE", "warning", "SavingIndicator", "_setState", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "graphPlugin", "parseGraphPlugin", "location", "provides", "graph", "_space", "getActiveSpace", "firstIdInPart", "active", "success", "PerformanceIndicator", "visible", "setVisible", "stats", "refreshStats", "useStats", "div", "className", "mx", "StatsPanel", "onRefresh", "indicators", "DebugStatus", "map", "Indicator", "key", "name", "React", "useResizeDetector", "fullyQualifiedId", "useAttendableAttributes", "SyntaxHighlighter", "mx", "Wireframe", "classNames", "label", "object", "attendableAttrs", "useAttendableAttributes", "fullyQualifiedId", "width", "height", "ref", "useResizeDetector", "React", "div", "className", "mx", "SyntaxHighlighter", "language", "JSON", "stringify", "undefined", "svg", "rect", "x", "y", "strokeWidth", "fill", "line", "x1", "y1", "x2", "y2", "DebugApp", "lazy", "DebugSpace", "SpaceGenerator", "DEBUG_PLUGIN", "DebugPlugin", "definePlugin", "context", "settings", "create", "debug", "devtools", "meta", "ready", "plugins", "init", "resolvePlugin", "parseSettingsPlugin", "provides", "settingsStore", "createStore", "schema", "DebugSettingsSchema", "prefix", "DEBUG_PLUGIN", "value", "composer", "window", "changeStorageVersionInMetadata", "version", "createStorageObjects", "client", "dxos", "config", "destroy", "storage", "values", "runtime", "location", "pathname", "unload", "dispose", "translations", "complementary", "panels", "id", "label", "ns", "icon", "children", "timer", "setTimer", "useState", "useEffect", "state", "on", "undefined", "stop", "React", "DebugContext", "Provider", "running", "start", "cb", "options", "Timer", "graph", "builder", "clientPlugin", "parseClientPlugin", "metadataPlugin", "parseMetadataResolverPlugin", "graphPlugin", "parseGraphPlugin", "resolve", "metadata", "resolver", "invariant", "createExtension", "filter", "node", "connector", "data", "type", "properties", "isSpace", "space", "endsWith", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "find", "SpaceState", "SPACE_READY", "name", "showResolvedThreads", "object", "memoizeQuery", "getTypename", "placeholder", "intent", "action", "DebugAction", "OPEN_DEVTOOLS", "getPlugin", "vaultUrl", "remoteSource", "devtoolsUrl", "fetch", "isDev", "href", "includes", "open", "surface", "component", "role", "plugin", "DebugSettings", "DebugStatus", "isEchoObject", "subject", "DebugObjectPanel", "primary", "active", "Devtools", "handleCreateObject", "objects", "collection", "CollectionType", "typename", "parseIntentPlugin", "dispatch", "map", "SpaceAction", "ADD_OBJECT", "target", "deprecated", "DebugSpace", "onAddObjects", "SpaceGenerator", "onCreateObjects", "Graph", "DebugApp", "wireframe", "isCollection", "Wireframe", "classNames", "disposition", "Main", "Content", "baseSurface", "fixedInsetFlexLayout", "topbarBlockPaddingStart", "bottombarBlockPaddingEnd", "DebugPlugin"]
7
7
  }