@dxos/plugin-debug 0.8.3 → 0.8.4-main.f9ba587

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 (53) hide show
  1. package/dist/lib/browser/{DebugApp-WSEJPCKY.mjs → DebugApp-5JPOASYB.mjs} +6 -6
  2. package/dist/lib/browser/{DevtoolsOverviewContainer-IIIWO77Q.mjs → DevtoolsOverviewContainer-EPD6EWT5.mjs} +2 -2
  3. package/dist/lib/browser/{SpaceGenerator-VB6IB2LL.mjs → SpaceGenerator-BLFPBKL2.mjs} +9 -9
  4. package/dist/lib/browser/{app-graph-builder-6HHJMKVU.mjs → app-graph-builder-SQXFD2BL.mjs} +4 -4
  5. package/dist/lib/browser/{chunk-47JOZTT2.mjs → chunk-5XPIRNQS.mjs} +2 -2
  6. package/dist/lib/browser/{chunk-KS3YBEL7.mjs → chunk-AJA6RYN3.mjs} +2 -2
  7. package/dist/lib/browser/index.mjs +12 -12
  8. package/dist/lib/browser/index.mjs.map +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-context-ZQRD2WG2.mjs → react-context-NVAGLAJD.mjs} +3 -3
  11. package/dist/lib/browser/{react-surface-UI6OK73H.mjs → react-surface-EWOX4JS7.mjs} +18 -18
  12. package/dist/lib/browser/react-surface-EWOX4JS7.mjs.map +7 -0
  13. package/dist/lib/browser/{settings-SXQWSIM4.mjs → settings-LSSWLM5I.mjs} +4 -4
  14. package/dist/lib/node-esm/DebugApp-B2TUPIX6.mjs +227 -0
  15. package/dist/lib/node-esm/DebugApp-B2TUPIX6.mjs.map +7 -0
  16. package/dist/lib/node-esm/DevtoolsOverviewContainer-K622ZTH2.mjs +27 -0
  17. package/dist/lib/node-esm/DevtoolsOverviewContainer-K622ZTH2.mjs.map +7 -0
  18. package/dist/lib/node-esm/SpaceGenerator-MJR725EE.mjs +1240 -0
  19. package/dist/lib/node-esm/SpaceGenerator-MJR725EE.mjs.map +7 -0
  20. package/dist/lib/node-esm/app-graph-builder-W26WQYCF.mjs +598 -0
  21. package/dist/lib/node-esm/app-graph-builder-W26WQYCF.mjs.map +7 -0
  22. package/dist/lib/node-esm/chunk-HTJ6Z5U5.mjs +20 -0
  23. package/dist/lib/node-esm/chunk-HTJ6Z5U5.mjs.map +7 -0
  24. package/dist/lib/node-esm/chunk-I6XSKQ6D.mjs +70 -0
  25. package/dist/lib/node-esm/chunk-I6XSKQ6D.mjs.map +7 -0
  26. package/dist/lib/node-esm/index.mjs +131 -0
  27. package/dist/lib/node-esm/index.mjs.map +7 -0
  28. package/dist/lib/node-esm/meta.json +1 -0
  29. package/dist/lib/node-esm/react-context-6ELMAMVB.mjs +17 -0
  30. package/dist/lib/node-esm/react-context-6ELMAMVB.mjs.map +7 -0
  31. package/dist/lib/node-esm/react-surface-HDU56SYC.mjs +769 -0
  32. package/dist/lib/node-esm/react-surface-HDU56SYC.mjs.map +7 -0
  33. package/dist/lib/node-esm/settings-YWFF57TW.mjs +23 -0
  34. package/dist/lib/node-esm/settings-YWFF57TW.mjs.map +7 -0
  35. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +1 -1
  36. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -1
  37. package/dist/types/src/translations.d.ts +60 -60
  38. package/dist/types/src/translations.d.ts.map +1 -1
  39. package/dist/types/tsconfig.tsbuildinfo +1 -1
  40. package/package.json +56 -56
  41. package/src/DebugPlugin.tsx +1 -1
  42. package/src/capabilities/react-surface.tsx +2 -2
  43. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +1 -1
  44. package/src/translations.ts +6 -4
  45. package/dist/lib/browser/react-surface-UI6OK73H.mjs.map +0 -7
  46. /package/dist/lib/browser/{DebugApp-WSEJPCKY.mjs.map → DebugApp-5JPOASYB.mjs.map} +0 -0
  47. /package/dist/lib/browser/{DevtoolsOverviewContainer-IIIWO77Q.mjs.map → DevtoolsOverviewContainer-EPD6EWT5.mjs.map} +0 -0
  48. /package/dist/lib/browser/{SpaceGenerator-VB6IB2LL.mjs.map → SpaceGenerator-BLFPBKL2.mjs.map} +0 -0
  49. /package/dist/lib/browser/{app-graph-builder-6HHJMKVU.mjs.map → app-graph-builder-SQXFD2BL.mjs.map} +0 -0
  50. /package/dist/lib/browser/{chunk-47JOZTT2.mjs.map → chunk-5XPIRNQS.mjs.map} +0 -0
  51. /package/dist/lib/browser/{chunk-KS3YBEL7.mjs.map → chunk-AJA6RYN3.mjs.map} +0 -0
  52. /package/dist/lib/browser/{react-context-ZQRD2WG2.mjs.map → react-context-NVAGLAJD.mjs.map} +0 -0
  53. /package/dist/lib/browser/{settings-SXQWSIM4.mjs.map → settings-LSSWLM5I.mjs.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  Devtools
3
- } from "./chunk-KS3YBEL7.mjs";
3
+ } from "./chunk-AJA6RYN3.mjs";
4
4
  import {
5
5
  DEBUG_PLUGIN
6
- } from "./chunk-47JOZTT2.mjs";
6
+ } from "./chunk-5XPIRNQS.mjs";
7
7
 
8
- // packages/plugins/plugin-debug/src/capabilities/react-surface.tsx
8
+ // src/capabilities/react-surface.tsx
9
9
  import { pipe } from "effect";
10
10
  import React5, { useCallback } from "react";
11
11
  import { Capabilities as Capabilities2, chain, contributes, createIntent, createSurface, LayoutAction, useCapability, useIntentDispatcher } from "@dxos/app-framework";
12
12
  import { AutomergePanel, ConfigPanel, CredentialsPanel, DeviceListPanel, DiagnosticsPanel, EdgeDashboardPanel, FeedsPanel, IdentityPanel, InvocationTraceContainer, KeyringPanel, LoggingPanel, MembersPanel, MetadataPanel, NetworkPanel, ObjectsPanel, QueuesPanel, SchemaPanel, SignalPanel, SpaceInfoPanel, SpaceListPanel, StoragePanel, SwarmPanel, TestingPanel, TracingPanel, WorkflowPanel } from "@dxos/devtools";
13
- import { Obj, Type } from "@dxos/echo";
13
+ import { Obj } from "@dxos/echo";
14
14
  import { SettingsStore } from "@dxos/local-storage";
15
15
  import { log as log2 } from "@dxos/log";
16
16
  import { ClientCapabilities } from "@dxos/plugin-client";
@@ -21,10 +21,10 @@ import { SpaceState, isSpace, parseId } from "@dxos/react-client/echo";
21
21
  import { StackItem as StackItem2 } from "@dxos/react-ui-stack";
22
22
  import { DataType } from "@dxos/schema";
23
23
 
24
- // packages/plugins/plugin-debug/src/components/index.ts
24
+ // src/components/index.ts
25
25
  import { lazy } from "react";
26
26
 
27
- // packages/plugins/plugin-debug/src/components/DebugObjectPanel.tsx
27
+ // src/components/DebugObjectPanel.tsx
28
28
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
29
29
  import React from "react";
30
30
  import { Clipboard, Input, Toolbar } from "@dxos/react-ui";
@@ -50,7 +50,7 @@ var DebugObjectPanel = ({ object }) => {
50
50
  }
51
51
  };
52
52
 
53
- // packages/plugins/plugin-debug/src/components/DebugSettings.tsx
53
+ // src/components/DebugSettings.tsx
54
54
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
55
55
  import React2, { useEffect, useState } from "react";
56
56
  import { Capabilities, useCapabilities } from "@dxos/app-framework";
@@ -60,7 +60,7 @@ import { useClient } from "@dxos/react-client";
60
60
  import { useTranslation, Button, Toast, Input as Input2, useFileDownload, Select, Icon } from "@dxos/react-ui";
61
61
  import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
62
62
  import { setDeep } from "@dxos/util";
63
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-debug/src/components/DebugSettings.tsx";
63
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-debug/src/components/DebugSettings.tsx";
64
64
  var StorageAdapters = {
65
65
  opfs: defs.Runtime.Client.Storage.StorageDriver.WEBFS,
66
66
  idb: defs.Runtime.Client.Storage.StorageDriver.IDB
@@ -195,7 +195,7 @@ var updateConfig = (config, setConfig, path, value) => {
195
195
  });
196
196
  };
197
197
 
198
- // packages/plugins/plugin-debug/src/components/DebugStatus.tsx
198
+ // src/components/DebugStatus.tsx
199
199
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
200
200
  import React3, { useEffect as useEffect2, useRef, useState as useState2 } from "react";
201
201
  import { TimeoutError } from "@dxos/async";
@@ -335,7 +335,7 @@ var DebugStatus = () => {
335
335
  }
336
336
  };
337
337
 
338
- // packages/plugins/plugin-debug/src/components/Wireframe.tsx
338
+ // src/components/Wireframe.tsx
339
339
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
340
340
  import React4 from "react";
341
341
  import { useResizeDetector } from "react-resize-detector";
@@ -388,13 +388,13 @@ var Wireframe = ({ classNames, label, object }) => {
388
388
  }
389
389
  };
390
390
 
391
- // packages/plugins/plugin-debug/src/components/index.ts
392
- var DebugApp = lazy(() => import("./DebugApp-WSEJPCKY.mjs"));
393
- var DevtoolsOverviewContainer = lazy(() => import("./DevtoolsOverviewContainer-IIIWO77Q.mjs"));
394
- var SpaceGenerator = lazy(() => import("./SpaceGenerator-VB6IB2LL.mjs"));
391
+ // src/components/index.ts
392
+ var DebugApp = lazy(() => import("./DebugApp-5JPOASYB.mjs"));
393
+ var DevtoolsOverviewContainer = lazy(() => import("./DevtoolsOverviewContainer-EPD6EWT5.mjs"));
394
+ var SpaceGenerator = lazy(() => import("./SpaceGenerator-BLFPBKL2.mjs"));
395
395
 
396
- // packages/plugins/plugin-debug/src/capabilities/react-surface.tsx
397
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-debug/src/capabilities/react-surface.tsx";
396
+ // src/capabilities/react-surface.tsx
397
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-debug/src/capabilities/react-surface.tsx";
398
398
  var isSpaceDebug = (data) => data?.type === `${DEBUG_PLUGIN}/space` && isSpace(data.space);
399
399
  var isGraphDebug = (data) => data?.graph instanceof Graph;
400
400
  var useCurrentSpace = () => {
@@ -423,7 +423,7 @@ var react_surface_default = (context) => contributes(Capabilities2.ReactSurface,
423
423
  if (!isSpace(data.subject.space)) {
424
424
  return;
425
425
  }
426
- const collection = data.subject.space.state.get() === SpaceState.SPACE_READY && data.subject.space.properties[Type.getTypename(DataType.Collection)]?.target;
426
+ const collection = data.subject.space.state.get() === SpaceState.SPACE_READY && data.subject.space.properties[DataType.Collection.typename]?.target;
427
427
  if (!Obj.instanceOf(DataType.Collection, collection)) {
428
428
  return;
429
429
  }
@@ -765,4 +765,4 @@ var react_surface_default = (context) => contributes(Capabilities2.ReactSurface,
765
765
  export {
766
766
  react_surface_default as default
767
767
  };
768
- //# sourceMappingURL=react-surface-UI6OK73H.mjs.map
768
+ //# sourceMappingURL=react-surface-EWOX4JS7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/index.ts", "../../../src/components/DebugObjectPanel.tsx", "../../../src/components/DebugSettings.tsx", "../../../src/components/DebugStatus.tsx", "../../../src/components/Wireframe.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport {\n Capabilities,\n chain,\n contributes,\n createIntent,\n createSurface,\n LayoutAction,\n useCapability,\n useIntentDispatcher,\n type PluginContext,\n} from '@dxos/app-framework';\nimport {\n AutomergePanel,\n ConfigPanel,\n CredentialsPanel,\n DeviceListPanel,\n DiagnosticsPanel,\n EdgeDashboardPanel,\n FeedsPanel,\n IdentityPanel,\n InvocationTraceContainer,\n KeyringPanel,\n LoggingPanel,\n MembersPanel,\n MetadataPanel,\n NetworkPanel,\n ObjectsPanel,\n QueuesPanel,\n SchemaPanel,\n SignalPanel,\n SpaceInfoPanel,\n SpaceListPanel,\n StoragePanel,\n SwarmPanel,\n TestingPanel,\n TracingPanel,\n WorkflowPanel,\n} from '@dxos/devtools';\nimport { Obj } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { Graph } from '@dxos/plugin-graph';\nimport { ScriptAction } from '@dxos/plugin-script/types';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { SpaceState, isSpace, type Space, parseId } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { DataType } from '@dxos/schema';\n\nimport {\n DebugApp,\n DebugObjectPanel,\n DebugSettings,\n DebugStatus,\n DevtoolsOverviewContainer,\n SpaceGenerator,\n Wireframe,\n} from '../components';\nimport { DEBUG_PLUGIN } from '../meta';\nimport { type DebugSettingsProps, Devtools } from '../types';\n\ntype SpaceDebug = {\n type: string;\n space: Space;\n};\n\ntype GraphDebug = {\n graph: Graph;\n};\n\nconst isSpaceDebug = (data: any): data is SpaceDebug => data?.type === `${DEBUG_PLUGIN}/space` && isSpace(data.space);\nconst isGraphDebug = (data: any): data is GraphDebug => data?.graph instanceof Graph;\n\n// TODO(wittjosiah): Factor out?\nconst useCurrentSpace = () => {\n const layout = useCapability(Capabilities.Layout);\n const client = useCapability(ClientCapabilities.Client);\n const { spaceId } = parseId(layout.workspace);\n const space = spaceId ? client.spaces.get(spaceId) : undefined;\n return space;\n};\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${DEBUG_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<DebugSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === DEBUG_PLUGIN,\n component: ({ data: { subject } }) => <DebugSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/space`,\n role: 'article',\n filter: (data): data is { subject: SpaceDebug } => isSpaceDebug(data.subject),\n component: ({ data }) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleCreateObject = useCallback(\n (objects: Obj.Any[]) => {\n if (!isSpace(data.subject.space)) {\n return;\n }\n\n const collection =\n data.subject.space.state.get() === SpaceState.SPACE_READY &&\n data.subject.space.properties[DataType.Collection.typename]?.target;\n if (!Obj.instanceOf(DataType.Collection, collection)) {\n return;\n }\n\n objects.forEach((object) => {\n void dispatch(createIntent(SpaceAction.AddObject, { target: collection, object }));\n });\n },\n [data.subject.space],\n );\n\n return (\n <StackItem.Content>\n <SpaceGenerator space={data.subject.space} onCreateObjects={handleCreateObject} />\n </StackItem.Content>\n );\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/graph`,\n role: 'article',\n filter: (data): data is { subject: GraphDebug } => isGraphDebug(data.subject),\n component: ({ data }) => <DebugApp graph={data.subject.graph} />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/wireframe`,\n role: ['article', 'section'],\n position: 'hoist',\n filter: (data): data is { subject: Obj.Any } => {\n const settings = context\n .getCapability(Capabilities.SettingsStore)\n .getStore<DebugSettingsProps>(DEBUG_PLUGIN)!.value;\n return Obj.isObject(data.subject) && !!settings.wireframe;\n },\n component: ({ data, role }) => (\n <Wireframe label={`${role}:${name}`} object={data.subject} classNames='row-span-2 overflow-hidden' />\n ),\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/object-debug`,\n role: 'article',\n filter: (data): data is { companionTo: Obj.Any } => data.subject === 'debug' && Obj.isObject(data.companionTo),\n component: ({ data }) => <DebugObjectPanel object={data.companionTo} />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/devtools-overview`,\n role: 'deck-companion--devtools',\n component: () => <DevtoolsOverviewContainer />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/status`,\n role: 'status',\n component: () => <DebugStatus />,\n }),\n\n //\n // Devtools\n //\n\n createSurface({\n id: `${DEBUG_PLUGIN}/client/config`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Client.Config,\n component: () => <ConfigPanel vaultSelector={false} />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/client/storage`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Client.Storage,\n component: () => <StoragePanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/client/logs`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Client.Logs,\n component: () => <LoggingPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/client/diagnostics`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Client.Diagnostics,\n component: () => <DiagnosticsPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/client/tracing`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Client.Tracing,\n component: () => <TracingPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/halo/identity`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Halo.Identity,\n component: () => <IdentityPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/halo/devices`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Halo.Devices,\n component: () => <DeviceListPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/halo/keyring`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Halo.Keyring,\n component: () => <KeyringPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/halo/credentials`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Halo.Credentials,\n component: () => {\n const space = useCurrentSpace();\n return <CredentialsPanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/spaces`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Spaces,\n component: () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const handleSelect = useCallback(\n () => dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [Devtools.Echo.Space] })),\n [dispatch],\n );\n return <SpaceListPanel onSelect={handleSelect} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/space`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Space,\n component: () => {\n const space = useCurrentSpace();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const handleSelect = useCallback(\n () => dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [Devtools.Echo.Feeds] })),\n [dispatch],\n );\n return <SpaceInfoPanel space={space} onSelectFeed={handleSelect} onSelectPipeline={handleSelect} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/feeds`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Feeds,\n component: () => {\n const space = useCurrentSpace();\n return <FeedsPanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/objects`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Objects,\n component: () => {\n const space = useCurrentSpace();\n return <ObjectsPanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/schema`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Schema,\n component: () => {\n const space = useCurrentSpace();\n return <SchemaPanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/automerge`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Automerge,\n component: () => {\n const space = useCurrentSpace();\n return <AutomergePanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/queues`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Queues,\n component: () => <QueuesPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/members`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Members,\n component: () => {\n const space = useCurrentSpace();\n return <MembersPanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/echo/metadata`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Echo.Metadata,\n component: () => <MetadataPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/mesh/signal`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Mesh.Signal,\n component: () => <SignalPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/mesh/swarm`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Mesh.Swarm,\n component: () => <SwarmPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/mesh/network`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Mesh.Network,\n component: () => {\n const space = useCurrentSpace();\n return <NetworkPanel space={space} />;\n },\n }),\n // TODO(wittjosiah): Remove?\n // createSurface({\n // id: `${DEBUG_PLUGIN}/agent/dashboard`,\n // role: 'article',\n // filter: (data): data is any => data.subject === Devtools.Agent.Dashboard,\n // component: () => <DashboardPanel />,\n // }),\n createSurface({\n id: `${DEBUG_PLUGIN}/edge/dashboard`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Edge.Dashboard,\n component: () => <EdgeDashboardPanel />,\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/edge/workflows`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Edge.Workflows,\n component: () => {\n const space = useCurrentSpace();\n return <WorkflowPanel space={space} />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/edge/traces`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Edge.Traces,\n component: () => {\n const space = useCurrentSpace();\n return <InvocationTraceContainer space={space} detailAxis='block' />;\n },\n }),\n createSurface({\n id: `${DEBUG_PLUGIN}/edge/testing`,\n role: 'article',\n filter: (data): data is any => data.subject === Devtools.Edge.Testing,\n component: () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const onSpaceCreate = useCallback(\n async (space: Space) => {\n await space.waitUntilReady();\n await dispatch(createIntent(SpaceAction.Migrate, { space }));\n await space.db.flush();\n },\n [dispatch],\n );\n const onScriptPluginOpen = useCallback(\n async (space: Space) => {\n await space.waitUntilReady();\n const result = await dispatch(\n pipe(createIntent(ScriptAction.Create, { space }), chain(SpaceAction.AddObject, { target: space })),\n );\n log.info('script created', { result });\n await dispatch(\n createIntent(LayoutAction.Open, { part: 'main', subject: [`${space.id}:${result.data?.object.id}`] }),\n );\n },\n [dispatch],\n );\n return <TestingPanel onSpaceCreate={onSpaceCreate} onScriptPluginOpen={onScriptPluginOpen} />;\n },\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const DebugApp = lazy(() => import('./DebugApp'));\nexport const DevtoolsOverviewContainer = lazy(() => import('./DevtoolsOverviewContainer'));\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 Obj } from '@dxos/echo';\nimport { Clipboard, Input, Toolbar } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\n\nexport type DebugObjectPanelProps = {\n object: Obj.Any;\n};\n\n// TODO(burdon): Get schema and traverse references.\nexport const DebugObjectPanel = ({ object }: DebugObjectPanelProps) => {\n const dxn = `dxn:echo:@:${object.id}`;\n\n return (\n <Clipboard.Provider>\n <StackItem.Content toolbar>\n <Toolbar.Root>\n <Input.Root>\n <Input.TextInput disabled value={dxn} />\n <Clipboard.IconButton value={dxn} />\n </Input.Root>\n </Toolbar.Root>\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify(object, null, 2)}\n </SyntaxHighlighter>\n </StackItem.Content>\n </Clipboard.Provider>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { Capabilities, useCapabilities } 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, Icon } from '@dxos/react-ui';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\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 [upload] = useCapabilities(Capabilities.FileUploader);\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 (upload) {\n const info = await 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 <DeprecatedFormContainer>\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 <Icon icon='ph--download-simple--regular' size={5} />\n </Button>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings repair')}>\n <Button onClick={handleRepair}>\n <Icon icon='ph--first-aid-kit--regular' size={5} />\n </Button>\n </DeprecatedFormInput>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <Toast.Root>\n <Toast.Body>\n <Toast.Title>\n <Icon icon='ph--gift--duotone' size={5} classNames='inline mr-1' />\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 </DeprecatedFormContainer>\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 { TimeoutError } from '@dxos/async';\nimport { useActiveSpace } 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';\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 if (errorRef.current !== error) {\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 _space = useActiveSpace();\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 indicators = [SavingIndicator, SwarmIndicator, 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 { type Obj } from '@dxos/echo';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useAttentionAttributes } 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: Obj.Any;\n}>;\n\n// TODO(burdon): Make focusable and attendable with input.\nexport const Wireframe = ({ classNames, label, object }: WireframeProps) => {\n const attentionAttrs = useAttentionAttributes(fullyQualifiedId(object));\n const { width, height, ref } = useResizeDetector();\n return (\n <div ref={ref} className={mx('relative grow min-bs-96', classNames)} {...attentionAttrs}>\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"],
5
+ "mappings": "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",
6
+ "names": ["pipe", "React", "useCallback", "Capabilities", "chain", "contributes", "createIntent", "createSurface", "LayoutAction", "useCapability", "useIntentDispatcher", "AutomergePanel", "ConfigPanel", "CredentialsPanel", "DeviceListPanel", "DiagnosticsPanel", "EdgeDashboardPanel", "FeedsPanel", "IdentityPanel", "InvocationTraceContainer", "KeyringPanel", "LoggingPanel", "MembersPanel", "MetadataPanel", "NetworkPanel", "ObjectsPanel", "QueuesPanel", "SchemaPanel", "SignalPanel", "SpaceInfoPanel", "SpaceListPanel", "StoragePanel", "SwarmPanel", "TestingPanel", "TracingPanel", "WorkflowPanel", "Obj", "SettingsStore", "log", "ClientCapabilities", "Graph", "ScriptAction", "SpaceAction", "SpaceState", "isSpace", "parseId", "StackItem", "DataType", "lazy", "React", "Clipboard", "Input", "Toolbar", "StackItem", "SyntaxHighlighter", "DebugObjectPanel", "object", "dxn", "id", "Clipboard", "Provider", "StackItem", "Content", "toolbar", "Toolbar", "Root", "Input", "TextInput", "disabled", "value", "IconButton", "SyntaxHighlighter", "classNames", "language", "JSON", "stringify", "React", "useEffect", "useState", "Capabilities", "useCapabilities", "defs", "SaveConfig", "Storage", "log", "useClient", "useTranslation", "Button", "Toast", "Input", "useFileDownload", "Select", "Icon", "DeprecatedFormContainer", "DeprecatedFormInput", "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", "upload", "useCapabilities", "Capabilities", "FileUploader", "useEffect", "then", "config", "handleToast", "setTimeout", "undefined", "clearTimeout", "handleDownload", "data", "diagnostics", "file", "Blob", "JSON", "stringify", "type", "fileName", "Date", "toISOString", "replace", "info", "File", "spaces", "default", "log", "error", "title", "description", "url", "values", "runtime", "services", "ipfs", "gateway", "cid", "navigator", "clipboard", "writeText", "handleRepair", "repair", "err", "message", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "wireframe", "onCheckedChange", "Button", "onClick", "Icon", "icon", "size", "Toast", "Root", "Body", "Title", "classNames", "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", "TimeoutError", "useActiveSpace", "StatusBar", "ConnectionState", "useNetworkStatus", "Icon", "styles", "success", "warning", "error", "ErrorIndicator", "forceUpdate", "useState", "errorRef", "useRef", "useEffect", "errorListener", "event", "error", "reason", "current", "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", "_space", "useActiveSpace", "success", "indicators", "DebugStatus", "map", "Indicator", "key", "name", "React", "useResizeDetector", "fullyQualifiedId", "useAttentionAttributes", "SyntaxHighlighter", "mx", "Wireframe", "classNames", "label", "object", "attentionAttrs", "useAttentionAttributes", "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", "DevtoolsOverviewContainer", "SpaceGenerator", "isSpaceDebug", "data", "type", "DEBUG_PLUGIN", "isSpace", "space", "isGraphDebug", "graph", "Graph", "useCurrentSpace", "layout", "useCapability", "Capabilities", "Layout", "client", "ClientCapabilities", "Client", "spaceId", "parseId", "workspace", "spaces", "get", "undefined", "context", "contributes", "ReactSurface", "createSurface", "id", "role", "filter", "subject", "SettingsStore", "prefix", "component", "React", "DebugSettings", "settings", "value", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleCreateObject", "useCallback", "objects", "collection", "state", "SpaceState", "SPACE_READY", "properties", "DataType", "Collection", "typename", "target", "Obj", "instanceOf", "forEach", "object", "createIntent", "SpaceAction", "AddObject", "StackItem", "Content", "SpaceGenerator", "onCreateObjects", "DebugApp", "position", "getCapability", "getStore", "isObject", "wireframe", "Wireframe", "label", "name", "classNames", "companionTo", "DebugObjectPanel", "DevtoolsOverviewContainer", "DebugStatus", "Devtools", "Config", "ConfigPanel", "vaultSelector", "Storage", "StoragePanel", "Logs", "LoggingPanel", "Diagnostics", "DiagnosticsPanel", "Tracing", "TracingPanel", "Halo", "Identity", "IdentityPanel", "Devices", "DeviceListPanel", "Keyring", "KeyringPanel", "Credentials", "CredentialsPanel", "Echo", "Spaces", "handleSelect", "LayoutAction", "Open", "part", "Space", "SpaceListPanel", "onSelect", "Feeds", "SpaceInfoPanel", "onSelectFeed", "onSelectPipeline", "FeedsPanel", "Objects", "ObjectsPanel", "Schema", "SchemaPanel", "Automerge", "AutomergePanel", "Queues", "QueuesPanel", "Members", "MembersPanel", "Metadata", "MetadataPanel", "Mesh", "Signal", "SignalPanel", "Swarm", "SwarmPanel", "Network", "NetworkPanel", "Edge", "Dashboard", "EdgeDashboardPanel", "Workflows", "WorkflowPanel", "Traces", "InvocationTraceContainer", "detailAxis", "Testing", "onSpaceCreate", "waitUntilReady", "Migrate", "db", "flush", "onScriptPluginOpen", "result", "pipe", "ScriptAction", "Create", "chain", "log", "info", "TestingPanel"]
7
+ }
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  DebugSettingsSchema
3
- } from "./chunk-KS3YBEL7.mjs";
3
+ } from "./chunk-AJA6RYN3.mjs";
4
4
  import {
5
5
  meta
6
- } from "./chunk-47JOZTT2.mjs";
6
+ } from "./chunk-5XPIRNQS.mjs";
7
7
 
8
- // packages/plugins/plugin-debug/src/capabilities/settings.ts
8
+ // src/capabilities/settings.ts
9
9
  import { Capabilities, contributes } from "@dxos/app-framework";
10
10
  import { live } from "@dxos/live-object";
11
11
  var settings_default = () => {
@@ -19,4 +19,4 @@ var settings_default = () => {
19
19
  export {
20
20
  settings_default as default
21
21
  };
22
- //# sourceMappingURL=settings-SXQWSIM4.mjs.map
22
+ //# sourceMappingURL=settings-LSSWLM5I.mjs.map
@@ -0,0 +1,227 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/components/DebugApp/DebugApp.tsx
4
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
5
+ import { Gauge, Graph as GraphIcon, Gear, Toolbox, Warning } from "@phosphor-icons/react";
6
+ import React3, { useEffect, useState as useState2 } from "react";
7
+ import { useClient, useConfig } from "@dxos/react-client";
8
+ import { Button, ToggleGroup, ToggleGroupItem, Toolbar } from "@dxos/react-ui";
9
+ import { getSize, mx as mx2 } from "@dxos/react-ui-theme";
10
+
11
+ // src/components/DebugApp/Tree.tsx
12
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
13
+ import React, { useState } from "react";
14
+ import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
15
+ import { mx } from "@dxos/react-ui-theme";
16
+ import { arrayToBuffer } from "@dxos/util";
17
+ var replacer = (key, value) => {
18
+ if (typeof value === "object") {
19
+ if (value instanceof Uint8Array) {
20
+ return arrayToBuffer(value).toString("hex");
21
+ }
22
+ if (value?.type === "Buffer") {
23
+ return Buffer.from(value.data).toString("hex");
24
+ }
25
+ if (key === "downloaded") {
26
+ return void 0;
27
+ }
28
+ }
29
+ return value;
30
+ };
31
+ var Json = ({ data }) => {
32
+ var _effect = _useSignals();
33
+ try {
34
+ return /* @__PURE__ */ React.createElement(SyntaxHighlighter, {
35
+ language: "json"
36
+ }, JSON.stringify(data, replacer, 2));
37
+ } finally {
38
+ _effect.f();
39
+ }
40
+ };
41
+ var Tree = ({ data }) => {
42
+ var _effect = _useSignals();
43
+ try {
44
+ return /* @__PURE__ */ React.createElement("div", {
45
+ className: "p-2"
46
+ }, /* @__PURE__ */ React.createElement(Node, {
47
+ data,
48
+ root: true
49
+ }));
50
+ } finally {
51
+ _effect.f();
52
+ }
53
+ };
54
+ var Node = ({ data, root }) => {
55
+ var _effect = _useSignals();
56
+ try {
57
+ if (typeof data !== "object" || data === void 0 || data === null) {
58
+ return /* @__PURE__ */ React.createElement(Scalar, {
59
+ value: data
60
+ });
61
+ }
62
+ if (Array.isArray(data)) {
63
+ return /* @__PURE__ */ React.createElement("div", {
64
+ className: "flex flex-col space-y-2"
65
+ }, data.map((value, index) => /* @__PURE__ */ React.createElement(KeyValue, {
66
+ key: index,
67
+ label: String(index),
68
+ data: value,
69
+ className: "bg-teal-50"
70
+ })));
71
+ }
72
+ return /* @__PURE__ */ React.createElement("div", {
73
+ className: "flex flex-col space-y-2"
74
+ }, Object.entries(data).map(([key, value]) => /* @__PURE__ */ React.createElement(KeyValue, {
75
+ key,
76
+ label: key,
77
+ data: value,
78
+ className: "bg-blue-50"
79
+ })));
80
+ } finally {
81
+ _effect.f();
82
+ }
83
+ };
84
+ var KeyValue = ({ label, data, className }) => {
85
+ var _effect = _useSignals();
86
+ try {
87
+ const [open, setOpen] = useState(true);
88
+ if (data === void 0) {
89
+ return null;
90
+ }
91
+ return /* @__PURE__ */ React.createElement("div", {
92
+ className: "flex"
93
+ }, /* @__PURE__ */ React.createElement(Box, {
94
+ className: mx("border-blue-200 text-sm select-none cursor-pointer", className),
95
+ onClick: () => setOpen((open2) => !open2)
96
+ }, label), open && /* @__PURE__ */ React.createElement(Node, {
97
+ data
98
+ }));
99
+ } finally {
100
+ _effect.f();
101
+ }
102
+ };
103
+ var Scalar = ({ value }) => {
104
+ var _effect = _useSignals();
105
+ try {
106
+ return /* @__PURE__ */ React.createElement(Box, {
107
+ className: "bg-green-50 border-green-200 rounded-r text-sm font-thin"
108
+ }, value === void 0 && "undefined" || value === null && "null" || typeof value === "string" && value || JSON.stringify(value));
109
+ } finally {
110
+ _effect.f();
111
+ }
112
+ };
113
+ var Box = ({ children, className, ...props }) => {
114
+ var _effect = _useSignals();
115
+ try {
116
+ return /* @__PURE__ */ React.createElement("div", {
117
+ className: mx("flex px-2 border border-l-0 font-mono truncate", className),
118
+ ...props
119
+ }, children);
120
+ } finally {
121
+ _effect.f();
122
+ }
123
+ };
124
+
125
+ // src/components/Container.tsx
126
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
127
+ import React2 from "react";
128
+ var Container = ({ toolbar, children }) => {
129
+ var _effect = _useSignals2();
130
+ try {
131
+ return /* @__PURE__ */ React2.createElement("div", {
132
+ role: "none",
133
+ className: "flex flex-col grow overflow-hidden divide-y divide-separator"
134
+ }, toolbar, /* @__PURE__ */ React2.createElement("div", {
135
+ className: "flex flex-col grow overflow-auto"
136
+ }, children));
137
+ } finally {
138
+ _effect.f();
139
+ }
140
+ };
141
+
142
+ // src/components/DebugApp/DebugApp.tsx
143
+ var DebugApp = ({ graph }) => {
144
+ var _effect = _useSignals3();
145
+ try {
146
+ const [view, setView] = useState2("graph");
147
+ const [data, setData] = useState2({});
148
+ const client = useClient();
149
+ const config = useConfig();
150
+ const handleRefresh = async () => {
151
+ const data2 = await client.diagnostics({
152
+ truncate: true
153
+ });
154
+ setData(data2);
155
+ };
156
+ useEffect(() => {
157
+ void handleRefresh();
158
+ }, []);
159
+ const handleResetClient = async (force = false) => {
160
+ if (!force && !window.confirm("Reset storage?")) {
161
+ return;
162
+ }
163
+ await client.reset();
164
+ window.location.href = window.location.origin;
165
+ };
166
+ const handleOpenDevtools = () => {
167
+ const vaultUrl = config.values?.runtime?.client?.remoteSource;
168
+ if (vaultUrl) {
169
+ window.open(`https://devtools.dev.dxos.org/?target=${vaultUrl}`);
170
+ }
171
+ };
172
+ return /* @__PURE__ */ React3.createElement(Container, {
173
+ toolbar: /* @__PURE__ */ React3.createElement(Toolbar.Root, {
174
+ classNames: "p-1"
175
+ }, /* @__PURE__ */ React3.createElement(ToggleGroup, {
176
+ type: "single",
177
+ value: view
178
+ }, /* @__PURE__ */ React3.createElement(ToggleGroupItem, {
179
+ value: "graph",
180
+ onClick: () => setView("graph"),
181
+ title: "Plugin graph"
182
+ }, /* @__PURE__ */ React3.createElement(GraphIcon, {
183
+ className: getSize(5)
184
+ })), /* @__PURE__ */ React3.createElement(ToggleGroupItem, {
185
+ value: "diagnostics",
186
+ onClick: () => setView("diagnostics"),
187
+ title: "Diagnostics"
188
+ }, /* @__PURE__ */ React3.createElement(Gauge, {
189
+ className: getSize(5)
190
+ })), /* @__PURE__ */ React3.createElement(ToggleGroupItem, {
191
+ value: "config",
192
+ onClick: () => setView("config"),
193
+ title: "Config"
194
+ }, /* @__PURE__ */ React3.createElement(Gear, {
195
+ className: getSize(5)
196
+ }))), /* @__PURE__ */ React3.createElement(Toolbar.Separator, {
197
+ variant: "gap"
198
+ }), /* @__PURE__ */ React3.createElement(Button, {
199
+ onClick: (event) => handleResetClient(event.shiftKey),
200
+ title: "Reset client"
201
+ }, /* @__PURE__ */ React3.createElement(Warning, {
202
+ className: mx2(getSize(5), "text-red-700")
203
+ })), /* @__PURE__ */ React3.createElement(Button, {
204
+ onClick: handleOpenDevtools,
205
+ title: "Open Devtools"
206
+ }, /* @__PURE__ */ React3.createElement(Toolbox, {
207
+ weight: "duotone",
208
+ className: mx2(getSize(5), "text-700")
209
+ })))
210
+ }, view === "graph" && /* @__PURE__ */ React3.createElement(Tree, {
211
+ data: graph.toJSON()
212
+ }), view === "config" && /* @__PURE__ */ React3.createElement(Json, {
213
+ data: data.diagnostics?.config
214
+ }), view === "diagnostics" && /* @__PURE__ */ React3.createElement(Json, {
215
+ data
216
+ }));
217
+ } finally {
218
+ _effect.f();
219
+ }
220
+ };
221
+
222
+ // src/components/DebugApp/index.ts
223
+ var DebugApp_default = DebugApp;
224
+ export {
225
+ DebugApp_default as default
226
+ };
227
+ //# sourceMappingURL=DebugApp-B2TUPIX6.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugApp/DebugApp.tsx", "../../../src/components/DebugApp/Tree.tsx", "../../../src/components/Container.tsx", "../../../src/components/DebugApp/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gauge, Graph as GraphIcon, Gear, Toolbox, Warning } from '@phosphor-icons/react';\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { type Graph } from '@dxos/plugin-graph';\nimport { useClient, useConfig } from '@dxos/react-client';\nimport { Button, ToggleGroup, ToggleGroupItem, Toolbar } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { Json, Tree } from './Tree';\nimport { Container } from '../Container';\n\nexport const DebugApp: FC<{ graph: Graph }> = ({ graph }) => {\n const [view, setView] = useState<'config' | 'diagnostics' | 'graph'>('graph');\n const [data, setData] = useState<any>({});\n const client = useClient();\n const config = useConfig();\n const handleRefresh = async () => {\n const data = await client.diagnostics({ truncate: true });\n setData(data);\n };\n useEffect(() => {\n void handleRefresh();\n }, []);\n\n const handleResetClient = async (force = false) => {\n if (!force && !window.confirm('Reset storage?')) {\n return;\n }\n\n // TODO(burdon): Throws exception.\n await client.reset();\n window.location.href = window.location.origin;\n };\n\n const handleOpenDevtools = () => {\n const vaultUrl = config.values?.runtime?.client?.remoteSource;\n if (vaultUrl) {\n window.open(`https://devtools.dev.dxos.org/?target=${vaultUrl}`);\n }\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <ToggleGroup type='single' value={view}>\n <ToggleGroupItem value={'graph'} onClick={() => setView('graph')} title={'Plugin graph'}>\n <GraphIcon className={getSize(5)} />\n </ToggleGroupItem>\n <ToggleGroupItem value={'diagnostics'} onClick={() => setView('diagnostics')} title={'Diagnostics'}>\n <Gauge className={getSize(5)} />\n </ToggleGroupItem>\n <ToggleGroupItem value={'config'} onClick={() => setView('config')} title={'Config'}>\n <Gear className={getSize(5)} />\n </ToggleGroupItem>\n </ToggleGroup>\n\n <Toolbar.Separator variant='gap' />\n <Button onClick={(event) => handleResetClient(event.shiftKey)} title='Reset client'>\n <Warning className={mx(getSize(5), 'text-red-700')} />\n </Button>\n <Button onClick={handleOpenDevtools} title='Open Devtools'>\n <Toolbox weight='duotone' className={mx(getSize(5), 'text-700')} />\n </Button>\n </Toolbar.Root>\n }\n >\n {view === 'graph' && <Tree data={graph.toJSON()} />}\n {view === 'config' && <Json data={data.diagnostics?.config} />}\n {view === 'diagnostics' && <Json data={data} />}\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, type HTMLAttributes, useState } from 'react';\n\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayToBuffer } from '@dxos/util';\n\n// TODO(burdon): Copied form devtools.\n\nexport const replacer = (key: any, value: any) => {\n if (typeof value === 'object') {\n if (value instanceof Uint8Array) {\n return arrayToBuffer(value).toString('hex');\n }\n\n if (value?.type === 'Buffer') {\n return Buffer.from(value.data).toString('hex');\n }\n\n if (key === 'downloaded') {\n return undefined;\n }\n }\n\n return value;\n};\n\nexport const Json: FC<{ data?: object }> = ({ data }) => {\n return <SyntaxHighlighter language='json'>{JSON.stringify(data, replacer, 2)}</SyntaxHighlighter>;\n};\n\nexport const Tree: FC<{ data?: object }> = ({ data }) => {\n return (\n <div className='p-2'>\n <Node data={data} root />\n </div>\n );\n};\n\nexport const Node: FC<{ data?: any; root?: boolean }> = ({ data, root }) => {\n if (typeof data !== 'object' || data === undefined || data === null) {\n return <Scalar value={data} />;\n }\n\n if (Array.isArray(data)) {\n return (\n <div className='flex flex-col space-y-2'>\n {data.map((value, index) => (\n <KeyValue key={index} label={String(index)} data={value} className='bg-teal-50' />\n ))}\n </div>\n );\n }\n\n return (\n <div className='flex flex-col space-y-2'>\n {Object.entries(data).map(([key, value]) => (\n <KeyValue key={key} label={key} data={value} className='bg-blue-50' />\n ))}\n </div>\n );\n};\n\nexport const KeyValue: FC<{ label: string; data?: any; className?: string }> = ({ label, data, className }) => {\n const [open, setOpen] = useState(true);\n if (data === undefined) {\n return null;\n }\n\n return (\n <div className='flex'>\n <Box\n className={mx('border-blue-200 text-sm select-none cursor-pointer', className)}\n onClick={() => setOpen((open) => !open)}\n >\n {label}\n </Box>\n {open && <Node data={data} />}\n </div>\n );\n};\n\nconst Scalar: FC<{ value: any }> = ({ value }) => {\n return (\n <Box className='bg-green-50 border-green-200 rounded-r text-sm font-thin'>\n {(value === undefined && 'undefined') ||\n (value === null && 'null') ||\n (typeof value === 'string' && value) ||\n JSON.stringify(value)}\n </Box>\n );\n};\n\nconst Box: FC<HTMLAttributes<HTMLDivElement>> = ({ children, className, ...props }) => {\n return (\n <div className={mx('flex px-2 border border-l-0 font-mono truncate', className)} {...props}>\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren, type ReactNode } from 'react';\n\n// TODO(burdon): Convert to grid.\nexport const Container = ({ toolbar, children }: PropsWithChildren<{ toolbar: ReactNode }>) => {\n return (\n <div role='none' className='flex flex-col grow overflow-hidden divide-y divide-separator'>\n {toolbar}\n <div className='flex flex-col grow overflow-auto'>{children}</div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugApp } from './DebugApp';\n\nexport default DebugApp;\n"],
5
+ "mappings": "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",
6
+ "names": ["Gauge", "Graph", "GraphIcon", "Gear", "Toolbox", "Warning", "React", "useEffect", "useState", "useClient", "useConfig", "Button", "ToggleGroup", "ToggleGroupItem", "Toolbar", "getSize", "mx", "React", "useState", "SyntaxHighlighter", "mx", "arrayToBuffer", "replacer", "key", "value", "Uint8Array", "arrayToBuffer", "toString", "type", "Buffer", "from", "data", "undefined", "Json", "SyntaxHighlighter", "language", "JSON", "stringify", "Tree", "div", "className", "Node", "root", "Scalar", "Array", "isArray", "map", "index", "KeyValue", "label", "String", "Object", "entries", "open", "setOpen", "useState", "Box", "mx", "onClick", "children", "props", "React", "Container", "toolbar", "children", "React", "div", "role", "className", "DebugApp", "graph", "view", "setView", "useState", "data", "setData", "client", "useClient", "config", "useConfig", "handleRefresh", "diagnostics", "truncate", "useEffect", "handleResetClient", "force", "window", "confirm", "reset", "location", "href", "origin", "handleOpenDevtools", "vaultUrl", "values", "runtime", "remoteSource", "open", "React", "Container", "toolbar", "Toolbar", "Root", "classNames", "ToggleGroup", "type", "value", "ToggleGroupItem", "onClick", "title", "GraphIcon", "className", "getSize", "Gauge", "Gear", "Separator", "variant", "Button", "event", "shiftKey", "Warning", "mx", "Toolbox", "weight", "Tree", "toJSON", "Json", "DebugApp"]
7
+ }
@@ -0,0 +1,27 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/components/DevtoolsOverviewContainer.tsx
4
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
5
+ import React from "react";
6
+ import { Surface } from "@dxos/app-framework";
7
+ import { StatsPanel, useStats } from "@dxos/devtools";
8
+ var DevtoolsOverviewContainer = () => {
9
+ var _effect = _useSignals();
10
+ try {
11
+ const [stats, refreshStats] = useStats();
12
+ return /* @__PURE__ */ React.createElement(StatsPanel, {
13
+ stats,
14
+ onRefresh: refreshStats
15
+ }, /* @__PURE__ */ React.createElement(Surface, {
16
+ role: "devtools-overview"
17
+ }));
18
+ } finally {
19
+ _effect.f();
20
+ }
21
+ };
22
+ var DevtoolsOverviewContainer_default = DevtoolsOverviewContainer;
23
+ export {
24
+ DevtoolsOverviewContainer,
25
+ DevtoolsOverviewContainer_default as default
26
+ };
27
+ //# sourceMappingURL=DevtoolsOverviewContainer-K622ZTH2.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DevtoolsOverviewContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { StatsPanel, useStats } from '@dxos/devtools';\n\nexport const DevtoolsOverviewContainer = () => {\n const [stats, refreshStats] = useStats();\n\n return (\n <StatsPanel stats={stats} onRefresh={refreshStats}>\n <Surface role='devtools-overview' />\n </StatsPanel>\n );\n};\n\nexport default DevtoolsOverviewContainer;\n"],
5
+ "mappings": ";;;;AAIA,OAAOA,WAAW;AAElB,SAASC,eAAe;AACxB,SAASC,YAAYC,gBAAgB;AAE9B,IAAMC,4BAA4B,MAAA;;;AACvC,UAAM,CAACC,OAAOC,YAAAA,IAAgBC,SAAAA;AAE9B,WACE,sBAAA,cAACC,YAAAA;MAAWH;MAAcI,WAAWH;OACnC,sBAAA,cAACI,SAAAA;MAAQC,MAAK;;;;;AAGpB;AAEA,IAAA,oCAAeP;",
6
+ "names": ["React", "Surface", "StatsPanel", "useStats", "DevtoolsOverviewContainer", "stats", "refreshStats", "useStats", "StatsPanel", "onRefresh", "Surface", "role"]
7
+ }