@roborean/editor 0.1.2 → 0.1.3
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/package.json +6 -6
- package/dist/ProjectEditor.d.ts +0 -12
- package/dist/ProjectEditor.d.ts.map +0 -1
- package/dist/ProjectEditor.js +0 -22
- package/dist/ProjectEditor.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/state/editorStore.d.ts +0 -29
- package/dist/state/editorStore.d.ts.map +0 -1
- package/dist/state/editorStore.js +0 -57
- package/dist/state/editorStore.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roborean/editor",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dist/index.js"
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@roborean/
|
|
14
|
-
"@roborean/
|
|
15
|
-
"@roborean/
|
|
16
|
-
"@roborean/
|
|
17
|
-
"@roborean/
|
|
13
|
+
"@roborean/spec": "0.1.3",
|
|
14
|
+
"@roborean/engine": "0.1.3",
|
|
15
|
+
"@roborean/ui": "0.1.3",
|
|
16
|
+
"@roborean/validation": "0.1.3",
|
|
17
|
+
"@roborean/api-types": "0.1.3"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
20
20
|
"@mui/material": "^6.0.0",
|
package/dist/ProjectEditor.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Project } from "@roborean/spec";
|
|
2
|
-
import { createRoboreanClient } from "@roborean/api-types";
|
|
3
|
-
export type ProjectEditorProps = {
|
|
4
|
-
project: Project;
|
|
5
|
-
projectId?: string;
|
|
6
|
-
client?: ReturnType<typeof createRoboreanClient>;
|
|
7
|
-
apiBaseUrl?: string;
|
|
8
|
-
onChange?: (project: Project) => void;
|
|
9
|
-
};
|
|
10
|
-
/** Main Roborean project editor surface. */
|
|
11
|
-
export declare function ProjectEditor({ project, projectId, client, apiBaseUrl, }: ProjectEditorProps): import("react").JSX.Element;
|
|
12
|
-
//# sourceMappingURL=ProjectEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectEditor.d.ts","sourceRoot":"","sources":["../src/ProjectEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAgB3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,CAAC;AAMF,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,EACN,UAAU,GACX,EAAE,kBAAkB,+BAqFpB"}
|
package/dist/ProjectEditor.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo, useSyncExternalStore } from "react";
|
|
3
|
-
import { createRoboreanClient } from "@roborean/api-types";
|
|
4
|
-
import { Button, DiagnosticList, List, ListItemButton, ListItemText, Panel, SplitPane, Stack, Typography, } from "@roborean/ui";
|
|
5
|
-
import { scrubProjectForEditor } from "@roborean/validation";
|
|
6
|
-
import { createEditorStore } from "./state/editorStore.js";
|
|
7
|
-
function useEditorStore(store) {
|
|
8
|
-
return useSyncExternalStore(store.subscribe, store.getState, store.getState);
|
|
9
|
-
}
|
|
10
|
-
/** Main Roborean project editor surface. */
|
|
11
|
-
export function ProjectEditor({ project, projectId, client, apiBaseUrl, }) {
|
|
12
|
-
const store = useMemo(() => createEditorStore(scrubProjectForEditor(project)), [project]);
|
|
13
|
-
const state = useEditorStore(store);
|
|
14
|
-
const api = client ??
|
|
15
|
-
(apiBaseUrl ? createRoboreanClient({ baseUrl: apiBaseUrl }) : undefined);
|
|
16
|
-
const selectedBit = state.project.bits.find((bit) => bit.id === state.selectedBitId);
|
|
17
|
-
return (_jsxs(Stack, { spacing: 2, children: [_jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(Button, { variant: "contained", onClick: () => store.recomputeLocal(), children: "Dry-run" }), api && projectId ? (_jsx(Button, { variant: "outlined", onClick: async () => {
|
|
18
|
-
const run = await api.createRun(projectId, {}, crypto.randomUUID());
|
|
19
|
-
store.setServerRun(run);
|
|
20
|
-
}, children: "Run on server" })) : null] }), _jsx(SplitPane, { left: _jsx(Panel, { title: "Bits", children: _jsx(List, { dense: true, children: state.project.bits.map((bit) => (_jsx(ListItemButton, { selected: bit.id === state.selectedBitId, onClick: () => store.selectBit(bit.id), children: _jsx(ListItemText, { primary: bit.id, secondary: bit.type }) }, bit.id))) }) }), center: _jsx(Panel, { title: "Bit detail", children: selectedBit ? (_jsxs(Stack, { spacing: 1, children: [_jsxs(Typography, { variant: "body2", children: ["Type: ", selectedBit.type] }), _jsxs(Typography, { variant: "body2", children: ["Effect: ", selectedBit.effectClass] }), _jsx(Typography, { component: "pre", variant: "body2", children: JSON.stringify(selectedBit.config, null, 2) })] })) : (_jsx(Typography, { variant: "body2", children: "Select a bit" })) }), right: _jsxs(Stack, { spacing: 2, children: [_jsx(Panel, { title: "Diagnostics", children: _jsx(DiagnosticList, { items: state.diagnostics }) }), _jsx(Panel, { title: "Dry-run", children: _jsx(Typography, { variant: "body2", "data-testid": "dry-run-status", children: state.localRun?.status ?? "not run" }) })] }) })] }));
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=ProjectEditor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectEditor.js","sourceRoot":"","sources":["../src/ProjectEditor.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { Project } from "@roborean/spec";
|
|
2
|
-
import type { RunDetail } from "@roborean/api-types";
|
|
3
|
-
import type { CompiledProject, RunResults } from "@roborean/engine";
|
|
4
|
-
import { type DependencyEdge, type DependencyNode, type EditorDiagnostic } from "@roborean/validation";
|
|
5
|
-
export type EditorState = {
|
|
6
|
-
project: Project;
|
|
7
|
-
compiled: CompiledProject | null;
|
|
8
|
-
localRun: RunResults | null;
|
|
9
|
-
serverRun: RunDetail | null;
|
|
10
|
-
diagnostics: EditorDiagnostic[];
|
|
11
|
-
selectedBitId: string | null;
|
|
12
|
-
graph: {
|
|
13
|
-
nodes: DependencyNode[];
|
|
14
|
-
edges: DependencyEdge[];
|
|
15
|
-
} | null;
|
|
16
|
-
dirty: boolean;
|
|
17
|
-
};
|
|
18
|
-
export type EditorStore = {
|
|
19
|
-
getState: () => EditorState;
|
|
20
|
-
subscribe: (listener: () => void) => () => void;
|
|
21
|
-
replaceProject: (project: Project) => void;
|
|
22
|
-
selectBit: (bitId: string | null) => void;
|
|
23
|
-
recomputeLocal: () => void;
|
|
24
|
-
setServerRun: (run: RunDetail | null) => void;
|
|
25
|
-
markSaved: () => void;
|
|
26
|
-
};
|
|
27
|
-
/** Minimal editor store without external state libraries. */
|
|
28
|
-
export declare function createEditorStore(initial: Project): EditorStore;
|
|
29
|
-
//# sourceMappingURL=editorStore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editorStore.d.ts","sourceRoot":"","sources":["../../src/state/editorStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE;QAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAsD/D"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { buildDependencyGraph, diagnoseProject, localDryRun, } from "@roborean/validation";
|
|
2
|
-
/** Minimal editor store without external state libraries. */
|
|
3
|
-
export function createEditorStore(initial) {
|
|
4
|
-
let state = {
|
|
5
|
-
project: initial,
|
|
6
|
-
compiled: null,
|
|
7
|
-
localRun: null,
|
|
8
|
-
serverRun: null,
|
|
9
|
-
diagnostics: [],
|
|
10
|
-
selectedBitId: initial.bits[0]?.id ?? null,
|
|
11
|
-
graph: buildDependencyGraph(initial),
|
|
12
|
-
dirty: false,
|
|
13
|
-
};
|
|
14
|
-
const listeners = new Set();
|
|
15
|
-
const notify = () => listeners.forEach((listener) => listener());
|
|
16
|
-
return {
|
|
17
|
-
getState: () => state,
|
|
18
|
-
subscribe: (listener) => {
|
|
19
|
-
listeners.add(listener);
|
|
20
|
-
return () => listeners.delete(listener);
|
|
21
|
-
},
|
|
22
|
-
replaceProject: (project) => {
|
|
23
|
-
state = {
|
|
24
|
-
...state,
|
|
25
|
-
project,
|
|
26
|
-
dirty: true,
|
|
27
|
-
graph: buildDependencyGraph(project),
|
|
28
|
-
};
|
|
29
|
-
notify();
|
|
30
|
-
},
|
|
31
|
-
selectBit: (bitId) => {
|
|
32
|
-
state = { ...state, selectedBitId: bitId };
|
|
33
|
-
notify();
|
|
34
|
-
},
|
|
35
|
-
recomputeLocal: () => {
|
|
36
|
-
const diagnostics = diagnoseProject(state.project);
|
|
37
|
-
const outcome = localDryRun(state.project);
|
|
38
|
-
state = {
|
|
39
|
-
...state,
|
|
40
|
-
diagnostics: [...diagnostics, ...outcome.diagnostics],
|
|
41
|
-
compiled: outcome.compiled,
|
|
42
|
-
localRun: outcome.results,
|
|
43
|
-
graph: buildDependencyGraph(state.project),
|
|
44
|
-
};
|
|
45
|
-
notify();
|
|
46
|
-
},
|
|
47
|
-
setServerRun: (run) => {
|
|
48
|
-
state = { ...state, serverRun: run };
|
|
49
|
-
notify();
|
|
50
|
-
},
|
|
51
|
-
markSaved: () => {
|
|
52
|
-
state = { ...state, dirty: false };
|
|
53
|
-
notify();
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=editorStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editorStore.js","sourceRoot":"","sources":["../../src/state/editorStore.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,WAAW,GAIZ,MAAM,sBAAsB,CAAC;AAuB9B,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,KAAK,GAAgB;QACvB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI;QAC1C,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC;QACpC,KAAK,EAAE,KAAK;KACb,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEjE,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QACrB,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;YAC1B,KAAK,GAAG;gBACN,GAAG,KAAK;gBACR,OAAO;gBACP,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC;aACrC,CAAC;YACF,MAAM,EAAE,CAAC;QACX,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;YAC3C,MAAM,EAAE,CAAC;QACX,CAAC;QACD,cAAc,EAAE,GAAG,EAAE;YACnB,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,KAAK,GAAG;gBACN,GAAG,KAAK;gBACR,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;gBACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,OAAO,CAAC,OAAO;gBACzB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC;aAC3C,CAAC;YACF,MAAM,EAAE,CAAC;QACX,CAAC;QACD,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YACpB,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACrC,MAAM,EAAE,CAAC;QACX,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACnC,MAAM,EAAE,CAAC;QACX,CAAC;KACF,CAAC;AACJ,CAAC"}
|