@sqlrooms/canvas 0.26.1-rc.7 → 0.27.0-rc.0
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.md +1 -1
- package/dist/crdt.d.ts +59 -0
- package/dist/crdt.d.ts.map +1 -0
- package/dist/crdt.js +76 -0
- package/dist/crdt.js.map +1 -0
- package/package.json +24 -12
package/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright 2025
|
|
3
|
+
Copyright 2025 SQLRooms Contributors
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
6
|
|
package/dist/crdt.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { CrdtMirror } from '@sqlrooms/crdt';
|
|
2
|
+
import { type CanvasSliceState } from './CanvasSlice';
|
|
3
|
+
/**
|
|
4
|
+
* Mirror schema for syncing the `@sqlrooms/canvas` slice via `@sqlrooms/crdt`.
|
|
5
|
+
*
|
|
6
|
+
* This is intentionally exported from a separate entrypoint (`@sqlrooms/canvas/crdt`)
|
|
7
|
+
* so consumer apps only pull `loro-mirror` when they opt into CRDT sync.
|
|
8
|
+
*/
|
|
9
|
+
export declare const canvasMirrorSchema: import("loro-mirror").LoroMapSchema<{
|
|
10
|
+
config: import("loro-mirror").LoroMapSchema<{
|
|
11
|
+
nodes: /*elided*/ any;
|
|
12
|
+
edges: /*elided*/ any;
|
|
13
|
+
}> & {
|
|
14
|
+
options: {};
|
|
15
|
+
} & {
|
|
16
|
+
catchall: <C extends import("loro-mirror").SchemaType>(catchallSchema: C) => import("loro-mirror").LoroMapSchemaWithCatchall<{
|
|
17
|
+
nodes: /*elided*/ any;
|
|
18
|
+
edges: /*elided*/ any;
|
|
19
|
+
}, C>;
|
|
20
|
+
};
|
|
21
|
+
}> & {
|
|
22
|
+
options: {};
|
|
23
|
+
} & {
|
|
24
|
+
catchall: <C extends import("loro-mirror").SchemaType>(catchallSchema: C) => import("loro-mirror").LoroMapSchemaWithCatchall<{
|
|
25
|
+
config: import("loro-mirror").LoroMapSchema<{
|
|
26
|
+
nodes: /*elided*/ any;
|
|
27
|
+
edges: /*elided*/ any;
|
|
28
|
+
}> & {
|
|
29
|
+
options: {};
|
|
30
|
+
} & {
|
|
31
|
+
catchall: <C_1 extends import("loro-mirror").SchemaType>(catchallSchema: C_1) => import("loro-mirror").LoroMapSchemaWithCatchall<{
|
|
32
|
+
nodes: /*elided*/ any;
|
|
33
|
+
edges: /*elided*/ any;
|
|
34
|
+
}, C_1>;
|
|
35
|
+
};
|
|
36
|
+
}, C>;
|
|
37
|
+
};
|
|
38
|
+
export type CanvasMirrorSchema = typeof canvasMirrorSchema;
|
|
39
|
+
/**
|
|
40
|
+
* Default initial mirror state for the canvas CRDT schema.
|
|
41
|
+
*/
|
|
42
|
+
export declare const canvasMirrorInitialState: {
|
|
43
|
+
config: {
|
|
44
|
+
nodes: never[];
|
|
45
|
+
edges: never[];
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Creates a CRDT mirror bundle for the canvas slice.
|
|
50
|
+
*
|
|
51
|
+
* Use this with `@sqlrooms/crdt`'s `createCrdtSlice({ mirrors: { ... } })` to
|
|
52
|
+
* compose multiple slice schemas/bindings on a single shared Loro document.
|
|
53
|
+
*/
|
|
54
|
+
export declare function createCanvasCrdtMirror<S extends CanvasSliceState = CanvasSliceState>(): CrdtMirror<S, typeof canvasMirrorSchema>;
|
|
55
|
+
/**
|
|
56
|
+
* @deprecated Use `createCanvasCrdtMirror` instead.
|
|
57
|
+
*/
|
|
58
|
+
export declare const createCanvasCrdtModule: typeof createCanvasCrdtMirror;
|
|
59
|
+
//# sourceMappingURL=crdt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crdt.d.ts","sourceRoot":"","sources":["../src/crdt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAoB,KAAK,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyB7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;CAKpC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,KAC1C,UAAU,CAAC,CAAC,EAAE,OAAO,kBAAkB,CAAC,CA0B5C;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,+BAAyB,CAAC"}
|
package/dist/crdt.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { schema } from 'loro-mirror';
|
|
2
|
+
import { CanvasSliceConfig } from './CanvasSlice';
|
|
3
|
+
/**
|
|
4
|
+
* Mirror schema for syncing the `@sqlrooms/canvas` slice via `@sqlrooms/crdt`.
|
|
5
|
+
*
|
|
6
|
+
* This is intentionally exported from a separate entrypoint (`@sqlrooms/canvas/crdt`)
|
|
7
|
+
* so consumer apps only pull `loro-mirror` when they opt into CRDT sync.
|
|
8
|
+
*/
|
|
9
|
+
export const canvasMirrorSchema = schema.LoroMap({
|
|
10
|
+
config: schema.LoroMap({
|
|
11
|
+
nodes: schema.LoroList(schema.LoroMap({
|
|
12
|
+
id: schema.String(),
|
|
13
|
+
position: schema.LoroMap({
|
|
14
|
+
x: schema.Number(),
|
|
15
|
+
y: schema.Number(),
|
|
16
|
+
}),
|
|
17
|
+
type: schema.String(),
|
|
18
|
+
data: schema.Any(),
|
|
19
|
+
width: schema.Number(),
|
|
20
|
+
height: schema.Number(),
|
|
21
|
+
}), (node) => node.id),
|
|
22
|
+
edges: schema.LoroList(schema.LoroMap({
|
|
23
|
+
id: schema.String(),
|
|
24
|
+
source: schema.String(),
|
|
25
|
+
target: schema.String(),
|
|
26
|
+
}), (edge) => edge.id),
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Default initial mirror state for the canvas CRDT schema.
|
|
31
|
+
*/
|
|
32
|
+
export const canvasMirrorInitialState = {
|
|
33
|
+
config: {
|
|
34
|
+
nodes: [],
|
|
35
|
+
edges: [],
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Creates a CRDT mirror bundle for the canvas slice.
|
|
40
|
+
*
|
|
41
|
+
* Use this with `@sqlrooms/crdt`'s `createCrdtSlice({ mirrors: { ... } })` to
|
|
42
|
+
* compose multiple slice schemas/bindings on a single shared Loro document.
|
|
43
|
+
*/
|
|
44
|
+
export function createCanvasCrdtMirror() {
|
|
45
|
+
return {
|
|
46
|
+
schema: canvasMirrorSchema,
|
|
47
|
+
initialState: canvasMirrorInitialState,
|
|
48
|
+
select: (state) => ({
|
|
49
|
+
config: {
|
|
50
|
+
nodes: state.canvas.config.nodes,
|
|
51
|
+
edges: state.canvas.config.edges,
|
|
52
|
+
},
|
|
53
|
+
}),
|
|
54
|
+
apply: (value, set, get) => {
|
|
55
|
+
if (!value?.config)
|
|
56
|
+
return;
|
|
57
|
+
set((state) => ({
|
|
58
|
+
...state,
|
|
59
|
+
canvas: {
|
|
60
|
+
...state.canvas,
|
|
61
|
+
config: CanvasSliceConfig.parse({
|
|
62
|
+
...get().canvas.config,
|
|
63
|
+
...value.config,
|
|
64
|
+
// Keep local viewport unsynced
|
|
65
|
+
viewport: get().canvas.config.viewport,
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
}));
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @deprecated Use `createCanvasCrdtMirror` instead.
|
|
74
|
+
*/
|
|
75
|
+
export const createCanvasCrdtModule = createCanvasCrdtMirror;
|
|
76
|
+
//# sourceMappingURL=crdt.js.map
|
package/dist/crdt.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crdt.js","sourceRoot":"","sources":["../src/crdt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAC,iBAAiB,EAAwB,MAAM,eAAe,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC,QAAQ,CACpB,MAAM,CAAC,OAAO,CAAC;YACb,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;YACnB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;gBACvB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;gBAClB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;aACnB,CAAC;YACF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;YACrB,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SACxB,CAAC,EACF,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAClB;QACD,KAAK,EAAE,MAAM,CAAC,QAAQ,CACpB,MAAM,CAAC,OAAO,CAAC;YACb,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SACxB,CAAC,EACF,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAClB;KACF,CAAC;CACH,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,MAAM,EAAE;QACN,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;KACV;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IAGpC,OAAO;QACL,MAAM,EAAE,kBAAkB;QAC1B,YAAY,EAAE,wBAAwB;QACtC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;gBAChC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;aACjC;SACF,CAAC;QACF,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,EAAE,MAAM;gBAAE,OAAO;YAC3B,GAAG,CAAC,CAAC,KAAQ,EAAE,EAAE,CAAC,CAAC;gBACjB,GAAG,KAAK;gBACR,MAAM,EAAE;oBACN,GAAG,KAAK,CAAC,MAAM;oBACf,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC;wBAC9B,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM;wBACtB,GAAG,KAAK,CAAC,MAAM;wBACf,+BAA+B;wBAC/B,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;qBACvC,CAAC;iBACH;aACF,CAAC,CAAC,CAAC;QACN,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC","sourcesContent":["import {schema} from 'loro-mirror';\nimport type {CrdtMirror} from '@sqlrooms/crdt';\nimport {CanvasSliceConfig, type CanvasSliceState} from './CanvasSlice';\n\n/**\n * Mirror schema for syncing the `@sqlrooms/canvas` slice via `@sqlrooms/crdt`.\n *\n * This is intentionally exported from a separate entrypoint (`@sqlrooms/canvas/crdt`)\n * so consumer apps only pull `loro-mirror` when they opt into CRDT sync.\n */\nexport const canvasMirrorSchema = schema.LoroMap({\n config: schema.LoroMap({\n nodes: schema.LoroList(\n schema.LoroMap({\n id: schema.String(),\n position: schema.LoroMap({\n x: schema.Number(),\n y: schema.Number(),\n }),\n type: schema.String(),\n data: schema.Any(),\n width: schema.Number(),\n height: schema.Number(),\n }),\n (node) => node.id,\n ),\n edges: schema.LoroList(\n schema.LoroMap({\n id: schema.String(),\n source: schema.String(),\n target: schema.String(),\n }),\n (edge) => edge.id,\n ),\n }),\n});\n\nexport type CanvasMirrorSchema = typeof canvasMirrorSchema;\n\n/**\n * Default initial mirror state for the canvas CRDT schema.\n */\nexport const canvasMirrorInitialState = {\n config: {\n nodes: [],\n edges: [],\n },\n};\n\n/**\n * Creates a CRDT mirror bundle for the canvas slice.\n *\n * Use this with `@sqlrooms/crdt`'s `createCrdtSlice({ mirrors: { ... } })` to\n * compose multiple slice schemas/bindings on a single shared Loro document.\n */\nexport function createCanvasCrdtMirror<\n S extends CanvasSliceState = CanvasSliceState,\n>(): CrdtMirror<S, typeof canvasMirrorSchema> {\n return {\n schema: canvasMirrorSchema,\n initialState: canvasMirrorInitialState,\n select: (state) => ({\n config: {\n nodes: state.canvas.config.nodes,\n edges: state.canvas.config.edges,\n },\n }),\n apply: (value, set, get) => {\n if (!value?.config) return;\n set((state: S) => ({\n ...state,\n canvas: {\n ...state.canvas,\n config: CanvasSliceConfig.parse({\n ...get().canvas.config,\n ...value.config,\n // Keep local viewport unsynced\n viewport: get().canvas.config.viewport,\n }),\n },\n }));\n },\n };\n}\n\n/**\n * @deprecated Use `createCanvasCrdtMirror` instead.\n */\nexport const createCanvasCrdtModule = createCanvasCrdtMirror;\n"]}
|
package/package.json
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/canvas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0-rc.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
7
7
|
"type": "module",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./crdt": {
|
|
14
|
+
"types": "./dist/crdt.d.ts",
|
|
15
|
+
"import": "./dist/crdt.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
8
18
|
"sideEffects": [
|
|
9
19
|
"*.css"
|
|
10
20
|
],
|
|
11
|
-
"author": "
|
|
21
|
+
"author": "SQLRooms Contributors",
|
|
12
22
|
"license": "MIT",
|
|
13
23
|
"repository": {
|
|
14
24
|
"type": "git",
|
|
@@ -21,17 +31,19 @@
|
|
|
21
31
|
"access": "public"
|
|
22
32
|
},
|
|
23
33
|
"dependencies": {
|
|
24
|
-
"@paralleldrive/cuid2": "^
|
|
25
|
-
"@sqlrooms/ai": "0.
|
|
26
|
-
"@sqlrooms/
|
|
27
|
-
"@sqlrooms/
|
|
28
|
-
"@sqlrooms/
|
|
29
|
-
"@sqlrooms/
|
|
30
|
-
"@sqlrooms/
|
|
31
|
-
"@sqlrooms/
|
|
34
|
+
"@paralleldrive/cuid2": "^3.0.0",
|
|
35
|
+
"@sqlrooms/ai": "0.27.0-rc.0",
|
|
36
|
+
"@sqlrooms/crdt": "0.27.0-rc.0",
|
|
37
|
+
"@sqlrooms/data-table": "0.27.0-rc.0",
|
|
38
|
+
"@sqlrooms/duckdb": "0.27.0-rc.0",
|
|
39
|
+
"@sqlrooms/room-shell": "0.27.0-rc.0",
|
|
40
|
+
"@sqlrooms/sql-editor": "0.27.0-rc.0",
|
|
41
|
+
"@sqlrooms/ui": "0.27.0-rc.0",
|
|
42
|
+
"@sqlrooms/vega": "0.27.0-rc.0",
|
|
32
43
|
"@xyflow/react": "^12.8.5",
|
|
33
44
|
"immer": "^11.0.1",
|
|
34
|
-
"
|
|
45
|
+
"loro-mirror": "^1.1.2",
|
|
46
|
+
"lucide-react": "^0.556.0",
|
|
35
47
|
"zod": "^4.1.8"
|
|
36
48
|
},
|
|
37
49
|
"peerDependencies": {
|
|
@@ -45,5 +57,5 @@
|
|
|
45
57
|
"typecheck": "tsc --noEmit",
|
|
46
58
|
"typedoc": "typedoc"
|
|
47
59
|
},
|
|
48
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "ceafff23c197b8188040f8c93baf4e7d3dd4b081"
|
|
49
61
|
}
|