@dxos/plugin-debug 0.7.2-main.f1adc9f → 0.7.2

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 (29) hide show
  1. package/dist/lib/browser/{DebugSpace-HK2GQYIB.mjs → DebugSpace-ZLGGNDAR.mjs} +3 -3
  2. package/dist/lib/browser/{DebugSpace-HK2GQYIB.mjs.map → DebugSpace-ZLGGNDAR.mjs.map} +2 -2
  3. package/dist/lib/browser/index.mjs +34 -35
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  7. package/dist/types/src/components/DebugObjectPanel.d.ts.map +1 -1
  8. package/dist/types/src/components/{DebugSurface.d.ts → SurfaceDebug.d.ts} +2 -2
  9. package/dist/types/src/components/{DebugSurface.d.ts.map → SurfaceDebug.d.ts.map} +1 -1
  10. package/dist/types/src/components/index.d.ts +0 -1
  11. package/dist/types/src/components/index.d.ts.map +1 -1
  12. package/package.json +38 -41
  13. package/src/DebugPlugin.tsx +39 -58
  14. package/src/components/DebugObjectPanel.tsx +1 -2
  15. package/src/components/DebugSpace/DebugSpace.tsx +1 -1
  16. package/src/components/DebugSpace/ObjectCreator.tsx +1 -1
  17. package/src/components/{DebugSurface.tsx → SurfaceDebug.tsx} +1 -1
  18. package/src/components/index.ts +0 -1
  19. package/dist/lib/browser/SpaceGenerator-TIBUROQA.mjs +0 -155
  20. package/dist/lib/browser/SpaceGenerator-TIBUROQA.mjs.map +0 -7
  21. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
  22. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
  23. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -6
  24. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
  25. package/dist/types/src/components/SpaceGenerator/index.d.ts +0 -3
  26. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +0 -1
  27. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -37
  28. package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -169
  29. package/src/components/SpaceGenerator/index.ts +0 -7
@@ -105,7 +105,7 @@ var ObjectCreator = ({ space, onAddObjects }) => {
105
105
  columns,
106
106
  data: objects
107
107
  }))), /* @__PURE__ */ React.createElement(Toolbar.Root, {
108
- classNames: "p-1"
108
+ classNames: "p-2"
109
109
  }, /* @__PURE__ */ React.createElement(IconButton, {
110
110
  icon: "ph--plus--regular",
111
111
  label: "Create",
@@ -231,7 +231,7 @@ var DebugSpace = ({ space, onAddObjects }) => {
231
231
  value: mutationJitter,
232
232
  onChange: ({ target: { value } }) => setMutationJitter(value)
233
233
  }), /* @__PURE__ */ React2.createElement(IconButton2, {
234
- icon: running ? "ph--pause-circle--regular" : "ph--play-circle--regular",
234
+ icon: running ? "ph--hand-palm--regular" : "ph--play--regular",
235
235
  iconOnly: true,
236
236
  label: "Start/stop",
237
237
  size: 5,
@@ -273,4 +273,4 @@ var DebugSpace_default = DebugSpace;
273
273
  export {
274
274
  DebugSpace_default as default
275
275
  };
276
- //# sourceMappingURL=DebugSpace-HK2GQYIB.mjs.map
276
+ //# sourceMappingURL=DebugSpace-ZLGGNDAR.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/DebugSpace/DebugSpace.tsx", "../../../src/components/DebugSpace/ObjectCreator.tsx", "../../../src/components/DebugSpace/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useContext, useMemo, useState } from 'react';\n\nimport { createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveObject } from '@dxos/echo-schema';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { faker } from '@dxos/random';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useSpaceInvitation } from '@dxos/react-client/echo';\nimport { InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { Icon, IconButton, Input, type IconProps, type TextInputProps, Toolbar, useFileDownload } from '@dxos/react-ui';\nimport { safeParseInt } from '@dxos/util';\n\nimport { ObjectCreator } from './ObjectCreator';\nimport { DebugContext } from '../../types';\nimport { Container } from '../Container';\n\nconst DEFAULT_COUNT = 100;\nconst DEFAULT_PERIOD = 500;\nconst DEFAULT_JITTER = 50;\n\nconst useRefresh = (): [any, () => void] => {\n const [update, setUpdate] = useState({});\n return [update, () => setUpdate({})];\n};\n\nconst CustomInput = ({ icon, ...props }: Pick<IconProps, 'icon'> & TextInputProps) => {\n return (\n <div role='none' className='relative'>\n <Input.Root>\n <Input.TextInput classNames='w-[100px] text-right pie-[22px]' size={5} {...props} />\n </Input.Root>\n <Icon icon={icon} size={3} classNames='absolute inline-end-1 block-start-1 mt-[6px]' />\n </div>\n );\n};\n\nexport const DebugSpace: FC<{\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n}> = ({ space, onAddObjects }) => {\n const { connect } = useSpaceInvitation(space?.key);\n const client = useClient();\n const [data, setData] = useState<any>({});\n\n const [update, handleUpdate] = useRefresh();\n useAsyncEffect(\n async (isMounted) => {\n const data = await client.diagnostics({ truncate: true });\n if (isMounted()) {\n setData(\n data?.diagnostics?.spaces?.find(({ key }: any) => {\n return space.key.toHex().startsWith(key);\n }),\n );\n }\n },\n [space, update],\n );\n\n const download = useFileDownload();\n const handleDownload = async () => {\n download(\n new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' }),\n `${new Date().toISOString().replace(/\\W/g, '-')}.json`,\n );\n };\n\n const [mutationCount, setMutationCount] = useState(String(DEFAULT_COUNT));\n const [mutationInterval, setMutationInterval] = useState(String(DEFAULT_PERIOD));\n const [mutationJitter, setMutationJitter] = useState(String(DEFAULT_JITTER));\n\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n // TODO(burdon): Note: this is shared across all spaces!\n const { running, start, stop } = useContext(DebugContext);\n const handleToggleRunning = () => {\n if (running) {\n stop();\n handleUpdate();\n } else {\n start(\n async () => {\n const { objects } = await space.db.query(Filter.schema(DocumentType)).run();\n if (objects.length) {\n const object = faker.helpers.arrayElement(objects);\n await generator.mutateObject(object, { count: 10, mutationSize: 10, maxContentLength: 1000 });\n }\n },\n {\n count: safeParseInt(mutationCount) ?? 0,\n interval: safeParseInt(mutationInterval) ?? 0,\n jitter: safeParseInt(mutationJitter) ?? 0,\n },\n );\n }\n };\n\n const handleCreateInvitation = () => {\n const invitation = space.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n // TODO(burdon): Refactor.\n // TODO(burdon): Unsubscribe?\n connect(invitation);\n const code = InvitationEncoder.encode(invitation.get());\n new URL(window.origin).searchParams.set('spaceInvitationCode', code);\n const url = `${window.origin}?spaceInvitationCode=${code}`;\n void navigator.clipboard.writeText(url);\n };\n\n const handleCreateEpoch = async () => {\n await space.internal.createEpoch();\n handleUpdate();\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <CustomInput\n icon='ph--flag--regular'\n autoComplete='off'\n placeholder='Count'\n value={mutationCount}\n onChange={({ target: { value } }) => setMutationCount(value)}\n />\n <CustomInput\n icon='ph--timer--regular'\n autoComplete='off'\n placeholder='Interval'\n value={mutationInterval}\n onChange={({ target: { value } }) => setMutationInterval(value)}\n />\n <CustomInput\n icon='ph--plus-minus--regular'\n autoComplete='off'\n placeholder='Jitter'\n value={mutationJitter}\n onChange={({ target: { value } }) => setMutationJitter(value)}\n />\n\n <IconButton\n icon={running ? 'ph--pause-circle--regular' : 'ph--play-circle--regular'}\n iconOnly\n label='Start/stop'\n size={5}\n onClick={handleToggleRunning}\n />\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' size={5} onClick={handleUpdate} />\n <IconButton icon='ph--download-simple--regular' iconOnly label='Download' size={5} onClick={handleDownload} />\n\n <Toolbar.Expander />\n <IconButton\n icon='ph--flag-pennant--regular'\n iconOnly\n label='Create epoch'\n size={5}\n onClick={handleCreateEpoch}\n />\n <IconButton\n icon='ph--user-circle-plus--regular'\n iconOnly\n iconClassNames='text-blue-500'\n label='Create Invitation'\n size={5}\n onClick={handleCreateInvitation}\n />\n </Toolbar.Root>\n }\n >\n <ObjectCreator space={space} onAddObjects={onAddObjects} />\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { type MutationsProviderParams, TestSchemaType, createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveEchoObject, type ReactiveObject, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Toolbar } from '@dxos/react-ui';\nimport { createColumnBuilder, type TableColumnDef, Table } from '@dxos/react-ui-table/deprecated';\n\nconst BATCH_SIZE = 10;\n\nexport type CreateObjectsParams = {\n schema: string;\n enabled: boolean;\n objects: number;\n mutations: Pick<MutationsProviderParams, 'count' | 'mutationSize' | 'maxContentLength'>;\n};\n\nexport type ObjectCreatorProps = {\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const ObjectCreator = ({ space, onAddObjects }: ObjectCreatorProps) => {\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n const [objects, setObjects] = useState<CreateObjectsParams[]>(\n Object.values(TestSchemaType).map((schema) => ({\n schema,\n enabled: true,\n objects: 10,\n mutations: {\n count: 10,\n mutationSize: 10,\n maxContentLength: 1000,\n },\n })),\n );\n\n const handleCreate = async () => {\n for (const params of objects) {\n if (!params.enabled) {\n continue;\n }\n\n let objectsCreated = 0;\n while (objectsCreated < params.objects) {\n const objects = (await generator.createObjects({\n [params.schema]: Math.min(BATCH_SIZE, params.objects - objectsCreated),\n })) as ReactiveEchoObject<any>[];\n\n await generator.mutateObjects(objects, params.mutations);\n objectsCreated += objects.length;\n onAddObjects?.(objects);\n }\n }\n\n await space.db.flush();\n };\n\n const handleUpdate = (row: CreateObjectsParams, key: string, value: any) => {\n const newObjects = [...objects];\n Object.assign(newObjects.find((object) => object.schema === row.schema)!, { [key]: value });\n setObjects(newObjects);\n };\n\n const { helper, builder } = createColumnBuilder<CreateObjectsParams>();\n const columns: TableColumnDef<CreateObjectsParams>[] = [\n helper.accessor('enabled', builder.switch({ label: 'Live', onUpdate: handleUpdate })),\n helper.accessor('schema', builder.string({ label: 'Schema', classNames: 'font-mono' })),\n helper.accessor('objects', builder.number({ label: 'Objects', onUpdate: handleUpdate })),\n helper.accessor((obj) => obj.mutations.count, {\n id: 'mutations',\n ...builder.number({ label: 'Mutations', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.mutationSize, {\n id: 'mutationSize',\n ...builder.number({ label: 'Mut. Size', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.maxContentLength, {\n id: 'mutationMaxContentLength',\n ...builder.number({ label: 'Length', onUpdate: handleUpdate }),\n }),\n ];\n\n return (\n <>\n <Table.Root>\n <Table.Viewport>\n <Table.Main<CreateObjectsParams> columns={columns} data={objects} />\n </Table.Viewport>\n </Table.Root>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--plus--regular' label='Create' onClick={handleCreate} />\n </Toolbar.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugSpace } from './DebugSpace';\n\nexport default DebugSpace;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useContext, useMemo, useState } from 'react';\n\nimport { createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveObject } from '@dxos/echo-schema';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { faker } from '@dxos/random';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useSpaceInvitation } from '@dxos/react-client/echo';\nimport { InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { Icon, IconButton, Input, type IconProps, type TextInputProps, Toolbar, useFileDownload } from '@dxos/react-ui';\nimport { safeParseInt } from '@dxos/util';\n\nimport { ObjectCreator } from './ObjectCreator';\nimport { DebugContext } from '../../types';\nimport { Container } from '../Container';\n\nconst DEFAULT_COUNT = 100;\nconst DEFAULT_PERIOD = 500;\nconst DEFAULT_JITTER = 50;\n\nconst useRefresh = (): [any, () => void] => {\n const [update, setUpdate] = useState({});\n return [update, () => setUpdate({})];\n};\n\nconst CustomInput = ({ icon, ...props }: Pick<IconProps, 'icon'> & TextInputProps) => {\n return (\n <div role='none' className='relative'>\n <Input.Root>\n <Input.TextInput classNames='w-[100px] text-right pie-[22px]' size={5} {...props} />\n </Input.Root>\n <Icon icon={icon} size={3} classNames='absolute inline-end-1 block-start-1 mt-[6px]' />\n </div>\n );\n};\n\nexport const DebugSpace: FC<{\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n}> = ({ space, onAddObjects }) => {\n const { connect } = useSpaceInvitation(space?.key);\n const client = useClient();\n const [data, setData] = useState<any>({});\n\n const [update, handleUpdate] = useRefresh();\n useAsyncEffect(\n async (isMounted) => {\n const data = await client.diagnostics({ truncate: true });\n if (isMounted()) {\n setData(\n data?.diagnostics?.spaces?.find(({ key }: any) => {\n return space.key.toHex().startsWith(key);\n }),\n );\n }\n },\n [space, update],\n );\n\n const download = useFileDownload();\n const handleDownload = async () => {\n download(\n new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' }),\n `${new Date().toISOString().replace(/\\W/g, '-')}.json`,\n );\n };\n\n const [mutationCount, setMutationCount] = useState(String(DEFAULT_COUNT));\n const [mutationInterval, setMutationInterval] = useState(String(DEFAULT_PERIOD));\n const [mutationJitter, setMutationJitter] = useState(String(DEFAULT_JITTER));\n\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n // TODO(burdon): Note: this is shared across all spaces!\n const { running, start, stop } = useContext(DebugContext);\n const handleToggleRunning = () => {\n if (running) {\n stop();\n handleUpdate();\n } else {\n start(\n async () => {\n const { objects } = await space.db.query(Filter.schema(DocumentType)).run();\n if (objects.length) {\n const object = faker.helpers.arrayElement(objects);\n await generator.mutateObject(object, { count: 10, mutationSize: 10, maxContentLength: 1000 });\n }\n },\n {\n count: safeParseInt(mutationCount) ?? 0,\n interval: safeParseInt(mutationInterval) ?? 0,\n jitter: safeParseInt(mutationJitter) ?? 0,\n },\n );\n }\n };\n\n const handleCreateInvitation = () => {\n const invitation = space.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n // TODO(burdon): Refactor.\n // TODO(burdon): Unsubscribe?\n connect(invitation);\n const code = InvitationEncoder.encode(invitation.get());\n new URL(window.origin).searchParams.set('spaceInvitationCode', code);\n const url = `${window.origin}?spaceInvitationCode=${code}`;\n void navigator.clipboard.writeText(url);\n };\n\n const handleCreateEpoch = async () => {\n await space.internal.createEpoch();\n handleUpdate();\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <CustomInput\n icon='ph--flag--regular'\n autoComplete='off'\n placeholder='Count'\n value={mutationCount}\n onChange={({ target: { value } }) => setMutationCount(value)}\n />\n <CustomInput\n icon='ph--timer--regular'\n autoComplete='off'\n placeholder='Interval'\n value={mutationInterval}\n onChange={({ target: { value } }) => setMutationInterval(value)}\n />\n <CustomInput\n icon='ph--plus-minus--regular'\n autoComplete='off'\n placeholder='Jitter'\n value={mutationJitter}\n onChange={({ target: { value } }) => setMutationJitter(value)}\n />\n\n <IconButton\n icon={running ? 'ph--hand-palm--regular' : 'ph--play--regular'}\n iconOnly\n label='Start/stop'\n size={5}\n onClick={handleToggleRunning}\n />\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' size={5} onClick={handleUpdate} />\n <IconButton icon='ph--download-simple--regular' iconOnly label='Download' size={5} onClick={handleDownload} />\n\n <Toolbar.Expander />\n <IconButton\n icon='ph--flag-pennant--regular'\n iconOnly\n label='Create epoch'\n size={5}\n onClick={handleCreateEpoch}\n />\n <IconButton\n icon='ph--user-circle-plus--regular'\n iconOnly\n iconClassNames='text-blue-500'\n label='Create Invitation'\n size={5}\n onClick={handleCreateInvitation}\n />\n </Toolbar.Root>\n }\n >\n <ObjectCreator space={space} onAddObjects={onAddObjects} />\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { type MutationsProviderParams, TestSchemaType, createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveEchoObject, type ReactiveObject, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Toolbar } from '@dxos/react-ui';\nimport { createColumnBuilder, type TableColumnDef, Table } from '@dxos/react-ui-table/deprecated';\n\nconst BATCH_SIZE = 10;\n\nexport type CreateObjectsParams = {\n schema: string;\n enabled: boolean;\n objects: number;\n mutations: Pick<MutationsProviderParams, 'count' | 'mutationSize' | 'maxContentLength'>;\n};\n\nexport type ObjectCreatorProps = {\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const ObjectCreator = ({ space, onAddObjects }: ObjectCreatorProps) => {\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n const [objects, setObjects] = useState<CreateObjectsParams[]>(\n Object.values(TestSchemaType).map((schema) => ({\n schema,\n enabled: true,\n objects: 10,\n mutations: {\n count: 10,\n mutationSize: 10,\n maxContentLength: 1000,\n },\n })),\n );\n\n const handleCreate = async () => {\n for (const params of objects) {\n if (!params.enabled) {\n continue;\n }\n\n let objectsCreated = 0;\n while (objectsCreated < params.objects) {\n const objects = (await generator.createObjects({\n [params.schema]: Math.min(BATCH_SIZE, params.objects - objectsCreated),\n })) as ReactiveEchoObject<any>[];\n\n await generator.mutateObjects(objects, params.mutations);\n objectsCreated += objects.length;\n onAddObjects?.(objects);\n }\n }\n\n await space.db.flush();\n };\n\n const handleUpdate = (row: CreateObjectsParams, key: string, value: any) => {\n const newObjects = [...objects];\n Object.assign(newObjects.find((object) => object.schema === row.schema)!, { [key]: value });\n setObjects(newObjects);\n };\n\n const { helper, builder } = createColumnBuilder<CreateObjectsParams>();\n const columns: TableColumnDef<CreateObjectsParams>[] = [\n helper.accessor('enabled', builder.switch({ label: 'Live', onUpdate: handleUpdate })),\n helper.accessor('schema', builder.string({ label: 'Schema', classNames: 'font-mono' })),\n helper.accessor('objects', builder.number({ label: 'Objects', onUpdate: handleUpdate })),\n helper.accessor((obj) => obj.mutations.count, {\n id: 'mutations',\n ...builder.number({ label: 'Mutations', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.mutationSize, {\n id: 'mutationSize',\n ...builder.number({ label: 'Mut. Size', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.maxContentLength, {\n id: 'mutationMaxContentLength',\n ...builder.number({ label: 'Length', onUpdate: handleUpdate }),\n }),\n ];\n\n return (\n <>\n <Table.Root>\n <Table.Viewport>\n <Table.Main<CreateObjectsParams> columns={columns} data={objects} />\n </Table.Viewport>\n </Table.Root>\n <Toolbar.Root classNames='p-2'>\n <IconButton icon='ph--plus--regular' label='Create' onClick={handleCreate} />\n </Toolbar.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugSpace } from './DebugSpace';\n\nexport default DebugSpace;\n"],
5
+ "mappings": "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",
6
6
  "names": ["React", "useContext", "useMemo", "useState", "createSpaceObjectGenerator", "DocumentType", "Invitation", "faker", "useClient", "Filter", "useSpaceInvitation", "InvitationEncoder", "useAsyncEffect", "Icon", "IconButton", "Input", "Toolbar", "useFileDownload", "safeParseInt", "React", "useMemo", "useState", "TestSchemaType", "createSpaceObjectGenerator", "IconButton", "Toolbar", "createColumnBuilder", "Table", "BATCH_SIZE", "ObjectCreator", "space", "onAddObjects", "generator", "useMemo", "createSpaceObjectGenerator", "objects", "setObjects", "useState", "Object", "values", "TestSchemaType", "map", "schema", "enabled", "mutations", "count", "mutationSize", "maxContentLength", "handleCreate", "params", "objectsCreated", "createObjects", "Math", "min", "mutateObjects", "length", "db", "flush", "handleUpdate", "row", "key", "value", "newObjects", "assign", "find", "object", "helper", "builder", "createColumnBuilder", "columns", "accessor", "switch", "label", "onUpdate", "string", "classNames", "number", "obj", "id", "Table", "Root", "Viewport", "Main", "data", "Toolbar", "IconButton", "icon", "onClick", "DEFAULT_COUNT", "DEFAULT_PERIOD", "DEFAULT_JITTER", "useRefresh", "update", "setUpdate", "useState", "CustomInput", "icon", "props", "React", "div", "role", "className", "Input", "Root", "TextInput", "classNames", "size", "Icon", "DebugSpace", "space", "onAddObjects", "connect", "useSpaceInvitation", "key", "client", "useClient", "data", "setData", "handleUpdate", "useAsyncEffect", "isMounted", "diagnostics", "truncate", "spaces", "find", "toHex", "startsWith", "download", "useFileDownload", "handleDownload", "Blob", "JSON", "stringify", "undefined", "type", "Date", "toISOString", "replace", "mutationCount", "setMutationCount", "String", "mutationInterval", "setMutationInterval", "mutationJitter", "setMutationJitter", "generator", "useMemo", "createSpaceObjectGenerator", "running", "start", "stop", "useContext", "DebugContext", "handleToggleRunning", "objects", "db", "query", "Filter", "schema", "DocumentType", "run", "length", "object", "faker", "helpers", "arrayElement", "mutateObject", "count", "mutationSize", "maxContentLength", "safeParseInt", "interval", "jitter", "handleCreateInvitation", "invitation", "share", "Invitation", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "NONE", "multiUse", "code", "InvitationEncoder", "encode", "get", "URL", "window", "origin", "searchParams", "set", "url", "navigator", "clipboard", "writeText", "handleCreateEpoch", "internal", "createEpoch", "Container", "toolbar", "Toolbar", "autoComplete", "placeholder", "value", "onChange", "target", "IconButton", "iconOnly", "label", "onClick", "Expander", "iconClassNames", "ObjectCreator", "DebugSpace"]
7
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 { memoizeQuery, SpaceAction } from "@dxos/plugin-space";
19
+ import { 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,6 +30,7 @@ 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",
33
34
  className: "flex flex-col"
34
35
  }, /* @__PURE__ */ React.createElement(SyntaxHighlighter, {
35
36
  classNames: "flex text-xs",
@@ -387,8 +388,7 @@ var Wireframe = ({ classNames, label, object }) => {
387
388
 
388
389
  // packages/plugins/plugin-debug/src/components/index.ts
389
390
  var DebugApp = lazy(() => import("./DebugApp-HCHR6GKO.mjs"));
390
- var DebugSpace = lazy(() => import("./DebugSpace-HK2GQYIB.mjs"));
391
- var SpaceGenerator = lazy(() => import("./SpaceGenerator-TIBUROQA.mjs"));
391
+ var DebugSpace = lazy(() => import("./DebugSpace-ZLGGNDAR.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: 128,
501
+ L: 111,
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: 129,
510
+ L: 112,
511
511
  S: void 0,
512
512
  A: [
513
513
  "client",
@@ -571,8 +571,7 @@ var DebugPlugin = definePlugin((context) => {
571
571
  id: `${space.id}-debug`,
572
572
  type: "dxos.org/plugin/debug/space",
573
573
  data: {
574
- space,
575
- type: "dxos.org/plugin/debug/space"
574
+ space
576
575
  },
577
576
  properties: {
578
577
  label: [
@@ -598,8 +597,7 @@ var DebugPlugin = definePlugin((context) => {
598
597
  const icon = "ph--bug--regular";
599
598
  const [subjectId] = id.split("~");
600
599
  const { spaceId, objectId } = parseId(subjectId);
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);
600
+ const space = client.spaces.get().find((space2) => space2.id === spaceId);
603
601
  if (!objectId) {
604
602
  const label2 = space ? space.properties.name || [
605
603
  "unnamed space label",
@@ -625,9 +623,15 @@ var DebugPlugin = definePlugin((context) => {
625
623
  }
626
624
  };
627
625
  }
628
- const [object] = memoizeQuery(space, {
629
- id: objectId
630
- });
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);
631
635
  if (!object || !subjectId) {
632
636
  return;
633
637
  }
@@ -696,30 +700,25 @@ var DebugPlugin = definePlugin((context) => {
696
700
  component = /* @__PURE__ */ React5.createElement(Devtools, null);
697
701
  } else if (!primary || typeof primary !== "object" || !settings.debug) {
698
702
  component = null;
699
- } else if ("type" in primary && primary.type === "dxos.org/plugin/debug/space" && "space" in primary && isSpace(primary.space)) {
700
- const handleAddObject = (objects) => {
701
- if (!isSpace(primary.space)) {
702
- return;
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: handleAddObject
720
- }) : /* @__PURE__ */ React5.createElement(SpaceGenerator, {
703
+ } else if ("space" in primary && isSpace(primary.space)) {
704
+ component = /* @__PURE__ */ React5.createElement(DebugSpace, {
721
705
  space: primary.space,
722
- onAddObjects: handleAddObject
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
+ })));
721
+ }
723
722
  });
724
723
  } else if ("graph" in primary && primary.graph instanceof Graph) {
725
724
  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 { 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 handleAddObject = (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={handleAddObject} />\n ) : (\n <SpaceGenerator space={primary.space} onAddObjects={handleAddObject} />\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", "handleAddObject", "objects", "collection", "CollectionType", "typename", "parseIntentPlugin", "dispatch", "map", "SpaceAction", "ADD_OBJECT", "target", "deprecated", "DebugSpace", "onAddObjects", "SpaceGenerator", "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 { 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"]
7
7
  }