@coldtea/pr-lens-renderer 0.3.0 → 0.3.2

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.
@@ -1,31 +1,120 @@
1
1
  import { assertNever } from "@coldtea/pr-lens-schema";
2
- import { PILL_CLEARANCE, PILL_HEIGHT, PILL_PADDING_X, PILL_TEXT_SIZE } from "../design.js";
2
+ import { PILL_CARD_CLEARANCE, PILL_CLEARANCE, PILL_HEIGHT, PILL_PADDING_X, PILL_TEXT_SIZE, } from "../design.js";
3
+ import { boundsOf, gapBetween, inflate } from "../bounds.js";
3
4
  import { measure } from "../text.js";
5
+ export const pillSize = (label) => ({
6
+ width: measure(label, "sans-bold", PILL_TEXT_SIZE) + PILL_PADDING_X * 2,
7
+ height: PILL_HEIGHT,
8
+ });
4
9
  const EPSILON = 0.01;
5
- /**
6
- * The longest straight run of a route — the run the router pins the label to,
7
- * and the only one collision handling may slide it along. Earlier segments
8
- * win a tie, matching how the anchor itself is chosen.
9
- */
10
- const longestRun = (curve) => {
11
- let best;
10
+ const CUBIC_STEPS = 8;
11
+ /** How far inside the pill its own line must pass, clear of the rounded end. */
12
+ const THREAD_INSET = 10;
13
+ const OFFSET_STEP = 10;
14
+ /** A pill that cannot sit on its line may sit beside it, this far off. */
15
+ const BESIDE_GAP = 3;
16
+ /** Closer than this costs, but is allowed. */
17
+ const SOFT_CARD_GAP = 12;
18
+ const SOFT_PILL_GAP = 10;
19
+ /** Spots a cramped label tries when a neighbour makes way. */
20
+ const REPAIR_OPTIONS = 6;
21
+ /** A pill this close to its own route's end is sitting on the arrowhead. */
22
+ const ARROW_REACH = 12;
23
+ // Costs are pixels of travel from the preferred spot: a pill slides 400px
24
+ // along its line rather than lie across another, 250px rather than leave it.
25
+ const COST_OFFSET = 1.5;
26
+ const COST_BESIDE = 250;
27
+ const COST_FOREIGN_LINE = 400;
28
+ const COST_OWN_ARROW = 150;
29
+ const COST_CARD_NEAR = 4;
30
+ const COST_PILL_NEAR = 3;
31
+ const COST_OVERHANG = 3;
32
+ const cubicPoint = (from, first, second, to, t) => {
33
+ const u = 1 - t;
34
+ return {
35
+ x: u ** 3 * from.x + 3 * u * u * t * first.x + 3 * u * t * t * second.x + t ** 3 * to.x,
36
+ y: u ** 3 * from.y + 3 * u * u * t * first.y + 3 * u * t * t * second.y + t ** 3 * to.y,
37
+ };
38
+ };
39
+ const trace = (curve) => {
40
+ const runs = [];
41
+ const pieces = [];
42
+ let arc = 0;
43
+ let longest;
12
44
  let start = curve.from;
13
45
  for (const segment of curve.segments) {
14
- const end = segment.to;
15
- if (segment.kind === "line") {
16
- const horizontal = Math.abs(end.y - start.y) < EPSILON;
17
- const [lo, hi] = horizontal
18
- ? [Math.min(start.x, end.x), Math.max(start.x, end.x)]
19
- : [Math.min(start.y, end.y), Math.max(start.y, end.y)];
20
- if (best === undefined || hi - lo > best.length)
21
- best = {
22
- run: { axis: horizontal ? "x" : "y", cross: horizontal ? start.y : start.x, lo, hi },
23
- length: hi - lo,
24
- };
46
+ switch (segment.kind) {
47
+ case "line": {
48
+ const end = segment.to;
49
+ const horizontal = Math.abs(end.y - start.y) < EPSILON;
50
+ const vertical = Math.abs(end.x - start.x) < EPSILON;
51
+ const length = Math.hypot(end.x - start.x, end.y - start.y);
52
+ if (horizontal || vertical) {
53
+ const [from, to] = horizontal ? [start.x, end.x] : [start.y, end.y];
54
+ runs.push({
55
+ axis: horizontal ? "x" : "y",
56
+ cross: horizontal ? start.y : start.x,
57
+ lo: Math.min(from, to),
58
+ hi: Math.max(from, to),
59
+ arcStart: arc,
60
+ forward: to >= from,
61
+ });
62
+ if (longest === undefined || length > longest.length)
63
+ longest = { length, middle: arc + length / 2 };
64
+ }
65
+ pieces.push({ bounds: boundsOf([start, end]), legs: [{ a: start, b: end }] });
66
+ arc += length;
67
+ break;
68
+ }
69
+ case "cubic": {
70
+ const legs = [];
71
+ pieces.push({ bounds: boundsOf([start, segment.first, segment.second, segment.to]), legs });
72
+ let previous = start;
73
+ for (let step = 1; step <= CUBIC_STEPS; step += 1) {
74
+ const t = step / CUBIC_STEPS;
75
+ const point = cubicPoint(start, segment.first, segment.second, segment.to, t);
76
+ legs.push({ a: previous, b: point });
77
+ arc += Math.hypot(point.x - previous.x, point.y - previous.y);
78
+ previous = point;
79
+ }
80
+ break;
81
+ }
82
+ default:
83
+ assertNever(segment, "Unhandled path segment");
25
84
  }
26
- start = end;
85
+ start = segment.to;
27
86
  }
28
- return best?.run;
87
+ if (runs.length === 0) {
88
+ const middle = runThroughMiddle(pieces, arc / 2);
89
+ if (middle !== undefined)
90
+ runs.push(middle);
91
+ }
92
+ return { runs, pieces, preferred: longest?.middle ?? arc / 2, end: start };
93
+ };
94
+ /** A self-loop has no straight run, so it gets a zero-length one at its middle. */
95
+ const runThroughMiddle = (pieces, halfway) => {
96
+ let travelled = 0;
97
+ for (const { legs } of pieces)
98
+ for (const { a, b } of legs) {
99
+ const length = Math.hypot(b.x - a.x, b.y - a.y);
100
+ if (travelled + length < halfway || length === 0) {
101
+ travelled += length;
102
+ continue;
103
+ }
104
+ const t = (halfway - travelled) / length;
105
+ const point = { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };
106
+ const horizontal = Math.abs(b.x - a.x) >= Math.abs(b.y - a.y);
107
+ const along = horizontal ? point.x : point.y;
108
+ return {
109
+ axis: horizontal ? "x" : "y",
110
+ cross: horizontal ? point.y : point.x,
111
+ lo: along,
112
+ hi: along,
113
+ arcStart: halfway,
114
+ forward: true,
115
+ };
116
+ }
117
+ return undefined;
29
118
  };
30
119
  const centred = (centre, size) => ({
31
120
  x: centre.x - size.width / 2,
@@ -33,117 +122,313 @@ const centred = (centre, size) => ({
33
122
  width: size.width,
34
123
  height: size.height,
35
124
  });
36
- const centreOn = (run, along) => {
37
- switch (run.axis) {
38
- case "x":
39
- return { x: along, y: run.cross };
40
- case "y":
41
- return { x: run.cross, y: along };
42
- default:
43
- return assertNever(run.axis, "Unhandled run axis");
125
+ /** Strict, so exactly `clearance` of air is enough. */
126
+ const tooClose = (a, b, clearance) => a.x < b.x + b.width + clearance &&
127
+ b.x < a.x + a.width + clearance &&
128
+ a.y < b.y + b.height + clearance &&
129
+ b.y < a.y + a.height + clearance;
130
+ const overlaps = (a, b) => tooClose(a, b, 0);
131
+ const legCrosses = ({ a, b }, box) => {
132
+ let t0 = 0;
133
+ let t1 = 1;
134
+ const dx = b.x - a.x;
135
+ const dy = b.y - a.y;
136
+ const checks = [
137
+ [-dx, a.x - box.x],
138
+ [dx, box.x + box.width - a.x],
139
+ [-dy, a.y - box.y],
140
+ [dy, box.y + box.height - a.y],
141
+ ];
142
+ for (const [p, q] of checks) {
143
+ if (p === 0) {
144
+ if (q <= 0)
145
+ return false;
146
+ continue;
147
+ }
148
+ const t = q / p;
149
+ if (p < 0)
150
+ t0 = Math.max(t0, t);
151
+ else
152
+ t1 = Math.min(t1, t);
153
+ if (t0 >= t1)
154
+ return false;
44
155
  }
156
+ return true;
45
157
  };
46
- /** Exactly PILL_CLEARANCE of air is enough, so the comparisons are strict. */
47
- const collides = (a, b) => a.x < b.x + b.width + PILL_CLEARANCE &&
48
- b.x < a.x + a.width + PILL_CLEARANCE &&
49
- a.y < b.y + b.height + PILL_CLEARANCE &&
50
- b.y < a.y + a.height + PILL_CLEARANCE;
51
- /**
52
- * The position along the run closest to its midpoint where the pill clears
53
- * everything already settled, or undefined when the run offers no room. A
54
- * pill wider than a short run may only take the midpoint — overhanging both
55
- * ends evenly, which is what the router always did with short runs. `reach`
56
- * lets a second, more desperate pass push the pill up to that far past the
57
- * run's ends — still square on its own line, at the line's foot.
58
- */
59
- const slideAlong = (run, size, settled, reach) => {
60
- const halfAlong = (run.axis === "x" ? size.width : size.height) / 2;
61
- const preferred = (run.lo + run.hi) / 2;
62
- const lo = Math.min(run.lo + halfAlong - reach, preferred);
63
- const hi = Math.max(run.hi - halfAlong + reach, preferred);
64
- const blocked = settled
65
- .flatMap((box) => {
66
- const [alongLo, alongHi, crossLo, crossHi] = run.axis === "x"
67
- ? [box.x, box.x + box.width, box.y, box.y + box.height]
68
- : [box.y, box.y + box.height, box.x, box.x + box.width];
69
- const halfCross = (run.axis === "x" ? size.height : size.width) / 2;
70
- if (run.cross - halfCross >= crossHi + PILL_CLEARANCE)
71
- return [];
72
- if (run.cross + halfCross <= crossLo - PILL_CLEARANCE)
73
- return [];
74
- return [{ from: alongLo - PILL_CLEARANCE - halfAlong, to: alongHi + PILL_CLEARANCE + halfAlong }];
75
- });
76
- let best;
77
- const consider = (candidate) => {
78
- if (candidate < lo || candidate > hi)
79
- return;
80
- if (blocked.some((b) => b.from < candidate && candidate < b.to))
81
- return;
82
- if (best === undefined ||
83
- Math.abs(candidate - preferred) < Math.abs(best - preferred) ||
84
- (Math.abs(candidate - preferred) === Math.abs(best - preferred) && candidate < best))
85
- best = candidate;
86
- };
87
- consider(preferred);
88
- for (const b of blocked) {
89
- consider(b.from);
90
- consider(b.to);
158
+ /** Where a pill's centre may sit across a run, and what leaving the line costs. */
159
+ const crossOffsets = (run, size) => {
160
+ const halfCross = (run.axis === "x" ? size.height : size.width) / 2;
161
+ const reach = Math.max(0, halfCross - THREAD_INSET);
162
+ const beside = halfCross + BESIDE_GAP;
163
+ const both = (distance, penalty) => [
164
+ { offset: -distance, penalty },
165
+ { offset: distance, penalty },
166
+ ];
167
+ const offsets = [{ offset: 0, penalty: 0 }];
168
+ for (let distance = OFFSET_STEP; distance < reach; distance += OFFSET_STEP)
169
+ offsets.push(...both(distance, distance * COST_OFFSET));
170
+ if (reach > 0)
171
+ offsets.push(...both(reach, reach * COST_OFFSET));
172
+ offsets.push(...both(beside, COST_BESIDE + beside * COST_OFFSET));
173
+ return offsets;
174
+ };
175
+ const spanOn = (box, axis) => axis === "x"
176
+ ? [box.x, box.x + box.width, box.y, box.y + box.height]
177
+ : [box.y, box.y + box.height, box.x, box.x + box.width];
178
+ const runBounds = (run) => run.axis === "x"
179
+ ? { x: run.lo, y: run.cross, width: run.hi - run.lo, height: 0 }
180
+ : { x: run.cross, y: run.lo, width: 0, height: run.hi - run.lo };
181
+ const crowding = (box, label, frame, around, pills) => {
182
+ let cost = 0;
183
+ for (const obstacle of around.obstacles) {
184
+ const gap = gapBetween(box, obstacle);
185
+ if (gap < SOFT_CARD_GAP)
186
+ cost += (SOFT_CARD_GAP - gap) * COST_CARD_NEAR;
187
+ }
188
+ for (const other of pills) {
189
+ const gap = gapBetween(box, other);
190
+ if (gap < SOFT_PILL_GAP)
191
+ cost += (SOFT_PILL_GAP - gap) * COST_PILL_NEAR;
91
192
  }
92
- return best;
193
+ // A pill over another route's line reads as that route's label.
194
+ const inner = inflate(box, -1);
195
+ const covered = new Set();
196
+ for (const { id, bounds, legs } of around.pieces)
197
+ if (!covered.has(id) && overlaps(bounds, box) && legs.some((leg) => legCrosses(leg, inner)))
198
+ covered.add(id);
199
+ cost += covered.size * COST_FOREIGN_LINE;
200
+ if (frame !== undefined)
201
+ cost +=
202
+ (Math.max(0, frame.x - box.x) +
203
+ Math.max(0, box.x + box.width - (frame.x + frame.width)) +
204
+ Math.max(0, frame.y - box.y) +
205
+ Math.max(0, box.y + box.height - (frame.y + frame.height))) *
206
+ COST_OVERHANG;
207
+ const reach = inflate(box, ARROW_REACH);
208
+ const { end } = label.own;
209
+ const onArrow = end.x > reach.x && end.x < reach.x + reach.width && end.y > reach.y && end.y < reach.y + reach.height;
210
+ if (onArrow)
211
+ cost += COST_OWN_ARROW;
212
+ return cost;
93
213
  };
94
214
  /**
95
- * The tiebreak for a pill none of its runs can host: hold the anchor's
96
- * position along the line and step square off it, nearer side first, until
97
- * the pill clears — it ends up beside its own line rather than on it, but
98
- * never more than a step or two away, and always in the same place for the
99
- * same document.
215
+ * The `limit` cheapest distinct placements the route offers, cheapest first;
216
+ * empty when it has no room at all.
100
217
  */
101
- const stepAside = (anchor, axis, size, settled) => {
102
- const step = (axis === "x" ? size.height : size.width) + PILL_CLEARANCE;
103
- for (let k = 1;; k += 1)
104
- for (const sign of [-1, 1]) {
105
- const centre = axis === "x"
106
- ? { x: anchor.x, y: anchor.y + sign * k * step }
107
- : { x: anchor.x + sign * k * step, y: anchor.y };
108
- const box = centred(centre, size);
109
- if (!settled.some((other) => collides(box, other)))
110
- return box;
218
+ const rankOnRoute = (label, scene, settled, limit) => {
219
+ const { own, size } = label;
220
+ const settledPills = [...settled].filter(([id]) => id !== label.id).map(([, box]) => box);
221
+ const candidates = [];
222
+ for (const around of label.around) {
223
+ const { run } = around;
224
+ const pills = settledPills.filter((box) => overlaps(box, around.region));
225
+ const lines = around.pieces.map(({ bounds }) => spanOn(bounds, run.axis));
226
+ const arcAt = (position) => run.arcStart + (run.forward ? position - run.lo : run.hi - position);
227
+ const intoRun = own.preferred - run.arcStart;
228
+ const preferredAlong = Math.min(Math.max(run.forward ? run.lo + intoRun : run.hi - intoRun, run.lo), run.hi);
229
+ const halfAlong = (run.axis === "x" ? size.width : size.height) / 2;
230
+ const halfCross = (run.axis === "x" ? size.height : size.width) / 2;
231
+ const blocker = (clearance, soft) => (box) => ({
232
+ span: spanOn(box, run.axis),
233
+ clearance,
234
+ soft,
235
+ });
236
+ const blockers = [
237
+ ...around.obstacles.map(blocker(PILL_CARD_CLEARANCE, SOFT_CARD_GAP)),
238
+ ...pills.map(blocker(PILL_CLEARANCE, SOFT_PILL_GAP)),
239
+ ];
240
+ const breaks = [];
241
+ const breakAt = (position) => {
242
+ if (position >= run.lo - EPSILON && position <= run.hi + EPSILON)
243
+ breaks.push(position);
244
+ };
245
+ for (const { offset, penalty } of crossOffsets(run, size)) {
246
+ const centreCross = run.cross + offset;
247
+ const low = centreCross - halfCross;
248
+ const high = centreCross + halfCross;
249
+ const hard = [];
250
+ breaks.length = 0;
251
+ breakAt(preferredAlong);
252
+ breakAt(run.lo);
253
+ breakAt(run.hi);
254
+ for (const { span: [alongLo, alongHi, crossLo, crossHi], clearance, soft } of blockers) {
255
+ if (low >= crossHi + soft || high <= crossLo - soft)
256
+ continue;
257
+ breakAt(alongLo - soft - halfAlong);
258
+ breakAt(alongHi + soft + halfAlong);
259
+ if (low >= crossHi + clearance || high <= crossLo - clearance)
260
+ continue;
261
+ const from = alongLo - clearance - halfAlong;
262
+ const to = alongHi + clearance + halfAlong;
263
+ hard.push({ from, to });
264
+ breakAt(from);
265
+ breakAt(to);
266
+ }
267
+ for (const [alongLo, alongHi, crossLo, crossHi] of lines) {
268
+ if (low > crossHi || high < crossLo)
269
+ continue;
270
+ breakAt(alongLo - halfAlong - 1);
271
+ breakAt(alongHi + halfAlong + 1);
272
+ }
273
+ hard.sort((a, b) => a.from - b.from);
274
+ let reachedTo = Number.NEGATIVE_INFINITY;
275
+ let next = 0;
276
+ let previous;
277
+ for (const position of Float64Array.from(breaks).sort()) {
278
+ if (position === previous)
279
+ continue;
280
+ previous = position;
281
+ // Intervals starting before this point are folded into `reachedTo`.
282
+ while (next < hard.length && (hard[next]?.from ?? Number.POSITIVE_INFINITY) < position) {
283
+ reachedTo = Math.max(reachedTo, hard[next]?.to ?? reachedTo);
284
+ next += 1;
285
+ }
286
+ if (position < reachedTo)
287
+ continue;
288
+ const centre = run.axis === "x" ? { x: position, y: centreCross } : { x: centreCross, y: position };
289
+ candidates.push({
290
+ box: centred(centre, size),
291
+ bound: Math.abs(arcAt(position) - own.preferred) + penalty,
292
+ around,
293
+ pills,
294
+ });
295
+ }
111
296
  }
297
+ }
298
+ // Once a bound alone exceeds the worst kept placement, nothing later can win.
299
+ candidates.sort((a, b) => a.bound - b.bound || a.box.y - b.box.y || a.box.x - b.box.x);
300
+ const ranked = [];
301
+ for (const { box, bound, around, pills } of candidates) {
302
+ const worst = ranked[ranked.length - 1];
303
+ if (ranked.length === limit && worst !== undefined && bound >= worst.cost - EPSILON)
304
+ break;
305
+ if (ranked.some((kept) => kept.box.x === box.x && kept.box.y === box.y))
306
+ continue;
307
+ const cost = bound + crowding(box, label, scene.frame, around, pills);
308
+ const at = ranked.findIndex((kept) => cost < kept.cost - EPSILON);
309
+ ranked.splice(at === -1 ? ranked.length : at, 0, { box, cost });
310
+ if (ranked.length > limit)
311
+ ranked.pop();
312
+ }
313
+ return ranked;
112
314
  };
113
- const settle = (curve, anchor, size, settled) => {
114
- const run = longestRun(curve);
115
- if (run !== undefined)
116
- for (const reach of [0, PILL_HEIGHT]) {
117
- const along = slideAlong(run, size, settled, reach);
118
- if (along !== undefined)
119
- return centred(centreOn(run, along), size);
120
- }
121
- // A route that only bends — a self-loop — has no run to slide along; its
122
- // anchor still stands wherever it is clear.
123
- const atAnchor = centred(anchor, size);
124
- if (!settled.some((other) => collides(atAnchor, other)))
125
- return atAnchor;
126
- return stepAside(anchor, run?.axis ?? "x", size, settled);
315
+ /** Last resort, off the line: the layout widens the gap before a drawing lands here. */
316
+ const nearestClear = (label, scene, settled) => {
317
+ const { anchor, size } = label;
318
+ const pills = [...settled].filter(([id]) => id !== label.id).map(([, box]) => box);
319
+ const clear = (box) => !scene.obstacles.some((obstacle) => tooClose(box, obstacle, PILL_CLEARANCE)) &&
320
+ !pills.some((other) => tooClose(box, other, PILL_CLEARANCE));
321
+ const stepY = size.height + PILL_CLEARANCE;
322
+ const stepX = 8;
323
+ for (let ring = 0;; ring += 1) {
324
+ const found = [];
325
+ for (let j = -ring; j <= ring; j += 1)
326
+ for (let i = -ring * 4; i <= ring * 4; i += 1) {
327
+ if (Math.max(Math.abs(j), Math.ceil(Math.abs(i) / 4)) !== ring)
328
+ continue;
329
+ const box = centred({ x: anchor.x + i * stepX, y: anchor.y + j * stepY }, size);
330
+ if (clear(box))
331
+ found.push({ box, distance: Math.hypot(i * stepX, j * stepY) });
332
+ }
333
+ found.sort((a, b) => a.distance - b.distance || a.box.y - b.box.y || a.box.x - b.box.x);
334
+ const first = found[0];
335
+ if (first !== undefined)
336
+ return first.box;
337
+ }
127
338
  };
128
339
  /**
129
- * A pill box for every labelled route, none intersecting any other. Routes
130
- * settle in document order, and a pill whose anchor is already clear stays
131
- * exactly where the router put it, so an uncrowded diagram is untouched.
340
+ * Each label takes the cheapest spot on or beside its own route that keeps
341
+ * clear of cards, badges and other pills. A label with room at the middle of
342
+ * its longest run stays exactly there.
132
343
  */
133
- export const placeLabelPills = (routed) => {
134
- const settled = [];
135
- const boxes = new Map();
136
- for (const { edge, curve, labelAnchor } of routed) {
344
+ export const placeLabelPills = (routed, obstacles, frame) => {
345
+ const traced = routed.map((route) => ({ route, traced: trace(route.curve) }));
346
+ const pieces = traced.flatMap(({ route, traced: { pieces } }) => pieces.map((piece) => ({ ...piece, id: route.edge.id })));
347
+ const scene = { obstacles, frame };
348
+ const labels = traced.flatMap(({ route, traced: own }) => {
349
+ const { edge, labelAnchor } = route;
137
350
  if (edge.label === undefined || labelAnchor === undefined)
351
+ return [];
352
+ const size = pillSize(edge.label);
353
+ const reach = Math.max(size.width, size.height) + SOFT_CARD_GAP + BESIDE_GAP;
354
+ const around = own.runs.map((run) => {
355
+ const region = inflate(runBounds(run), reach);
356
+ return {
357
+ run,
358
+ region,
359
+ obstacles: obstacles.filter((box) => overlaps(box, region)),
360
+ pieces: pieces.filter((piece) => piece.id !== edge.id && overlaps(piece.bounds, region)),
361
+ };
362
+ });
363
+ return [{ id: edge.id, own, size, anchor: labelAnchor, around }];
364
+ });
365
+ const boxes = new Map();
366
+ const costs = new Map();
367
+ /** So a label can tell whether anything near it moved. */
368
+ const moves = [];
369
+ const placedAt = new Map();
370
+ const place = (label) => {
371
+ const [found] = rankOnRoute(label, scene, boxes, 1);
372
+ return found ?? { box: nearestClear(label, scene, boxes), cost: Number.POSITIVE_INFINITY };
373
+ };
374
+ const keep = (id, placement) => {
375
+ const before = boxes.get(id);
376
+ moves.push({ id, boxes: before === undefined ? [placement.box] : [before, placement.box] });
377
+ placedAt.set(id, moves.length);
378
+ boxes.set(id, placement.box);
379
+ costs.set(id, placement.cost);
380
+ };
381
+ const isCramped = (id) => costs.get(id) === Number.POSITIVE_INFINITY;
382
+ const unsettled = (label) => moves
383
+ .slice(placedAt.get(label.id) ?? 0)
384
+ .some(({ id, boxes: moved }) => id !== label.id &&
385
+ moved.some((box) => label.around.some(({ region }) => overlaps(box, region))));
386
+ for (const label of labels)
387
+ keep(label.id, place(label));
388
+ // A label placed early could not see the ones after it.
389
+ for (const label of labels) {
390
+ const current = costs.get(label.id) ?? 0;
391
+ if (current < EPSILON || !unsettled(label))
138
392
  continue;
139
- const size = {
140
- width: measure(edge.label, "sans-bold", PILL_TEXT_SIZE) + PILL_PADDING_X * 2,
141
- height: PILL_HEIGHT,
142
- };
143
- const box = settle(curve, labelAnchor, size, settled);
144
- settled.push(box);
145
- boxes.set(edge.id, box);
393
+ const placement = place(label);
394
+ if (placement.cost < current - EPSILON)
395
+ keep(label.id, placement);
146
396
  }
147
- return boxes;
397
+ // A cramped label was usually beaten to the only room by a neighbour that
398
+ // had somewhere else to go: swap them when both still fit.
399
+ const repair = (label, other, regions) => {
400
+ const mine = boxes.get(label.id);
401
+ const theirs = boxes.get(other.id);
402
+ if (mine === undefined || theirs === undefined)
403
+ return false;
404
+ if (!regions.some((region) => overlaps(theirs, region)))
405
+ return false;
406
+ boxes.delete(other.id);
407
+ for (const option of rankOnRoute(label, scene, boxes, REPAIR_OPTIONS)) {
408
+ boxes.set(label.id, option.box);
409
+ const [moved] = rankOnRoute(other, scene, boxes, 1);
410
+ if (moved === undefined)
411
+ continue;
412
+ keep(label.id, option);
413
+ keep(other.id, moved);
414
+ return true;
415
+ }
416
+ boxes.set(label.id, mine);
417
+ boxes.set(other.id, theirs);
418
+ return false;
419
+ };
420
+ for (const label of labels) {
421
+ if (!isCramped(label.id))
422
+ continue;
423
+ const reach = label.size.width + SOFT_CARD_GAP + BESIDE_GAP;
424
+ const regions = label.around.map(({ run }) => inflate(runBounds(run), reach));
425
+ for (const other of labels)
426
+ if (other.id !== label.id && !isCramped(other.id) && repair(label, other, regions))
427
+ break;
428
+ }
429
+ return {
430
+ boxes,
431
+ cramped: new Map(labels.filter(({ id }) => isCramped(id)).map(({ id, size }) => [id, size.width])),
432
+ };
148
433
  };
149
434
  //# sourceMappingURL=labels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/layout/labels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/layout/labels.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/svg/architecture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAS,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAKjD,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAA2C,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAQnF,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,2BAA2B,CAAC;AA4EnC,eAAO,MAAM,SAAS,WAAY,UAAU,WAAW,OAAO,KAAG,MAoEhE,CAAC;AAsDF,eAAO,MAAM,cAAc,SAAU,MAAM,OAAO,GAAG,QAAQ,IAAI,WAAW,OAAO,KAAG,MA0BrF,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,UACrB,WAAW,SACX,WAAW,GAAG,SAAS,WACrB,OAAO,KACf,oBA2EF,CAAC"}
1
+ {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/svg/architecture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAS,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAIjD,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAA2C,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAQnF,OAAO,EAQL,KAAK,UAAU,EAChB,MAAM,2BAA2B,CAAC;AA4EnC,eAAO,MAAM,SAAS,WAAY,UAAU,WAAW,OAAO,KAAG,MAoEhE,CAAC;AAsDF,eAAO,MAAM,cAAc,SAAU,MAAM,OAAO,GAAG,QAAQ,IAAI,WAAW,OAAO,KAAG,MA0BrF,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,UACrB,WAAW,SACX,WAAW,GAAG,SAAS,WACrB,OAAO,KACf,oBAuEF,CAAC"}