@flighthq/shape 0.3.0 → 0.3.1-next.1041.35b950c

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 (38) hide show
  1. package/dist/contract.d.ts +4 -0
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +4 -0
  4. package/dist/contract.js.map +1 -1
  5. package/dist/enableShapeBoundsGuards.d.ts +4 -0
  6. package/dist/enableShapeBoundsGuards.d.ts.map +1 -0
  7. package/dist/enableShapeBoundsGuards.js +25 -0
  8. package/dist/enableShapeBoundsGuards.js.map +1 -0
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/registerDefaultShapeBoundsCommands.d.ts +2 -0
  14. package/dist/registerDefaultShapeBoundsCommands.d.ts.map +1 -0
  15. package/dist/registerDefaultShapeBoundsCommands.js +80 -0
  16. package/dist/registerDefaultShapeBoundsCommands.js.map +1 -0
  17. package/dist/shape.d.ts +2 -2
  18. package/dist/shape.d.ts.map +1 -1
  19. package/dist/shape.js +27 -245
  20. package/dist/shape.js.map +1 -1
  21. package/dist/shapeBounds.d.ts +18 -0
  22. package/dist/shapeBounds.d.ts.map +1 -0
  23. package/dist/shapeBounds.js +527 -0
  24. package/dist/shapeBounds.js.map +1 -0
  25. package/dist/shapeBoundsRegistry.d.ts +6 -0
  26. package/dist/shapeBoundsRegistry.d.ts.map +1 -0
  27. package/dist/shapeBoundsRegistry.js +24 -0
  28. package/dist/shapeBoundsRegistry.js.map +1 -0
  29. package/dist/shapeFill.d.ts.map +1 -1
  30. package/dist/shapeFill.js +3 -3
  31. package/dist/shapeFill.js.map +1 -1
  32. package/package.json +9 -7
  33. package/src/enableShapeBoundsGuards.test.ts +64 -0
  34. package/src/morphShape.test.ts +10 -0
  35. package/src/registerDefaultShapeBoundsCommands.test.ts +64 -0
  36. package/src/shape.test.ts +44 -7
  37. package/src/shapeBounds.test.ts +270 -0
  38. package/src/shapeBoundsRegistry.test.ts +76 -0
@@ -0,0 +1,527 @@
1
+ import { getShapeBoundsCommand } from './shapeBoundsRegistry';
2
+ export function computeShapeBoundsRectangle(out, source, mode = 'ink') {
3
+ const accumulator = createShapeBoundsAccumulator();
4
+ const fillState = createShapeBoundsLaneState(accumulator, false);
5
+ const fillContext = createShapeBoundsContext(fillState);
6
+ const strokeState = createShapeBoundsLaneState(accumulator, true);
7
+ const strokeContext = createShapeBoundsContext(strokeState);
8
+ const cursor = createShapeCommandArgumentCursor(source.data.commands);
9
+ let complete = true;
10
+ let i = 0;
11
+ while (i < source.data.commands.length) {
12
+ const key = source.data.commands[i];
13
+ const argumentCount = source.data.commands[i + 1];
14
+ const command = getShapeBoundsCommand(key);
15
+ setShapeCommandArgumentCursor(cursor, i + 2, argumentCount);
16
+ if (command === null) {
17
+ complete = false;
18
+ _shapeBoundsGuard?.(source, mode, key);
19
+ }
20
+ else {
21
+ command.fillBounds?.(fillContext, cursor);
22
+ if (mode === 'ink')
23
+ command.strokeBounds?.(strokeContext, cursor);
24
+ }
25
+ i += argumentCount + 2;
26
+ }
27
+ fillContext.flushPath();
28
+ if (mode === 'ink')
29
+ strokeContext.flushPath();
30
+ writeShapeBoundsRectangle(out, accumulator);
31
+ return complete;
32
+ }
33
+ export const defaultShapeBoundsCubicCurveTo = (context, command) => {
34
+ context.cubicCurveTo(command.getArgument(0), command.getArgument(1), command.getArgument(2), command.getArgument(3), command.getArgument(4), command.getArgument(5));
35
+ };
36
+ export const defaultShapeBoundsCurveTo = (context, command) => {
37
+ context.curveTo(command.getArgument(0), command.getArgument(1), command.getArgument(2), command.getArgument(3));
38
+ };
39
+ export const defaultShapeBoundsDrawCircle = (context, command) => {
40
+ context.drawCircle(command.getArgument(0), command.getArgument(1), command.getArgument(2));
41
+ };
42
+ function appendShapeBoundsSegment(state, startX, startY, endX, endY, startTangentX, startTangentY, endTangentX, endTangentY) {
43
+ if (state.hasPendingSegment) {
44
+ expandShapeBoundsJoin(state, startX, startY, state.pendingSegment.endTangentX, state.pendingSegment.endTangentY, startTangentX, startTangentY);
45
+ }
46
+ if (!state.hasFirstSegment) {
47
+ setShapeBoundsSegment(state.firstSegment, startX, startY, endX, endY, startTangentX, startTangentY, endTangentX, endTangentY);
48
+ state.hasFirstSegment = true;
49
+ }
50
+ setShapeBoundsSegment(state.pendingSegment, startX, startY, endX, endY, startTangentX, startTangentY, endTangentX, endTangentY);
51
+ state.hasPendingSegment = true;
52
+ }
53
+ function closeShapeBoundsPath(state) {
54
+ if (!state.hasCurrentPoint)
55
+ return;
56
+ if (state.writesStroke && state.hasStroke && state.hasPendingSegment) {
57
+ const dx = state.subpathStartX - state.penX;
58
+ const dy = state.subpathStartY - state.penY;
59
+ if (dx !== 0 || dy !== 0) {
60
+ setShapeBoundsTangent(state.tangentStart, dx, dy);
61
+ expandShapeBoundsLine(state, state.penX, state.penY, state.subpathStartX, state.subpathStartY);
62
+ appendShapeBoundsSegment(state, state.penX, state.penY, state.subpathStartX, state.subpathStartY, state.tangentStart.x, state.tangentStart.y, state.tangentStart.x, state.tangentStart.y);
63
+ }
64
+ if (state.hasFirstSegment && state.hasPendingSegment) {
65
+ expandShapeBoundsJoin(state, state.subpathStartX, state.subpathStartY, state.pendingSegment.endTangentX, state.pendingSegment.endTangentY, state.firstSegment.startTangentX, state.firstSegment.startTangentY);
66
+ }
67
+ }
68
+ state.penX = state.subpathStartX;
69
+ state.penY = state.subpathStartY;
70
+ state.hasFirstSegment = false;
71
+ state.hasPendingSegment = false;
72
+ }
73
+ function createShapeBoundsAccumulator() {
74
+ return { maxX: -Infinity, maxY: -Infinity, minX: Infinity, minY: Infinity };
75
+ }
76
+ function createShapeBoundsContext(state) {
77
+ return {
78
+ closePath: () => closeShapeBoundsPath(state),
79
+ cubicCurveTo: (controlX1, controlY1, controlX2, controlY2, anchorX, anchorY) => cubicShapeBoundsCurveTo(state, controlX1, controlY1, controlX2, controlY2, anchorX, anchorY),
80
+ curveTo: (controlX, controlY, anchorX, anchorY) => quadraticShapeBoundsCurveTo(state, controlX, controlY, anchorX, anchorY),
81
+ drawCircle: (x, y, radius) => drawShapeBoundsCircle(state, x, y, radius),
82
+ drawEllipse: (x, y, width, height) => drawShapeBoundsEllipse(state, x, y, width, height),
83
+ drawRectangle: (x, y, width, height) => drawShapeBoundsRectangle(state, x, y, width, height),
84
+ expandPoint: (x, y) => expandShapeBoundsPointForLane(state, x, y),
85
+ flushPath: () => flushShapeBoundsPath(state),
86
+ lineTo: (x, y) => lineShapeBoundsTo(state, x, y),
87
+ moveTo: (x, y) => moveShapeBoundsTo(state, x, y),
88
+ setStrokeStyle: (width, caps, joints, miterLimit) => setShapeBoundsStrokeStyle(state, width, caps, joints, miterLimit),
89
+ };
90
+ }
91
+ function createShapeBoundsLaneState(accumulator, writesStroke) {
92
+ return {
93
+ accumulator,
94
+ firstSegment: createShapeBoundsSegment(),
95
+ hasCurrentPoint: false,
96
+ hasFirstSegment: false,
97
+ hasPendingSegment: false,
98
+ hasStroke: false,
99
+ pendingSegment: createShapeBoundsSegment(),
100
+ penX: 0,
101
+ penY: 0,
102
+ strokeCap: 'none',
103
+ strokeJoin: 'round',
104
+ strokeMiterLimit: 3,
105
+ strokeWidth: DEFAULT_SHAPE_STROKE_WIDTH,
106
+ subpathStartX: 0,
107
+ subpathStartY: 0,
108
+ tangentEnd: { x: 0, y: 0 },
109
+ tangentStart: { x: 0, y: 0 },
110
+ writesStroke,
111
+ };
112
+ }
113
+ function createShapeBoundsSegment() {
114
+ return {
115
+ endTangentX: 0,
116
+ endTangentY: 0,
117
+ endX: 0,
118
+ endY: 0,
119
+ startTangentX: 0,
120
+ startTangentY: 0,
121
+ startX: 0,
122
+ startY: 0,
123
+ };
124
+ }
125
+ function createShapeCommandArgumentCursor(commands) {
126
+ return {
127
+ argumentCount: 0,
128
+ argumentOffset: 0,
129
+ commands,
130
+ get length() {
131
+ return this.argumentCount;
132
+ },
133
+ getArgument(relativeIndex) {
134
+ if (relativeIndex < 0 || relativeIndex >= this.argumentCount)
135
+ return undefined;
136
+ return this.commands[this.argumentOffset + relativeIndex];
137
+ },
138
+ };
139
+ }
140
+ function cubicShapeBoundsCurveTo(state, controlX1, controlY1, controlX2, controlY2, anchorX, anchorY) {
141
+ ensureShapeBoundsCurrentPoint(state);
142
+ const padding = getShapeBoundsLanePadding(state);
143
+ if (padding >= 0) {
144
+ expandShapeBoundsCubic(state.accumulator, state.penX, state.penY, controlX1, controlY1, controlX2, controlY2, anchorX, anchorY, padding);
145
+ }
146
+ if (state.writesStroke && state.hasStroke) {
147
+ setShapeBoundsTangent(state.tangentStart, controlX1 - state.penX, controlY1 - state.penY);
148
+ if (state.tangentStart.x === 0 && state.tangentStart.y === 0) {
149
+ setShapeBoundsTangent(state.tangentStart, controlX2 - state.penX, controlY2 - state.penY);
150
+ }
151
+ if (state.tangentStart.x === 0 && state.tangentStart.y === 0) {
152
+ setShapeBoundsTangent(state.tangentStart, anchorX - state.penX, anchorY - state.penY);
153
+ }
154
+ setShapeBoundsTangent(state.tangentEnd, anchorX - controlX2, anchorY - controlY2);
155
+ if (state.tangentEnd.x === 0 && state.tangentEnd.y === 0) {
156
+ setShapeBoundsTangent(state.tangentEnd, anchorX - controlX1, anchorY - controlY1);
157
+ }
158
+ if (state.tangentEnd.x === 0 && state.tangentEnd.y === 0) {
159
+ setShapeBoundsTangent(state.tangentEnd, anchorX - state.penX, anchorY - state.penY);
160
+ }
161
+ appendShapeBoundsSegment(state, state.penX, state.penY, anchorX, anchorY, state.tangentStart.x, state.tangentStart.y, state.tangentEnd.x, state.tangentEnd.y);
162
+ }
163
+ state.penX = anchorX;
164
+ state.penY = anchorY;
165
+ }
166
+ function drawShapeBoundsCircle(state, x, y, radius) {
167
+ finishShapeBoundsOpenSubpath(state, false);
168
+ const padding = getShapeBoundsLanePadding(state);
169
+ if (padding >= 0) {
170
+ const magnitude = Math.abs(radius);
171
+ expandShapeBoundsPoint(state.accumulator, x - magnitude, y - magnitude, padding);
172
+ expandShapeBoundsPoint(state.accumulator, x + magnitude, y + magnitude, padding);
173
+ }
174
+ state.hasCurrentPoint = true;
175
+ state.penX = x + radius;
176
+ state.penY = y;
177
+ state.subpathStartX = state.penX;
178
+ state.subpathStartY = state.penY;
179
+ }
180
+ function drawShapeBoundsEllipse(state, x, y, width, height) {
181
+ finishShapeBoundsOpenSubpath(state, false);
182
+ const padding = getShapeBoundsLanePadding(state);
183
+ if (padding >= 0) {
184
+ expandShapeBoundsPoint(state.accumulator, Math.min(x, x + width), Math.min(y, y + height), padding);
185
+ expandShapeBoundsPoint(state.accumulator, Math.max(x, x + width), Math.max(y, y + height), padding);
186
+ }
187
+ state.hasCurrentPoint = true;
188
+ state.penX = x + width;
189
+ state.penY = y + height / 2;
190
+ state.subpathStartX = state.penX;
191
+ state.subpathStartY = state.penY;
192
+ }
193
+ function drawShapeBoundsRectangle(state, x, y, width, height) {
194
+ finishShapeBoundsOpenSubpath(state, false);
195
+ const padding = getShapeBoundsLanePadding(state);
196
+ if (padding >= 0) {
197
+ expandShapeBoundsPoint(state.accumulator, Math.min(x, x + width), Math.min(y, y + height), padding);
198
+ expandShapeBoundsPoint(state.accumulator, Math.max(x, x + width), Math.max(y, y + height), padding);
199
+ }
200
+ state.hasCurrentPoint = true;
201
+ state.penX = x;
202
+ state.penY = y;
203
+ state.subpathStartX = x;
204
+ state.subpathStartY = y;
205
+ }
206
+ function ensureShapeBoundsCurrentPoint(state) {
207
+ if (state.hasCurrentPoint)
208
+ return;
209
+ state.hasCurrentPoint = true;
210
+ state.penX = 0;
211
+ state.penY = 0;
212
+ state.subpathStartX = 0;
213
+ state.subpathStartY = 0;
214
+ }
215
+ function expandShapeBoundsCubic(accumulator, p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y, padding) {
216
+ expandShapeBoundsPoint(accumulator, p0x, p0y, padding);
217
+ expandShapeBoundsPoint(accumulator, p3x, p3y, padding);
218
+ expandShapeBoundsCubicAxis(accumulator, p0x, p1x, p2x, p3x, p0y, p1y, p2y, p3y, padding, true);
219
+ expandShapeBoundsCubicAxis(accumulator, p0y, p1y, p2y, p3y, p0x, p1x, p2x, p3x, padding, false);
220
+ }
221
+ function expandShapeBoundsCubicAxis(accumulator, p0, p1, p2, p3, q0, q1, q2, q3, padding, primaryIsX) {
222
+ const a = -p0 + 3 * p1 - 3 * p2 + p3;
223
+ const b = 2 * (p0 - 2 * p1 + p2);
224
+ const c = -p0 + p1;
225
+ if (Math.abs(a) < 1e-12) {
226
+ if (Math.abs(b) > 1e-12) {
227
+ const t = -c / b;
228
+ if (t > 0 && t < 1) {
229
+ expandShapeBoundsCubicAxisPoint(accumulator, t, p0, p1, p2, p3, q0, q1, q2, q3, padding, primaryIsX);
230
+ }
231
+ }
232
+ return;
233
+ }
234
+ const discriminant = b * b - 4 * a * c;
235
+ if (discriminant < 0)
236
+ return;
237
+ const root = Math.sqrt(discriminant);
238
+ const t1 = (-b + root) / (2 * a);
239
+ const t2 = (-b - root) / (2 * a);
240
+ if (t1 > 0 && t1 < 1) {
241
+ expandShapeBoundsCubicAxisPoint(accumulator, t1, p0, p1, p2, p3, q0, q1, q2, q3, padding, primaryIsX);
242
+ }
243
+ if (t2 > 0 && t2 < 1) {
244
+ expandShapeBoundsCubicAxisPoint(accumulator, t2, p0, p1, p2, p3, q0, q1, q2, q3, padding, primaryIsX);
245
+ }
246
+ }
247
+ function expandShapeBoundsCubicAxisPoint(accumulator, t, p0, p1, p2, p3, q0, q1, q2, q3, padding, primaryIsX) {
248
+ const primary = getShapeBoundsCubicPoint(t, p0, p1, p2, p3);
249
+ const secondary = getShapeBoundsCubicPoint(t, q0, q1, q2, q3);
250
+ if (primaryIsX)
251
+ expandShapeBoundsPoint(accumulator, primary, secondary, padding);
252
+ else
253
+ expandShapeBoundsPoint(accumulator, secondary, primary, padding);
254
+ }
255
+ function expandShapeBoundsJoin(state, x, y, incomingX, incomingY, outgoingX, outgoingY) {
256
+ if (state.strokeJoin !== 'miter')
257
+ return;
258
+ const cross = incomingX * outgoingY - incomingY * outgoingX;
259
+ if (Math.abs(cross) < 1e-8)
260
+ return;
261
+ const halfWidth = state.strokeWidth / 2;
262
+ const incomingNormalX = -incomingY;
263
+ const incomingNormalY = incomingX;
264
+ const outgoingNormalX = -outgoingY;
265
+ const outgoingNormalY = outgoingX;
266
+ const deltaX = (outgoingNormalX - incomingNormalX) * halfWidth;
267
+ const deltaY = (outgoingNormalY - incomingNormalY) * halfWidth;
268
+ const distance = (deltaX * outgoingY - deltaY * outgoingX) / cross;
269
+ const miterX = x + incomingNormalX * halfWidth + incomingX * distance;
270
+ const miterY = y + incomingNormalY * halfWidth + incomingY * distance;
271
+ const length = Math.hypot(miterX - x, miterY - y);
272
+ if (length > halfWidth * state.strokeMiterLimit)
273
+ return;
274
+ expandShapeBoundsPoint(state.accumulator, miterX, miterY, 0);
275
+ expandShapeBoundsPoint(state.accumulator, x * 2 - miterX, y * 2 - miterY, 0);
276
+ }
277
+ function expandShapeBoundsLine(state, startX, startY, endX, endY) {
278
+ const padding = getShapeBoundsLanePadding(state);
279
+ if (padding < 0)
280
+ return;
281
+ expandShapeBoundsPoint(state.accumulator, startX, startY, padding);
282
+ expandShapeBoundsPoint(state.accumulator, endX, endY, padding);
283
+ }
284
+ function expandShapeBoundsPoint(accumulator, x, y, padding) {
285
+ accumulator.minX = Math.min(accumulator.minX, x - padding);
286
+ accumulator.minY = Math.min(accumulator.minY, y - padding);
287
+ accumulator.maxX = Math.max(accumulator.maxX, x + padding);
288
+ accumulator.maxY = Math.max(accumulator.maxY, y + padding);
289
+ }
290
+ function expandShapeBoundsPointForLane(state, x, y) {
291
+ const padding = getShapeBoundsLanePadding(state);
292
+ if (padding >= 0)
293
+ expandShapeBoundsPoint(state.accumulator, x, y, padding);
294
+ }
295
+ function expandShapeBoundsQuadratic(accumulator, p0x, p0y, p1x, p1y, p2x, p2y, padding) {
296
+ expandShapeBoundsPoint(accumulator, p0x, p0y, padding);
297
+ expandShapeBoundsPoint(accumulator, p2x, p2y, padding);
298
+ const denominatorX = p0x - 2 * p1x + p2x;
299
+ if (denominatorX !== 0) {
300
+ const t = (p0x - p1x) / denominatorX;
301
+ if (t > 0 && t < 1) {
302
+ expandShapeBoundsPoint(accumulator, getShapeBoundsQuadraticPoint(t, p0x, p1x, p2x), getShapeBoundsQuadraticPoint(t, p0y, p1y, p2y), padding);
303
+ }
304
+ }
305
+ const denominatorY = p0y - 2 * p1y + p2y;
306
+ if (denominatorY !== 0) {
307
+ const t = (p0y - p1y) / denominatorY;
308
+ if (t > 0 && t < 1) {
309
+ expandShapeBoundsPoint(accumulator, getShapeBoundsQuadraticPoint(t, p0x, p1x, p2x), getShapeBoundsQuadraticPoint(t, p0y, p1y, p2y), padding);
310
+ }
311
+ }
312
+ }
313
+ function finishShapeBoundsOpenSubpath(state, resetCurrentPoint) {
314
+ if (state.writesStroke && state.hasStroke && state.hasPendingSegment) {
315
+ if (state.strokeCap === 'square') {
316
+ expandShapeBoundsSquareCap(state, state.firstSegment.startX, state.firstSegment.startY, -1);
317
+ expandShapeBoundsSquareCap(state, state.pendingSegment.endX, state.pendingSegment.endY, 1);
318
+ }
319
+ }
320
+ state.hasFirstSegment = false;
321
+ state.hasPendingSegment = false;
322
+ if (resetCurrentPoint)
323
+ state.hasCurrentPoint = false;
324
+ }
325
+ function expandShapeBoundsSquareCap(state, x, y, direction) {
326
+ const segment = direction < 0 ? state.firstSegment : state.pendingSegment;
327
+ const tangentX = direction < 0 ? segment.startTangentX : segment.endTangentX;
328
+ const tangentY = direction < 0 ? segment.startTangentY : segment.endTangentY;
329
+ const halfWidth = state.strokeWidth / 2;
330
+ const extensionX = tangentX * halfWidth * direction;
331
+ const extensionY = tangentY * halfWidth * direction;
332
+ const normalX = -tangentY * halfWidth;
333
+ const normalY = tangentX * halfWidth;
334
+ expandShapeBoundsPoint(state.accumulator, x + extensionX + normalX, y + extensionY + normalY, 0);
335
+ expandShapeBoundsPoint(state.accumulator, x + extensionX - normalX, y + extensionY - normalY, 0);
336
+ }
337
+ function flushShapeBoundsPath(state) {
338
+ finishShapeBoundsOpenSubpath(state, true);
339
+ }
340
+ function getShapeBoundsCubicPoint(t, p0, p1, p2, p3) {
341
+ const u = 1 - t;
342
+ return u * u * u * p0 + 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t * p3;
343
+ }
344
+ function getShapeBoundsLanePadding(state) {
345
+ if (!state.writesStroke)
346
+ return 0;
347
+ return state.hasStroke ? state.strokeWidth / 2 : -1;
348
+ }
349
+ function getShapeBoundsQuadraticPoint(t, p0, p1, p2) {
350
+ const u = 1 - t;
351
+ return u * u * p0 + 2 * u * t * p1 + t * t * p2;
352
+ }
353
+ function lineShapeBoundsTo(state, x, y) {
354
+ ensureShapeBoundsCurrentPoint(state);
355
+ expandShapeBoundsLine(state, state.penX, state.penY, x, y);
356
+ if (state.writesStroke && state.hasStroke) {
357
+ setShapeBoundsTangent(state.tangentStart, x - state.penX, y - state.penY);
358
+ appendShapeBoundsSegment(state, state.penX, state.penY, x, y, state.tangentStart.x, state.tangentStart.y, state.tangentStart.x, state.tangentStart.y);
359
+ }
360
+ state.penX = x;
361
+ state.penY = y;
362
+ }
363
+ function moveShapeBoundsTo(state, x, y) {
364
+ finishShapeBoundsOpenSubpath(state, false);
365
+ state.hasCurrentPoint = true;
366
+ state.penX = x;
367
+ state.penY = y;
368
+ state.subpathStartX = x;
369
+ state.subpathStartY = y;
370
+ }
371
+ function quadraticShapeBoundsCurveTo(state, controlX, controlY, anchorX, anchorY) {
372
+ ensureShapeBoundsCurrentPoint(state);
373
+ const padding = getShapeBoundsLanePadding(state);
374
+ if (padding >= 0) {
375
+ expandShapeBoundsQuadratic(state.accumulator, state.penX, state.penY, controlX, controlY, anchorX, anchorY, padding);
376
+ }
377
+ if (state.writesStroke && state.hasStroke) {
378
+ setShapeBoundsTangent(state.tangentStart, controlX - state.penX, controlY - state.penY);
379
+ if (state.tangentStart.x === 0 && state.tangentStart.y === 0) {
380
+ setShapeBoundsTangent(state.tangentStart, anchorX - state.penX, anchorY - state.penY);
381
+ }
382
+ setShapeBoundsTangent(state.tangentEnd, anchorX - controlX, anchorY - controlY);
383
+ if (state.tangentEnd.x === 0 && state.tangentEnd.y === 0) {
384
+ setShapeBoundsTangent(state.tangentEnd, anchorX - state.penX, anchorY - state.penY);
385
+ }
386
+ appendShapeBoundsSegment(state, state.penX, state.penY, anchorX, anchorY, state.tangentStart.x, state.tangentStart.y, state.tangentEnd.x, state.tangentEnd.y);
387
+ }
388
+ state.penX = anchorX;
389
+ state.penY = anchorY;
390
+ }
391
+ function setShapeBoundsSegment(out, startX, startY, endX, endY, startTangentX, startTangentY, endTangentX, endTangentY) {
392
+ out.startX = startX;
393
+ out.startY = startY;
394
+ out.endX = endX;
395
+ out.endY = endY;
396
+ out.startTangentX = startTangentX;
397
+ out.startTangentY = startTangentY;
398
+ out.endTangentX = endTangentX;
399
+ out.endTangentY = endTangentY;
400
+ }
401
+ function setShapeBoundsStrokeStyle(state, width, caps, joints, miterLimit) {
402
+ flushShapeBoundsPath(state);
403
+ if (!state.writesStroke)
404
+ return;
405
+ state.strokeWidth = normalizeShapeStrokeWidth(width);
406
+ state.hasStroke = state.strokeWidth > 0;
407
+ state.strokeCap = caps;
408
+ state.strokeJoin = joints;
409
+ state.strokeMiterLimit = normalizeShapeStrokeMiterLimit(miterLimit);
410
+ }
411
+ function setShapeBoundsTangent(out, x, y) {
412
+ const length = Math.hypot(x, y);
413
+ if (length === 0) {
414
+ out.x = 0;
415
+ out.y = 0;
416
+ return;
417
+ }
418
+ out.x = x / length;
419
+ out.y = y / length;
420
+ }
421
+ function setShapeCommandArgumentCursor(cursor, argumentOffset, argumentCount) {
422
+ cursor.argumentOffset = argumentOffset;
423
+ cursor.argumentCount = argumentCount;
424
+ }
425
+ function writeShapeBoundsRectangle(out, accumulator) {
426
+ if (accumulator.minX === Infinity) {
427
+ out.x = 0;
428
+ out.y = 0;
429
+ out.width = 0;
430
+ out.height = 0;
431
+ return;
432
+ }
433
+ out.x = accumulator.minX;
434
+ out.y = accumulator.minY;
435
+ out.width = accumulator.maxX - accumulator.minX;
436
+ out.height = accumulator.maxY - accumulator.minY;
437
+ }
438
+ export const defaultShapeBoundsDrawEllipse = (context, command) => {
439
+ context.drawEllipse(command.getArgument(0), command.getArgument(1), command.getArgument(2), command.getArgument(3));
440
+ };
441
+ export const defaultShapeBoundsDrawPath = (context, command) => {
442
+ const pathCommands = command.getArgument(0);
443
+ const data = command.getArgument(1);
444
+ let dataIndex = 0;
445
+ for (const pathCommand of pathCommands) {
446
+ switch (pathCommand) {
447
+ case 0:
448
+ break;
449
+ case 1:
450
+ context.moveTo(data[dataIndex], data[dataIndex + 1]);
451
+ dataIndex += 2;
452
+ break;
453
+ case 2:
454
+ context.lineTo(data[dataIndex], data[dataIndex + 1]);
455
+ dataIndex += 2;
456
+ break;
457
+ case 3:
458
+ context.curveTo(data[dataIndex], data[dataIndex + 1], data[dataIndex + 2], data[dataIndex + 3]);
459
+ dataIndex += 4;
460
+ break;
461
+ case 4:
462
+ context.moveTo(data[dataIndex + 2], data[dataIndex + 3]);
463
+ dataIndex += 4;
464
+ break;
465
+ case 5:
466
+ context.lineTo(data[dataIndex + 2], data[dataIndex + 3]);
467
+ dataIndex += 4;
468
+ break;
469
+ case 6:
470
+ context.cubicCurveTo(data[dataIndex], data[dataIndex + 1], data[dataIndex + 2], data[dataIndex + 3], data[dataIndex + 4], data[dataIndex + 5]);
471
+ dataIndex += 6;
472
+ break;
473
+ case 7:
474
+ context.closePath();
475
+ break;
476
+ }
477
+ }
478
+ };
479
+ export const defaultShapeBoundsDrawRectangle = (context, command) => {
480
+ context.drawRectangle(command.getArgument(0), command.getArgument(1), command.getArgument(2), command.getArgument(3));
481
+ };
482
+ export const defaultShapeBoundsExpandPointPairs = (context, command) => {
483
+ const values = command.getArgument(0);
484
+ for (let i = 0; i + 1 < values.length; i += 2)
485
+ context.expandPoint(values[i], values[i + 1]);
486
+ };
487
+ export const defaultShapeBoundsFlush = (context) => {
488
+ context.flushPath();
489
+ };
490
+ export const defaultShapeBoundsLineStyle = (context, command) => {
491
+ context.setStrokeStyle(command.getArgument(0), command.getArgument(5), command.getArgument(6), command.getArgument(7));
492
+ };
493
+ export const defaultShapeBoundsLineTo = (context, command) => {
494
+ context.lineTo(command.getArgument(0), command.getArgument(1));
495
+ };
496
+ export const defaultShapeBoundsMoveTo = (context, command) => {
497
+ context.moveTo(command.getArgument(0), command.getArgument(1));
498
+ };
499
+ export function explainShapeBounds(source, mode = 'ink') {
500
+ const missingCommandKeys = [];
501
+ const seen = new Set();
502
+ let i = 0;
503
+ while (i < source.data.commands.length) {
504
+ const key = source.data.commands[i];
505
+ if (getShapeBoundsCommand(key) === null && !seen.has(key)) {
506
+ seen.add(key);
507
+ missingCommandKeys.push(key);
508
+ }
509
+ i += source.data.commands[i + 1] + 2;
510
+ }
511
+ return { complete: missingCommandKeys.length === 0, missingCommandKeys, mode };
512
+ }
513
+ export function normalizeShapeStrokeMiterLimit(miterLimit) {
514
+ return Number.isFinite(miterLimit) && miterLimit > 0 ? miterLimit : DEFAULT_SHAPE_STROKE_MITER_LIMIT;
515
+ }
516
+ export function normalizeShapeStrokeWidth(width) {
517
+ if (width === 0)
518
+ return 0;
519
+ return Number.isFinite(width) && width > 0 ? width : DEFAULT_SHAPE_STROKE_WIDTH;
520
+ }
521
+ export function setShapeBoundsGuard(guard) {
522
+ _shapeBoundsGuard = guard;
523
+ }
524
+ const DEFAULT_SHAPE_STROKE_MITER_LIMIT = 10;
525
+ const DEFAULT_SHAPE_STROKE_WIDTH = 1;
526
+ let _shapeBoundsGuard = null;
527
+ //# sourceMappingURL=shapeBounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapeBounds.js","sourceRoot":"","sources":["../src/shapeBounds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ShapeBoundsCommand, ShapeCommandKey } from '@flighthq/types/contract';
2
+ export declare function getShapeBoundsCommand(key: string): Readonly<ShapeBoundsCommand> | null;
3
+ export declare function getShapeBoundsCommandRegistryRevision(): number;
4
+ export declare function registerShapeBoundsCommand<K extends ShapeCommandKey>(command: ShapeBoundsCommand<K>): void;
5
+ export declare function unregisterShapeBoundsCommand(key: string): void;
6
+ //# sourceMappingURL=shapeBoundsRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapeBoundsRegistry.d.ts","sourceRoot":"","sources":["../src/shapeBoundsRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEpF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAEtF;AAED,wBAAgB,qCAAqC,IAAI,MAAM,CAE9D;AAED,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,eAAe,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,CAK1G;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG9D"}
@@ -0,0 +1,24 @@
1
+ export function getShapeBoundsCommand(key) {
2
+ return _commands.get(key) ?? null;
3
+ }
4
+ export function getShapeBoundsCommandRegistryRevision() {
5
+ return _revision;
6
+ }
7
+ export function registerShapeBoundsCommand(command) {
8
+ const previous = _commands.get(command.key);
9
+ _commands.set(command.key, command);
10
+ if (previous?.fillBounds === command.fillBounds && previous.strokeBounds === command.strokeBounds)
11
+ return;
12
+ _revision++;
13
+ }
14
+ export function unregisterShapeBoundsCommand(key) {
15
+ if (!_commands.delete(key))
16
+ return;
17
+ _revision++;
18
+ }
19
+ // Backend-neutral geometry is process policy rather than render-state policy: bounds are pulled by the
20
+ // scene graph before a renderer or state need exist. The registry starts empty and only explicit
21
+ // register* calls populate it; binding the same callbacks again is not a semantic change.
22
+ const _commands = new Map();
23
+ let _revision = 0;
24
+ //# sourceMappingURL=shapeBoundsRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapeBoundsRegistry.js","sourceRoot":"","sources":["../src/shapeBoundsRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAA4B,OAA8B;IAClG,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY;QAAE,OAAO;IAC1G,SAAS,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO;IACnC,SAAS,EAAE,CAAC;AACd,CAAC;AAED,uGAAuG;AACvG,iGAAiG;AACjG,0FAA0F;AAC1F,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwC,CAAC;AAClE,IAAI,SAAS,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"shapeFill.d.ts","sourceRoot":"","sources":["../src/shapeFill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAe,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQtG,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,CAAC,EAAE,MAAM,GACR,IAAI,CAsEN;AAMD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc/D;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,CAuCpG;AAGD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAcpF;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAQ5E"}
1
+ {"version":3,"file":"shapeFill.d.ts","sourceRoot":"","sources":["../src/shapeFill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAe,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQtG,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,CAAC,EAAE,MAAM,GACR,IAAI,CAsEN;AAMD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc/D;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,CAuCpG;AAGD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAcpF;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAQ5E"}
package/dist/shapeFill.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { CIRCLE_KAPPA } from '@flighthq/math/contract';
1
2
  import { PathCommand } from '@flighthq/types/contract';
2
3
  // Appends one shape geometry command (moveTo/lineTo/curveTo/cubicCurveTo and the drawCircle/Ellipse/
3
4
  // Rectangle/RoundRectangle/Path primitives) onto `path`, expanding primitives into MOVE/LINE/CURVE
@@ -136,10 +137,9 @@ export function hasShapeFill(commands) {
136
137
  }
137
138
  return false;
138
139
  }
139
- const KAPPA = 0.5522847498307936;
140
140
  function appendEllipseToPath(path, cx, cy, rx, ry) {
141
- const kx = rx * KAPPA;
142
- const ky = ry * KAPPA;
141
+ const kx = rx * CIRCLE_KAPPA;
142
+ const ky = ry * CIRCLE_KAPPA;
143
143
  pushVerb(path, PathCommand.MOVE_TO, cx + rx, cy);
144
144
  pushCubic(path, cx + rx, cy + ky, cx + kx, cy + ry, cx, cy + ry);
145
145
  pushCubic(path, cx - kx, cy + ry, cx - rx, cy + ky, cx - rx, cy);