@dxos/plugin-debug 0.8.4-main.e8ec1fe → 0.8.4-main.effb148878
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.
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +15 -0
- package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
- package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs +59 -0
- package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs.map +7 -0
- package/dist/lib/neutral/DebugPlugin.mjs +47 -0
- package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
- package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
- package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/DebugPlugin.workerd.mjs +12 -0
- package/dist/lib/neutral/DebugPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs +224 -0
- package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs.map +7 -0
- package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs +34 -0
- package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs.map +7 -0
- package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs +121 -0
- package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs.map +7 -0
- package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs +23 -0
- package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
- package/dist/lib/neutral/GithubPanel-QJKDJRVQ.mjs +177 -0
- package/dist/lib/neutral/GithubPanel-QJKDJRVQ.mjs.map +7 -0
- package/dist/lib/neutral/SpaceGenerator-IQLBDY6R.mjs +143 -0
- package/dist/lib/neutral/SpaceGenerator-IQLBDY6R.mjs.map +7 -0
- package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs +52 -0
- package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-ZNMWIDDF.mjs +598 -0
- package/dist/lib/neutral/app-graph-builder-ZNMWIDDF.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +15 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/{browser/chunk-SRV2AIGJ.mjs → neutral/chunk-NFIOTQRZ.mjs} +30 -9
- package/dist/lib/neutral/chunk-NFIOTQRZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SAJFZGX5.mjs +41 -0
- package/dist/lib/neutral/chunk-SAJFZGX5.mjs.map +7 -0
- package/dist/lib/{browser/SpaceGenerator-46TAISVE.mjs → neutral/components/index.mjs} +322 -496
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +23 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +18 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +12 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
- package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-T4NYONZ7.mjs +419 -0
- package/dist/lib/neutral/react-surface-T4NYONZ7.mjs.map +7 -0
- package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
- package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +90 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +14 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/DebugPlugin.d.ts +4 -1
- package/dist/types/src/DebugPlugin.d.ts.map +1 -1
- package/dist/types/src/DebugPlugin.node.d.ts +5 -0
- package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
- package/dist/types/src/DebugPlugin.test.d.ts +2 -0
- package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
- package/dist/types/src/DebugPlugin.workerd.d.ts +5 -0
- package/dist/types/src/DebugPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +8 -5
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-context.d.ts +4 -2
- package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +7 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +5 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
- package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
- package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +105 -0
- package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
- package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
- package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
- package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +4 -5
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
- package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/presets.d.ts +1 -4
- package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -10
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +8 -0
- package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
- package/dist/types/src/containers/DebugGraph/index.d.ts +2 -0
- package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +6 -0
- package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
- package/dist/types/src/containers/DebugObjectPanel/index.d.ts +2 -0
- package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +5 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +2 -0
- package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
- package/dist/types/src/containers/DebugStatus/index.d.ts +2 -0
- package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
- package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
- package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +2 -0
- package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts +15 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts +105 -0
- package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts +3 -0
- package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts.map +1 -0
- package/dist/types/src/containers/GithubPanel/index.d.ts +2 -0
- package/dist/types/src/containers/GithubPanel/index.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +11 -0
- package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceGenerator/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +1 -1
- package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
- package/dist/types/src/containers/Wireframe/index.d.ts +2 -0
- package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +10 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +86 -59
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Settings.d.ts +8 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +69 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +134 -76
- package/src/DebugPlugin.node.ts +18 -0
- package/src/DebugPlugin.test.ts +29 -0
- package/src/DebugPlugin.tsx +28 -34
- package/src/DebugPlugin.workerd.ts +12 -0
- package/src/capabilities/app-graph-builder.ts +381 -388
- package/src/capabilities/index.ts +5 -5
- package/src/capabilities/react-context.tsx +16 -7
- package/src/capabilities/react-surface.tsx +376 -356
- package/src/capabilities/settings.ts +24 -12
- package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
- package/src/components/DebugSettings/DebugSettings.tsx +262 -0
- package/src/components/DebugSettings/index.ts +5 -0
- package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +2 -2
- package/src/components/SchemaTable/index.ts +5 -0
- package/src/components/SpaceGenerator/ObjectGenerator.tsx +30 -34
- package/src/components/SpaceGenerator/draw-util.ts +8 -8
- package/src/components/SpaceGenerator/index.ts +2 -3
- package/src/components/SpaceGenerator/presets.ts +209 -112
- package/src/components/index.ts +4 -8
- package/src/containers/DebugGraph/DebugGraph.tsx +14 -0
- package/src/containers/DebugGraph/index.ts +5 -0
- package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +76 -0
- package/src/containers/DebugObjectPanel/index.ts +5 -0
- package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +47 -0
- package/src/containers/DebugSpaceObjectsPanel/index.ts +5 -0
- package/src/{components → containers/DebugStatus}/DebugStatus.tsx +41 -19
- package/src/containers/DebugStatus/index.ts +5 -0
- package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
- package/src/containers/DevtoolsOverviewContainer/index.ts +5 -0
- package/src/containers/GithubPanel/GithubComponent.stories.tsx +38 -0
- package/src/containers/GithubPanel/GithubComponent.tsx +192 -0
- package/src/containers/GithubPanel/GithubPanel.tsx +17 -0
- package/src/containers/GithubPanel/index.ts +5 -0
- package/src/containers/SpaceGenerator/SpaceGenerator.tsx +126 -0
- package/src/containers/SpaceGenerator/index.ts +5 -0
- package/src/{components → containers/Wireframe}/Wireframe.tsx +6 -10
- package/src/containers/Wireframe/index.ts +5 -0
- package/src/containers/index.ts +14 -0
- package/src/index.ts +1 -1
- package/src/meta.ts +24 -5
- package/src/plugin.ts +10 -0
- package/src/translations.ts +82 -58
- package/src/types/Settings.ts +16 -0
- package/src/{types.ts → types/index.ts} +20 -11
- package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs +0 -20
- package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs.map +0 -7
- package/dist/lib/browser/DevtoolsOverviewContainer-JXVZVPHN.mjs +0 -25
- package/dist/lib/browser/DevtoolsOverviewContainer-JXVZVPHN.mjs.map +0 -7
- package/dist/lib/browser/SpaceGenerator-46TAISVE.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-CRH2HJKT.mjs +0 -588
- package/dist/lib/browser/app-graph-builder-CRH2HJKT.mjs.map +0 -7
- package/dist/lib/browser/chunk-SRV2AIGJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-WZFZ4ESO.mjs +0 -20
- package/dist/lib/browser/chunk-WZFZ4ESO.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -130
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-context-P2YDWEWI.mjs +0 -16
- package/dist/lib/browser/react-context-P2YDWEWI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-2SNVZDEA.mjs +0 -774
- package/dist/lib/browser/react-surface-2SNVZDEA.mjs.map +0 -7
- package/dist/lib/browser/settings-SQXR3OAH.mjs +0 -22
- package/dist/lib/browser/settings-SQXR3OAH.mjs.map +0 -7
- package/dist/types/src/components/Container.d.ts +0 -5
- package/dist/types/src/components/Container.d.ts.map +0 -1
- package/dist/types/src/components/DebugGraph.d.ts +0 -8
- package/dist/types/src/components/DebugGraph.d.ts.map +0 -1
- package/dist/types/src/components/DebugObjectPanel.d.ts +0 -7
- package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
- package/dist/types/src/components/DebugSettings.d.ts +0 -6
- package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
- package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
- package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
- package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -15
- package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
- package/dist/types/src/components/Wireframe.d.ts.map +0 -1
- package/dist/types/src/types.d.ts +0 -63
- package/dist/types/src/types.d.ts.map +0 -1
- package/src/components/Container.tsx +0 -15
- package/src/components/DebugGraph.tsx +0 -14
- package/src/components/DebugObjectPanel.tsx +0 -33
- package/src/components/DebugSettings.tsx +0 -180
- package/src/components/DevtoolsOverviewContainer.tsx +0 -20
- package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -52
- package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -122
- /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
- /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type AppSurface } from '@dxos/app-toolkit/ui';
|
|
8
|
+
import { ObjectsTree } from '@dxos/devtools';
|
|
9
|
+
import { Filter, Query } from '@dxos/echo';
|
|
10
|
+
import { type ObjectId } from '@dxos/keys';
|
|
11
|
+
import { useQuery } from '@dxos/react-client/echo';
|
|
12
|
+
import { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';
|
|
13
|
+
import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
|
|
14
|
+
|
|
15
|
+
export type DebugSpaceObjectsPanelProps = AppSurface.SpaceArticleProps;
|
|
16
|
+
|
|
17
|
+
export const DebugSpaceObjectsPanel = ({ space }: DebugSpaceObjectsPanelProps) => {
|
|
18
|
+
const [selectedId, setSelectedId] = useState<ObjectId | null>(null);
|
|
19
|
+
const [selectedObject] = useQuery(
|
|
20
|
+
space.db,
|
|
21
|
+
selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()),
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<Clipboard.Provider>
|
|
26
|
+
<Panel.Root>
|
|
27
|
+
<Panel.Toolbar asChild>
|
|
28
|
+
<Toolbar.Root>
|
|
29
|
+
<Input.Root>
|
|
30
|
+
<Input.TextInput disabled placeholder='Search...' />
|
|
31
|
+
</Input.Root>
|
|
32
|
+
</Toolbar.Root>
|
|
33
|
+
</Panel.Toolbar>
|
|
34
|
+
<Panel.Content asChild>
|
|
35
|
+
<Grid rows={2} classNames='divide-y divide-separator'>
|
|
36
|
+
<ScrollArea.Root>
|
|
37
|
+
<ScrollArea.Viewport>
|
|
38
|
+
<ObjectsTree db={space.db} onSelect={(entity) => setSelectedId(entity.id)} />
|
|
39
|
+
</ScrollArea.Viewport>
|
|
40
|
+
</ScrollArea.Root>
|
|
41
|
+
{selectedObject && <JsonHighlighter classNames='p-1' data={selectedObject} />}
|
|
42
|
+
</Grid>
|
|
43
|
+
</Panel.Content>
|
|
44
|
+
</Panel.Root>
|
|
45
|
+
</Clipboard.Provider>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
import React, { useEffect, useRef, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { TimeoutError } from '@dxos/async';
|
|
8
|
-
import {
|
|
9
|
-
import { StatusBar } from '@dxos/plugin-status-bar';
|
|
8
|
+
import { StatusBar } from '@dxos/plugin-status-bar/components';
|
|
10
9
|
import { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';
|
|
11
10
|
import { useNetworkStatus } from '@dxos/react-client/mesh';
|
|
12
|
-
import {
|
|
11
|
+
import { IconButton } from '@dxos/react-ui';
|
|
13
12
|
|
|
14
13
|
const styles = {
|
|
15
14
|
success: 'text-sky-300 dark:text-green-700',
|
|
@@ -89,14 +88,20 @@ const ErrorIndicator = () => {
|
|
|
89
88
|
|
|
90
89
|
if (errorRef.current) {
|
|
91
90
|
return (
|
|
92
|
-
<StatusBar.
|
|
93
|
-
<
|
|
94
|
-
|
|
91
|
+
<StatusBar.Item>
|
|
92
|
+
<IconButton
|
|
93
|
+
icon='ph--warning-circle--duotone'
|
|
94
|
+
iconOnly
|
|
95
|
+
label={errorRef.current.message}
|
|
96
|
+
classNames={styles.error}
|
|
97
|
+
onClick={handleReset}
|
|
98
|
+
/>
|
|
99
|
+
</StatusBar.Item>
|
|
95
100
|
);
|
|
96
101
|
} else {
|
|
97
102
|
return (
|
|
98
|
-
<StatusBar.Item
|
|
99
|
-
<
|
|
103
|
+
<StatusBar.Item>
|
|
104
|
+
<IconButton variant='ghost' icon='ph--check--regular' iconOnly label='No errors.' />
|
|
100
105
|
</StatusBar.Item>
|
|
101
106
|
);
|
|
102
107
|
}
|
|
@@ -114,14 +119,20 @@ const SwarmIndicator = () => {
|
|
|
114
119
|
|
|
115
120
|
if (state === 0) {
|
|
116
121
|
return (
|
|
117
|
-
<StatusBar.Item
|
|
118
|
-
<
|
|
122
|
+
<StatusBar.Item>
|
|
123
|
+
<IconButton variant='ghost' icon='ph--lightning--regular' iconOnly label='Connected to swarm.' />
|
|
119
124
|
</StatusBar.Item>
|
|
120
125
|
);
|
|
121
126
|
} else {
|
|
122
127
|
return (
|
|
123
|
-
<StatusBar.Item
|
|
124
|
-
<
|
|
128
|
+
<StatusBar.Item>
|
|
129
|
+
<IconButton
|
|
130
|
+
variant='ghost'
|
|
131
|
+
icon='ph--lightning-slash--regular'
|
|
132
|
+
iconOnly
|
|
133
|
+
label='Disconnected from swarm.'
|
|
134
|
+
classNames={styles.warning}
|
|
135
|
+
/>
|
|
125
136
|
</StatusBar.Item>
|
|
126
137
|
);
|
|
127
138
|
}
|
|
@@ -133,7 +144,6 @@ const SwarmIndicator = () => {
|
|
|
133
144
|
// TODO(burdon): Merge with SaveStatus.
|
|
134
145
|
const SavingIndicator = () => {
|
|
135
146
|
const [state, _setState] = useState(0);
|
|
136
|
-
const _space = useActiveSpace();
|
|
137
147
|
// TODO(dmaretskyi): Fix this when we have save status for automerge.
|
|
138
148
|
// useEffect(() => {
|
|
139
149
|
// if (!space) {
|
|
@@ -156,21 +166,33 @@ const SavingIndicator = () => {
|
|
|
156
166
|
switch (state) {
|
|
157
167
|
case 2:
|
|
158
168
|
return (
|
|
159
|
-
<StatusBar.Item
|
|
160
|
-
<
|
|
169
|
+
<StatusBar.Item>
|
|
170
|
+
<IconButton
|
|
171
|
+
variant='ghost'
|
|
172
|
+
icon='ph--circle--duotone'
|
|
173
|
+
iconOnly
|
|
174
|
+
label='Edit not saved.'
|
|
175
|
+
classNames={styles.warning}
|
|
176
|
+
/>
|
|
161
177
|
</StatusBar.Item>
|
|
162
178
|
);
|
|
163
179
|
case 1:
|
|
164
180
|
return (
|
|
165
|
-
<StatusBar.Item
|
|
166
|
-
<
|
|
181
|
+
<StatusBar.Item>
|
|
182
|
+
<IconButton
|
|
183
|
+
variant='ghost'
|
|
184
|
+
icon='ph--circle--duotone'
|
|
185
|
+
iconOnly
|
|
186
|
+
label='Saving...'
|
|
187
|
+
classNames={styles.success}
|
|
188
|
+
/>
|
|
167
189
|
</StatusBar.Item>
|
|
168
190
|
);
|
|
169
191
|
case 0:
|
|
170
192
|
default:
|
|
171
193
|
return (
|
|
172
|
-
<StatusBar.Item
|
|
173
|
-
<
|
|
194
|
+
<StatusBar.Item>
|
|
195
|
+
<IconButton variant='ghost' icon='ph--circle--duotone' iconOnly label='Modified indicator.' />
|
|
174
196
|
</StatusBar.Item>
|
|
175
197
|
);
|
|
176
198
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
|
+
import { StatsPanel, useStats } from '@dxos/devtools';
|
|
9
|
+
|
|
10
|
+
export const DevtoolsOverviewContainer = () => {
|
|
11
|
+
const [stats, refreshStats] = useStats();
|
|
12
|
+
const surfaceProfilerStats = Surface.useProfilerStats();
|
|
13
|
+
const clearSurfaceProfiler = Surface.useProfilerClear();
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<StatsPanel
|
|
17
|
+
stats={stats}
|
|
18
|
+
surfaceProfilerStats={surfaceProfilerStats}
|
|
19
|
+
onRefresh={refreshStats}
|
|
20
|
+
onClearSurfaceProfiler={clearSurfaceProfiler}
|
|
21
|
+
>
|
|
22
|
+
<Surface.Surface role='devtools-overview' />
|
|
23
|
+
</StatsPanel>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
|
|
8
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
9
|
+
|
|
10
|
+
import { translations } from '#translations';
|
|
11
|
+
|
|
12
|
+
import { GithubComponent } from './GithubComponent';
|
|
13
|
+
|
|
14
|
+
const DefaultStory = () => (
|
|
15
|
+
<GithubComponent.Root>
|
|
16
|
+
<div className='grid grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden h-full is-full'>
|
|
17
|
+
<GithubComponent.Header />
|
|
18
|
+
<GithubComponent.Content />
|
|
19
|
+
<GithubComponent.StatusBar />
|
|
20
|
+
</div>
|
|
21
|
+
</GithubComponent.Root>
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const meta = {
|
|
25
|
+
title: 'plugins/plugin-debug/containers/GithubComponent',
|
|
26
|
+
component: DefaultStory,
|
|
27
|
+
decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-(--dx-r1-size)' })],
|
|
28
|
+
parameters: {
|
|
29
|
+
layout: 'fullscreen',
|
|
30
|
+
translations,
|
|
31
|
+
},
|
|
32
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
33
|
+
|
|
34
|
+
export default meta;
|
|
35
|
+
|
|
36
|
+
type Story = StoryObj<typeof meta>;
|
|
37
|
+
|
|
38
|
+
export const Default: Story = {};
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { type ReactNode, createContext, useContext, useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { IconButton, ScrollArea, useTranslation } from '@dxos/react-ui';
|
|
8
|
+
|
|
9
|
+
import { meta } from '#meta';
|
|
10
|
+
|
|
11
|
+
const DEFAULT_REPO = 'dxos/dxos';
|
|
12
|
+
const DEFAULT_LIMIT = 20;
|
|
13
|
+
|
|
14
|
+
type GithubUser = {
|
|
15
|
+
login: string;
|
|
16
|
+
avatar_url: string;
|
|
17
|
+
html_url: string;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type GithubPullRequest = {
|
|
21
|
+
number: number;
|
|
22
|
+
title: string;
|
|
23
|
+
html_url: string;
|
|
24
|
+
merged_at: string | null;
|
|
25
|
+
user: GithubUser;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
type ComponentContextValue = {
|
|
29
|
+
repo: string;
|
|
30
|
+
pulls: GithubPullRequest[];
|
|
31
|
+
unavailable: boolean;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const ComponentContext = createContext<ComponentContextValue | null>(null);
|
|
35
|
+
|
|
36
|
+
const useComponentContext = () => {
|
|
37
|
+
const ctx = useContext(ComponentContext);
|
|
38
|
+
if (!ctx) {
|
|
39
|
+
throw new Error('GithubComponent.* parts must be rendered inside GithubComponent.Root.');
|
|
40
|
+
}
|
|
41
|
+
return ctx;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type GithubComponentRootProps = {
|
|
45
|
+
/** `<owner>/<name>`. Defaults to `dxos/dxos`. */
|
|
46
|
+
repo?: string;
|
|
47
|
+
/** Maximum number of merged PRs to fetch. */
|
|
48
|
+
limit?: number;
|
|
49
|
+
children?: ReactNode;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const Root = ({ repo = DEFAULT_REPO, limit = DEFAULT_LIMIT, children }: GithubComponentRootProps) => {
|
|
53
|
+
const [pulls, setPulls] = useState<GithubPullRequest[]>([]);
|
|
54
|
+
const [unavailable, setUnavailable] = useState(false);
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
const controller = new AbortController();
|
|
58
|
+
setPulls([]);
|
|
59
|
+
setUnavailable(false);
|
|
60
|
+
void (async () => {
|
|
61
|
+
try {
|
|
62
|
+
const url = new URL(`https://api.github.com/repos/${repo}/pulls`);
|
|
63
|
+
url.searchParams.set('state', 'closed');
|
|
64
|
+
url.searchParams.set('sort', 'updated');
|
|
65
|
+
url.searchParams.set('direction', 'desc');
|
|
66
|
+
url.searchParams.set('per_page', String(limit * 2));
|
|
67
|
+
const response = await fetch(url.toString(), {
|
|
68
|
+
signal: controller.signal,
|
|
69
|
+
headers: { Accept: 'application/vnd.github+json' },
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
setUnavailable(true);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const items = (await response.json()) as GithubPullRequest[];
|
|
76
|
+
setPulls(items.filter((pull) => pull.merged_at !== null).slice(0, limit));
|
|
77
|
+
setUnavailable(false);
|
|
78
|
+
} catch {
|
|
79
|
+
if (controller.signal.aborted) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
setPulls([]);
|
|
83
|
+
setUnavailable(true);
|
|
84
|
+
}
|
|
85
|
+
})();
|
|
86
|
+
return () => controller.abort();
|
|
87
|
+
}, [repo, limit]);
|
|
88
|
+
|
|
89
|
+
return <ComponentContext.Provider value={{ repo, pulls, unavailable }}>{children}</ComponentContext.Provider>;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const Header = () => {
|
|
93
|
+
const { t } = useTranslation(meta.id);
|
|
94
|
+
const { repo, pulls, unavailable } = useComponentContext();
|
|
95
|
+
return (
|
|
96
|
+
<header className='flex items-center justify-between gap-1 px-4 py-3 bg-modal-surface border-b border-subdued-separator'>
|
|
97
|
+
<a
|
|
98
|
+
href={`https://github.com/${repo}`}
|
|
99
|
+
target='_blank'
|
|
100
|
+
rel='noopener noreferrer'
|
|
101
|
+
className='text-sm font-medium truncate'
|
|
102
|
+
>
|
|
103
|
+
@{repo}
|
|
104
|
+
</a>
|
|
105
|
+
<div className='text-xs text-description'>
|
|
106
|
+
{unavailable
|
|
107
|
+
? t('github-unavailable.message')
|
|
108
|
+
: pulls.length > 0
|
|
109
|
+
? t('recent-prs.label', { count: pulls.length })
|
|
110
|
+
: t('github-loading.message')}
|
|
111
|
+
</div>
|
|
112
|
+
</header>
|
|
113
|
+
);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const RELATIVE_UNITS: Array<[Intl.RelativeTimeFormatUnit, number]> = [
|
|
117
|
+
['year', 60 * 60 * 24 * 365],
|
|
118
|
+
['month', 60 * 60 * 24 * 30],
|
|
119
|
+
['week', 60 * 60 * 24 * 7],
|
|
120
|
+
['day', 60 * 60 * 24],
|
|
121
|
+
['hour', 60 * 60],
|
|
122
|
+
['minute', 60],
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
const formatRelative = (iso: string): string => {
|
|
126
|
+
const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });
|
|
127
|
+
const diffSeconds = (Date.parse(iso) - Date.now()) / 1000;
|
|
128
|
+
const absDiff = Math.abs(diffSeconds);
|
|
129
|
+
for (const [unit, secondsInUnit] of RELATIVE_UNITS) {
|
|
130
|
+
if (absDiff >= secondsInUnit) {
|
|
131
|
+
return formatter.format(Math.round(diffSeconds / secondsInUnit), unit);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return formatter.format(Math.round(diffSeconds), 'second');
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const PullRow = ({ pull }: { pull: GithubPullRequest }) => (
|
|
138
|
+
<li>
|
|
139
|
+
<a
|
|
140
|
+
href={pull.html_url}
|
|
141
|
+
target='_blank'
|
|
142
|
+
rel='noopener noreferrer'
|
|
143
|
+
className='flex items-start gap-2 px-2 py-1 rounded-sm hover:bg-hover-surface'
|
|
144
|
+
>
|
|
145
|
+
<img src={pull.user.avatar_url} alt='' className='w-6 h-6 rounded-full shrink-0 mt-0.5' />
|
|
146
|
+
<div className='flex flex-col min-w-0 flex-1'>
|
|
147
|
+
<span className='text-sm truncate'>{pull.title}</span>
|
|
148
|
+
<span className='text-xs text-description truncate'>
|
|
149
|
+
#{pull.number} · {pull.user.login} · {pull.merged_at ? formatRelative(pull.merged_at) : ''}
|
|
150
|
+
</span>
|
|
151
|
+
</div>
|
|
152
|
+
</a>
|
|
153
|
+
</li>
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
const Content = () => {
|
|
157
|
+
const { pulls } = useComponentContext();
|
|
158
|
+
return (
|
|
159
|
+
<ScrollArea.Root orientation='vertical'>
|
|
160
|
+
<ScrollArea.Viewport>
|
|
161
|
+
<ul className='flex flex-col p-1'>
|
|
162
|
+
{pulls.map((pull) => (
|
|
163
|
+
<PullRow key={pull.number} pull={pull} />
|
|
164
|
+
))}
|
|
165
|
+
</ul>
|
|
166
|
+
</ScrollArea.Viewport>
|
|
167
|
+
</ScrollArea.Root>
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const StatusBar = () => {
|
|
172
|
+
const { t } = useTranslation(meta.id);
|
|
173
|
+
const { repo } = useComponentContext();
|
|
174
|
+
return (
|
|
175
|
+
<IconButton
|
|
176
|
+
icon='ph--github-logo--regular'
|
|
177
|
+
label={t('view-on-github.button')}
|
|
178
|
+
variant='primary'
|
|
179
|
+
classNames='w-full'
|
|
180
|
+
onClick={() => {
|
|
181
|
+
window.open(`https://github.com/${repo}`, '_blank', 'noopener,noreferrer');
|
|
182
|
+
}}
|
|
183
|
+
/>
|
|
184
|
+
);
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export const GithubComponent = {
|
|
188
|
+
Root,
|
|
189
|
+
Header,
|
|
190
|
+
Content,
|
|
191
|
+
StatusBar,
|
|
192
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { GithubComponent } from './GithubComponent';
|
|
8
|
+
|
|
9
|
+
export const GithubPanel = () => (
|
|
10
|
+
<GithubComponent.Root>
|
|
11
|
+
<div className='h-full grid grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden h-full is-full'>
|
|
12
|
+
<GithubComponent.Header />
|
|
13
|
+
<GithubComponent.Content />
|
|
14
|
+
<GithubComponent.StatusBar />
|
|
15
|
+
</div>
|
|
16
|
+
</GithubComponent.Root>
|
|
17
|
+
);
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
|
+
import { ComputeGraph } from '@dxos/conductor';
|
|
9
|
+
import { Filter, Obj, Type } from '@dxos/echo';
|
|
10
|
+
import { Markdown } from '@dxos/plugin-markdown';
|
|
11
|
+
import { Sheet } from '@dxos/plugin-sheet';
|
|
12
|
+
import { Sketch } from '@dxos/plugin-sketch';
|
|
13
|
+
import { useClient } from '@dxos/react-client';
|
|
14
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
15
|
+
import { IconButton, Input, Panel, ScrollArea, Toolbar, useAsyncEffect } from '@dxos/react-ui';
|
|
16
|
+
import { composable, composableProps } from '@dxos/react-ui';
|
|
17
|
+
import { Organization, Person, Task } from '@dxos/types';
|
|
18
|
+
import { sortKeys } from '@dxos/util';
|
|
19
|
+
|
|
20
|
+
import { type ObjectGenerator, SchemaTable, createGenerator, generator, staticGenerators } from '#components';
|
|
21
|
+
|
|
22
|
+
// TODO(burdon): Make extensible.
|
|
23
|
+
const staticTypes = [Markdown.Document, Sketch.Sketch, Sheet.Sheet, ComputeGraph];
|
|
24
|
+
const recordTypes: Type.AnyObj[] = [Organization.Organization, Person.Person, Task.Task];
|
|
25
|
+
|
|
26
|
+
export type SpaceGeneratorProps = {
|
|
27
|
+
space: Space;
|
|
28
|
+
onCreateObjects?: (objects: Obj.Unknown[]) => void;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(
|
|
32
|
+
({ space, onCreateObjects, children, ...props }, forwardedRef) => {
|
|
33
|
+
const { invokePromise } = useOperationInvoker();
|
|
34
|
+
const client = useClient();
|
|
35
|
+
const [count, setCount] = useState(1);
|
|
36
|
+
const [info, setInfo] = useState<any>({});
|
|
37
|
+
const presets = useMemo(() => generator(), []);
|
|
38
|
+
|
|
39
|
+
// Register types.
|
|
40
|
+
useAsyncEffect(async () => {
|
|
41
|
+
await client.addTypes([...staticTypes, ...recordTypes, ...presets.schemas]);
|
|
42
|
+
}, [client, presets]);
|
|
43
|
+
|
|
44
|
+
// Create type generators.
|
|
45
|
+
const typeMap = useMemo(() => {
|
|
46
|
+
const recordGenerators = new Map<string, ObjectGenerator<any>>(
|
|
47
|
+
recordTypes.map((type) => [Type.getTypename(type), createGenerator(client, invokePromise, type)]),
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return new Map([...staticGenerators, ...presets.items, ...recordGenerators]);
|
|
51
|
+
}, [client, invokePromise, presets]);
|
|
52
|
+
|
|
53
|
+
// Query space to get info.
|
|
54
|
+
const updateInfo = useCallback(async () => {
|
|
55
|
+
const echoSchema = await space.db.schemaRegistry.query().run();
|
|
56
|
+
const staticSchema = await space.db.graph.schemaRegistry.query().run();
|
|
57
|
+
|
|
58
|
+
const objects = await space.db.query(Filter.everything()).run();
|
|
59
|
+
const objectMap = sortKeys(
|
|
60
|
+
objects.reduce<Record<string, number>>((map, obj) => {
|
|
61
|
+
const type = Obj.getTypename(obj);
|
|
62
|
+
if (type) {
|
|
63
|
+
const count = map[type] ?? 0;
|
|
64
|
+
map[type] = count + 1;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return map;
|
|
68
|
+
}, {}),
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
setInfo({
|
|
72
|
+
schema: {
|
|
73
|
+
static: staticSchema.length,
|
|
74
|
+
mutable: echoSchema.length,
|
|
75
|
+
},
|
|
76
|
+
objects: objectMap,
|
|
77
|
+
});
|
|
78
|
+
}, [space]);
|
|
79
|
+
|
|
80
|
+
useAsyncEffect(updateInfo, [updateInfo]);
|
|
81
|
+
|
|
82
|
+
const handleCreateData = useCallback(
|
|
83
|
+
async (typename: string) => {
|
|
84
|
+
const constructor = typeMap.get(typename);
|
|
85
|
+
if (constructor) {
|
|
86
|
+
// TODO(burdon): Input to specify number of objects.
|
|
87
|
+
await constructor(space, count, onCreateObjects);
|
|
88
|
+
await updateInfo();
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
[typeMap, count, space, onCreateObjects, updateInfo],
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<Panel.Root {...composableProps(props)} ref={forwardedRef}>
|
|
96
|
+
<Panel.Toolbar asChild>
|
|
97
|
+
<Toolbar.Root>
|
|
98
|
+
<IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />
|
|
99
|
+
<Toolbar.Separator />
|
|
100
|
+
<Input.Root>
|
|
101
|
+
<Input.TextInput
|
|
102
|
+
type='number'
|
|
103
|
+
placeholder='Count'
|
|
104
|
+
classNames='w-[4rem] text-right'
|
|
105
|
+
min={1}
|
|
106
|
+
max={100}
|
|
107
|
+
size={8}
|
|
108
|
+
value={count}
|
|
109
|
+
onChange={(event) => setCount(parseInt(event.target.value))}
|
|
110
|
+
/>
|
|
111
|
+
</Input.Root>
|
|
112
|
+
</Toolbar.Root>
|
|
113
|
+
</Panel.Toolbar>
|
|
114
|
+
<Panel.Content asChild>
|
|
115
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
116
|
+
<ScrollArea.Viewport classNames='dx-document gap-4 divide-y divide-subdued-separator'>
|
|
117
|
+
<SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />
|
|
118
|
+
<SchemaTable types={recordTypes} objects={info.objects} label='Record Types' onClick={handleCreateData} />
|
|
119
|
+
<SchemaTable types={presets.types} objects={info.objects} label='Presets' onClick={handleCreateData} />
|
|
120
|
+
</ScrollArea.Viewport>
|
|
121
|
+
</ScrollArea.Root>
|
|
122
|
+
</Panel.Content>
|
|
123
|
+
</Panel.Root>
|
|
124
|
+
);
|
|
125
|
+
},
|
|
126
|
+
);
|
|
@@ -8,32 +8,28 @@ import { useResizeDetector } from 'react-resize-detector';
|
|
|
8
8
|
import { Obj } from '@dxos/echo';
|
|
9
9
|
import { type ThemedClassName } from '@dxos/react-ui';
|
|
10
10
|
import { useAttentionAttributes } from '@dxos/react-ui-attention';
|
|
11
|
-
import {
|
|
12
|
-
import { mx } from '@dxos/
|
|
11
|
+
import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
|
|
12
|
+
import { mx } from '@dxos/ui-theme';
|
|
13
13
|
|
|
14
14
|
// TODO(burdon): Create generic container with wireframe mode.
|
|
15
15
|
export type WireframeProps = ThemedClassName<{
|
|
16
|
+
object: Obj.Unknown;
|
|
16
17
|
label?: string;
|
|
17
|
-
object: Obj.Any;
|
|
18
18
|
}>;
|
|
19
19
|
|
|
20
20
|
// TODO(burdon): Make focusable and attendable with input.
|
|
21
21
|
export const Wireframe = ({ classNames, label, object }: WireframeProps) => {
|
|
22
|
-
const attentionAttrs = useAttentionAttributes(Obj.
|
|
22
|
+
const attentionAttrs = useAttentionAttributes(Obj.getURI(object));
|
|
23
23
|
const { width, height, ref } = useResizeDetector();
|
|
24
24
|
|
|
25
25
|
return (
|
|
26
|
-
<div ref={ref} className={mx('relative grow min-
|
|
26
|
+
<div ref={ref} className={mx('relative grow min-h-96', classNames)} {...attentionAttrs}>
|
|
27
27
|
<div className='absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono'>
|
|
28
28
|
<div className='flex justify-between'>
|
|
29
29
|
<div>{label}</div>
|
|
30
30
|
<div>{`[${width}x${height}]`}</div>
|
|
31
31
|
</div>
|
|
32
|
-
{object &&
|
|
33
|
-
<SyntaxHighlighter language='json' classNames='text-xs opacity-75 rounded'>
|
|
34
|
-
{JSON.stringify(object, undefined, 2)}
|
|
35
|
-
</SyntaxHighlighter>
|
|
36
|
-
)}
|
|
32
|
+
{object && <JsonHighlighter data={object} classNames='text-xs opacity-75 rounded-sm' />}
|
|
37
33
|
</div>
|
|
38
34
|
<svg width={width} height={height} className='bg-transparent *:text-subdued'>
|
|
39
35
|
<rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type ComponentType, lazy } from 'react';
|
|
6
|
+
|
|
7
|
+
export const DebugGraph: ComponentType<any> = lazy(() => import('./DebugGraph'));
|
|
8
|
+
export const DebugObjectPanel: ComponentType<any> = lazy(() => import('./DebugObjectPanel'));
|
|
9
|
+
export const DebugStatus: ComponentType<any> = lazy(() => import('./DebugStatus'));
|
|
10
|
+
export const DevtoolsOverviewContainer: ComponentType<any> = lazy(() => import('./DevtoolsOverviewContainer'));
|
|
11
|
+
export const SpaceGenerator: ComponentType<any> = lazy(() => import('./SpaceGenerator'));
|
|
12
|
+
export const Wireframe: ComponentType<any> = lazy(() => import('./Wireframe'));
|
|
13
|
+
export const DebugSpaceObjectsPanel: ComponentType<any> = lazy(() => import('./DebugSpaceObjectsPanel'));
|
|
14
|
+
export const GithubPanel: ComponentType<any> = lazy(() => import('./GithubPanel'));
|