@meltemi/diagrams-editor 1.9.0 → 1.10.17

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 (154) hide show
  1. package/dist/add-icons.d.ts +44 -0
  2. package/dist/add-icons.d.ts.map +1 -0
  3. package/dist/add-icons.js +178 -0
  4. package/dist/add-icons.js.map +1 -0
  5. package/dist/arrange.d.ts +54 -1
  6. package/dist/arrange.d.ts.map +1 -1
  7. package/dist/arrange.js +209 -8
  8. package/dist/arrange.js.map +1 -1
  9. package/dist/asset-files.d.ts +46 -0
  10. package/dist/asset-files.d.ts.map +1 -0
  11. package/dist/asset-files.js +79 -0
  12. package/dist/asset-files.js.map +1 -0
  13. package/dist/c4.d.ts +91 -1
  14. package/dist/c4.d.ts.map +1 -1
  15. package/dist/c4.js +358 -9
  16. package/dist/c4.js.map +1 -1
  17. package/dist/canvas/index.d.ts +1 -0
  18. package/dist/canvas/index.d.ts.map +1 -1
  19. package/dist/canvas/index.js +1 -0
  20. package/dist/canvas/index.js.map +1 -1
  21. package/dist/canvas/keyboard.d.ts +23 -2
  22. package/dist/canvas/keyboard.d.ts.map +1 -1
  23. package/dist/canvas/keyboard.js +23 -0
  24. package/dist/canvas/keyboard.js.map +1 -1
  25. package/dist/canvas/palette.d.ts +48 -6
  26. package/dist/canvas/palette.d.ts.map +1 -1
  27. package/dist/canvas/palette.js +55 -9
  28. package/dist/canvas/palette.js.map +1 -1
  29. package/dist/canvas/pens.d.ts +10 -0
  30. package/dist/canvas/pens.d.ts.map +1 -0
  31. package/dist/canvas/pens.js +29 -0
  32. package/dist/canvas/pens.js.map +1 -0
  33. package/dist/canvas/protocol.d.ts +580 -21
  34. package/dist/canvas/protocol.d.ts.map +1 -1
  35. package/dist/canvas/protocol.js +140 -3
  36. package/dist/canvas/protocol.js.map +1 -1
  37. package/dist/canvas/routes.d.ts +17 -0
  38. package/dist/canvas/routes.d.ts.map +1 -1
  39. package/dist/canvas/routes.js +37 -0
  40. package/dist/canvas/routes.js.map +1 -1
  41. package/dist/canvas/turning.d.ts +7 -0
  42. package/dist/canvas/turning.d.ts.map +1 -1
  43. package/dist/canvas/turning.js +17 -3
  44. package/dist/canvas/turning.js.map +1 -1
  45. package/dist/catalog.d.ts +5 -0
  46. package/dist/catalog.d.ts.map +1 -1
  47. package/dist/catalog.js +1 -1
  48. package/dist/catalog.js.map +1 -1
  49. package/dist/clipboard.d.ts.map +1 -1
  50. package/dist/clipboard.js +98 -9
  51. package/dist/clipboard.js.map +1 -1
  52. package/dist/effects.d.ts +5 -0
  53. package/dist/effects.d.ts.map +1 -1
  54. package/dist/effects.js +31 -22
  55. package/dist/effects.js.map +1 -1
  56. package/dist/exports.d.ts +25 -11
  57. package/dist/exports.d.ts.map +1 -1
  58. package/dist/exports.js +65 -28
  59. package/dist/exports.js.map +1 -1
  60. package/dist/fonts.d.ts +63 -0
  61. package/dist/fonts.d.ts.map +1 -0
  62. package/dist/fonts.js +175 -0
  63. package/dist/fonts.js.map +1 -0
  64. package/dist/icons.d.ts +2 -0
  65. package/dist/icons.d.ts.map +1 -1
  66. package/dist/icons.js +39 -6
  67. package/dist/icons.js.map +1 -1
  68. package/dist/index.d.ts +6 -3
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +4 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/inspector.d.ts.map +1 -1
  73. package/dist/inspector.js +545 -141
  74. package/dist/inspector.js.map +1 -1
  75. package/dist/layouts.d.ts +3 -2
  76. package/dist/layouts.d.ts.map +1 -1
  77. package/dist/layouts.js +4 -2
  78. package/dist/layouts.js.map +1 -1
  79. package/dist/messages/en.d.ts +106 -20
  80. package/dist/messages/en.d.ts.map +1 -1
  81. package/dist/messages/en.js +110 -26
  82. package/dist/messages/en.js.map +1 -1
  83. package/dist/messages/es.d.ts.map +1 -1
  84. package/dist/messages/es.js +80 -43
  85. package/dist/messages/es.js.map +1 -1
  86. package/dist/messages/index.d.ts +76 -17
  87. package/dist/messages/index.d.ts.map +1 -1
  88. package/dist/messages/keys.d.ts.map +1 -1
  89. package/dist/messages/keys.js +26 -0
  90. package/dist/messages/keys.js.map +1 -1
  91. package/dist/messages/services.d.ts +130 -1
  92. package/dist/messages/services.d.ts.map +1 -1
  93. package/dist/messages/services.js +150 -18
  94. package/dist/messages/services.js.map +1 -1
  95. package/dist/move-file.d.ts +32 -0
  96. package/dist/move-file.d.ts.map +1 -0
  97. package/dist/move-file.js +58 -0
  98. package/dist/move-file.js.map +1 -0
  99. package/dist/node.d.ts +1 -1
  100. package/dist/node.d.ts.map +1 -1
  101. package/dist/node.js.map +1 -1
  102. package/dist/projects.d.ts +65 -1
  103. package/dist/projects.d.ts.map +1 -1
  104. package/dist/projects.js +349 -1
  105. package/dist/projects.js.map +1 -1
  106. package/dist/render.d.ts +5 -0
  107. package/dist/render.d.ts.map +1 -1
  108. package/dist/render.js +4 -2
  109. package/dist/render.js.map +1 -1
  110. package/dist/sequence.d.ts +37 -8
  111. package/dist/sequence.d.ts.map +1 -1
  112. package/dist/sequence.js +409 -38
  113. package/dist/sequence.js.map +1 -1
  114. package/dist/services/actions.d.ts.map +1 -1
  115. package/dist/services/actions.js +65 -1
  116. package/dist/services/actions.js.map +1 -1
  117. package/dist/services/completion.d.ts.map +1 -1
  118. package/dist/services/completion.js +146 -16
  119. package/dist/services/completion.js.map +1 -1
  120. package/dist/services/docs.d.ts +5 -0
  121. package/dist/services/docs.d.ts.map +1 -1
  122. package/dist/services/docs.js +7 -0
  123. package/dist/services/docs.js.map +1 -1
  124. package/dist/services/hover.d.ts +5 -0
  125. package/dist/services/hover.d.ts.map +1 -1
  126. package/dist/services/hover.js +154 -21
  127. package/dist/services/hover.js.map +1 -1
  128. package/dist/services/navigation.d.ts +1 -1
  129. package/dist/services/navigation.d.ts.map +1 -1
  130. package/dist/services/navigation.js +8 -4
  131. package/dist/services/navigation.js.map +1 -1
  132. package/dist/services/stories.d.ts.map +1 -1
  133. package/dist/services/stories.js +31 -3
  134. package/dist/services/stories.js.map +1 -1
  135. package/dist/session.d.ts +121 -13
  136. package/dist/session.d.ts.map +1 -1
  137. package/dist/session.js +1349 -80
  138. package/dist/session.js.map +1 -1
  139. package/dist/syntax.d.ts.map +1 -1
  140. package/dist/syntax.js +3 -0
  141. package/dist/syntax.js.map +1 -1
  142. package/dist/targets.d.ts +25 -4
  143. package/dist/targets.d.ts.map +1 -1
  144. package/dist/targets.js +103 -7
  145. package/dist/targets.js.map +1 -1
  146. package/dist/text-places.d.ts +15 -3
  147. package/dist/text-places.d.ts.map +1 -1
  148. package/dist/text-places.js +187 -12
  149. package/dist/text-places.js.map +1 -1
  150. package/dist/themes.d.ts +0 -2
  151. package/dist/themes.d.ts.map +1 -1
  152. package/dist/themes.js +27 -13
  153. package/dist/themes.js.map +1 -1
  154. package/package.json +16 -16
package/dist/c4.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { C4_LEVELS, allowedEntities, } from "@meltemi/diagrams-model";
2
2
  import { messages } from "./messages/index.js";
3
+ import { nameable, namedRelation } from "./targets.js";
3
4
  /** The entities a view may draw and does not: what "Add from the model…" offers. */
4
5
  export function entityChoices(diagram) {
5
6
  const c4 = diagram.c4;
@@ -11,6 +12,304 @@ export function entityChoices(diagram) {
11
12
  .filter((e) => allowed.has(e.path) && !diagram.elementsById.has(e.path))
12
13
  .map((e) => ({ path: e.path, label: e.label, kind: e.kind }));
13
14
  }
15
+ /**
16
+ * The entity kinds the palette of a C4 view offers: the ones its level draws (a container view
17
+ * draws the containers and data stores of its system, a component view the components of its
18
+ * container), with persons and systems at every level.
19
+ */
20
+ export function allowedKinds(level) {
21
+ switch (level) {
22
+ case "context":
23
+ return ["person", "system"];
24
+ case "container":
25
+ return ["container", "datastore", "person", "system"];
26
+ case "component":
27
+ return ["component", "person", "system"];
28
+ }
29
+ }
30
+ /**
31
+ * Where an entity of `kind` created on a view is declared: inside the view's scope for the kinds
32
+ * the scope holds (containers and data stores of a system, components of a container), at the
33
+ * model's root for persons and systems.
34
+ */
35
+ export function entityParent(diagram, kind) {
36
+ if (kind === "person" || kind === "system")
37
+ return null;
38
+ return diagram.c4?.scope ?? null;
39
+ }
40
+ /** A free id for a new entity under `parent`: `<kind><n>`, as the model's own operations name it. */
41
+ export function freshEntityPath(model, parent, kind) {
42
+ for (let n = 1;; n++) {
43
+ const path = parent ? `${parent}.${kind}${n}` : `${kind}${n}`;
44
+ if (!model.entitiesByPath.has(path))
45
+ return path;
46
+ }
47
+ }
48
+ const quote = (text) => JSON.stringify(text);
49
+ /**
50
+ * The clipboard text of entities and notes copied from a C4 view: a `model clipboard` block
51
+ * declaring each entity (kind, id, label, technology, description, external; not its children or
52
+ * relations) and a free diagram holding where each was drawn and the notes. It is a document of
53
+ * its own, which other editors read as text and a C4 view reads back with `copiedEntities` and
54
+ * `copiedNotes`.
55
+ */
56
+ export function entityClipboard(diagram, ids, boxes) {
57
+ const model = diagram.c4?.resolved?.definition;
58
+ if (!model)
59
+ return undefined;
60
+ const entities = ids.flatMap((id) => {
61
+ const entity = model.entitiesByPath.get(id);
62
+ return entity && diagram.elementsById.has(id) ? [entity] : [];
63
+ });
64
+ const notes = ids.flatMap((id) => {
65
+ const note = diagram.elementsById.get(id);
66
+ return note && note.kind === "note" && note.entity === null ? [note] : [];
67
+ });
68
+ if (entities.length === 0 && notes.length === 0)
69
+ return undefined;
70
+ // Containers and data stores are declared in a system, components in a container: the
71
+ // copies sit in holders of those kinds, which a paste leaves out.
72
+ const lines = {
73
+ root: [],
74
+ system: [],
75
+ container: [],
76
+ };
77
+ const places = [];
78
+ const taken = new Set([HOLDER]);
79
+ // The clipboard id of each copied entity, by path, which a note copied with it is attached to.
80
+ const copiedAs = new Map();
81
+ for (const entity of entities) {
82
+ let id = entity.id;
83
+ for (let n = 2; taken.has(id); n++)
84
+ id = `${entity.id}_${n}`;
85
+ taken.add(id);
86
+ copiedAs.set(entity.path, id);
87
+ const block = [
88
+ entity.technology !== null ? `technology ${quote(entity.technology)}` : "",
89
+ entity.description !== null ? `description ${quote(entity.description)}` : "",
90
+ entity.external ? "external" : "",
91
+ ].filter((p) => p !== "");
92
+ const holder = entity.kind === "component"
93
+ ? "container"
94
+ : entity.kind === "container" || entity.kind === "datastore"
95
+ ? "system"
96
+ : "root";
97
+ lines[holder].push(`${entity.kind} ${id} ${quote(entity.label)}${block.length > 0 ? ` { ${block.join("; ")} }` : ""}`);
98
+ const box = boxes?.get(entity.path);
99
+ if (box) {
100
+ const x = Math.round(box.x + box.width / 2);
101
+ const y = Math.round(box.y + box.height / 2);
102
+ places.push(` place ${id} at (${x}, ${y})`);
103
+ }
104
+ }
105
+ const body = [
106
+ ...lines.root.map((line) => ` ${line}`),
107
+ ...(lines.system.length + lines.container.length > 0
108
+ ? [
109
+ ` system ${HOLDER} "" {`,
110
+ ...lines.system.map((line) => ` ${line}`),
111
+ ...(lines.container.length > 0
112
+ ? [
113
+ ` container ${HOLDER} "" {`,
114
+ ...lines.container.map((line) => ` ${line}`),
115
+ " }",
116
+ ]
117
+ : []),
118
+ " }",
119
+ ]
120
+ : []),
121
+ ];
122
+ const boxesText = [...taken].filter((id) => id !== HOLDER).map((id) => ` box ${id} ""`);
123
+ // The notes, after the boxes: attached to a box of the sheet when its entity is copied with it,
124
+ // else carrying the path of the entity it is attached to in its description.
125
+ for (const note of notes) {
126
+ let id = note.id;
127
+ for (let n = 2; taken.has(id); n++)
128
+ id = `${note.id}_${n}`;
129
+ taken.add(id);
130
+ const target = note.attachedTo;
131
+ const copiedTarget = target === null ? undefined : copiedAs.get(target);
132
+ const on = copiedTarget !== undefined ? ` on ${copiedTarget}` : "";
133
+ const path = target !== null && copiedTarget === undefined ? ` { description ${quote(target)} }` : "";
134
+ boxesText.push(` note ${id} ${quote(note.label)}${on}${path}`);
135
+ const box = boxes?.get(note.id);
136
+ if (box) {
137
+ places.push(` place ${id} at (${Math.round(box.x + box.width / 2)}, ${Math.round(box.y + box.height / 2)})`, ` size ${id} (${Math.round(box.width)}, ${Math.round(box.height)})`);
138
+ }
139
+ }
140
+ const placement = places.length > 0 ? `\n placement {\n${places.join("\n")}\n }` : "";
141
+ return `language "0.2"\n\nmodel clipboard {\n${body.join("\n")}\n}\n\ndiagram clipboard: free {\n layout manual\n${boxesText.join("\n")}${placement}\n}\n`;
142
+ }
143
+ /** The id of the entities that hold copied containers and components on the clipboard. */
144
+ const HOLDER = "meltemi_clipboard";
145
+ /** The entities of a C4 clipboard text, or undefined when the text is not one. */
146
+ export function copiedEntities(models, diagrams) {
147
+ const model = models.find((m) => m.id === "clipboard");
148
+ if (!model)
149
+ return undefined;
150
+ const sheet = diagrams.find((d) => d.id === "clipboard");
151
+ const places = new Map();
152
+ for (const entry of sheet?.placement ?? []) {
153
+ if (entry.statement === "place")
154
+ places.set(entry.target, { x: entry.x, y: entry.y });
155
+ }
156
+ return model.entities
157
+ .filter((e) => e.id !== HOLDER)
158
+ .map((e) => ({
159
+ kind: e.kind,
160
+ id: e.id,
161
+ label: e.label,
162
+ technology: e.technology,
163
+ description: e.description,
164
+ external: e.external,
165
+ at: places.get(e.id) ?? null,
166
+ }));
167
+ }
168
+ /** The notes of a C4 clipboard text, in the order written. */
169
+ export function copiedNotes(diagrams) {
170
+ const sheet = diagrams.find((d) => d.id === "clipboard");
171
+ if (!sheet)
172
+ return [];
173
+ const place = (id) => sheet.placement.find((p) => p.statement === "place" && p.target === id);
174
+ const size = (id) => sheet.placement.find((p) => p.statement === "size" && p.target === id);
175
+ return sheet.elements
176
+ .filter((e) => e.kind === "note")
177
+ .map((note) => {
178
+ const at = place(note.id);
179
+ const extent = size(note.id);
180
+ return {
181
+ id: note.id,
182
+ label: note.label,
183
+ at: at ? { x: at.x, y: at.y } : null,
184
+ size: extent ? { width: extent.width, height: extent.height } : null,
185
+ on: note.attachedTo,
186
+ path: note.description,
187
+ };
188
+ });
189
+ }
190
+ /**
191
+ * The operations that paste copied entities into a C4 view: each entity of a kind the view's level
192
+ * draws is declared again in the model, where the level puts it, under its id or `<id>_2`, `_3`…,
193
+ * with its label, technology, description and `external`, then included in the view and placed
194
+ * (by `shift` from where it was drawn, or so that the copies' centre lands on `at`). Relations
195
+ * are not copied. The ids are the new entities' paths.
196
+ */
197
+ export function pasteEntities(diagram, placed, copied, where, notes = []) {
198
+ const c4 = diagram.c4;
199
+ const model = c4?.resolved?.definition;
200
+ if (!c4 || !model)
201
+ return { ok: false, reason: messages().session.fixFirst };
202
+ const kinds = allowedKinds(c4.level);
203
+ const drawn = copied.filter((e) => kinds.includes(e.kind));
204
+ if (drawn.length === 0 && notes.length === 0) {
205
+ return { ok: false, reason: messages().c4.kindNotDrawn(copied[0]?.kind ?? "", kinds) };
206
+ }
207
+ // The centre of what was copied, notes included, so that the whole moves as one.
208
+ const located = [...drawn, ...notes].filter((e) => e.at !== null);
209
+ const centre = located.length > 0
210
+ ? {
211
+ x: located.reduce((sum, e) => sum + e.at.x, 0) / located.length,
212
+ y: located.reduce((sum, e) => sum + e.at.y, 0) / located.length,
213
+ }
214
+ : null;
215
+ const taken = new Set(model.entitiesByPath.keys());
216
+ const operations = [];
217
+ const ids = [];
218
+ // The path each copied entity got, by its clipboard id: what a copied note is attached to.
219
+ const pasted = new Map();
220
+ drawn.forEach((entity, index) => {
221
+ const parent = entityParent(diagram, entity.kind);
222
+ let id = entity.id;
223
+ for (let n = 2; taken.has(parent ? `${parent}.${id}` : id); n++)
224
+ id = `${entity.id}_${n}`;
225
+ const path = parent ? `${parent}.${id}` : id;
226
+ taken.add(path);
227
+ ids.push(path);
228
+ pasted.set(entity.id, path);
229
+ operations.push({
230
+ kind: "createEntity",
231
+ model: model.id,
232
+ entityKind: entity.kind,
233
+ ...(parent !== null ? { parent } : {}),
234
+ id,
235
+ label: entity.label,
236
+ });
237
+ const properties = [
238
+ ["technology", entity.technology],
239
+ ["description", entity.description],
240
+ ["external", entity.external ? true : null],
241
+ ];
242
+ for (const [property, value] of properties) {
243
+ if (value === null)
244
+ continue;
245
+ operations.push({
246
+ kind: "setEntityProperty",
247
+ model: model.id,
248
+ entity: path,
249
+ property,
250
+ value,
251
+ });
252
+ }
253
+ operations.push({ kind: "includeEntity", diagram: diagram.id, entity: path });
254
+ if (!placed)
255
+ return;
256
+ // Without a position of its own, a copy goes beside the last one.
257
+ const from = entity.at ?? { x: (centre?.x ?? 0) + 40 * index, y: centre?.y ?? 0 };
258
+ const to = "shift" in where
259
+ ? { x: from.x + where.shift.x, y: from.y + where.shift.y }
260
+ : {
261
+ x: where.at.x + from.x - (centre?.x ?? from.x),
262
+ y: where.at.y + from.y - (centre?.y ?? from.y),
263
+ };
264
+ operations.push({
265
+ kind: "setPosition",
266
+ diagram: diagram.id,
267
+ element: path,
268
+ x: Math.round(to.x),
269
+ y: Math.round(to.y),
270
+ });
271
+ });
272
+ // The notes, after the entities they may be attached to: a note keeps `on` when its entity was
273
+ // copied with it (to the copy) or the view draws it, and loses it otherwise.
274
+ const used = new Set(diagram.elementsById.keys());
275
+ notes.forEach((note, index) => {
276
+ let id = note.id;
277
+ for (let n = 2; used.has(id); n++)
278
+ id = `${note.id}_${n}`;
279
+ used.add(id);
280
+ ids.push(id);
281
+ const target = note.on !== null
282
+ ? pasted.get(note.on)
283
+ : note.path !== null && diagram.elementsById.get(note.path)?.entity
284
+ ? note.path
285
+ : undefined;
286
+ const from = note.at ?? {
287
+ x: (centre?.x ?? 0) + 40 * (drawn.length + index),
288
+ y: centre?.y ?? 0,
289
+ };
290
+ const to = "shift" in where
291
+ ? { x: from.x + where.shift.x, y: from.y + where.shift.y }
292
+ : {
293
+ x: where.at.x + from.x - (centre?.x ?? from.x),
294
+ y: where.at.y + from.y - (centre?.y ?? from.y),
295
+ };
296
+ operations.push({
297
+ kind: "createElement",
298
+ diagram: diagram.id,
299
+ elementKind: "note",
300
+ id,
301
+ label: note.label,
302
+ ...(target !== undefined ? { attachedTo: target } : {}),
303
+ ...(placed
304
+ ? {
305
+ at: { x: Math.round(to.x), y: Math.round(to.y) },
306
+ ...(note.size ? { size: note.size } : {}),
307
+ }
308
+ : {}),
309
+ });
310
+ });
311
+ return { ok: true, operations, ids };
312
+ }
14
313
  /** Whether the view's model is in the same document, so that its fields can be written. */
15
314
  export function modelIsLocal(diagram) {
16
315
  return diagram.c4?.resolved?.file === null;
@@ -27,7 +326,7 @@ export function c4ElementFields(diagram, element) {
27
326
  const model = diagram.c4?.resolved?.definition;
28
327
  const entity = model?.entitiesByPath.get(element.id);
29
328
  const local = diagram.c4?.labels.find((l) => l.target === element.id);
30
- const readonly = !modelIsLocal(diagram);
329
+ const elsewhere = !modelIsLocal(diagram);
31
330
  const words = messages();
32
331
  const fields = [
33
332
  { name: "id", label: words.c4.fields.entity, type: "text", value: element.id, readonly: true },
@@ -53,7 +352,6 @@ export function c4ElementFields(diagram, element) {
53
352
  label,
54
353
  type,
55
354
  value,
56
- ...(readonly ? { readonly: true, placeholder: words.c4.readOnly } : {}),
57
355
  });
58
356
  fields.push(entityField("label", words.c4.fields.modelLabel, entity.label), entityField("description", words.fields.description, entity.description, "multiline"), entityField("technology", words.c4.fields.technology, entity.technology), entityField("url", words.fields.url, entity.url));
59
357
  if (entity.kind === "person" || entity.kind === "system") {
@@ -63,27 +361,39 @@ export function c4ElementFields(diagram, element) {
63
361
  type: "enum",
64
362
  value: entity.external ? "yes" : "no",
65
363
  options: ["no", "yes"],
66
- ...(readonly ? { readonly: true } : {}),
67
364
  });
68
365
  }
366
+ if (elsewhere)
367
+ fields.push(modelFileField(diagram));
69
368
  return fields;
70
369
  }
370
+ /** Where the model's fields are written when the model is in another file of the project. */
371
+ function modelFileField(diagram) {
372
+ return {
373
+ name: "modelFile",
374
+ label: messages().c4.fields.modelFile,
375
+ type: "text",
376
+ value: diagram.c4?.resolved?.file ?? null,
377
+ readonly: true,
378
+ };
379
+ }
71
380
  /** Fields of a relation of a C4 view: the local label, the model relation and its sources. */
72
381
  export function c4RelationFields(diagram, relation) {
73
382
  const model = diagram.c4?.resolved?.definition;
74
383
  const local = diagram.c4?.labels.find((l) => l.target === relation.key);
75
384
  const combined = diagram.c4?.combined.includes(relation.key) ?? false;
76
385
  const source = combined ? undefined : model?.relationsByKey.get(relation.key);
77
- const readonly = !modelIsLocal(diagram);
386
+ const elsewhere = !modelIsLocal(diagram);
78
387
  const words = messages();
79
388
  const fields = [
389
+ // A model relation is named, or renamed, from here; a combination keeps the id it was written with.
80
390
  {
81
391
  name: "id",
82
392
  label: words.fields.id,
83
- type: "text",
393
+ type: source ? "id" : "text",
84
394
  value: relation.id,
85
395
  placeholder: relation.key,
86
- readonly: true,
396
+ ...(source ? {} : { readonly: true }),
87
397
  },
88
398
  {
89
399
  name: "label",
@@ -106,9 +416,10 @@ export function c4RelationFields(diagram, relation) {
106
416
  label,
107
417
  type: "text",
108
418
  value,
109
- ...(readonly ? { readonly: true, placeholder: words.c4.readOnly } : {}),
110
419
  });
111
420
  fields.push(field("label", words.c4.fields.modelLabel, source.label), field("technology", words.c4.fields.technology, source.technology), field("description", words.fields.description, source.description));
421
+ if (elsewhere)
422
+ fields.push(modelFileField(diagram));
112
423
  }
113
424
  return fields;
114
425
  }
@@ -144,6 +455,10 @@ export function c4FieldOperations(diagram, id, field, value) {
144
455
  if (!c4 || !model)
145
456
  return undefined;
146
457
  const text = value === null ? null : String(value);
458
+ // A note of a view is its own declaration: its fields are written as any element's.
459
+ const note = diagram.elementsById.get(id);
460
+ if (note?.kind === "note" && note.entity === null)
461
+ return undefined;
147
462
  if (field === "label") {
148
463
  const relation = diagram.relationsByKey.get(id);
149
464
  if (relation && c4.combined.includes(id)) {
@@ -154,14 +469,48 @@ export function c4FieldOperations(diagram, id, field, value) {
154
469
  ],
155
470
  };
156
471
  }
472
+ if (relation) {
473
+ // A local label names the relation; an anonymous model relation is named first.
474
+ if (!nameable(diagram, relation))
475
+ return { ok: false, reason: messages().session.fixFirst };
476
+ if (relation.id === null && !text)
477
+ return { ok: true, operations: [] };
478
+ const { id: named, operations } = namedRelation(diagram, relation);
479
+ return {
480
+ ok: true,
481
+ operations: [
482
+ ...operations,
483
+ { kind: "setLocalLabel", diagram: diagram.id, target: named, label: text || null },
484
+ ],
485
+ };
486
+ }
157
487
  return {
158
488
  ok: true,
159
489
  operations: [{ kind: "setLocalLabel", diagram: diagram.id, target: id, label: text || null }],
160
490
  };
161
491
  }
492
+ if (field === "id") {
493
+ // The id of a model relation: written into the model, where it names or renames it.
494
+ const relation = diagram.relationsByKey.get(id);
495
+ const source = relation && !c4.combined.includes(id) ? model.relationsByKey.get(id) : undefined;
496
+ if (!source)
497
+ return undefined;
498
+ if (!text?.trim())
499
+ return { ok: true, operations: [] };
500
+ return {
501
+ ok: true,
502
+ operations: [
503
+ {
504
+ kind: "setModelRelationProperty",
505
+ model: model.id,
506
+ relation: source.key,
507
+ property: "id",
508
+ value: text.trim(),
509
+ },
510
+ ],
511
+ };
512
+ }
162
513
  if (field.startsWith("entity.") || field.startsWith("relation.")) {
163
- if (!modelIsLocal(diagram))
164
- return { ok: false, reason: messages().c4.readOnly };
165
514
  const [scope, property] = field.split(".");
166
515
  if (scope === "entity") {
167
516
  return {
package/dist/c4.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"c4.js","sourceRoot":"","sources":["../src/c4.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c4.js","sourceRoot":"","sources":["../src/c4.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export * from "./routes.js";
6
6
  export * from "./keyboard.js";
7
7
  export * from "./protocol.js";
8
8
  export * from "./palette.js";
9
+ export * from "./pens.js";
9
10
  export * from "./turning.js";
10
11
  export { CORNERED_SHAPES, SHAPE_SIZES, onOutline, pointInShape, turnPoint, turnedOutline, shapeMagnets, shapeOutline, type ShapeMagnet, type ShapeOptions, type ShapeOutline, type ShapeSize, } from "@meltemi/diagrams-layout/shapes";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/canvas/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,GACf,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/canvas/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,GACf,MAAM,iCAAiC,CAAC"}
@@ -7,6 +7,7 @@ export * from "./routes.js";
7
7
  export * from "./keyboard.js";
8
8
  export * from "./protocol.js";
9
9
  export * from "./palette.js";
10
+ export * from "./pens.js";
10
11
  export * from "./turning.js";
11
12
  // The outlines of the shapes, from the layout's pure geometry module (no engine, no model at run
12
13
  // time), so the canvas draws what the layout draws: pictures, ghosts, hit tests and magnets.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/canvas/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,iGAAiG;AACjG,6FAA6F;AAC7F,OAAO,EACL,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,GAKb,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/canvas/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,iGAAiG;AACjG,6FAA6F;AAC7F,OAAO,EACL,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,GAKb,MAAM,iCAAiC,CAAC"}
@@ -1,9 +1,30 @@
1
1
  /** Commands of the canvas that keys, menus and toolbar buttons trigger. */
2
2
  export type CanvasCommand = "selectAll" | "clearSelection" | "selectNext" | "selectPrevious" | "selectLeft" | "selectRight" | "selectUp" | "selectDown"
3
3
  /** The shape painted below the selected one under the same point (Alt+click, the menu). */
4
- | "selectBelow" | "nudgeLeft" | "nudgeRight" | "nudgeUp" | "nudgeDown" | "nudgeLeftGrid" | "nudgeRightGrid" | "nudgeUpGrid" | "nudgeDownGrid" | "narrowerGrid" | "widerGrid" | "shorterGrid" | "tallerGrid" | "editLabel" | "renameId" | "delete" | "copy" | "cut" | "paste" | "duplicate" | "group" | "ungroup" | "alignLeft" | "alignRight" | "alignTop" | "alignBottom" | "distributeHorizontal" | "distributeVertical" | "connect" | "relationTool" | "createNode" | "createDecision" | "createData" | "createNote" | "createTag" | "createGroup" | "createBox" | "createText" | "createIcon" | "createImage"
4
+ | "selectBelow" | "nudgeLeft" | "nudgeRight" | "nudgeUp" | "nudgeDown" | "nudgeLeftGrid" | "nudgeRightGrid" | "nudgeUpGrid" | "nudgeDownGrid" | "narrowerGrid" | "widerGrid" | "shorterGrid" | "tallerGrid" | "editLabel" | "renameId"
5
+ /** The text size of the selection, one common size up or down (decision 0067). */
6
+ | "growText" | "shrinkText" | "delete" | "copy" | "cut" | "paste" | "duplicate" | "group" | "ungroup" | "alignLeft" | "alignRight" | "alignTop" | "alignBottom" | "distributeHorizontal" | "distributeVertical" | "connect" | "relationTool" | "createNode" | "createDecision" | "createData" | "createNote" | "createTag" | "createGroup" | "createBox" | "createText" | "createIcon" | "createImage"
7
+ /** Free diagrams: a sticky near the centre, with its editor open. */
8
+ | "createSticky"
9
+ /** Free diagrams: the pen, which stays armed after each stroke. */
10
+ | "penTool"
11
+ /** Free diagrams: the pen with the highlighter's colour, width and opacity. */
12
+ | "highlighterTool"
13
+ /** Free diagrams: the eraser, which deletes the pens it crosses. */
14
+ | "eraserTool"
15
+ /**
16
+ * Free diagrams: after the selected child of a list, what the list's **+** adds at its end (a
17
+ * sticky in a column, a column in a row).
18
+ */
19
+ | "addToList"
20
+ /** Free diagrams: the selected child of a list before its neighbour in the list's order. */
21
+ | "moveInListBefore"
22
+ /** Free diagrams: the selected child of a list after its neighbour in the list's order. */
23
+ | "moveInListAfter"
5
24
  /** The grid of the twenty-four shapes of the box (free) or node (flow) button. */
6
- | "openShapes" | "bringToFront" | "sendToBack" | "bringForward" | "sendBackward" | "convertToFree" | "createParticipant" | "createActor" | "createSequenceNote" | "createFragment" | "createDivider" | "createDelay" | "moveEventUp" | "moveEventDown" | "toggleActivation" | "addEntity" | "zoomIn" | "zoomOut" | "zoomReset" | "zoomFit" | "zoomSelection" | "toggleLayers" | "toggleLibraries" | "contextMenu";
25
+ | "openShapes" | "bringToFront" | "sendToBack" | "bringForward" | "sendBackward" | "convertToFree" | "createParticipant" | "createActor" | "createSequenceNote" | "createFragment" | "createDivider" | "createDelay" | "moveEventUp" | "moveEventDown" | "toggleActivation" | "nestInCall" | "unnestCall" | "addReturn" | "addEntity" | "zoomIn" | "zoomOut" | "zoomReset" | "zoomFit" | "zoomSelection" | "toggleLayers" | "toggleLibraries"
26
+ /** The Pointer tool: a trail that points at the diagram and edits nothing. */
27
+ | "togglePointer" | "contextMenu";
7
28
  export interface KeyBinding {
8
29
  /** `KeyboardEvent.key` (case-insensitive) or `KeyboardEvent.code`. */
9
30
  readonly key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/canvas/keyboard.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,YAAY;AACd,2FAA2F;GACzF,aAAa,GACb,WAAW,GACX,YAAY,GACZ,SAAS,GACT,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,cAAc,GACd,WAAW,GACX,aAAa,GACb,YAAY,GACZ,WAAW,GACX,UAAU,GACV,QAAQ,GACR,MAAM,GACN,KAAK,GACL,OAAO,GACP,WAAW,GACX,OAAO,GACP,SAAS,GACT,WAAW,GACX,YAAY,GACZ,UAAU,GACV,aAAa,GACb,sBAAsB,GACtB,oBAAoB,GACpB,SAAS,GACT,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,aAAa,GACb,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,aAAa;AACf,kFAAkF;GAChF,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,cAAc,GACd,cAAc,GACd,eAAe,GACf,mBAAmB,GACnB,aAAa,GACb,oBAAoB,GACpB,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,aAAa,GACb,eAAe,GACf,kBAAkB,GAClB,WAAW,GACX,QAAQ,GACR,SAAS,GACT,WAAW,GACX,SAAS,GACT,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,aAAa,CAAC;AAElB,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CACxD;AAmBD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAoE7C,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,YAAY,EACnB,GAAG,UAAQ,EACX,OAAO,GAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAa,GACpD,aAAa,GAAG,SAAS,CAiB3B"}
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/canvas/keyboard.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,YAAY;AACd,2FAA2F;GACzF,aAAa,GACb,WAAW,GACX,YAAY,GACZ,SAAS,GACT,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,cAAc,GACd,WAAW,GACX,aAAa,GACb,YAAY,GACZ,WAAW,GACX,UAAU;AACZ,kFAAkF;GAChF,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,KAAK,GACL,OAAO,GACP,WAAW,GACX,OAAO,GACP,SAAS,GACT,WAAW,GACX,YAAY,GACZ,UAAU,GACV,aAAa,GACb,sBAAsB,GACtB,oBAAoB,GACpB,SAAS,GACT,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,aAAa,GACb,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,aAAa;AACf,qEAAqE;GACnE,cAAc;AAChB,mEAAmE;GACjE,SAAS;AACX,+EAA+E;GAC7E,iBAAiB;AACnB,oEAAoE;GAClE,YAAY;AACd;;;GAGG;GACD,WAAW;AACb,4FAA4F;GAC1F,kBAAkB;AACpB,2FAA2F;GACzF,iBAAiB;AACnB,kFAAkF;GAChF,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,cAAc,GACd,cAAc,GACd,eAAe,GACf,mBAAmB,GACnB,aAAa,GACb,oBAAoB,GACpB,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,aAAa,GACb,eAAe,GACf,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,WAAW,GACX,QAAQ,GACR,SAAS,GACT,WAAW,GACX,SAAS,GACT,eAAe,GACf,cAAc,GACd,iBAAiB;AACnB,8EAA8E;GAC5E,eAAe,GACf,aAAa,CAAC;AAElB,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CACxD;AAmBD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EA2F7C,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,YAAY,EACnB,GAAG,UAAQ,EACX,OAAO,GAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAa,GACpD,aAAa,GAAG,SAAS,CAiB3B"}
@@ -34,6 +34,9 @@ export const KEY_BINDINGS = [
34
34
  bind({ key: "Enter", command: "editLabel" }),
35
35
  bind({ key: "F2", command: "editLabel" }),
36
36
  bind({ key: "F2", shift: true, command: "renameId" }),
37
+ // The keys slide tools give the text size; by the key's place, whatever Shift types there.
38
+ bind({ key: "Period", primary: true, shift: true, command: "growText" }),
39
+ bind({ key: "Comma", primary: true, shift: true, command: "shrinkText" }),
37
40
  bind({ key: "Delete", command: "delete" }),
38
41
  bind({ key: "Backspace", command: "delete" }),
39
42
  bind({ key: "c", primary: true, command: "copy" }),
@@ -58,13 +61,27 @@ export const KEY_BINDINGS = [
58
61
  bind({ key: "d", command: "createDecision", profile: "flow" }),
59
62
  bind({ key: "s", command: "createData", profile: "flow" }),
60
63
  bind({ key: "o", command: "createNote", profile: "flow" }),
64
+ bind({ key: "o", command: "createNote", profile: "free" }),
65
+ bind({ key: "o", command: "createNote", profile: "c4" }),
61
66
  bind({ key: "t", command: "createTag", profile: "flow" }),
67
+ // On a sequence diagram T tags the selected message or participant (`addTag`).
68
+ bind({ key: "t", command: "createTag", profile: "sequence" }),
62
69
  // The icon picker, on flow and free diagrams: I again closes it.
63
70
  bind({ key: "i", command: "createIcon", profile: "flow" }),
64
71
  bind({ key: "b", command: "createBox", profile: "free" }),
65
72
  bind({ key: "t", command: "createText", profile: "free" }),
66
73
  bind({ key: "i", command: "createIcon", profile: "free" }),
67
74
  bind({ key: "m", command: "createImage", profile: "free" }),
75
+ // The whiteboard: S, P, H and E are the words' initials, free on the free profile (S and P
76
+ // belong to the data store in flow and to participants in sequence diagrams).
77
+ bind({ key: "s", command: "createSticky", profile: "free" }),
78
+ bind({ key: "p", command: "penTool", profile: "free" }),
79
+ bind({ key: "h", command: "highlighterTool", profile: "free" }),
80
+ bind({ key: "e", command: "eraserTool", profile: "free" }),
81
+ bind({ key: "Enter", primary: true, command: "addToList", profile: "free" }),
82
+ // Up and Down in a row as in a column: Alt+Left and Alt+Right belong to the workbench.
83
+ bind({ key: "ArrowUp", alt: true, command: "moveInListBefore", profile: "free" }),
84
+ bind({ key: "ArrowDown", alt: true, command: "moveInListAfter", profile: "free" }),
68
85
  // F, not S, opens the shapes: S is the data store in flow; sequence diagrams keep F for fragments.
69
86
  bind({ key: "f", command: "openShapes", profile: "flow" }),
70
87
  bind({ key: "f", command: "openShapes", profile: "free" }),
@@ -75,10 +92,16 @@ export const KEY_BINDINGS = [
75
92
  bind({ key: "ArrowUp", alt: true, command: "moveEventUp", profile: "sequence" }),
76
93
  bind({ key: "ArrowDown", alt: true, command: "moveEventDown", profile: "sequence" }),
77
94
  bind({ key: "a", alt: true, command: "toggleActivation", profile: "sequence" }),
95
+ // N for nest: N alone creates a node on flow and does nothing on sequence.
96
+ bind({ key: "n", alt: true, command: "nestInCall", profile: "sequence" }),
97
+ bind({ key: "n", alt: true, shift: true, command: "unnestCall", profile: "sequence" }),
98
+ bind({ key: "r", alt: true, command: "addReturn", profile: "sequence" }),
78
99
  bind({ key: "a", command: "addEntity", profile: "c4" }),
79
100
  bind({ key: "g", command: "createGroup" }),
80
101
  bind({ key: "l", command: "toggleLayers" }),
81
102
  bind({ key: "u", command: "toggleLibraries" }),
103
+ // Points at the diagram: on every profile, and on a read-only canvas too.
104
+ bind({ key: "k", command: "togglePointer" }),
82
105
  bind({ key: "+", command: "zoomIn" }),
83
106
  bind({ key: "=", command: "zoomIn" }),
84
107
  bind({ key: "-", command: "zoomOut" }),