@stocksharp/diagram 0.1.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.
Files changed (87) hide show
  1. package/LICENSE +30 -0
  2. package/NOTICE +21 -0
  3. package/README.md +346 -0
  4. package/dist/esm/canvas-renderer.js +3226 -0
  5. package/dist/esm/canvas-renderer.js.map +1 -0
  6. package/dist/esm/core/action-registry.js +35 -0
  7. package/dist/esm/core/action-registry.js.map +1 -0
  8. package/dist/esm/core/document.js +350 -0
  9. package/dist/esm/core/document.js.map +1 -0
  10. package/dist/esm/core/history.js +136 -0
  11. package/dist/esm/core/history.js.map +1 -0
  12. package/dist/esm/core/model.js +2 -0
  13. package/dist/esm/core/model.js.map +1 -0
  14. package/dist/esm/core/state.js +73 -0
  15. package/dist/esm/core/state.js.map +1 -0
  16. package/dist/esm/core/view-state.js +70 -0
  17. package/dist/esm/core/view-state.js.map +1 -0
  18. package/dist/esm/diagram/api.js +2 -0
  19. package/dist/esm/diagram/api.js.map +1 -0
  20. package/dist/esm/diagram/catalog.js +45 -0
  21. package/dist/esm/diagram/catalog.js.map +1 -0
  22. package/dist/esm/diagram/event-emitter.js +42 -0
  23. package/dist/esm/diagram/event-emitter.js.map +1 -0
  24. package/dist/esm/diagram/palette.js +269 -0
  25. package/dist/esm/diagram/palette.js.map +1 -0
  26. package/dist/esm/diagram/stocksharp-diagram.js +784 -0
  27. package/dist/esm/diagram/stocksharp-diagram.js.map +1 -0
  28. package/dist/esm/diagram/types.js +105 -0
  29. package/dist/esm/diagram/types.js.map +1 -0
  30. package/dist/esm/embed.js +398 -0
  31. package/dist/esm/embed.js.map +1 -0
  32. package/dist/esm/i18n.js +12 -0
  33. package/dist/esm/i18n.js.map +1 -0
  34. package/dist/esm/index.js +12 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/ssdiagram.js +5141 -0
  37. package/dist/ssdiagram.js.map +7 -0
  38. package/dist/types/canvas-renderer.d.ts +512 -0
  39. package/dist/types/canvas-renderer.d.ts.map +1 -0
  40. package/dist/types/core/action-registry.d.ts +18 -0
  41. package/dist/types/core/action-registry.d.ts.map +1 -0
  42. package/dist/types/core/document.d.ts +12 -0
  43. package/dist/types/core/document.d.ts.map +1 -0
  44. package/dist/types/core/history.d.ts +33 -0
  45. package/dist/types/core/history.d.ts.map +1 -0
  46. package/dist/types/core/model.d.ts +85 -0
  47. package/dist/types/core/model.d.ts.map +1 -0
  48. package/dist/types/core/state.d.ts +68 -0
  49. package/dist/types/core/state.d.ts.map +1 -0
  50. package/dist/types/core/view-state.d.ts +14 -0
  51. package/dist/types/core/view-state.d.ts.map +1 -0
  52. package/dist/types/diagram/api.d.ts +213 -0
  53. package/dist/types/diagram/api.d.ts.map +1 -0
  54. package/dist/types/diagram/catalog.d.ts +19 -0
  55. package/dist/types/diagram/catalog.d.ts.map +1 -0
  56. package/dist/types/diagram/event-emitter.d.ts +9 -0
  57. package/dist/types/diagram/event-emitter.d.ts.map +1 -0
  58. package/dist/types/diagram/palette.d.ts +63 -0
  59. package/dist/types/diagram/palette.d.ts.map +1 -0
  60. package/dist/types/diagram/stocksharp-diagram.d.ts +157 -0
  61. package/dist/types/diagram/stocksharp-diagram.d.ts.map +1 -0
  62. package/dist/types/diagram/types.d.ts +171 -0
  63. package/dist/types/diagram/types.d.ts.map +1 -0
  64. package/dist/types/embed.d.ts +35 -0
  65. package/dist/types/embed.d.ts.map +1 -0
  66. package/dist/types/i18n.d.ts +167 -0
  67. package/dist/types/i18n.d.ts.map +1 -0
  68. package/dist/types/index.d.ts +22 -0
  69. package/dist/types/index.d.ts.map +1 -0
  70. package/package.json +126 -0
  71. package/sample.png +0 -0
  72. package/src/canvas-renderer.ts +3249 -0
  73. package/src/core/action-registry.ts +46 -0
  74. package/src/core/document.ts +387 -0
  75. package/src/core/history.ts +154 -0
  76. package/src/core/model.ts +99 -0
  77. package/src/core/state.ts +148 -0
  78. package/src/core/view-state.ts +82 -0
  79. package/src/diagram/api.ts +257 -0
  80. package/src/diagram/catalog.ts +55 -0
  81. package/src/diagram/event-emitter.ts +44 -0
  82. package/src/diagram/palette.ts +312 -0
  83. package/src/diagram/stocksharp-diagram.ts +945 -0
  84. package/src/diagram/types.ts +332 -0
  85. package/src/embed.ts +508 -0
  86. package/src/i18n.ts +210 -0
  87. package/src/index.ts +171 -0
@@ -0,0 +1,350 @@
1
+ import { DIAGRAM_DOCUMENT_VERSION, } from './model.js';
2
+ export { DIAGRAM_DOCUMENT_VERSION } from './model.js';
3
+ export class DiagramDocumentError extends Error {
4
+ constructor(message, path = '$') {
5
+ super(`${path}: ${message}`);
6
+ this.path = path;
7
+ this.name = 'DiagramDocumentError';
8
+ }
9
+ }
10
+ export function createDiagramDocument(input = {}) {
11
+ const nodes = (input.nodes ?? []).map((node, index) => normalizeNode(node, `$.nodes[${index}]`));
12
+ const usedLinkIds = new Set();
13
+ for (let index = 0; index < (input.links ?? []).length; index++) {
14
+ const id = input.links?.[index].id;
15
+ if (id === undefined)
16
+ continue;
17
+ requireIdentifier(id, `$.links[${index}].id`);
18
+ if (usedLinkIds.has(id)) {
19
+ throw new DiagramDocumentError(`duplicate link id "${id}"`, `$.links[${index}].id`);
20
+ }
21
+ usedLinkIds.add(id);
22
+ }
23
+ let sequence = 1;
24
+ const links = (input.links ?? []).map((link, index) => {
25
+ let id = link.id;
26
+ if (id === undefined) {
27
+ do
28
+ id = `link_${sequence++}`;
29
+ while (usedLinkIds.has(id));
30
+ usedLinkIds.add(id);
31
+ }
32
+ return normalizeLink({ ...link, id }, `$.links[${index}]`);
33
+ });
34
+ const document = {
35
+ version: DIAGRAM_DOCUMENT_VERSION,
36
+ nodes,
37
+ links,
38
+ metadata: cloneJsonObject(input.metadata ?? {}, '$.metadata'),
39
+ };
40
+ validateDocument(document);
41
+ return document;
42
+ }
43
+ export function cloneDiagramDocument(document) {
44
+ return parseDiagramDocument(document);
45
+ }
46
+ export function serializeDiagramDocument(document, space) {
47
+ return JSON.stringify(parseDiagramDocument(document), null, space);
48
+ }
49
+ export function parseDiagramDocument(source) {
50
+ let value = source;
51
+ if (typeof source === 'string') {
52
+ try {
53
+ value = JSON.parse(source);
54
+ }
55
+ catch (error) {
56
+ const reason = error instanceof Error ? error.message : 'invalid JSON';
57
+ throw new DiagramDocumentError(reason);
58
+ }
59
+ }
60
+ const root = requireObject(value, '$');
61
+ const version = requireNumber(root.version, '$.version');
62
+ if (version !== DIAGRAM_DOCUMENT_VERSION) {
63
+ throw new DiagramDocumentError(`unsupported document version ${version}`, '$.version');
64
+ }
65
+ const document = {
66
+ version: DIAGRAM_DOCUMENT_VERSION,
67
+ nodes: requireArray(root.nodes, '$.nodes').map((node, index) => parseNode(node, `$.nodes[${index}]`)),
68
+ links: requireArray(root.links, '$.links').map((link, index) => parseLink(link, `$.links[${index}]`)),
69
+ metadata: cloneJsonObject(root.metadata, '$.metadata'),
70
+ };
71
+ validateDocument(document);
72
+ return document;
73
+ }
74
+ function normalizeNode(input, path) {
75
+ const id = requireIdentifier(input.id, `${path}.id`);
76
+ return {
77
+ id,
78
+ typeId: requireIdentifier(input.typeId ?? id, `${path}.typeId`),
79
+ name: requireString(input.name, `${path}.name`),
80
+ description: requireString(input.description ?? '', `${path}.description`),
81
+ groupName: requireString(input.groupName ?? 'Common', `${path}.groupName`),
82
+ x: requireFiniteNumber(input.x ?? 0, `${path}.x`),
83
+ y: requireFiniteNumber(input.y ?? 0, `${path}.y`),
84
+ color: requireString(input.color ?? '#d7d7d7', `${path}.color`),
85
+ border: requireString(input.border ?? '#8c8c8c', `${path}.border`),
86
+ icon: requireString(input.icon ?? '', `${path}.icon`),
87
+ message: requireString(input.message ?? '', `${path}.message`),
88
+ openAction: requireString(input.openAction ?? '', `${path}.openAction`),
89
+ inPorts: (input.inPorts ?? []).map((port, index) => normalizePort(port, `${path}.inPorts[${index}]`)),
90
+ outPorts: (input.outPorts ?? []).map((port, index) => normalizePort(port, `${path}.outPorts[${index}]`)),
91
+ parameters: (input.parameters ?? []).map((parameter, index) => normalizeParameter(parameter, `${path}.parameters[${index}]`)),
92
+ paramValues: cloneStringRecord(input.paramValues ?? {}, `${path}.paramValues`),
93
+ metadata: cloneJsonObject(input.metadata ?? {}, `${path}.metadata`),
94
+ };
95
+ }
96
+ function normalizePort(input, path) {
97
+ return {
98
+ id: requireIdentifier(input.id, `${path}.id`),
99
+ name: requireString(input.name, `${path}.name`),
100
+ description: requireString(input.description ?? '', `${path}.description`),
101
+ type: requireString(input.type ?? '', `${path}.type`),
102
+ maxLinks: requireNonNegativeInteger(input.maxLinks ?? 0, `${path}.maxLinks`),
103
+ availableTypes: (input.availableTypes ?? []).map((type, index) => requireString(type, `${path}.availableTypes[${index}]`)),
104
+ isDynamic: requireBoolean(input.isDynamic ?? false, `${path}.isDynamic`),
105
+ dynamicMode: requireString(input.dynamicMode ?? '', `${path}.dynamicMode`),
106
+ isSibling: requireBoolean(input.isSibling ?? false, `${path}.isSibling`),
107
+ metadata: cloneJsonObject(input.metadata ?? {}, `${path}.metadata`),
108
+ };
109
+ }
110
+ function normalizeParameter(input, path) {
111
+ return {
112
+ name: requireIdentifier(input.name, `${path}.name`),
113
+ displayName: requireString(input.displayName, `${path}.displayName`),
114
+ description: requireString(input.description, `${path}.description`),
115
+ type: requireString(input.type, `${path}.type`),
116
+ defaultValue: requireString(input.defaultValue, `${path}.defaultValue`),
117
+ options: requireArray(input.options, `${path}.options`).map((option, index) => requireString(option, `${path}.options[${index}]`)),
118
+ min: requireNullableFiniteNumber(input.min, `${path}.min`),
119
+ max: requireNullableFiniteNumber(input.max, `${path}.max`),
120
+ displayOrder: requireFiniteNumber(input.displayOrder, `${path}.displayOrder`),
121
+ category: requireString(input.category, `${path}.category`),
122
+ isBasic: requireBoolean(input.isBasic, `${path}.isBasic`),
123
+ editorType: requireString(input.editorType, `${path}.editorType`),
124
+ };
125
+ }
126
+ function normalizeLink(input, path) {
127
+ return {
128
+ id: requireIdentifier(input.id, `${path}.id`),
129
+ from: normalizeEndpoint(input.from, `${path}.from`),
130
+ to: normalizeEndpoint(input.to, `${path}.to`),
131
+ metadata: cloneJsonObject(input.metadata ?? {}, `${path}.metadata`),
132
+ };
133
+ }
134
+ function normalizeEndpoint(input, path) {
135
+ return {
136
+ nodeId: requireIdentifier(input.nodeId, `${path}.nodeId`),
137
+ portId: requireIdentifier(input.portId, `${path}.portId`),
138
+ };
139
+ }
140
+ function parseNode(value, path) {
141
+ const node = requireObject(value, path);
142
+ return normalizeNode({
143
+ id: requireString(node.id, `${path}.id`),
144
+ typeId: requireString(node.typeId, `${path}.typeId`),
145
+ name: requireString(node.name, `${path}.name`),
146
+ description: requireString(node.description, `${path}.description`),
147
+ groupName: requireString(node.groupName, `${path}.groupName`),
148
+ x: requireNumber(node.x, `${path}.x`),
149
+ y: requireNumber(node.y, `${path}.y`),
150
+ color: requireString(node.color, `${path}.color`),
151
+ border: requireString(node.border, `${path}.border`),
152
+ icon: requireString(node.icon, `${path}.icon`),
153
+ message: requireString(node.message, `${path}.message`),
154
+ openAction: requireString(node.openAction, `${path}.openAction`),
155
+ inPorts: requireArray(node.inPorts, `${path}.inPorts`).map((port, index) => parsePort(port, `${path}.inPorts[${index}]`)),
156
+ outPorts: requireArray(node.outPorts, `${path}.outPorts`).map((port, index) => parsePort(port, `${path}.outPorts[${index}]`)),
157
+ parameters: requireArray(node.parameters, `${path}.parameters`).map((parameter, index) => parseParameter(parameter, `${path}.parameters[${index}]`)),
158
+ paramValues: cloneStringRecord(node.paramValues, `${path}.paramValues`),
159
+ metadata: cloneJsonObject(node.metadata, `${path}.metadata`),
160
+ }, path);
161
+ }
162
+ function parsePort(value, path) {
163
+ const port = requireObject(value, path);
164
+ return normalizePort({
165
+ id: requireString(port.id, `${path}.id`),
166
+ name: requireString(port.name, `${path}.name`),
167
+ description: requireString(port.description, `${path}.description`),
168
+ type: requireString(port.type, `${path}.type`),
169
+ maxLinks: requireNumber(port.maxLinks, `${path}.maxLinks`),
170
+ availableTypes: requireArray(port.availableTypes, `${path}.availableTypes`).map((type, index) => requireString(type, `${path}.availableTypes[${index}]`)),
171
+ isDynamic: requireBoolean(port.isDynamic, `${path}.isDynamic`),
172
+ dynamicMode: requireString(port.dynamicMode, `${path}.dynamicMode`),
173
+ isSibling: requireBoolean(port.isSibling, `${path}.isSibling`),
174
+ metadata: cloneJsonObject(port.metadata, `${path}.metadata`),
175
+ }, path);
176
+ }
177
+ function parseParameter(value, path) {
178
+ const parameter = requireObject(value, path);
179
+ return normalizeParameter({
180
+ name: requireString(parameter.name, `${path}.name`),
181
+ displayName: requireString(parameter.displayName, `${path}.displayName`),
182
+ description: requireString(parameter.description, `${path}.description`),
183
+ type: requireString(parameter.type, `${path}.type`),
184
+ defaultValue: requireString(parameter.defaultValue, `${path}.defaultValue`),
185
+ options: requireArray(parameter.options, `${path}.options`).map((option, index) => requireString(option, `${path}.options[${index}]`)),
186
+ min: requireNullableFiniteNumber(parameter.min, `${path}.min`),
187
+ max: requireNullableFiniteNumber(parameter.max, `${path}.max`),
188
+ displayOrder: requireNumber(parameter.displayOrder, `${path}.displayOrder`),
189
+ category: requireString(parameter.category, `${path}.category`),
190
+ isBasic: requireBoolean(parameter.isBasic, `${path}.isBasic`),
191
+ editorType: requireString(parameter.editorType, `${path}.editorType`),
192
+ }, path);
193
+ }
194
+ function parseLink(value, path) {
195
+ const link = requireObject(value, path);
196
+ return normalizeLink({
197
+ id: requireString(link.id, `${path}.id`),
198
+ from: parseEndpoint(link.from, `${path}.from`),
199
+ to: parseEndpoint(link.to, `${path}.to`),
200
+ metadata: cloneJsonObject(link.metadata, `${path}.metadata`),
201
+ }, path);
202
+ }
203
+ function parseEndpoint(value, path) {
204
+ const endpoint = requireObject(value, path);
205
+ return {
206
+ nodeId: requireIdentifier(endpoint.nodeId, `${path}.nodeId`),
207
+ portId: requireIdentifier(endpoint.portId, `${path}.portId`),
208
+ };
209
+ }
210
+ function validateDocument(document) {
211
+ const nodes = new Map();
212
+ for (let index = 0; index < document.nodes.length; index++) {
213
+ const node = document.nodes[index];
214
+ if (nodes.has(node.id))
215
+ throw new DiagramDocumentError(`duplicate node id "${node.id}"`, `$.nodes[${index}].id`);
216
+ validateUniquePorts(node.inPorts, `$.nodes[${index}].inPorts`);
217
+ validateUniquePorts(node.outPorts, `$.nodes[${index}].outPorts`);
218
+ nodes.set(node.id, node);
219
+ }
220
+ const linkIds = new Set();
221
+ const endpoints = new Set();
222
+ for (let index = 0; index < document.links.length; index++) {
223
+ const link = document.links[index];
224
+ const path = `$.links[${index}]`;
225
+ if (linkIds.has(link.id))
226
+ throw new DiagramDocumentError(`duplicate link id "${link.id}"`, `${path}.id`);
227
+ linkIds.add(link.id);
228
+ const fromNode = nodes.get(link.from.nodeId);
229
+ const toNode = nodes.get(link.to.nodeId);
230
+ if (fromNode === undefined)
231
+ throw new DiagramDocumentError(`unknown source node "${link.from.nodeId}"`, `${path}.from.nodeId`);
232
+ if (toNode === undefined)
233
+ throw new DiagramDocumentError(`unknown target node "${link.to.nodeId}"`, `${path}.to.nodeId`);
234
+ if (!fromNode.outPorts.some((port) => port.id === link.from.portId)) {
235
+ throw new DiagramDocumentError(`unknown output port "${link.from.portId}"`, `${path}.from.portId`);
236
+ }
237
+ if (!toNode.inPorts.some((port) => port.id === link.to.portId)) {
238
+ throw new DiagramDocumentError(`unknown input port "${link.to.portId}"`, `${path}.to.portId`);
239
+ }
240
+ const key = `${link.from.nodeId}\u0000${link.from.portId}\u0000${link.to.nodeId}\u0000${link.to.portId}`;
241
+ if (endpoints.has(key))
242
+ throw new DiagramDocumentError('duplicate link endpoints', path);
243
+ endpoints.add(key);
244
+ }
245
+ }
246
+ function validateUniquePorts(ports, path) {
247
+ const ids = new Set();
248
+ for (let index = 0; index < ports.length; index++) {
249
+ const id = ports[index].id;
250
+ if (ids.has(id))
251
+ throw new DiagramDocumentError(`duplicate port id "${id}"`, `${path}[${index}].id`);
252
+ ids.add(id);
253
+ }
254
+ }
255
+ function cloneStringRecord(value, path) {
256
+ const object = requireObject(value, path);
257
+ const result = {};
258
+ for (const [key, item] of Object.entries(object))
259
+ result[key] = requireString(item, `${path}.${key}`);
260
+ return result;
261
+ }
262
+ function cloneJsonObject(value, path, ancestors = new WeakSet()) {
263
+ const object = requireObject(value, path);
264
+ if (ancestors.has(object))
265
+ throw new DiagramDocumentError('circular JSON value', path);
266
+ ancestors.add(object);
267
+ const result = {};
268
+ try {
269
+ for (const [key, item] of Object.entries(object)) {
270
+ result[key] = cloneJsonValue(item, `${path}.${key}`, ancestors);
271
+ }
272
+ }
273
+ finally {
274
+ ancestors.delete(object);
275
+ }
276
+ return result;
277
+ }
278
+ function cloneJsonValue(value, path, ancestors) {
279
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
280
+ return value;
281
+ if (typeof value === 'number')
282
+ return requireFiniteNumber(value, path);
283
+ if (Array.isArray(value)) {
284
+ if (ancestors.has(value))
285
+ throw new DiagramDocumentError('circular JSON value', path);
286
+ ancestors.add(value);
287
+ try {
288
+ return value.map((item, index) => cloneJsonValue(item, `${path}[${index}]`, ancestors));
289
+ }
290
+ finally {
291
+ ancestors.delete(value);
292
+ }
293
+ }
294
+ if (isObject(value))
295
+ return cloneJsonObject(value, path, ancestors);
296
+ throw new DiagramDocumentError('expected a JSON value', path);
297
+ }
298
+ function requireObject(value, path) {
299
+ if (!isObject(value))
300
+ throw new DiagramDocumentError('expected an object', path);
301
+ return value;
302
+ }
303
+ function isObject(value) {
304
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
305
+ return false;
306
+ const prototype = Object.getPrototypeOf(value);
307
+ return prototype === Object.prototype || prototype === null;
308
+ }
309
+ function requireArray(value, path) {
310
+ if (!Array.isArray(value))
311
+ throw new DiagramDocumentError('expected an array', path);
312
+ return value;
313
+ }
314
+ function requireString(value, path) {
315
+ if (typeof value !== 'string')
316
+ throw new DiagramDocumentError('expected a string', path);
317
+ return value;
318
+ }
319
+ function requireIdentifier(value, path) {
320
+ const id = requireString(value, path);
321
+ if (id.trim().length === 0)
322
+ throw new DiagramDocumentError('identifier cannot be empty', path);
323
+ return id;
324
+ }
325
+ function requireNumber(value, path) {
326
+ if (typeof value !== 'number')
327
+ throw new DiagramDocumentError('expected a number', path);
328
+ return value;
329
+ }
330
+ function requireFiniteNumber(value, path) {
331
+ const number = requireNumber(value, path);
332
+ if (!Number.isFinite(number))
333
+ throw new DiagramDocumentError('expected a finite number', path);
334
+ return number;
335
+ }
336
+ function requireNullableFiniteNumber(value, path) {
337
+ return value === null ? null : requireFiniteNumber(value, path);
338
+ }
339
+ function requireNonNegativeInteger(value, path) {
340
+ const number = requireFiniteNumber(value, path);
341
+ if (!Number.isInteger(number) || number < 0)
342
+ throw new DiagramDocumentError('expected a non-negative integer', path);
343
+ return number;
344
+ }
345
+ function requireBoolean(value, path) {
346
+ if (typeof value !== 'boolean')
347
+ throw new DiagramDocumentError('expected a boolean', path);
348
+ return value;
349
+ }
350
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/core/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ export class DiagramCommandHistory {
2
+ constructor(listener) {
3
+ this.listener = listener;
4
+ this.undoCommands = [];
5
+ this.redoCommands = [];
6
+ this.transactions = [];
7
+ this.replaying = false;
8
+ }
9
+ get state() {
10
+ return {
11
+ canUndo: this.undoCommands.length > 0,
12
+ canRedo: this.redoCommands.length > 0,
13
+ undoDepth: this.undoCommands.length,
14
+ redoDepth: this.redoCommands.length,
15
+ undoLabel: this.undoCommands[this.undoCommands.length - 1]?.label ?? null,
16
+ redoLabel: this.redoCommands[this.redoCommands.length - 1]?.label ?? null,
17
+ };
18
+ }
19
+ execute(command) {
20
+ if (this.replaying) {
21
+ command.execute();
22
+ return;
23
+ }
24
+ command.execute();
25
+ this.recordApplied(command);
26
+ }
27
+ /** Records a gesture that already changed the document, such as pointer drag. */
28
+ recordApplied(command) {
29
+ if (this.replaying)
30
+ return;
31
+ const transaction = this.transactions[this.transactions.length - 1];
32
+ if (transaction !== undefined) {
33
+ transaction.commands.push(command);
34
+ return;
35
+ }
36
+ this.undoCommands.push(command);
37
+ this.redoCommands.length = 0;
38
+ this.notify();
39
+ }
40
+ transaction(label, action) {
41
+ const frame = { label, commands: [] };
42
+ this.transactions.push(frame);
43
+ try {
44
+ const result = action();
45
+ this.transactions.pop();
46
+ const command = compose(frame);
47
+ if (command !== null)
48
+ this.recordApplied(command);
49
+ return result;
50
+ }
51
+ catch (error) {
52
+ this.transactions.pop();
53
+ this.replay(() => {
54
+ for (const command of frame.commands.slice().reverse())
55
+ command.undo();
56
+ });
57
+ throw error;
58
+ }
59
+ }
60
+ undo() {
61
+ const command = this.undoCommands.pop();
62
+ if (command === undefined)
63
+ return false;
64
+ try {
65
+ this.replay(() => command.undo());
66
+ }
67
+ catch (error) {
68
+ this.undoCommands.push(command);
69
+ throw error;
70
+ }
71
+ this.redoCommands.push(command);
72
+ this.notify();
73
+ return true;
74
+ }
75
+ redo() {
76
+ const command = this.redoCommands.pop();
77
+ if (command === undefined)
78
+ return false;
79
+ try {
80
+ this.replay(() => command.execute());
81
+ }
82
+ catch (error) {
83
+ this.redoCommands.push(command);
84
+ throw error;
85
+ }
86
+ this.undoCommands.push(command);
87
+ this.notify();
88
+ return true;
89
+ }
90
+ clear() {
91
+ if (this.transactions.length > 0) {
92
+ throw new Error('Cannot clear command history inside a transaction.');
93
+ }
94
+ this.undoCommands.length = 0;
95
+ this.redoCommands.length = 0;
96
+ this.notify();
97
+ }
98
+ replay(action) {
99
+ const previous = this.replaying;
100
+ this.replaying = true;
101
+ try {
102
+ action();
103
+ }
104
+ finally {
105
+ this.replaying = previous;
106
+ }
107
+ }
108
+ notify() {
109
+ this.listener?.(this.state);
110
+ }
111
+ }
112
+ function compose(frame) {
113
+ if (frame.commands.length === 0)
114
+ return null;
115
+ if (frame.commands.length === 1) {
116
+ const command = frame.commands[0];
117
+ return frame.label === command.label ? command : {
118
+ label: frame.label,
119
+ execute: () => command.execute(),
120
+ undo: () => command.undo(),
121
+ };
122
+ }
123
+ const commands = [...frame.commands];
124
+ return {
125
+ label: frame.label,
126
+ execute: () => {
127
+ for (const command of commands)
128
+ command.execute();
129
+ },
130
+ undo: () => {
131
+ for (const command of commands.slice().reverse())
132
+ command.undo();
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/core/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export const DIAGRAM_DOCUMENT_VERSION = 1;
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/model.ts"],"names":[],"mappings":"AAqEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC"}
@@ -0,0 +1,73 @@
1
+ export function createDiagramRuntimeState() {
2
+ return { activeNodeId: null, nodes: {}, globalError: null };
3
+ }
4
+ export function cloneDiagramRuntimeState(state) {
5
+ return {
6
+ activeNodeId: state.activeNodeId,
7
+ globalError: state.globalError === null ? null : { ...state.globalError },
8
+ nodes: Object.fromEntries(Object.entries(state.nodes).map(([nodeId, node]) => [nodeId, {
9
+ active: node.active,
10
+ error: node.error === null ? null : { ...node.error },
11
+ ports: {
12
+ in: Object.fromEntries(Object.entries(node.ports.in)
13
+ .map(([portId, port]) => [portId, { ...port }])),
14
+ out: Object.fromEntries(Object.entries(node.ports.out)
15
+ .map(([portId, port]) => [portId, { ...port }])),
16
+ },
17
+ }])),
18
+ };
19
+ }
20
+ export function createDiagramViewState() {
21
+ return { zoom: 1, panX: 0, panY: 0, overviewVisible: true };
22
+ }
23
+ export function createDiagramSelection() {
24
+ return {
25
+ nodeIds: [],
26
+ linkIds: [],
27
+ port: null,
28
+ primaryNodeId: null,
29
+ primaryLinkId: null,
30
+ };
31
+ }
32
+ export function createDiagramPortRuntimeState() {
33
+ return {
34
+ active: false,
35
+ selected: false,
36
+ breakpoint: false,
37
+ breakpointActive: false,
38
+ value: null,
39
+ error: null,
40
+ };
41
+ }
42
+ export function createEditableDiagramPermissions() {
43
+ return {
44
+ select: true,
45
+ inspect: true,
46
+ copy: true,
47
+ moveNodes: true,
48
+ createLinks: true,
49
+ deleteSelection: true,
50
+ paste: true,
51
+ history: true,
52
+ };
53
+ }
54
+ export function createReadOnlyDiagramPermissions() {
55
+ return {
56
+ select: true,
57
+ inspect: true,
58
+ copy: true,
59
+ moveNodes: false,
60
+ createLinks: false,
61
+ deleteSelection: false,
62
+ paste: false,
63
+ history: false,
64
+ };
65
+ }
66
+ export function createDiagramNodeRuntimeState() {
67
+ return {
68
+ active: false,
69
+ error: null,
70
+ ports: { in: {}, out: {} },
71
+ };
72
+ }
73
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/core/state.ts"],"names":[],"mappings":"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"}