@dxos/plugin-debug 0.7.5-labs.5f04cf6 → 0.7.5-labs.e27f9b9

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 (41) hide show
  1. package/dist/lib/browser/SpaceGenerator-4VO7E5P2.mjs +846 -0
  2. package/dist/lib/browser/SpaceGenerator-4VO7E5P2.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-builder-FXELWOFS.mjs → app-graph-builder-IMWFZ3OZ.mjs} +7 -3
  4. package/dist/lib/browser/app-graph-builder-IMWFZ3OZ.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +3 -9
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/{react-surface-ACHNR2UU.mjs → react-surface-XDHEQY27.mjs} +54 -51
  9. package/dist/lib/browser/react-surface-XDHEQY27.mjs.map +7 -0
  10. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  11. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  12. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  13. package/dist/types/src/capabilities/index.d.ts +26 -31
  14. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  15. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  16. package/dist/types/src/components/DebugSettings.d.ts.map +1 -1
  17. package/dist/types/src/components/DebugStatus.d.ts.map +1 -1
  18. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  19. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  20. package/dist/types/src/components/SpaceGenerator/presets.d.ts +17 -0
  21. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -0
  22. package/dist/types/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +47 -46
  24. package/src/DebugPlugin.tsx +2 -7
  25. package/src/capabilities/app-graph-builder.ts +6 -3
  26. package/src/capabilities/index.ts +0 -1
  27. package/src/capabilities/react-surface.tsx +7 -15
  28. package/src/components/DebugSettings.tsx +70 -70
  29. package/src/components/DebugStatus.tsx +17 -21
  30. package/src/components/SpaceGenerator/ObjectGenerator.tsx +0 -81
  31. package/src/components/SpaceGenerator/SpaceGenerator.tsx +7 -6
  32. package/src/components/SpaceGenerator/presets.ts +322 -0
  33. package/dist/lib/browser/SpaceGenerator-YNT3WDFI.mjs +0 -479
  34. package/dist/lib/browser/SpaceGenerator-YNT3WDFI.mjs.map +0 -7
  35. package/dist/lib/browser/app-graph-builder-FXELWOFS.mjs.map +0 -7
  36. package/dist/lib/browser/react-context-OZU6J7G3.mjs +0 -37
  37. package/dist/lib/browser/react-context-OZU6J7G3.mjs.map +0 -7
  38. package/dist/lib/browser/react-surface-ACHNR2UU.mjs.map +0 -7
  39. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  40. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  41. package/src/capabilities/react-context.tsx +0 -38
@@ -2,16 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Gift, DownloadSimple, FirstAidKit } from '@phosphor-icons/react';
6
5
  import React, { useEffect, useState } from 'react';
7
6
 
8
7
  import { Capabilities, useCapabilities } from '@dxos/app-framework';
9
8
  import { type ConfigProto, defs, SaveConfig, Storage } from '@dxos/config';
10
9
  import { log } from '@dxos/log';
11
10
  import { useClient } from '@dxos/react-client';
12
- import { useTranslation, Button, Toast, Input, useFileDownload, Select } from '@dxos/react-ui';
13
- import { DeprecatedFormInput } from '@dxos/react-ui-form';
14
- import { getSize, mx } from '@dxos/react-ui-theme';
11
+ import { useTranslation, Button, Toast, Input, useFileDownload, Select, Icon } from '@dxos/react-ui';
12
+ import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
15
13
  import { setDeep } from '@dxos/util';
16
14
 
17
15
  import { DEBUG_PLUGIN } from '../meta';
@@ -79,73 +77,75 @@ export const DebugSettings = ({ settings }: { settings: DebugSettingsProps }) =>
79
77
  };
80
78
 
81
79
  return (
82
- <>
83
- <DeprecatedFormInput label={t('settings show debug panel')}>
84
- <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
85
- </DeprecatedFormInput>
86
- <DeprecatedFormInput label={t('settings show devtools panel')}>
87
- <Input.Switch checked={settings.devtools} onCheckedChange={(checked) => (settings.devtools = !!checked)} />
88
- </DeprecatedFormInput>
89
- <DeprecatedFormInput label={t('settings wireframe')}>
90
- <Input.Switch checked={settings.wireframe} onCheckedChange={(checked) => (settings.wireframe = !!checked)} />
91
- </DeprecatedFormInput>
92
- <DeprecatedFormInput label={t('settings download diagnostics')}>
93
- <Button onClick={handleDownload}>
94
- <DownloadSimple className={getSize(5)} />
95
- </Button>
96
- </DeprecatedFormInput>
97
- <DeprecatedFormInput label={t('settings repair')}>
98
- <Button onClick={handleRepair}>
99
- <FirstAidKit className={getSize(5)} />
100
- </Button>
101
- </DeprecatedFormInput>
102
-
103
- {/* TODO(burdon): Move to layout? */}
104
- {toast && (
105
- <Toast.Root>
106
- <Toast.Body>
107
- <Toast.Title>
108
- <Gift className={mx(getSize(5), 'inline mr-1')} weight='duotone' />
109
- <span>{toast.title}</span>
110
- </Toast.Title>
111
- {toast.description && <Toast.Description>{toast.description}</Toast.Description>}
112
- </Toast.Body>
113
- </Toast.Root>
114
- )}
115
-
116
- <DeprecatedFormInput label={t('settings choose storage adaptor')}>
117
- <Select.Root
118
- value={
119
- Object.entries(StorageAdapters).find(
120
- ([name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,
121
- )?.[0]
122
- }
123
- onValueChange={(value) => {
124
- if (confirm(t('settings storage adapter changed alert'))) {
125
- updateConfig(
126
- storageConfig,
127
- setStorageConfig,
128
- ['runtime', 'client', 'storage', 'dataStore'],
129
- StorageAdapters[value as keyof typeof StorageAdapters],
130
- );
80
+ <DeprecatedFormContainer>
81
+ <DeprecatedFormContainer>
82
+ <DeprecatedFormInput label={t('settings show debug panel')}>
83
+ <Input.Switch checked={settings.debug} onCheckedChange={(checked) => (settings.debug = !!checked)} />
84
+ </DeprecatedFormInput>
85
+ <DeprecatedFormInput label={t('settings show devtools panel')}>
86
+ <Input.Switch checked={settings.devtools} onCheckedChange={(checked) => (settings.devtools = !!checked)} />
87
+ </DeprecatedFormInput>
88
+ <DeprecatedFormInput label={t('settings wireframe')}>
89
+ <Input.Switch checked={settings.wireframe} onCheckedChange={(checked) => (settings.wireframe = !!checked)} />
90
+ </DeprecatedFormInput>
91
+ <DeprecatedFormInput label={t('settings download diagnostics')}>
92
+ <Button onClick={handleDownload}>
93
+ <Icon icon='ph--download-simple--regular' size={5} />
94
+ </Button>
95
+ </DeprecatedFormInput>
96
+ <DeprecatedFormInput label={t('settings repair')}>
97
+ <Button onClick={handleRepair}>
98
+ <Icon icon='ph--first-aid-kit--regular' size={5} />
99
+ </Button>
100
+ </DeprecatedFormInput>
101
+
102
+ {/* TODO(burdon): Move to layout? */}
103
+ {toast && (
104
+ <Toast.Root>
105
+ <Toast.Body>
106
+ <Toast.Title>
107
+ <Icon icon='ph--gift--duotone' size={5} classNames='inline mr-1' />
108
+ <span>{toast.title}</span>
109
+ </Toast.Title>
110
+ {toast.description && <Toast.Description>{toast.description}</Toast.Description>}
111
+ </Toast.Body>
112
+ </Toast.Root>
113
+ )}
114
+
115
+ <DeprecatedFormInput label={t('settings choose storage adaptor')}>
116
+ <Select.Root
117
+ value={
118
+ Object.entries(StorageAdapters).find(
119
+ ([name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,
120
+ )?.[0]
131
121
  }
132
- }}
133
- >
134
- <Select.TriggerButton placeholder={t('settings data store label')} />
135
- <Select.Portal>
136
- <Select.Content>
137
- <Select.Viewport>
138
- {Object.keys(StorageAdapters).map((key) => (
139
- <Select.Option key={key} value={key}>
140
- {t(`settings storage adaptor ${key} label`)}
141
- </Select.Option>
142
- ))}
143
- </Select.Viewport>
144
- </Select.Content>
145
- </Select.Portal>
146
- </Select.Root>
147
- </DeprecatedFormInput>
148
- </>
122
+ onValueChange={(value) => {
123
+ if (confirm(t('settings storage adapter changed alert'))) {
124
+ updateConfig(
125
+ storageConfig,
126
+ setStorageConfig,
127
+ ['runtime', 'client', 'storage', 'dataStore'],
128
+ StorageAdapters[value as keyof typeof StorageAdapters],
129
+ );
130
+ }
131
+ }}
132
+ >
133
+ <Select.TriggerButton placeholder={t('settings data store label')} />
134
+ <Select.Portal>
135
+ <Select.Content>
136
+ <Select.Viewport>
137
+ {Object.keys(StorageAdapters).map((key) => (
138
+ <Select.Option key={key} value={key}>
139
+ {t(`settings storage adaptor ${key} label`)}
140
+ </Select.Option>
141
+ ))}
142
+ </Select.Viewport>
143
+ </Select.Content>
144
+ </Select.Portal>
145
+ </Select.Root>
146
+ </DeprecatedFormInput>
147
+ </DeprecatedFormContainer>
148
+ </DeprecatedFormContainer>
149
149
  );
150
150
  };
151
151
 
@@ -4,15 +4,14 @@
4
4
 
5
5
  import React, { useEffect, useRef, useState } from 'react';
6
6
 
7
- import { Capabilities, firstIdInPart, useCapability } from '@dxos/app-framework';
7
+ import { useAppGraph, useLayout } from '@dxos/app-framework';
8
8
  import { TimeoutError } from '@dxos/async';
9
9
  import { StatsPanel, useStats } from '@dxos/devtools';
10
10
  import { getActiveSpace } from '@dxos/plugin-space';
11
11
  import { StatusBar } from '@dxos/plugin-status-bar';
12
12
  import { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';
13
13
  import { useNetworkStatus } from '@dxos/react-client/mesh';
14
- import { Icon } from '@dxos/react-ui';
15
- import { mx } from '@dxos/react-ui-theme';
14
+ import { Icon, Popover } from '@dxos/react-ui';
16
15
 
17
16
  const styles = {
18
17
  success: 'text-sky-300 dark:text-green-700',
@@ -136,9 +135,9 @@ const SwarmIndicator = () => {
136
135
  // TODO(burdon): Merge with SaveStatus.
137
136
  const SavingIndicator = () => {
138
137
  const [state, _setState] = useState(0);
139
- const location = useCapability(Capabilities.Location);
140
- const { graph } = useCapability(Capabilities.AppGraph);
141
- const _space = location && graph ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;
138
+ const layout = useLayout();
139
+ const { graph } = useAppGraph();
140
+ const _space = graph ? getActiveSpace(graph, layout.active[0]) : undefined;
142
141
  // TODO(dmaretskyi): Fix this when we have save status for automerge.
143
142
  // useEffect(() => {
144
143
  // if (!space) {
@@ -186,22 +185,19 @@ const PerformanceIndicator = () => {
186
185
  const [stats, refreshStats] = useStats();
187
186
 
188
187
  return (
189
- <>
190
- <StatusBar.Button onClick={() => setVisible((visible) => !visible)} title='Performance panels'>
191
- <Icon icon='ph--chart-bar--regular' size={4} />
192
- </StatusBar.Button>
193
- {visible && (
194
- <div
195
- className={mx(
196
- 'z-20 absolute bottom-[--statusbar-size] right-4 w-[450px]',
197
- 'overflow-x-hidden overflow-y-auto scrollbar-thin',
198
- 'border-x border-y border-separator',
199
- )}
200
- >
188
+ <Popover.Root open={visible} onOpenChange={setVisible}>
189
+ <Popover.Trigger asChild>
190
+ <StatusBar.Button onClick={() => setVisible((visible) => !visible)} title='Performance panels'>
191
+ <Icon icon='ph--chart-bar--regular' size={4} />
192
+ </StatusBar.Button>
193
+ </Popover.Trigger>
194
+ <Popover.Portal>
195
+ <Popover.Content classNames='max-is-[min(var(--radix-popover-content-available-width),300px)] max-bs-[--radix-popover-content-available-height]'>
201
196
  <StatsPanel stats={stats} onRefresh={refreshStats} />
202
- </div>
203
- )}
204
- </>
197
+ <Popover.Arrow />
198
+ </Popover.Content>
199
+ </Popover.Portal>
200
+ </Popover.Root>
205
201
  );
206
202
  };
207
203
 
@@ -5,8 +5,6 @@
5
5
  import { addressToA1Notation } from '@dxos/compute';
6
6
  import { ComputeGraph, ComputeGraphModel, DEFAULT_OUTPUT, NODE_INPUT, NODE_OUTPUT } from '@dxos/conductor';
7
7
  import { ObjectId, type BaseObject, type TypedObject } from '@dxos/echo-schema';
8
- import { type FunctionTrigger, TriggerKind } from '@dxos/functions/types';
9
- import { invariant } from '@dxos/invariant';
10
8
  import { DXN, SpaceId } from '@dxos/keys';
11
9
  import { create, makeRef, type ReactiveObject } from '@dxos/live-object';
12
10
  import { DocumentType } from '@dxos/plugin-markdown/types';
@@ -15,23 +13,6 @@ import { SheetType, type CellValue } from '@dxos/plugin-sheet/types';
15
13
  import { CanvasType, DiagramType } from '@dxos/plugin-sketch/types';
16
14
  import { faker } from '@dxos/random';
17
15
  import { Filter, type Space } from '@dxos/react-client/echo';
18
- import {
19
- type ComputeShape,
20
- createAppend,
21
- createComputeGraph,
22
- createConstant,
23
- createGpt,
24
- createQueue,
25
- createText,
26
- createTrigger,
27
- } from '@dxos/react-ui-canvas-compute';
28
- import {
29
- pointMultiply,
30
- pointsToRect,
31
- rectToPoints,
32
- CanvasBoardType,
33
- CanvasGraphModel,
34
- } from '@dxos/react-ui-canvas-editor';
35
16
  import { TableType } from '@dxos/react-ui-table';
36
17
  import { createView, TextType } from '@dxos/schema';
37
18
  import { createAsyncGenerator, type ValueGenerator } from '@dxos/schema/testing';
@@ -155,70 +136,8 @@ export const staticGenerators = new Map<string, ObjectGenerator<any>>([
155
136
  return objects;
156
137
  },
157
138
  ],
158
- [
159
- CanvasBoardType.typename,
160
- async (space, n, cb) => {
161
- const objects = range(n, () => {
162
- const canvasModel = CanvasGraphModel.create<ComputeShape>();
163
-
164
- let functionTrigger: FunctionTrigger | undefined;
165
- canvasModel.builder.call((builder) => {
166
- const gpt = canvasModel.createNode(createGpt(position({ x: 0, y: -14 })));
167
- const triggerShape = createTrigger({ triggerKind: TriggerKind.Webhook, ...position({ x: -18, y: -2 }) });
168
- const trigger = canvasModel.createNode(triggerShape);
169
- const text = canvasModel.createNode(createText(position({ x: 19, y: 3, width: 10, height: 10 })));
170
- const queueId = canvasModel.createNode(
171
- createConstant({
172
- value: new DXN(DXN.kind.QUEUE, ['data', SpaceId.random(), ObjectId.random()]).toString(),
173
- ...position({ x: -18, y: 5, width: 8, height: 6 }),
174
- }),
175
- );
176
- const queue = canvasModel.createNode(createQueue(position({ x: -3, y: 3, width: 14, height: 10 })));
177
- const append = canvasModel.createNode(createAppend(position({ x: 10, y: 6 })));
178
-
179
- builder
180
- .createEdge({ source: trigger.id, target: gpt.id, input: 'prompt', output: 'bodyText' })
181
- .createEdge({ source: gpt.id, target: text.id, output: 'text' })
182
- .createEdge({ source: queueId.id, target: queue.id })
183
- .createEdge({ source: queueId.id, target: append.id, input: 'id' })
184
- .createEdge({ source: gpt.id, target: append.id, output: 'messages', input: 'items' });
185
-
186
- functionTrigger = triggerShape.functionTrigger!.target!;
187
- });
188
-
189
- const computeModel = createComputeGraph(canvasModel);
190
- const computeGraph = computeModel.root;
191
-
192
- invariant(functionTrigger);
193
- functionTrigger.function = DXN.fromLocalObjectId(computeGraph.id).toString();
194
- functionTrigger.meta ??= {};
195
- const inputNode = computeModel.nodes.find((node) => node.type === NODE_INPUT)!;
196
- functionTrigger.meta.computeNodeId = inputNode.id;
197
-
198
- return space.db.add(
199
- create(CanvasBoardType, {
200
- computeGraph: makeRef(computeGraph),
201
- layout: canvasModel.graph,
202
- }),
203
- );
204
- });
205
- cb?.(objects);
206
- return objects;
207
- },
208
- ],
209
139
  ]);
210
140
 
211
- const position = (rect: { x: number; y: number; width?: number; height?: number }) => {
212
- const snap = 32;
213
- const [center, size] = rectToPoints({ width: 0, height: 0, ...rect });
214
- const { x, y, width, height } = pointsToRect([pointMultiply(center, snap), pointMultiply(size, snap)]);
215
- if (width && height) {
216
- return { center: { x, y }, size: width && height ? { width, height } : undefined };
217
- } else {
218
- return { center: { x, y } };
219
- }
220
- };
221
-
222
141
  export const createGenerator = <T extends BaseObject>(type: TypedObject<T>): ObjectGenerator<T> => {
223
142
  return async (
224
143
  space: Space,
@@ -12,13 +12,13 @@ import { DiagramType } from '@dxos/plugin-sketch/types';
12
12
  import { useClient } from '@dxos/react-client';
13
13
  import { getTypename, type Space } from '@dxos/react-client/echo';
14
14
  import { IconButton, Input, Toolbar, useAsyncEffect } from '@dxos/react-ui';
15
- import { CanvasBoardType } from '@dxos/react-ui-canvas-editor';
16
15
  import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
17
16
  import { Testing } from '@dxos/schema/testing';
18
17
  import { jsonKeyReplacer, sortKeys } from '@dxos/util';
19
18
 
20
19
  import { type ObjectGenerator, createGenerator, staticGenerators } from './ObjectGenerator';
21
20
  import { SchemaTable } from './SchemaTable';
21
+ import { presets } from './presets';
22
22
 
23
23
  export type SpaceGeneratorProps = {
24
24
  space: Space;
@@ -27,19 +27,19 @@ export type SpaceGeneratorProps = {
27
27
 
28
28
  export const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps) => {
29
29
  const client = useClient();
30
- const staticTypes = [DocumentType, DiagramType, SheetType, ComputeGraph, CanvasBoardType]; // TODO(burdon): Make extensible.
31
- const mutableTypes = [Testing.OrgType, Testing.ProjectType, Testing.ContactType];
30
+ const staticTypes = [DocumentType, DiagramType, SheetType, ComputeGraph]; // TODO(burdon): Make extensible.
31
+ const mutableTypes = [Testing.OrgType, Testing.ProjectType, Testing.ContactType, Testing.EmailType];
32
32
  const [count, setCount] = useState(1);
33
33
  const [info, setInfo] = useState<any>({});
34
34
 
35
35
  // Create type generators.
36
36
  const typeMap = useMemo(() => {
37
- client.addTypes(staticTypes);
37
+ client.addTypes([...staticTypes, ...presets.schemas]);
38
38
  const mutableGenerators = new Map<string, ObjectGenerator<any>>(
39
- mutableTypes.map((type) => [type.typename, createGenerator(type)]),
39
+ mutableTypes.map((type) => [type.typename, createGenerator(type as any)]),
40
40
  );
41
41
 
42
- return new Map([...staticGenerators, ...mutableGenerators]);
42
+ return new Map([...staticGenerators, ...presets.items, ...mutableGenerators]);
43
43
  }, [client, mutableTypes]);
44
44
 
45
45
  // Query space to get info.
@@ -106,6 +106,7 @@ export const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps)
106
106
 
107
107
  <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />
108
108
  <SchemaTable types={mutableTypes} objects={info.objects} label='Mutable Types' onClick={handleCreateData} />
109
+ <SchemaTable types={presets.types} objects={info.objects} label='Presets' onClick={handleCreateData} />
109
110
 
110
111
  <SyntaxHighlighter classNames='flex text-xs' language='json'>
111
112
  {JSON.stringify({ space, ...info }, jsonKeyReplacer({ truncate: true }), 2)}