@zukhruf/diagram 0.3.30 → 0.3.31

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 (92) hide show
  1. package/dist/lib/layouts/graph/areas.d.ts +27 -0
  2. package/dist/lib/layouts/graph/areas.d.ts.map +1 -0
  3. package/dist/lib/layouts/graph/areas.js +187 -0
  4. package/dist/lib/layouts/graph/areas.js.map +1 -0
  5. package/dist/lib/layouts/graph/graph-layout-result.d.ts +95 -0
  6. package/dist/lib/layouts/graph/graph-layout-result.d.ts.map +1 -0
  7. package/dist/lib/layouts/graph/graph-layout-result.js +2 -0
  8. package/dist/lib/layouts/graph/graph-layout-result.js.map +1 -0
  9. package/dist/lib/layouts/graph/graph-layout.d.ts +2 -1
  10. package/dist/lib/layouts/graph/graph-layout.d.ts.map +1 -1
  11. package/dist/lib/layouts/graph/graph-layout.js +5 -3
  12. package/dist/lib/layouts/graph/graph-layout.js.map +1 -1
  13. package/dist/lib/layouts/graph/gutters.d.ts +26 -0
  14. package/dist/lib/layouts/graph/gutters.d.ts.map +1 -0
  15. package/dist/lib/layouts/graph/gutters.js +123 -0
  16. package/dist/lib/layouts/graph/gutters.js.map +1 -0
  17. package/dist/lib/layouts/graph/layout.d.ts +10 -0
  18. package/dist/lib/layouts/graph/layout.d.ts.map +1 -0
  19. package/dist/lib/layouts/graph/layout.js +165 -0
  20. package/dist/lib/layouts/graph/layout.js.map +1 -0
  21. package/dist/lib/layouts/graph/legacy-graph-layout.d.ts +6 -0
  22. package/dist/lib/layouts/graph/legacy-graph-layout.d.ts.map +1 -0
  23. package/dist/lib/layouts/graph/legacy-graph-layout.js +542 -0
  24. package/dist/lib/layouts/graph/legacy-graph-layout.js.map +1 -0
  25. package/dist/lib/layouts/graph/measure.d.ts +44 -0
  26. package/dist/lib/layouts/graph/measure.d.ts.map +1 -0
  27. package/dist/lib/layouts/graph/measure.js +372 -0
  28. package/dist/lib/layouts/graph/measure.js.map +1 -0
  29. package/dist/lib/layouts/graph/node-content.d.ts +16 -0
  30. package/dist/lib/layouts/graph/node-content.d.ts.map +1 -0
  31. package/dist/lib/layouts/graph/node-content.js +323 -0
  32. package/dist/lib/layouts/graph/node-content.js.map +1 -0
  33. package/dist/lib/layouts/graph/text-block.d.ts +19 -0
  34. package/dist/lib/layouts/graph/text-block.d.ts.map +1 -0
  35. package/dist/lib/layouts/graph/text-block.js +86 -0
  36. package/dist/lib/layouts/graph/text-block.js.map +1 -0
  37. package/dist/lib/layouts/graph/tokens.d.ts +58 -0
  38. package/dist/lib/layouts/graph/tokens.d.ts.map +1 -0
  39. package/dist/lib/layouts/graph/tokens.js +108 -0
  40. package/dist/lib/layouts/graph/tokens.js.map +1 -0
  41. package/dist/lib/layouts/graph/tracks.d.ts +20 -0
  42. package/dist/lib/layouts/graph/tracks.d.ts.map +1 -0
  43. package/dist/lib/layouts/graph/tracks.js +47 -0
  44. package/dist/lib/layouts/graph/tracks.js.map +1 -0
  45. package/dist/lib/layouts/text/font-metrics.generated.d.ts +18 -0
  46. package/dist/lib/layouts/text/font-metrics.generated.d.ts.map +1 -0
  47. package/dist/lib/layouts/text/font-metrics.generated.js +1043 -0
  48. package/dist/lib/layouts/text/font-metrics.generated.js.map +1 -0
  49. package/dist/lib/layouts/text/font.d.ts +14 -0
  50. package/dist/lib/layouts/text/font.d.ts.map +1 -0
  51. package/dist/lib/layouts/text/font.js +11 -0
  52. package/dist/lib/layouts/text/font.js.map +1 -0
  53. package/dist/lib/layouts/text/measure-text.d.ts +13 -0
  54. package/dist/lib/layouts/text/measure-text.d.ts.map +1 -0
  55. package/dist/lib/layouts/text/measure-text.js +67 -0
  56. package/dist/lib/layouts/text/measure-text.js.map +1 -0
  57. package/dist/lib/model/diagram-ir.d.ts +14 -1
  58. package/dist/lib/model/diagram-ir.d.ts.map +1 -1
  59. package/dist/lib/model/diagram-ir.js.map +1 -1
  60. package/dist/lib/renderers/canvas/graph-canvas.d.ts.map +1 -1
  61. package/dist/lib/renderers/canvas/graph-canvas.js +148 -138
  62. package/dist/lib/renderers/canvas/graph-canvas.js.map +1 -1
  63. package/dist/lib/renderers/html/graph-html.d.ts.map +1 -1
  64. package/dist/lib/renderers/html/graph-html.js +462 -511
  65. package/dist/lib/renderers/html/graph-html.js.map +1 -1
  66. package/dist/lib/renderers/shared/graph-parts.d.ts +15 -13
  67. package/dist/lib/renderers/shared/graph-parts.d.ts.map +1 -1
  68. package/dist/lib/renderers/shared/graph-parts.js +649 -644
  69. package/dist/lib/renderers/shared/graph-parts.js.map +1 -1
  70. package/dist/lib/renderers/shared/node-parts.d.ts +20 -19
  71. package/dist/lib/renderers/shared/node-parts.d.ts.map +1 -1
  72. package/dist/lib/renderers/shared/node-parts.js +678 -811
  73. package/dist/lib/renderers/shared/node-parts.js.map +1 -1
  74. package/dist/lib/renderers/shared/run-spans.d.ts +8 -0
  75. package/dist/lib/renderers/shared/run-spans.d.ts.map +1 -0
  76. package/dist/lib/renderers/shared/run-spans.js +18 -0
  77. package/dist/lib/renderers/shared/run-spans.js.map +1 -0
  78. package/dist/lib/renderers/shared/text-runs.d.ts +21 -0
  79. package/dist/lib/renderers/shared/text-runs.d.ts.map +1 -0
  80. package/dist/lib/renderers/shared/text-runs.js +44 -0
  81. package/dist/lib/renderers/shared/text-runs.js.map +1 -0
  82. package/dist/lib/renderers/svg/graph-svg.d.ts.map +1 -1
  83. package/dist/lib/renderers/svg/graph-svg.js +304 -465
  84. package/dist/lib/renderers/svg/graph-svg.js.map +1 -1
  85. package/dist/lib/renderers/svg/timeline-svg.d.ts.map +1 -1
  86. package/dist/lib/renderers/svg/timeline-svg.js +10 -5
  87. package/dist/lib/renderers/svg/timeline-svg.js.map +1 -1
  88. package/dist/lib/renderers/webgpu/graph-flow-effects.d.ts +2 -2
  89. package/dist/lib/renderers/webgpu/graph-flow-effects.d.ts.map +1 -1
  90. package/dist/lib/renderers/webgpu/graph-flow-effects.js.map +1 -1
  91. package/package.json +3 -1
  92. package/styles.css +8 -0
@@ -0,0 +1,27 @@
1
+ import type { DiagramGraphIR, DiagramGroup } from '../../model/diagram-ir.ts';
2
+ /** A rectangle of grid cells: rows `[row, row + rowSpan)` and columns `[col, col + colSpan)`. */
3
+ export type CellArea = {
4
+ row: number;
5
+ col: number;
6
+ rowSpan: number;
7
+ colSpan: number;
8
+ };
9
+ export type GroupArea = {
10
+ group: DiagramGroup;
11
+ /** The nesting level; a top-level group is depth 0. */
12
+ depth: number;
13
+ area: CellArea;
14
+ };
15
+ export type GridAreas = {
16
+ rows: number;
17
+ cols: number;
18
+ nodes: Map<string, CellArea>;
19
+ /** Parents before their children. */
20
+ groups: GroupArea[];
21
+ };
22
+ /**
23
+ * Gives every node and group its cell area and rejects a grid that cannot be
24
+ * drawn without overlap. Each error names the elements and the cells.
25
+ */
26
+ export declare function gridAreas(ir: DiagramGraphIR): GridAreas;
27
+ //# sourceMappingURL=areas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"areas.d.ts","sourceRoot":"","sources":["../../../../src/lib/layouts/graph/areas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EAEb,MAAM,2BAA2B,CAAC;AAEnC,iGAAiG;AACjG,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7B,qCAAqC;IACrC,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,CA8DvD"}
@@ -0,0 +1,187 @@
1
+ /** A rectangle of grid cells: rows `[row, row + rowSpan)` and columns `[col, col + colSpan)`. */
2
+
3
+ /**
4
+ * Gives every node and group its cell area and rejects a grid that cannot be
5
+ * drawn without overlap. Each error names the elements and the cells.
6
+ */
7
+ export function gridAreas(ir) {
8
+ const nodes = new Map(ir.nodes.map(node => [node.id, checkedArea(`node "${node.id}"`, node)]));
9
+ rejectSharedCells(ir.nodes, nodes);
10
+ const groupsById = new Map(ir.groups.map(group => [group.id, group]));
11
+ for (const node of ir.nodes) {
12
+ if (node.group !== undefined && !groupsById.has(node.group)) {
13
+ throw new Error(`Diagram node "${node.id}" names group "${node.group}", which does not exist.`);
14
+ }
15
+ }
16
+ const depth = group => {
17
+ const parent = group.parent && groupsById.get(group.parent);
18
+ return parent ? depth(parent) + 1 : 0;
19
+ };
20
+ const areas = new Map();
21
+ const areaOf = group => {
22
+ const known = areas.get(group.id);
23
+ if (known) return known;
24
+ const members = [...ir.nodes.filter(node => node.group === group.id).map(node => ({
25
+ what: `node "${node.id}"`,
26
+ area: nodes.get(node.id)
27
+ })), ...ir.groups.filter(child => child.parent === group.id).map(child => ({
28
+ what: `group "${child.id}"`,
29
+ area: areaOf(child)
30
+ }))];
31
+ const area = explicitArea(group) ?? boundingArea(group, members);
32
+ for (const member of members) {
33
+ if (!covers(area, member.area)) {
34
+ throw new Error(`Diagram group "${group.id}" area ${formatArea(area)} misses its member ${member.what} at ${formatArea(member.area)}.`);
35
+ }
36
+ }
37
+ areas.set(group.id, area);
38
+ return area;
39
+ };
40
+ const groups = ir.groups.map(group => ({
41
+ group,
42
+ depth: depth(group),
43
+ area: areaOf(group)
44
+ })).sort((a, b) => a.depth - b.depth);
45
+ rejectSiblingOverlap(groups);
46
+ rejectStrangers(ir.nodes, nodes, groups, groupsById);
47
+ rejectSingleCellDividers(groups);
48
+ const all = [...nodes.values(), ...groups.map(({
49
+ area
50
+ }) => area)];
51
+ return {
52
+ rows: Math.max(0, ...all.map(area => area.row + area.rowSpan)),
53
+ cols: Math.max(0, ...all.map(area => area.col + area.colSpan)),
54
+ nodes,
55
+ groups
56
+ };
57
+ }
58
+ function explicitArea(group) {
59
+ if (group.row === undefined && group.col === undefined) return undefined;
60
+ return checkedArea(`group "${group.id}"`, group);
61
+ }
62
+ function checkedArea(what, cell) {
63
+ for (const key of ['row', 'col']) {
64
+ const value = cell[key];
65
+ if (value === undefined || !Number.isInteger(value) || value < 0) {
66
+ throw new Error(`Diagram ${what} ${key} ${value} must be a non-negative integer.`);
67
+ }
68
+ }
69
+ for (const key of ['rowSpan', 'colSpan']) {
70
+ const value = cell[key] ?? 1;
71
+ if (!Number.isInteger(value) || value < 1) {
72
+ throw new Error(`Diagram ${what} ${key} ${value} must be an integer of at least 1.`);
73
+ }
74
+ }
75
+ return {
76
+ row: cell.row,
77
+ col: cell.col,
78
+ rowSpan: cell.rowSpan ?? 1,
79
+ colSpan: cell.colSpan ?? 1
80
+ };
81
+ }
82
+ function boundingArea(group, members) {
83
+ if (members.length === 0) {
84
+ throw new Error(`Diagram group "${group.id}" has no members and no area. Give it members or row, col, rowSpan and colSpan.`);
85
+ }
86
+ const areas = members.map(({
87
+ area
88
+ }) => area);
89
+ const row = Math.min(...areas.map(area => area.row));
90
+ const col = Math.min(...areas.map(area => area.col));
91
+ return {
92
+ row,
93
+ col,
94
+ rowSpan: Math.max(...areas.map(area => area.row + area.rowSpan)) - row,
95
+ colSpan: Math.max(...areas.map(area => area.col + area.colSpan)) - col
96
+ };
97
+ }
98
+ function rejectSharedCells(nodes, areas) {
99
+ const occupant = new Map();
100
+ for (const node of nodes) {
101
+ for (const {
102
+ row,
103
+ col
104
+ } of cellsOf(areas.get(node.id))) {
105
+ const key = `${row},${col}`;
106
+ const other = occupant.get(key);
107
+ if (other !== undefined) {
108
+ throw new Error(`Diagram nodes "${other}" and "${node.id}" both occupy cell (row ${row}, col ${col}).`);
109
+ }
110
+ occupant.set(key, node.id);
111
+ }
112
+ }
113
+ }
114
+ function rejectSiblingOverlap(groups) {
115
+ for (const [index, a] of groups.entries()) {
116
+ for (const b of groups.slice(index + 1)) {
117
+ if (a.group.parent !== b.group.parent) continue;
118
+ const cell = firstSharedCell(a.area, b.area);
119
+ if (cell) {
120
+ throw new Error(`Diagram groups "${a.group.id}" and "${b.group.id}" overlap at cell (row ${cell.row}, col ${cell.col}). Sibling groups need disjoint areas.`);
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ /** A node inside a group's area must belong to the group, or its border would cut through the node. */
127
+ function rejectStrangers(nodes, areas, groups, groupsById) {
128
+ const ancestors = node => {
129
+ const ids = new Set();
130
+ for (let id = node.group; id !== undefined && !ids.has(id); id = groupsById.get(id)?.parent) {
131
+ ids.add(id);
132
+ }
133
+ return ids;
134
+ };
135
+ for (const node of nodes) {
136
+ const memberOf = ancestors(node);
137
+ const area = areas.get(node.id);
138
+ for (const {
139
+ group,
140
+ area: groupArea
141
+ } of groups) {
142
+ if (memberOf.has(group.id) || !firstSharedCell(area, groupArea)) continue;
143
+ throw new Error(`Diagram node "${node.id}" lies inside the area of group "${group.id}" ${formatArea(groupArea)} but is not its member. Move it into the group or out of the area.`);
144
+ }
145
+ }
146
+ }
147
+ function rejectSingleCellDividers(groups) {
148
+ for (const {
149
+ group,
150
+ area
151
+ } of groups) {
152
+ if (group.dividers && area.rowSpan === 1 && area.colSpan === 1) {
153
+ throw new Error(`Diagram group "${group.id}" has dividers, but its area is the one cell (row ${area.row}, col ${area.col}). Dividers need two rows or two columns.`);
154
+ }
155
+ }
156
+ }
157
+ function covers(outer, inner) {
158
+ return inner.row >= outer.row && inner.col >= outer.col && inner.row + inner.rowSpan <= outer.row + outer.rowSpan && inner.col + inner.colSpan <= outer.col + outer.colSpan;
159
+ }
160
+ function firstSharedCell(a, b) {
161
+ const row = Math.max(a.row, b.row);
162
+ const col = Math.max(a.col, b.col);
163
+ const shared = row < Math.min(a.row + a.rowSpan, b.row + b.rowSpan) && col < Math.min(a.col + a.colSpan, b.col + b.colSpan);
164
+ return shared ? {
165
+ row,
166
+ col
167
+ } : undefined;
168
+ }
169
+ function* cellsOf(area) {
170
+ for (let row = area.row; row < area.row + area.rowSpan; row++) {
171
+ for (let col = area.col; col < area.col + area.colSpan; col++) {
172
+ yield {
173
+ row,
174
+ col
175
+ };
176
+ }
177
+ }
178
+ }
179
+
180
+ /** Inclusive ranges, as an author reads them: `(rows 2–6, cols 3–6)`. */
181
+ function formatArea(area) {
182
+ const range = (start, span) => span === 1 ? `${start}` : `${start}–${start + span - 1}`;
183
+ const rows = `${area.rowSpan === 1 ? 'row' : 'rows'} ${range(area.row, area.rowSpan)}`;
184
+ const cols = `${area.colSpan === 1 ? 'col' : 'cols'} ${range(area.col, area.colSpan)}`;
185
+ return `(${rows}, ${cols})`;
186
+ }
187
+ //# sourceMappingURL=areas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"areas.js","names":["gridAreas","ir","nodes","Map","map","node","id","checkedArea","rejectSharedCells","groupsById","groups","group","undefined","has","Error","depth","parent","get","areas","areaOf","known","members","filter","what","area","child","explicitArea","boundingArea","member","covers","formatArea","set","sort","a","b","rejectSiblingOverlap","rejectStrangers","rejectSingleCellDividers","all","values","rows","Math","max","row","rowSpan","cols","col","colSpan","cell","key","value","Number","isInteger","length","min","occupant","cellsOf","other","index","entries","slice","firstSharedCell","ancestors","ids","Set","add","memberOf","groupArea","dividers","outer","inner","shared","range","start","span"],"sources":["../../../../src/lib/layouts/graph/areas.ts"],"sourcesContent":["import type {\n DiagramGraphIR,\n DiagramGroup,\n DiagramNode,\n} from '../../model/diagram-ir.ts';\n\n/** A rectangle of grid cells: rows `[row, row + rowSpan)` and columns `[col, col + colSpan)`. */\nexport type CellArea = {\n row: number;\n col: number;\n rowSpan: number;\n colSpan: number;\n};\n\nexport type GroupArea = {\n group: DiagramGroup;\n /** The nesting level; a top-level group is depth 0. */\n depth: number;\n area: CellArea;\n};\n\nexport type GridAreas = {\n rows: number;\n cols: number;\n nodes: Map<string, CellArea>;\n /** Parents before their children. */\n groups: GroupArea[];\n};\n\n/**\n * Gives every node and group its cell area and rejects a grid that cannot be\n * drawn without overlap. Each error names the elements and the cells.\n */\nexport function gridAreas(ir: DiagramGraphIR): GridAreas {\n const nodes = new Map(\n ir.nodes.map(\n (node) => [node.id, checkedArea(`node \"${node.id}\"`, node)] as const,\n ),\n );\n rejectSharedCells(ir.nodes, nodes);\n\n const groupsById = new Map(ir.groups.map((group) => [group.id, group]));\n for (const node of ir.nodes) {\n if (node.group !== undefined && !groupsById.has(node.group)) {\n throw new Error(\n `Diagram node \"${node.id}\" names group \"${node.group}\", which does not exist.`,\n );\n }\n }\n const depth = (group: DiagramGroup): number => {\n const parent = group.parent && groupsById.get(group.parent);\n return parent ? depth(parent) + 1 : 0;\n };\n\n const areas = new Map<string, CellArea>();\n const areaOf = (group: DiagramGroup): CellArea => {\n const known = areas.get(group.id);\n if (known) return known;\n const members = [\n ...ir.nodes\n .filter((node) => node.group === group.id)\n .map((node) => ({\n what: `node \"${node.id}\"`,\n area: nodes.get(node.id)!,\n })),\n ...ir.groups\n .filter((child) => child.parent === group.id)\n .map((child) => ({ what: `group \"${child.id}\"`, area: areaOf(child) })),\n ];\n const area = explicitArea(group) ?? boundingArea(group, members);\n for (const member of members) {\n if (!covers(area, member.area)) {\n throw new Error(\n `Diagram group \"${group.id}\" area ${formatArea(area)} misses its member ${member.what} at ${formatArea(member.area)}.`,\n );\n }\n }\n areas.set(group.id, area);\n return area;\n };\n\n const groups = ir.groups\n .map((group) => ({ group, depth: depth(group), area: areaOf(group) }))\n .sort((a, b) => a.depth - b.depth);\n rejectSiblingOverlap(groups);\n rejectStrangers(ir.nodes, nodes, groups, groupsById);\n rejectSingleCellDividers(groups);\n\n const all = [...nodes.values(), ...groups.map(({ area }) => area)];\n return {\n rows: Math.max(0, ...all.map((area) => area.row + area.rowSpan)),\n cols: Math.max(0, ...all.map((area) => area.col + area.colSpan)),\n nodes,\n groups,\n };\n}\n\nfunction explicitArea(group: DiagramGroup): CellArea | undefined {\n if (group.row === undefined && group.col === undefined) return undefined;\n return checkedArea(`group \"${group.id}\"`, group);\n}\n\nfunction checkedArea(\n what: string,\n cell: {\n row?: number | undefined;\n col?: number | undefined;\n rowSpan?: number | undefined;\n colSpan?: number | undefined;\n },\n): CellArea {\n for (const key of ['row', 'col'] as const) {\n const value = cell[key];\n if (value === undefined || !Number.isInteger(value) || value < 0) {\n throw new Error(\n `Diagram ${what} ${key} ${value} must be a non-negative integer.`,\n );\n }\n }\n for (const key of ['rowSpan', 'colSpan'] as const) {\n const value = cell[key] ?? 1;\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(\n `Diagram ${what} ${key} ${value} must be an integer of at least 1.`,\n );\n }\n }\n return {\n row: cell.row!,\n col: cell.col!,\n rowSpan: cell.rowSpan ?? 1,\n colSpan: cell.colSpan ?? 1,\n };\n}\n\nfunction boundingArea(\n group: DiagramGroup,\n members: { area: CellArea }[],\n): CellArea {\n if (members.length === 0) {\n throw new Error(\n `Diagram group \"${group.id}\" has no members and no area. Give it members or row, col, rowSpan and colSpan.`,\n );\n }\n const areas = members.map(({ area }) => area);\n const row = Math.min(...areas.map((area) => area.row));\n const col = Math.min(...areas.map((area) => area.col));\n return {\n row,\n col,\n rowSpan: Math.max(...areas.map((area) => area.row + area.rowSpan)) - row,\n colSpan: Math.max(...areas.map((area) => area.col + area.colSpan)) - col,\n };\n}\n\nfunction rejectSharedCells(\n nodes: DiagramNode[],\n areas: Map<string, CellArea>,\n): void {\n const occupant = new Map<string, string>();\n for (const node of nodes) {\n for (const { row, col } of cellsOf(areas.get(node.id)!)) {\n const key = `${row},${col}`;\n const other = occupant.get(key);\n if (other !== undefined) {\n throw new Error(\n `Diagram nodes \"${other}\" and \"${node.id}\" both occupy cell (row ${row}, col ${col}).`,\n );\n }\n occupant.set(key, node.id);\n }\n }\n}\n\nfunction rejectSiblingOverlap(groups: GroupArea[]): void {\n for (const [index, a] of groups.entries()) {\n for (const b of groups.slice(index + 1)) {\n if (a.group.parent !== b.group.parent) continue;\n const cell = firstSharedCell(a.area, b.area);\n if (cell) {\n throw new Error(\n `Diagram groups \"${a.group.id}\" and \"${b.group.id}\" overlap at cell (row ${cell.row}, col ${cell.col}). Sibling groups need disjoint areas.`,\n );\n }\n }\n }\n}\n\n/** A node inside a group's area must belong to the group, or its border would cut through the node. */\nfunction rejectStrangers(\n nodes: DiagramNode[],\n areas: Map<string, CellArea>,\n groups: GroupArea[],\n groupsById: Map<string, DiagramGroup>,\n): void {\n const ancestors = (node: DiagramNode) => {\n const ids = new Set<string>();\n for (\n let id = node.group;\n id !== undefined && !ids.has(id);\n id = groupsById.get(id)?.parent\n ) {\n ids.add(id);\n }\n return ids;\n };\n for (const node of nodes) {\n const memberOf = ancestors(node);\n const area = areas.get(node.id)!;\n for (const { group, area: groupArea } of groups) {\n if (memberOf.has(group.id) || !firstSharedCell(area, groupArea)) continue;\n throw new Error(\n `Diagram node \"${node.id}\" lies inside the area of group \"${group.id}\" ${formatArea(groupArea)} but is not its member. Move it into the group or out of the area.`,\n );\n }\n }\n}\n\nfunction rejectSingleCellDividers(groups: GroupArea[]): void {\n for (const { group, area } of groups) {\n if (group.dividers && area.rowSpan === 1 && area.colSpan === 1) {\n throw new Error(\n `Diagram group \"${group.id}\" has dividers, but its area is the one cell (row ${area.row}, col ${area.col}). Dividers need two rows or two columns.`,\n );\n }\n }\n}\n\nfunction covers(outer: CellArea, inner: CellArea): boolean {\n return (\n inner.row >= outer.row &&\n inner.col >= outer.col &&\n inner.row + inner.rowSpan <= outer.row + outer.rowSpan &&\n inner.col + inner.colSpan <= outer.col + outer.colSpan\n );\n}\n\nfunction firstSharedCell(\n a: CellArea,\n b: CellArea,\n): { row: number; col: number } | undefined {\n const row = Math.max(a.row, b.row);\n const col = Math.max(a.col, b.col);\n const shared =\n row < Math.min(a.row + a.rowSpan, b.row + b.rowSpan) &&\n col < Math.min(a.col + a.colSpan, b.col + b.colSpan);\n return shared ? { row, col } : undefined;\n}\n\nfunction* cellsOf(area: CellArea) {\n for (let row = area.row; row < area.row + area.rowSpan; row++) {\n for (let col = area.col; col < area.col + area.colSpan; col++) {\n yield { row, col };\n }\n }\n}\n\n/** Inclusive ranges, as an author reads them: `(rows 2–6, cols 3–6)`. */\nfunction formatArea(area: CellArea): string {\n const range = (start: number, span: number) =>\n span === 1 ? `${start}` : `${start}–${start + span - 1}`;\n const rows = `${area.rowSpan === 1 ? 'row' : 'rows'} ${range(area.row, area.rowSpan)}`;\n const cols = `${area.colSpan === 1 ? 'col' : 'cols'} ${range(area.col, area.colSpan)}`;\n return `(${rows}, ${cols})`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,95 @@
1
+ import type { Box, DiagramEdge, DiagramGroup, DiagramNode, DiagramSide, DiagramTextColor, Point } from '../../model/diagram-ir.ts';
2
+ import type { Font } from '../text/font.ts';
3
+ export type TextAnchor = 'start' | 'middle' | 'end';
4
+ export type TextRun = {
5
+ text: string;
6
+ x: number;
7
+ /** The baseline. */
8
+ y: number;
9
+ anchor: TextAnchor;
10
+ font: Font;
11
+ color?: DiagramTextColor;
12
+ /** The ink box the engine measured. */
13
+ bounds: Box;
14
+ };
15
+ export type PortLayout = {
16
+ id: string;
17
+ side: DiagramSide;
18
+ point: Point;
19
+ label?: TextRun;
20
+ };
21
+ export type NodeLayout = {
22
+ node: DiagramNode;
23
+ /** The frame. */
24
+ box: Box;
25
+ /** The frame, the stacked back frames and the caption together. */
26
+ visual: Box;
27
+ /** The stacked back frames. */
28
+ frames: Box[];
29
+ radius: number;
30
+ icon?: {
31
+ x: number;
32
+ y: number;
33
+ size: number;
34
+ };
35
+ text: TextRun[];
36
+ bullets: Point[];
37
+ caption?: {
38
+ box: Box;
39
+ framed: boolean;
40
+ text: TextRun[];
41
+ };
42
+ ports: PortLayout[];
43
+ appliance?: {
44
+ body: Point[];
45
+ /** The line under the front edge of the body. */
46
+ face: [Point, Point];
47
+ antenna: [Point, Point][];
48
+ jacks: Box[];
49
+ };
50
+ };
51
+ export type GroupLayout = {
52
+ group: DiagramGroup;
53
+ depth: number;
54
+ rect: Box;
55
+ /** The title band, inside `rect`. */
56
+ band?: Box;
57
+ label: TextRun[];
58
+ dividers: [Point, Point][];
59
+ ports?: PortLayout[];
60
+ };
61
+ export type EdgeLabelLayout = {
62
+ box: Box;
63
+ text: TextRun[];
64
+ /** The index of the route segment that the label sits beside. */
65
+ segment?: number;
66
+ };
67
+ export type EdgeLayout = {
68
+ edge: DiagramEdge;
69
+ exitSide: DiagramSide;
70
+ entrySide: DiagramSide;
71
+ points: Point[];
72
+ d: string;
73
+ label?: EdgeLabelLayout;
74
+ badge?: {
75
+ box: Box;
76
+ icon?: Box;
77
+ text: TextRun[];
78
+ };
79
+ };
80
+ export type LeaderLayout = {
81
+ /** The id of the note node. */
82
+ note: string;
83
+ /** The id of the node or group that the note explains. */
84
+ target: string;
85
+ points: Point[];
86
+ d: string;
87
+ };
88
+ export type GraphLayout = {
89
+ nodes: NodeLayout[];
90
+ groups: GroupLayout[];
91
+ edges: EdgeLayout[];
92
+ leaders: LeaderLayout[];
93
+ viewBox: Box;
94
+ };
95
+ //# sourceMappingURL=graph-layout-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-layout-result.d.ts","sourceRoot":"","sources":["../../../../src/lib/layouts/graph/graph-layout-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=graph-layout-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-layout-result.js","names":[],"sources":["../../../../src/lib/layouts/graph/graph-layout-result.ts"],"sourcesContent":["import type {\n Box,\n DiagramEdge,\n DiagramGroup,\n DiagramNode,\n DiagramSide,\n DiagramTextColor,\n Point,\n} from '../../model/diagram-ir.ts';\nimport type { Font } from '../text/font.ts';\n\nexport type TextAnchor = 'start' | 'middle' | 'end';\n\nexport type TextRun = {\n text: string;\n x: number;\n /** The baseline. */\n y: number;\n anchor: TextAnchor;\n font: Font;\n color?: DiagramTextColor;\n /** The ink box the engine measured. */\n bounds: Box;\n};\n\nexport type PortLayout = {\n id: string;\n side: DiagramSide;\n point: Point;\n label?: TextRun;\n};\n\nexport type NodeLayout = {\n node: DiagramNode;\n /** The frame. */\n box: Box;\n /** The frame, the stacked back frames and the caption together. */\n visual: Box;\n /** The stacked back frames. */\n frames: Box[];\n radius: number;\n icon?: { x: number; y: number; size: number };\n text: TextRun[];\n bullets: Point[];\n caption?: { box: Box; framed: boolean; text: TextRun[] };\n ports: PortLayout[];\n appliance?: {\n body: Point[];\n /** The line under the front edge of the body. */\n face: [Point, Point];\n antenna: [Point, Point][];\n jacks: Box[];\n };\n};\n\nexport type GroupLayout = {\n group: DiagramGroup;\n depth: number;\n rect: Box;\n /** The title band, inside `rect`. */\n band?: Box;\n label: TextRun[];\n dividers: [Point, Point][];\n ports?: PortLayout[];\n};\n\nexport type EdgeLabelLayout = {\n box: Box;\n text: TextRun[];\n /** The index of the route segment that the label sits beside. */\n segment?: number;\n};\n\nexport type EdgeLayout = {\n edge: DiagramEdge;\n exitSide: DiagramSide;\n entrySide: DiagramSide;\n points: Point[];\n d: string;\n label?: EdgeLabelLayout;\n badge?: { box: Box; icon?: Box; text: TextRun[] };\n};\n\nexport type LeaderLayout = {\n /** The id of the note node. */\n note: string;\n /** The id of the node or group that the note explains. */\n target: string;\n points: Point[];\n d: string;\n};\n\nexport type GraphLayout = {\n nodes: NodeLayout[];\n groups: GroupLayout[];\n edges: EdgeLayout[];\n leaders: LeaderLayout[];\n viewBox: Box;\n};\n"],"mappings":"","ignoreList":[]}
@@ -20,7 +20,6 @@ export declare const CONTENT_VIEWBOX_PAD = 40;
20
20
  export declare const PARALLEL_SPACING = 28;
21
21
  export declare const EDGE_BADGE_ICON = 22;
22
22
  export declare function nodeFrameRadius(node: DiagramNode): number;
23
- export declare function nodeFrameStrokeWidth(node: DiagramNode): 0 | 1.5;
24
23
  export type ViewBox = {
25
24
  x: number;
26
25
  y: number;
@@ -143,6 +142,8 @@ export declare function routeEdge(edge: DiagramEdge, source: Box, target: Box, b
143
142
  export declare function pointOnBoxSide(box: Box, side: DiagramSide, offset?: number): Point;
144
143
  export type RoutedEdge = {
145
144
  edge: DiagramEdge;
145
+ exitSide: DiagramSide;
146
+ entrySide: DiagramSide;
146
147
  d: string;
147
148
  entry: Point;
148
149
  points: Point[];
@@ -1 +1 @@
1
- {"version":3,"file":"graph-layout.d.ts","sourceRoot":"","sources":["../../../../src/lib/layouts/graph/graph-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-layout.d.ts","sourceRoot":"","sources":["../../../../src/lib/layouts/graph/graph-layout.ts"],"names":[],"mappings":"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"}
@@ -38,9 +38,6 @@ const ANNOTATION_LINE_GAP = 4;
38
38
  export function nodeFrameRadius(node) {
39
39
  return node.rx ?? (node.frame === 'flat' ? 4 : NODE_RX);
40
40
  }
41
- export function nodeFrameStrokeWidth(node) {
42
- return node.frame === 'flat' ? 0 : 1.5;
43
- }
44
41
  function graphLayout(layout) {
45
42
  return {
46
43
  colWidth: layout?.colWidth ?? COL_W,
@@ -2268,6 +2265,8 @@ export function computePaths(spec) {
2268
2265
  if (!sourceEndpoint || !targetEndpoint || !sides || exitOffset === undefined || entryOffset === undefined) {
2269
2266
  return {
2270
2267
  edge,
2268
+ exitSide: sides?.exitSide ?? 'right',
2269
+ entrySide: sides?.entrySide ?? 'left',
2271
2270
  d: '',
2272
2271
  entry: {
2273
2272
  x: 0,
@@ -2286,6 +2285,8 @@ export function computePaths(spec) {
2286
2285
  reserveRoutedEdge(blocked, result.points, gridW, gridH);
2287
2286
  return {
2288
2287
  edge,
2288
+ exitSide: side,
2289
+ entrySide: side,
2289
2290
  ...result
2290
2291
  };
2291
2292
  }
@@ -2296,6 +2297,7 @@ export function computePaths(spec) {
2296
2297
  reserveRoutedEdge(blocked, result.points, gridW, gridH);
2297
2298
  return {
2298
2299
  edge,
2300
+ ...sides,
2299
2301
  ...result
2300
2302
  };
2301
2303
  });