@roborean/editor 0.1.2 → 0.1.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roborean/editor",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -10,19 +10,22 @@
10
10
  "dist"
11
11
  ],
12
12
  "dependencies": {
13
- "@roborean/api-types": "0.1.2",
14
- "@roborean/spec": "0.1.2",
15
- "@roborean/validation": "0.1.2",
16
- "@roborean/engine": "0.1.2",
17
- "@roborean/ui": "0.1.2"
13
+ "@roborean/api-types": "0.1.4",
14
+ "@roborean/spec": "0.1.4",
15
+ "@roborean/ui": "0.1.4",
16
+ "@roborean/engine": "0.1.4",
17
+ "@roborean/validation": "0.1.4",
18
+ "@roborean/documents-preview": "0.1.4"
18
19
  },
19
20
  "peerDependencies": {
21
+ "@mui/icons-material": "^6.0.0",
20
22
  "@mui/material": "^6.0.0",
21
23
  "@emotion/react": "^11.0.0",
22
24
  "@emotion/styled": "^11.0.0",
23
25
  "react": "^18.0.0 || ^19.0.0"
24
26
  },
25
27
  "devDependencies": {
28
+ "@mui/icons-material": "^6.4.0",
26
29
  "@mui/material": "^6.4.0",
27
30
  "@emotion/react": "^11.14.0",
28
31
  "@emotion/styled": "^11.14.0",
@@ -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"}
@@ -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
@@ -1,3 +0,0 @@
1
- export { ProjectEditor } from "./ProjectEditor.js";
2
- export { createEditorStore } from "./state/editorStore.js";
3
- //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,3 +0,0 @@
1
- export { ProjectEditor } from "./ProjectEditor.js";
2
- export { createEditorStore } from "./state/editorStore.js";
3
- //# sourceMappingURL=index.js.map
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"}