@pixerate/editor 0.41.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +4 -0
- package/dist/vector/index.cjs +1605 -330
- package/dist/vector/index.cjs.map +1 -1
- package/dist/vector/index.d.cts +459 -13
- package/dist/vector/index.d.ts +459 -13
- package/dist/vector/index.js +1369 -94
- package/dist/vector/index.js.map +1 -1
- package/package.json +1 -1
package/dist/vector/index.d.ts
CHANGED
|
@@ -138,6 +138,17 @@ interface VectorNodeBase {
|
|
|
138
138
|
* the blend options change, and are locked (clicks select the blend group).
|
|
139
139
|
*/
|
|
140
140
|
blendStep?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Live path effects, applied top to bottom: each acts on every path above it (the node's own
|
|
143
|
+
* outline, or a group's children, then the result of the effects before it), and effects after a
|
|
144
|
+
* repeater act on its copies. The stored anchors and children never change.
|
|
145
|
+
*/
|
|
146
|
+
effects?: VectorEffect[] | null;
|
|
147
|
+
/**
|
|
148
|
+
* As an operand of a live boolean group: how it combines with the result of the operands below
|
|
149
|
+
* it. Absent: the group's `liveBoolean` operation.
|
|
150
|
+
*/
|
|
151
|
+
booleanOperation?: VectorBooleanOperation | null;
|
|
141
152
|
}
|
|
142
153
|
/** A shape made of one or more subpaths (holes and compound shapes included). */
|
|
143
154
|
interface VectorPathNode extends VectorNodeBase, VectorStyle {
|
|
@@ -183,6 +194,12 @@ interface VectorGroupNode extends VectorNodeBase {
|
|
|
183
194
|
* stacking order, and the steps between them are regenerated whenever a key changes.
|
|
184
195
|
*/
|
|
185
196
|
blend?: VectorBlend | null;
|
|
197
|
+
/**
|
|
198
|
+
* Makes the group a live boolean: its children stay editable operands, folded bottom to top
|
|
199
|
+
* (each by its own `booleanOperation` or this one), and the group draws as the result in the
|
|
200
|
+
* bottom operand's style.
|
|
201
|
+
*/
|
|
202
|
+
liveBoolean?: VectorBooleanOperation | null;
|
|
186
203
|
}
|
|
187
204
|
type VectorNode = VectorPathNode | VectorGroupNode;
|
|
188
205
|
/** A vector drawing: an artboard and its nodes, bottom to top. */
|
|
@@ -265,6 +282,109 @@ declare const VECTOR_PATHFINDER_OPERATIONS: readonly VectorPathfinderOperation[]
|
|
|
265
282
|
type VectorArrange = 'front' | 'forward' | 'backward' | 'back';
|
|
266
283
|
/** Average: line anchors up on a horizontal line (same y), a vertical one (same x), or both. */
|
|
267
284
|
type VectorAverageAxis = 'horizontal' | 'vertical' | 'both';
|
|
285
|
+
/**
|
|
286
|
+
* Live path effects (After Effects' path operators): `trim` (Trim Paths), `roundCorners`,
|
|
287
|
+
* `puckerBloat`, `twist`, `zigzag`, `wiggle` (Wiggle Paths), `offset` (Offset Paths), `merge`
|
|
288
|
+
* (Merge Paths) and `repeater`.
|
|
289
|
+
*/
|
|
290
|
+
type VectorEffectType = 'trim' | 'roundCorners' | 'puckerBloat' | 'twist' | 'zigzag' | 'wiggle' | 'offset' | 'merge' | 'repeater';
|
|
291
|
+
declare const VECTOR_EFFECT_TYPES: readonly VectorEffectType[];
|
|
292
|
+
/** Merge Paths modes: a compound path (no boolean), union, the first minus the others, intersection or exclusion. */
|
|
293
|
+
type VectorMergeMode = 'merge' | 'add' | 'subtract' | 'intersect' | 'exclude';
|
|
294
|
+
declare const VECTOR_MERGE_MODES: readonly VectorMergeMode[];
|
|
295
|
+
/** Parameters of each effect type. Lengths are in the node's own units, angles in degrees, percentages 0–100. */
|
|
296
|
+
interface VectorEffectParamsMap {
|
|
297
|
+
trim: {
|
|
298
|
+
/** Start and end of the kept part, percent of the length (swapped when start > end). */
|
|
299
|
+
start: number;
|
|
300
|
+
end: number;
|
|
301
|
+
/** Shifts both, in degrees (360° = once round). */
|
|
302
|
+
offset: number;
|
|
303
|
+
/**
|
|
304
|
+
* `simultaneous`: every path trimmed by the same fractions of its own length;
|
|
305
|
+
* `individual`: the paths laid end to end in stacking order and trimmed as one length.
|
|
306
|
+
*/
|
|
307
|
+
mode: 'simultaneous' | 'individual';
|
|
308
|
+
};
|
|
309
|
+
roundCorners: {
|
|
310
|
+
radius: number;
|
|
311
|
+
};
|
|
312
|
+
/** Percent, −100 (pucker: spiky) to 100 (bloat: bulging). */
|
|
313
|
+
puckerBloat: {
|
|
314
|
+
amount: number;
|
|
315
|
+
};
|
|
316
|
+
twist: {
|
|
317
|
+
/** Turn at the farthest point from the centre (none at the centre). */
|
|
318
|
+
angle: number;
|
|
319
|
+
/** The centre as an offset from the middle of the paths' bounds. */
|
|
320
|
+
center: Vec2;
|
|
321
|
+
};
|
|
322
|
+
zigzag: {
|
|
323
|
+
/** How far the points move to either side. */
|
|
324
|
+
size: number;
|
|
325
|
+
/** Ridges per segment. */
|
|
326
|
+
ridges: number;
|
|
327
|
+
/** Rounded waves instead of sharp zig zags. */
|
|
328
|
+
smooth: boolean;
|
|
329
|
+
};
|
|
330
|
+
wiggle: {
|
|
331
|
+
/** Largest displacement. */
|
|
332
|
+
size: number;
|
|
333
|
+
/** Points added per segment. */
|
|
334
|
+
detail: number;
|
|
335
|
+
smooth: boolean;
|
|
336
|
+
/** Wiggles per second. */
|
|
337
|
+
speed: number;
|
|
338
|
+
/** Percent: how much neighbouring points move together. */
|
|
339
|
+
correlation: number;
|
|
340
|
+
/** Degrees (360° = one wiggle). */
|
|
341
|
+
phase: number;
|
|
342
|
+
/** The same seed (and time) always gives the same wiggle. */
|
|
343
|
+
seed: number;
|
|
344
|
+
/** Seconds: where along the wiggle's motion it is drawn. */
|
|
345
|
+
time: number;
|
|
346
|
+
};
|
|
347
|
+
offset: {
|
|
348
|
+
/** Grows (positive) or shrinks (negative) the shapes. */
|
|
349
|
+
amount: number;
|
|
350
|
+
join: VectorLineJoin;
|
|
351
|
+
miterLimit: number;
|
|
352
|
+
/** Copies, copy i offset by `amount · (i + 1 + copyOffset)`. */
|
|
353
|
+
copies: number;
|
|
354
|
+
copyOffset: number;
|
|
355
|
+
};
|
|
356
|
+
merge: {
|
|
357
|
+
mode: VectorMergeMode;
|
|
358
|
+
};
|
|
359
|
+
repeater: {
|
|
360
|
+
/** Copies, the original included; a fraction fades the last copy. */
|
|
361
|
+
copies: number;
|
|
362
|
+
/** Shifts the copies along: copy i is transformed `i + offset` times. */
|
|
363
|
+
offset: number;
|
|
364
|
+
/** Each step: move, about `anchor` turn by `rotation` and scale by `scale` percent. */
|
|
365
|
+
position: Vec2;
|
|
366
|
+
/** Offset from the middle of the paths' bounds. */
|
|
367
|
+
anchor: Vec2;
|
|
368
|
+
rotation: number;
|
|
369
|
+
scale: Vec2;
|
|
370
|
+
/** Percent opacity of the first and last copies (in between interpolated). */
|
|
371
|
+
startOpacity: number;
|
|
372
|
+
endOpacity: number;
|
|
373
|
+
/** `below`: each copy draws under the one before it; `above`: over it. */
|
|
374
|
+
composite: 'below' | 'above';
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/** One entry of an effect stack. */
|
|
378
|
+
type VectorEffect = {
|
|
379
|
+
[K in VectorEffectType]: {
|
|
380
|
+
/** Unique within the node. */
|
|
381
|
+
id: string;
|
|
382
|
+
type: K;
|
|
383
|
+
/** Disabled effects are skipped. Default true. */
|
|
384
|
+
enabled?: boolean;
|
|
385
|
+
params: VectorEffectParamsMap[K];
|
|
386
|
+
};
|
|
387
|
+
}[VectorEffectType];
|
|
268
388
|
/** Identifies one segment of a path node: from anchor `segment` to the next. */
|
|
269
389
|
interface VectorSegmentRef {
|
|
270
390
|
nodeId: string;
|
|
@@ -295,7 +415,7 @@ declare function subpathSegment(sp: VectorSubpath, i: number): Point[];
|
|
|
295
415
|
declare function subpathsToBezier(subpaths: readonly VectorSubpath[], options?: {
|
|
296
416
|
corners?: boolean;
|
|
297
417
|
}): BezierPath;
|
|
298
|
-
/** The node's outline as Bézier commands. Groups have none. */
|
|
418
|
+
/** The node's outline as Bézier commands, as drawn (path effects applied). Groups have none. */
|
|
299
419
|
declare function vectorNodeToBezier(node: VectorNode): BezierPath;
|
|
300
420
|
/** SVG path data (`d`) of a path node or subpaths. */
|
|
301
421
|
declare function vectorPathData(input: VectorPathNode | readonly VectorSubpath[], precision?: number): string;
|
|
@@ -321,8 +441,13 @@ declare function locateVectorNode(nodes: VectorNode[], id: string): {
|
|
|
321
441
|
declare function collectPathNodes(node: VectorNode): VectorPathNode[];
|
|
322
442
|
/** The node's local → parent matrix (identity when it has no `transform`). */
|
|
323
443
|
declare function nodeMatrix(node: VectorNode): AffineMatrix;
|
|
324
|
-
/**
|
|
325
|
-
|
|
444
|
+
/**
|
|
445
|
+
* A path node's outline in the space `parent` maps to (default: its parent's space), as drawn:
|
|
446
|
+
* live corners cut and path effects applied (`{ effects: false }`: the stored path only).
|
|
447
|
+
*/
|
|
448
|
+
declare function vectorPathWorldBezier(node: VectorPathNode, parent?: AffineMatrix, options?: {
|
|
449
|
+
effects?: boolean;
|
|
450
|
+
}): BezierPath;
|
|
326
451
|
/**
|
|
327
452
|
* Geometric bounds of a node (stroke width not included) in the space `parent` maps to —
|
|
328
453
|
* by default the node's parent space, which for top-level nodes is the document. Null when
|
|
@@ -335,19 +460,27 @@ declare function unionBounds(list: readonly (VectorBounds | null | undefined)[])
|
|
|
335
460
|
declare function boundsIntersect(a: VectorBounds, b: VectorBounds): boolean;
|
|
336
461
|
/** A box from two corners in any order. */
|
|
337
462
|
declare function boundsFromPoints(a: Vec2, b: Vec2): VectorBounds;
|
|
463
|
+
/** Options of `hitTestVectorNode`. */
|
|
464
|
+
interface VectorHitTestOptions {
|
|
465
|
+
/**
|
|
466
|
+
* Live groups (live booleans or groups with effects) hit by their children as stored rather
|
|
467
|
+
* than by what they draw: the groups being edited.
|
|
468
|
+
*/
|
|
469
|
+
entered?: ReadonlySet<string>;
|
|
470
|
+
}
|
|
338
471
|
/**
|
|
339
|
-
* Whether `p` hits a node
|
|
340
|
-
*
|
|
341
|
-
* any visible child is.
|
|
472
|
+
* Whether `p` hits a node as drawn (path effects and live booleans applied): inside its fill
|
|
473
|
+
* (when it has one), on its stroke (its alignment and arrowheads respected) or within
|
|
474
|
+
* `tolerance` of either. A group is hit when any visible child is.
|
|
342
475
|
*/
|
|
343
|
-
declare function hitTestVectorNode(node: VectorNode, p: Vec2, tolerance?: number, parent?: AffineMatrix): boolean;
|
|
476
|
+
declare function hitTestVectorNode(node: VectorNode, p: Vec2, tolerance?: number, parent?: AffineMatrix, options?: VectorHitTestOptions): boolean;
|
|
344
477
|
/**
|
|
345
478
|
* The area a path node's stroke paints (alignment, caps, joins, dashes and arrowheads
|
|
346
479
|
* included), as a filled path in the space `parent` maps to. Empty without a stroke.
|
|
347
480
|
*/
|
|
348
481
|
declare function vectorStrokeOutline(node: VectorPathNode, parent?: AffineMatrix): BezierPath;
|
|
349
482
|
/** The topmost node hit by `p` (skipping hidden and locked ones), or null. */
|
|
350
|
-
declare function hitTestVectorNodes(nodes: readonly VectorNode[], p: Vec2, tolerance?: number): VectorNode | null;
|
|
483
|
+
declare function hitTestVectorNodes(nodes: readonly VectorNode[], p: Vec2, tolerance?: number, options?: VectorHitTestOptions): VectorNode | null;
|
|
351
484
|
interface NearestSegment {
|
|
352
485
|
subpath: number;
|
|
353
486
|
segment: number;
|
|
@@ -1424,10 +1557,15 @@ declare class VectorEditorController {
|
|
|
1424
1557
|
private cursorFor;
|
|
1425
1558
|
private snapshot;
|
|
1426
1559
|
private restore;
|
|
1427
|
-
/**
|
|
1560
|
+
/**
|
|
1561
|
+
* Records the change from `before` to the current state as one undo step. Consecutive
|
|
1562
|
+
* changes with the same `merge` key (a slider drag) fold into one step.
|
|
1563
|
+
*/
|
|
1428
1564
|
private commit;
|
|
1429
|
-
/** Runs `fn` (which updates fields) and records it as one undo step. */
|
|
1565
|
+
/** Runs `fn` (which updates fields) and records it as one undo step (merged by `merge` key). */
|
|
1430
1566
|
private change;
|
|
1567
|
+
/** Ends a merged edit (a slider released): the next change starts a new undo step. */
|
|
1568
|
+
endMergedEdit(): void;
|
|
1431
1569
|
private setDoc;
|
|
1432
1570
|
private replaceNode;
|
|
1433
1571
|
private freshIds;
|
|
@@ -1588,6 +1726,43 @@ declare class VectorEditorController {
|
|
|
1588
1726
|
outlineStroke(options?: {
|
|
1589
1727
|
ids?: readonly string[];
|
|
1590
1728
|
}): string[];
|
|
1729
|
+
/** Selected (or given) nodes that can carry effects: the roots of the selection. */
|
|
1730
|
+
private effectTargets;
|
|
1731
|
+
/**
|
|
1732
|
+
* Adds an effect of `type` to the selected (or given) nodes, at the bottom of each stack (or
|
|
1733
|
+
* at `index`), with default parameters merged with `params`. A repeater's copies start one
|
|
1734
|
+
* shape width apart. One undo step; returns the new effect ids (one per node, in order).
|
|
1735
|
+
*/
|
|
1736
|
+
addEffect(type: VectorEffectType, options?: {
|
|
1737
|
+
ids?: readonly string[];
|
|
1738
|
+
params?: Record<string, unknown>;
|
|
1739
|
+
index?: number;
|
|
1740
|
+
}): string[];
|
|
1741
|
+
private editEffects;
|
|
1742
|
+
/**
|
|
1743
|
+
* Turns an effect on or off and changes its parameters (unknown or invalid values are
|
|
1744
|
+
* ignored). With `merge` (true, or a key of your own), consecutive updates of the same effect
|
|
1745
|
+
* fold into one undo step, as a slider drag should; call `endMergedEdit` when it ends.
|
|
1746
|
+
*/
|
|
1747
|
+
updateEffect(nodeId: string, effectId: string, patch: {
|
|
1748
|
+
enabled?: boolean;
|
|
1749
|
+
params?: Record<string, unknown>;
|
|
1750
|
+
}, options?: {
|
|
1751
|
+
merge?: boolean | string;
|
|
1752
|
+
}): VectorActionResult;
|
|
1753
|
+
/** Removes an effect from a node's stack. */
|
|
1754
|
+
removeEffect(nodeId: string, effectId: string): VectorActionResult;
|
|
1755
|
+
/** Moves an effect to position `index` of its stack (0 is applied first). */
|
|
1756
|
+
moveEffect(nodeId: string, effectId: string, index: number): VectorActionResult;
|
|
1757
|
+
/**
|
|
1758
|
+
* Expand Appearance: bakes the path effects and live booleans of the selected (or given)
|
|
1759
|
+
* nodes, and of everything inside them, into plain paths. A node keeps its id (a group when
|
|
1760
|
+
* it draws as several shapes); the shapes it made get new ids. Returns the ids of the expanded
|
|
1761
|
+
* nodes (empty when none was live).
|
|
1762
|
+
*/
|
|
1763
|
+
expandAppearance(options?: {
|
|
1764
|
+
ids?: readonly string[];
|
|
1765
|
+
}): string[];
|
|
1591
1766
|
rename(id: string, name: string): VectorActionResult;
|
|
1592
1767
|
setVisible(id: string, visible: boolean): VectorActionResult;
|
|
1593
1768
|
setLocked(id: string, locked: boolean): VectorActionResult;
|
|
@@ -1675,11 +1850,20 @@ declare class VectorEditorController {
|
|
|
1675
1850
|
/**
|
|
1676
1851
|
* Combines the selected paths (two or more) into one with a boolean operation. `subtract`
|
|
1677
1852
|
* removes the upper shapes from the lowest one. The result takes the lowest shape's style
|
|
1678
|
-
* and place.
|
|
1853
|
+
* and place. Shapes take part as drawn (path effects and live booleans applied).
|
|
1854
|
+
*
|
|
1855
|
+
* With `live`, the operands stay editable instead: a lone live boolean group gets the
|
|
1856
|
+
* operation (its operands follow it again), operands of live boolean groups get it as their
|
|
1857
|
+
* own, and anything else (two or more nodes with one parent) is wrapped in a new live boolean
|
|
1858
|
+
* group. Returns the result's (or the live group's) id, or null.
|
|
1679
1859
|
*/
|
|
1680
1860
|
booleanOp(op: VectorBooleanOperation, options?: {
|
|
1681
1861
|
ids?: readonly string[];
|
|
1862
|
+
live?: boolean;
|
|
1682
1863
|
}): string | null;
|
|
1864
|
+
/** Whether stored node `rootId` holds `id` as drawn (`id` may be an expanded path inside it). */
|
|
1865
|
+
private holds;
|
|
1866
|
+
private liveBooleanOp;
|
|
1683
1867
|
/** Joins the selected paths into one compound path (subpaths kept, lowest style). */
|
|
1684
1868
|
combine(options?: {
|
|
1685
1869
|
ids?: readonly string[];
|
|
@@ -1922,6 +2106,8 @@ declare class VectorEditorController {
|
|
|
1922
2106
|
private hitCornerWidget;
|
|
1923
2107
|
private hitAnchor;
|
|
1924
2108
|
/** Deepest unlocked visible path under `p`. */
|
|
2109
|
+
/** Live groups being edited (selected, or holding the selection or the edited path): their children are hit as stored. */
|
|
2110
|
+
private enteredGroups;
|
|
1925
2111
|
private hitPath;
|
|
1926
2112
|
/** Endpoints of open subpaths of unlocked visible paths (pen tool resumes from them). */
|
|
1927
2113
|
private openEndpoints;
|
|
@@ -1986,6 +2172,153 @@ declare function scaleFor(handle: VectorTransformHandle, b: VectorBounds, p: Vec
|
|
|
1986
2172
|
origin: Vec2;
|
|
1987
2173
|
};
|
|
1988
2174
|
|
|
2175
|
+
/**
|
|
2176
|
+
* Live appearance: path effect stacks and live boolean groups, evaluated on demand while the
|
|
2177
|
+
* stored anchors and children stay editable.
|
|
2178
|
+
*
|
|
2179
|
+
* `expandVectorAppearance` is the one place the effected geometry is made (cached per node
|
|
2180
|
+
* object, so an edit recomputes only the nodes it replaced). Rendering, hit-testing, bounds,
|
|
2181
|
+
* snapping, booleans, the Pathfinder, the Shape Builder and SVG export all read it, the way they
|
|
2182
|
+
* read live corners through `subpathsToBezier`; Expand Appearance stores it.
|
|
2183
|
+
*
|
|
2184
|
+
* Stacking follows After Effects' shape layers (effectcraft `crates/render/src/shapes.rs`): an
|
|
2185
|
+
* effect acts on every path above it — the node's own outline, or for a group every path of its
|
|
2186
|
+
* children (nested groups included, as drawn by their own effects) — in the order of the stack,
|
|
2187
|
+
* and effects placed after a repeater act on its copies. The result paints with the style of the
|
|
2188
|
+
* path each shape came from; Merge Paths and live booleans paint with the bottom one's.
|
|
2189
|
+
*
|
|
2190
|
+
* Live booleans fold their operands bottom to top, each combined with the result below it by its
|
|
2191
|
+
* own operation or the group's, and every prefix of the fold is cached under a rolling hash of the
|
|
2192
|
+
* operands it covers, so editing one operand recombines only the operands from it up; the cache
|
|
2193
|
+
* drops its least recently used half when full. Live groups are hit by their result except while
|
|
2194
|
+
* they are being edited (`vectorEnteredGroups`).
|
|
2195
|
+
*
|
|
2196
|
+
* Ported from ArtCraft (MIT OR Apache-2.0, © ArtCraft Team and contributors; see
|
|
2197
|
+
* THIRD_PARTY_NOTICES.md): the stacking rule of effectcraft `crates/render/src/shapes.rs`
|
|
2198
|
+
* (`collect()`); figcraft `crates/render/src/boolean.rs` (`fold_cached`, `PathCache`) and
|
|
2199
|
+
* `crates/engine/src/booleans.rs` (`operand_op`, `result_outline`); and the live-object model of
|
|
2200
|
+
* vectorcraft `crates/doc/src/live.rs` (`expand_live`, `expanded_group`, `subtree_has_live`).
|
|
2201
|
+
*/
|
|
2202
|
+
|
|
2203
|
+
/** One shape of a node's appearance: a path in the node's own space, painted in `source`'s style. */
|
|
2204
|
+
interface VectorAppearanceShape {
|
|
2205
|
+
/** The path whose style paints it. */
|
|
2206
|
+
source: VectorPathNode;
|
|
2207
|
+
path: BezierPath;
|
|
2208
|
+
/** Opacity factor relative to the node (its own opacity not included). */
|
|
2209
|
+
opacity: number;
|
|
2210
|
+
/** Draw-order key (compared element by element). */
|
|
2211
|
+
order: number[];
|
|
2212
|
+
}
|
|
2213
|
+
/** Default parameters of each effect type. */
|
|
2214
|
+
declare const VECTOR_EFFECT_DEFAULTS: {
|
|
2215
|
+
readonly [K in VectorEffectType]: VectorEffectParamsMap[K];
|
|
2216
|
+
};
|
|
2217
|
+
declare const VECTOR_EFFECT_LABELS: Record<VectorEffectType, string>;
|
|
2218
|
+
/** How a panel edits one effect parameter. */
|
|
2219
|
+
type VectorEffectParamSpec = {
|
|
2220
|
+
key: string;
|
|
2221
|
+
label: string;
|
|
2222
|
+
kind: 'number';
|
|
2223
|
+
min?: number;
|
|
2224
|
+
max?: number;
|
|
2225
|
+
step: number;
|
|
2226
|
+
slider?: boolean;
|
|
2227
|
+
} | {
|
|
2228
|
+
key: string;
|
|
2229
|
+
label: string;
|
|
2230
|
+
kind: 'vec2';
|
|
2231
|
+
step: number;
|
|
2232
|
+
} | {
|
|
2233
|
+
key: string;
|
|
2234
|
+
label: string;
|
|
2235
|
+
kind: 'boolean';
|
|
2236
|
+
} | {
|
|
2237
|
+
key: string;
|
|
2238
|
+
label: string;
|
|
2239
|
+
kind: 'select';
|
|
2240
|
+
options: {
|
|
2241
|
+
value: string;
|
|
2242
|
+
label: string;
|
|
2243
|
+
}[];
|
|
2244
|
+
};
|
|
2245
|
+
/** The editable parameters of each effect type, in panel order. */
|
|
2246
|
+
declare const VECTOR_EFFECT_PARAM_SPECS: Record<VectorEffectType, VectorEffectParamSpec[]>;
|
|
2247
|
+
/**
|
|
2248
|
+
* Effect parameters with defaults filled in and invalid values dropped (unknown keys go too).
|
|
2249
|
+
* Returns null for an unknown type.
|
|
2250
|
+
*/
|
|
2251
|
+
declare function normalizeVectorEffectParams<K extends VectorEffectType>(type: K, params: Record<string, unknown> | null | undefined, base?: VectorEffectParamsMap[K]): VectorEffectParamsMap[K] | null;
|
|
2252
|
+
/** A new effect of `type` (defaults merged with `params`), or null for an unknown type. */
|
|
2253
|
+
declare function createVectorEffect<K extends VectorEffectType>(type: K, id: string, params?: Partial<VectorEffectParamsMap[K]> | Record<string, unknown>): Extract<VectorEffect, {
|
|
2254
|
+
type: K;
|
|
2255
|
+
}> | null;
|
|
2256
|
+
/** The node's effects that take part (enabled, of a known type). */
|
|
2257
|
+
declare function activeVectorEffects(node: VectorNode): VectorEffect[];
|
|
2258
|
+
/** Whether the node itself draws differently from its stored geometry (effects or a live boolean). */
|
|
2259
|
+
declare function hasOwnVectorAppearance(node: VectorNode): boolean;
|
|
2260
|
+
/** Whether the node or anything inside it has a live appearance. */
|
|
2261
|
+
declare function hasVectorAppearance(node: VectorNode): boolean;
|
|
2262
|
+
/** A live boolean group (its children are operands). */
|
|
2263
|
+
declare function isVectorLiveBoolean(node: VectorNode | null | undefined): node is VectorGroupNode & {
|
|
2264
|
+
liveBoolean: VectorBooleanOperation;
|
|
2265
|
+
};
|
|
2266
|
+
/** How operand `child` of a live boolean group combines with the operands below it. */
|
|
2267
|
+
declare function vectorOperandOperation(group: VectorGroupNode, child: VectorNode): VectorBooleanOperation;
|
|
2268
|
+
/** How many boolean steps (one operand combined with the result below it) live booleans have computed: what a cache miss costs. */
|
|
2269
|
+
declare function vectorLiveBooleanSteps(): number;
|
|
2270
|
+
/** Empties the live boolean prefix cache. */
|
|
2271
|
+
declare function clearVectorLiveBooleanCache(): void;
|
|
2272
|
+
/** One operand of a live boolean: its outline (group space), fill rule and operation (unused for the bottom one). */
|
|
2273
|
+
interface VectorBooleanOperand {
|
|
2274
|
+
path: BezierPath;
|
|
2275
|
+
fillRule: VectorFillRule;
|
|
2276
|
+
operation: VectorBooleanOperation;
|
|
2277
|
+
}
|
|
2278
|
+
/**
|
|
2279
|
+
* The result of folding `operands` bottom to top, reusing the longest cached prefix: only the
|
|
2280
|
+
* operands above it are combined. Invalid geometry gives an empty path.
|
|
2281
|
+
*/
|
|
2282
|
+
declare function foldVectorBooleanOperands(operands: readonly VectorBooleanOperand[]): BezierPath;
|
|
2283
|
+
/** Applies an effect stack to shapes, top to bottom (disabled effects skipped). */
|
|
2284
|
+
declare function applyVectorEffects(shapes: readonly VectorAppearanceShape[], effects: readonly VectorEffect[] | null | undefined): VectorAppearanceShape[];
|
|
2285
|
+
/**
|
|
2286
|
+
* What a node draws as: shapes in its own space (its `transform` and opacity not applied),
|
|
2287
|
+
* bottom to top, with its effects and those of everything inside it applied. Cached per node
|
|
2288
|
+
* object.
|
|
2289
|
+
*/
|
|
2290
|
+
declare function vectorAppearanceShapes(node: VectorNode): VectorAppearanceShape[];
|
|
2291
|
+
/** Everything a node draws as one path in its own space (live corners cut, effects applied). */
|
|
2292
|
+
declare function vectorAppearanceOutline(node: VectorNode): BezierPath;
|
|
2293
|
+
/** What a node draws as, one plain path per shape (ids `<id>~fx<n>`, opacity relative to the node). */
|
|
2294
|
+
declare function vectorAppearanceNodes(node: VectorNode): VectorPathNode[];
|
|
2295
|
+
/**
|
|
2296
|
+
* The node as plain geometry: path effects and live booleans evaluated into paths (the node
|
|
2297
|
+
* itself when nothing inside it is live). A path keeps its id when it draws as one shape;
|
|
2298
|
+
* otherwise, like any live group, it becomes a group with that id holding one path per shape
|
|
2299
|
+
* (ids `<id>~fx<n>`). Groups without effects of their own keep their structure. Cached per node.
|
|
2300
|
+
*/
|
|
2301
|
+
declare function expandVectorAppearance(node: VectorNode): VectorNode;
|
|
2302
|
+
/** Every node of a list expanded (the same array when nothing in it is live). */
|
|
2303
|
+
declare function expandVectorAppearances(nodes: readonly VectorNode[]): VectorNode[];
|
|
2304
|
+
/**
|
|
2305
|
+
* Reads effects from untrusted data (JSON, agent input): unknown types and malformed entries are
|
|
2306
|
+
* dropped, parameters normalized, ids made unique.
|
|
2307
|
+
*/
|
|
2308
|
+
declare function sanitizeVectorEffects(value: unknown): VectorEffect[];
|
|
2309
|
+
/**
|
|
2310
|
+
* Effect parameters carried through a linear map baked into a node's geometry (scaling or
|
|
2311
|
+
* flipping it): offsets and positions move with it, angles turn the other way when it mirrors.
|
|
2312
|
+
* Lengths such as sizes and radii are kept, like stroke widths.
|
|
2313
|
+
*/
|
|
2314
|
+
declare function transformVectorEffects(effects: readonly VectorEffect[], m: AffineMatrix): VectorEffect[];
|
|
2315
|
+
/**
|
|
2316
|
+
* The live groups (live booleans and groups with effects) being edited: those in `ids` and those
|
|
2317
|
+
* holding a node in `ids`. Their children are hit and outlined as stored instead of as drawn, so
|
|
2318
|
+
* each operand can be picked (figcraft `crates/engine/src/booleans.rs`, `result_outline`).
|
|
2319
|
+
*/
|
|
2320
|
+
declare function vectorEnteredGroups(nodes: readonly VectorNode[], ids: readonly string[]): Set<string>;
|
|
2321
|
+
|
|
1989
2322
|
interface VectorRenderPath {
|
|
1990
2323
|
kind: 'path';
|
|
1991
2324
|
id: string;
|
|
@@ -2207,6 +2540,8 @@ declare const VECTOR_BUILDER_HATCH_GAP = 6;
|
|
|
2207
2540
|
declare function getVectorSceneRenderData(state: Pick<VectorEditorState, 'document' | 'viewport'>, options?: {
|
|
2208
2541
|
idPrefix?: string;
|
|
2209
2542
|
}): VectorSceneRenderData;
|
|
2543
|
+
/** Live groups being edited in `state` (see `vectorEnteredGroups`). */
|
|
2544
|
+
declare function getVectorEnteredGroups(state: Pick<VectorEditorState, 'document' | 'selection' | 'editingId'>): Set<string>;
|
|
2210
2545
|
/** The editing overlay in screen pixels. Render it on top of the scene, untransformed. */
|
|
2211
2546
|
declare function getVectorOverlayRenderData(state: VectorEditorState): VectorOverlayRenderData;
|
|
2212
2547
|
/** What the Blend controls of a toolbar or style panel show. */
|
|
@@ -2374,6 +2709,33 @@ declare const VECTOR_EDIT_TOGGLES: readonly {
|
|
|
2374
2709
|
label: string;
|
|
2375
2710
|
title: string;
|
|
2376
2711
|
}[];
|
|
2712
|
+
/** One effect of the listed stack, with what a panel needs to edit it. */
|
|
2713
|
+
interface VectorEffectsPanelItem {
|
|
2714
|
+
id: string;
|
|
2715
|
+
type: VectorEffectType;
|
|
2716
|
+
label: string;
|
|
2717
|
+
enabled: boolean;
|
|
2718
|
+
params: Record<string, unknown>;
|
|
2719
|
+
specs: readonly VectorEffectParamSpec[];
|
|
2720
|
+
}
|
|
2721
|
+
/** What an Effects panel shows for the selection. */
|
|
2722
|
+
interface VectorEffectsPanelData {
|
|
2723
|
+
/** The node whose stack is listed (when one node is selected), else null. */
|
|
2724
|
+
nodeId: string | null;
|
|
2725
|
+
/** Selected nodes an added effect goes to. */
|
|
2726
|
+
count: number;
|
|
2727
|
+
/** The listed stack, applied top to bottom. */
|
|
2728
|
+
effects: VectorEffectsPanelItem[];
|
|
2729
|
+
/** Something selected is live (Expand Appearance applies). */
|
|
2730
|
+
expandable: boolean;
|
|
2731
|
+
}
|
|
2732
|
+
/** Effect types in menu order, with their names. */
|
|
2733
|
+
declare const VECTOR_EFFECT_MENU: readonly {
|
|
2734
|
+
type: VectorEffectType;
|
|
2735
|
+
label: string;
|
|
2736
|
+
}[];
|
|
2737
|
+
/** The Effects panel of the selection, or null when nothing that takes effects is selected. */
|
|
2738
|
+
declare function getVectorEffectsPanel(state: Pick<VectorEditorState, 'document' | 'selection'>): VectorEffectsPanelData | null;
|
|
2377
2739
|
|
|
2378
2740
|
interface VectorCommandOptions {
|
|
2379
2741
|
/** Id prefix (default `vector.`); use one per editor when several are registered. */
|
|
@@ -2419,6 +2781,12 @@ interface VectorNodeListing {
|
|
|
2419
2781
|
};
|
|
2420
2782
|
/** An in-between generated by a blend (locked; changes come from its keys). */
|
|
2421
2783
|
blendStep?: boolean;
|
|
2784
|
+
/** The node's live path effects, applied in order. */
|
|
2785
|
+
effects?: VectorEffect[];
|
|
2786
|
+
/** A live boolean group's operation (its children are the operands). */
|
|
2787
|
+
liveBoolean?: VectorBooleanOperation;
|
|
2788
|
+
/** An operand's own operation in a live boolean group. */
|
|
2789
|
+
booleanOperation?: VectorBooleanOperation;
|
|
2422
2790
|
}
|
|
2423
2791
|
/**
|
|
2424
2792
|
* Palette and agent commands for a vector editor: list, select, add shapes and paths, style,
|
|
@@ -2756,10 +3124,13 @@ interface VectorPathEntry {
|
|
|
2756
3124
|
}
|
|
2757
3125
|
/**
|
|
2758
3126
|
* The path nodes inside `roots` (or every node when `roots` is null), bottom to top, with their
|
|
2759
|
-
* parent matrices. Hidden nodes are skipped, and locked ones unless `locked` is true.
|
|
3127
|
+
* parent matrices. Hidden nodes are skipped, and locked ones unless `locked` is true. Live nodes
|
|
3128
|
+
* (path effects, live booleans) take part as drawn (`expandVectorAppearance`: their entries are
|
|
3129
|
+
* the expanded paths, whose ids may not be in the document) unless `expand` is false.
|
|
2760
3130
|
*/
|
|
2761
3131
|
declare function vectorPathEntries(doc: VectorDocument, roots: readonly string[] | null, options?: {
|
|
2762
3132
|
locked?: boolean;
|
|
3133
|
+
expand?: boolean;
|
|
2763
3134
|
}): VectorPathEntry[];
|
|
2764
3135
|
/** Whether a subpath, closed, encloses an area (rather than retracing itself). */
|
|
2765
3136
|
declare function subpathEnclosesArea(sp: VectorSubpath): boolean;
|
|
@@ -3115,4 +3486,79 @@ declare function expandVectorBlend(group: VectorGroupNode, newId: () => string):
|
|
|
3115
3486
|
*/
|
|
3116
3487
|
declare function releaseVectorBlend(group: VectorGroupNode, newId: () => string): VectorNode[];
|
|
3117
3488
|
|
|
3118
|
-
|
|
3489
|
+
/** Total arc length of a path (closing lines included). */
|
|
3490
|
+
declare function effectPathLength(path: BezierPath): number;
|
|
3491
|
+
/** Number of on-curve points of a path (a closed subpath's start counted once). */
|
|
3492
|
+
declare function effectPathVertexCount(path: BezierPath): number;
|
|
3493
|
+
/** The fractions of the length a trim keeps, or null when it keeps everything. */
|
|
3494
|
+
declare function trimIntervals(start: number, end: number, offsetDegrees: number): [number, number][] | null;
|
|
3495
|
+
/**
|
|
3496
|
+
* Trim Paths, simultaneously: every path is trimmed by the same fractions of its own length.
|
|
3497
|
+
* `start` / `end` in percent, `offset` in degrees. Paths trimmed away entirely come back empty.
|
|
3498
|
+
*/
|
|
3499
|
+
declare function trimPaths(paths: readonly BezierPath[], start: number, end: number, offsetDegrees?: number): BezierPath[];
|
|
3500
|
+
/**
|
|
3501
|
+
* Trim Paths, individually: the paths are laid end to end in stacking order and trimmed as one
|
|
3502
|
+
* length, so they draw on one after another.
|
|
3503
|
+
*/
|
|
3504
|
+
declare function trimPathsIndividually(paths: readonly BezierPath[], start: number, end: number, offsetDegrees?: number): BezierPath[];
|
|
3505
|
+
/**
|
|
3506
|
+
* Pucker & Bloat (`amount` in percent, −100 to 100). Positive (bloat) moves the points towards
|
|
3507
|
+
* the mean of a path's points and pushes the handles away from it, so the segments bulge
|
|
3508
|
+
* outwards; negative (pucker) does the opposite, giving spiky shapes.
|
|
3509
|
+
*/
|
|
3510
|
+
declare function puckerBloatPaths(paths: readonly BezierPath[], amount: number): BezierPath[];
|
|
3511
|
+
/**
|
|
3512
|
+
* Round Corners: every corner (where the direction jumps) gets a circular arc of `radius`,
|
|
3513
|
+
* shrunk to fit where the sides are short. Smooth points and the ends of open paths are kept.
|
|
3514
|
+
*/
|
|
3515
|
+
declare function roundCornerPaths(paths: readonly BezierPath[], radius: number): BezierPath[];
|
|
3516
|
+
/**
|
|
3517
|
+
* Offset Paths: grows (positive `amount`) or shrinks (negative) every path with the given join.
|
|
3518
|
+
* `copies` copies are made, copy i offset by `amount · (i + 1 + copyOffset)`, all in one path.
|
|
3519
|
+
*/
|
|
3520
|
+
declare function offsetPaths(paths: readonly BezierPath[], amount: number, join?: VectorLineJoin, miterLimit?: number, copies?: number, copyOffset?: number): BezierPath[];
|
|
3521
|
+
/**
|
|
3522
|
+
* Twist: turns the paths about `center` by an angle growing with the distance from it, from 0
|
|
3523
|
+
* at the centre to `angle` degrees at the farthest point. Segments are subdivided and their
|
|
3524
|
+
* handles mapped through the warp's derivative, which keeps the result smooth.
|
|
3525
|
+
*/
|
|
3526
|
+
declare function twistPaths(paths: readonly BezierPath[], angle: number, center: Vec2): BezierPath[];
|
|
3527
|
+
/**
|
|
3528
|
+
* Zig Zag: every segment gets `ridges` ridges: it is split into `ridges + 1` equal pieces and the
|
|
3529
|
+
* points (original ones included) are pushed alternately `size` to either side of the path.
|
|
3530
|
+
* `smooth` makes rounded waves. A closed path of n segments ends up with `n · (ridges + 1)` points
|
|
3531
|
+
* (an open one, one more).
|
|
3532
|
+
*/
|
|
3533
|
+
declare function zigzagPaths(paths: readonly BezierPath[], size: number, ridges: number, smooth?: boolean): BezierPath[];
|
|
3534
|
+
/**
|
|
3535
|
+
* Wiggle Paths: subdivides the paths (`detail` points per segment) and moves every point by
|
|
3536
|
+
* smooth noise of up to `size` that evolves over `time` seconds at `speed` wiggles per second.
|
|
3537
|
+
* The same parameters always give the same result.
|
|
3538
|
+
*/
|
|
3539
|
+
declare function wigglePaths(paths: readonly BezierPath[], w: VectorEffectParamsMap['wiggle']): BezierPath[];
|
|
3540
|
+
/** Merge Paths: the paths (in stacking order, each filled non-zero) combined into one path. */
|
|
3541
|
+
declare function mergePaths(paths: readonly BezierPath[], mode?: VectorMergeMode): BezierPath;
|
|
3542
|
+
/** One copy a repeater makes: its transform (node space) and opacity factor. */
|
|
3543
|
+
interface VectorRepeaterCopy {
|
|
3544
|
+
/** Copy number (0 is the original). */
|
|
3545
|
+
index: number;
|
|
3546
|
+
matrix: AffineMatrix;
|
|
3547
|
+
opacity: number;
|
|
3548
|
+
}
|
|
3549
|
+
/**
|
|
3550
|
+
* The copies of a repeater around `pivot` (the anchor point in node space), in copy order.
|
|
3551
|
+
* Copy i is moved by `translate(position·k) · rotate(rotation·k) · scale^k` about the pivot with
|
|
3552
|
+
* `k = i + offset`; opacity runs from the start to the end opacity across the copies, and a
|
|
3553
|
+
* fractional copy count fades the last copy by its fraction.
|
|
3554
|
+
*/
|
|
3555
|
+
declare function vectorRepeaterCopies(r: VectorEffectParamsMap['repeater'], pivot: Vec2): VectorRepeaterCopy[];
|
|
3556
|
+
/** Each path repeated by `vectorRepeaterCopies` (copy order, the original first). */
|
|
3557
|
+
declare function repeatPaths(paths: readonly BezierPath[], r: VectorEffectParamsMap['repeater'], pivot: Vec2): {
|
|
3558
|
+
copy: VectorRepeaterCopy;
|
|
3559
|
+
paths: BezierPath[];
|
|
3560
|
+
}[];
|
|
3561
|
+
/** The middle of the paths' bounds (the origin when they are empty). */
|
|
3562
|
+
declare function pathsCenter(paths: readonly BezierPath[]): Vec2;
|
|
3563
|
+
|
|
3564
|
+
export { type AddVectorNodeOptions, AffineMatrix, DEFAULT_VECTOR_BLEND_DISTANCE, DEFAULT_VECTOR_BLEND_STEPS, DEFAULT_VECTOR_PATH_EDIT, DEFAULT_VECTOR_SNAP, IDENTITY_MATRIX, KAPPA, LazyMouse, type NearestSegment, type RecognizeInkOptions, SvgGradientDef, VECTOR_ARROWHEADS, VECTOR_ARROWHEAD_LABELS, VECTOR_BLEND_MAX_SMOOTH_STEPS, VECTOR_BLEND_MAX_STEPS, VECTOR_BLEND_SPACINGS, VECTOR_BLEND_SPACING_LABELS, VECTOR_BUILDER_HATCH_GAP, VECTOR_CLIPBOARD_TYPE, VECTOR_CONSTRUCTION_ANGLES, VECTOR_CORNER_KINDS, VECTOR_CORNER_KIND_LABELS, VECTOR_CORNER_WIDGET_INSET, VECTOR_EDIT_TOGGLES, VECTOR_EFFECT_DEFAULTS, VECTOR_EFFECT_LABELS, VECTOR_EFFECT_MENU, VECTOR_EFFECT_PARAM_SPECS, VECTOR_EFFECT_TYPES, VECTOR_FILL_GAP, VECTOR_INK_MAX_CORNERS, VECTOR_MERGE_MODES, VECTOR_OVERLAY_THEME, VECTOR_PATHFINDER_ACTIONS, VECTOR_PATHFINDER_LABELS, VECTOR_PATHFINDER_OPERATIONS, VECTOR_PATH_ACTIONS, VECTOR_PENCIL_STRING_PX, VECTOR_PRESSURE_NOMINAL, VECTOR_ROTATE_HANDLE_OFFSET, VECTOR_STROKE_ALIGN_LABELS, VECTOR_STYLE_KEYS, VECTOR_TOOLS, VECTOR_TOOL_GLYPHS, VECTOR_TOOL_SHORTCUTS, VECTOR_TRANSFORM_HANDLES, VECTOR_WIDTH_PRESETS, VECTOR_WIDTH_PRESET_IDS, VECTOR_WIDTH_PROFILE_MAX_POINTS, VECTOR_WIDTH_PROFILE_MAX_SCALE, VECTOR_WIDTH_SAME_T, type VariableStrokeOptions, type Vec2, type VectorActionResult, type VectorAlign, type VectorAnchor, type VectorAnchorRef, type VectorAnchorType, type VectorAppearanceShape, type VectorArrange, type VectorArrowAlign, type VectorArrowhead, type VectorArrowheadShape, type VectorAverageAxis, type VectorBlend, type VectorBlendControls, type VectorBlendInput, type VectorBlendOptions, type VectorBlendRail, type VectorBlendSpacing, type VectorBlendStart, type VectorBooleanOperand, type VectorBooleanOperation, type VectorBounds, type VectorBuilderHit, type VectorBuilderLinePiece, type VectorBuilderPreview, type VectorBuilderReplacement, type VectorBuilderTouched, type VectorCommandOptions, type VectorCorner, type VectorCornerInfo, type VectorCornerKind, type VectorCornerWidget, type VectorDefaults, type VectorDistribute, type VectorDocument, VectorEditorController, type VectorEditorOptions, type VectorEditorState, type VectorEffect, type VectorEffectParamSpec, type VectorEffectParamsMap, type VectorEffectType, type VectorEffectsPanelData, type VectorEffectsPanelItem, type VectorFillRule, type VectorGroupNode, type VectorGuideKind, type VectorGuideLabel, type VectorGuideLine, type VectorHandleRef, type VectorHitTestOptions, type VectorHover, type VectorInkShape, type VectorInteraction, type VectorKeyInput, type VectorLineCap, type VectorLineJoin, type VectorMatrix, type VectorMergeMode, type VectorModifiers, type VectorMorph, type VectorMorphContour, type VectorMorphCorrespondence, type VectorMorphOptions, type VectorNode, type VectorNodeListing, type VectorOverlayRenderData, type VectorPaint, type VectorPathAction, type VectorPathEditOptions, type VectorPathEntry, type VectorPathKeyframe, type VectorPathNode, type VectorPathfinderAction, type VectorPathfinderOperation, type VectorPathfinderPaint, type VectorPointSnap, type VectorPointerInput, type VectorRectSnap, type VectorRenderAnchor, type VectorRenderCornerWidget, type VectorRenderGroup, type VectorRenderGuideLabel, type VectorRenderGuideLine, type VectorRenderHandle, type VectorRenderNode, type VectorRenderPath, type VectorRenderStrokeParts, type VectorRenderWidthPoint, type VectorRepeaterCopy, type VectorScaleSnap, type VectorSceneRenderData, type VectorSegmentRef, type VectorSelectionBoxGeometry, type VectorSelectionFrame, type VectorSelectionStyle, type VectorShapeBuilderFace, type VectorShapeBuilderMap, type VectorShapeBuilderPlan, type VectorShapeBuilderResult, type VectorShapeInput, type VectorSnapGuides, type VectorSnapKind, type VectorSnapLeave, type VectorSnapOptions, VectorSnapTargets, type VectorStrokeAlign, type VectorStrokeParts, type VectorStrokeSpot, type VectorStyle, type VectorSubpath, type VectorSvgExportOptions, type VectorSvgImportOptions, type VectorTaperOptions, type VectorTool, type VectorTransformHandle, type VectorViewport, type VectorWaveOptions, type VectorWidthHandle, type VectorWidthPoint, type VectorWidthPointEdit, type VectorWidthPointRef, type VectorWidthPreset, type VectorWidthPresetInfo, activeVectorEffects, addBuilderHit, applyMatrix, applyMatrixLinear, applyVectorBlendOptions, applyVectorCornersAttribute, applyVectorEffects, arrowheadInset, arrowheadPath, arrowheadWeight, bendSegment, bezierToSubpaths, boundsFromPoints, boundsIntersect, clearVectorLiveBooleanCache, cloneAnchor, cloneSubpath, cloneVectorDocument, cloneVectorNode, collectPathNodes, constrainToLeave, convertAnchor, cornerBisectorPoint, cornerRadiusChange, cornerSetback, correspondMorphContours, createVectorCommands, createVectorEffect, createVectorMorph, curvatureMoveAnchor, cutSubpathAt, dashIntervals, decomposeRigid, effectPathLength, effectPathVertexCount, effectiveStrokeAlign, ellipseSubpath, eraseFromFill, eraseFromOutline, eraserRegion, evaluateVectorPathKeyframes, expandVectorAppearance, expandVectorAppearances, expandVectorBlend, expandVectorCorners, expandVectorCornersOf, findVectorNode, fitCornerRadius, foldVectorBooleanOperands, generateVectorBlendChildren, generateWidthProfile, getAnchor, getAnchorWorld, getEditablePathIds, getTransformHandlePositions, getVectorBlendControls, getVectorCornerWidgets, getVectorEffectsPanel, getVectorEnteredGroups, getVectorOverlayRenderData, getVectorSceneRenderData, getVectorSelectionBoxGeometry, getVectorSelectionFrame, getVectorSelectionStyle, getVectorWidthHandles, getVisibleAnchors, getVisibleHandles, hasOwnVectorAppearance, hasPaint, hasStrokeExtras, hasVectorAppearance, hasVectorCorners, hitTestVectorNode, hitTestVectorNodes, hitTestVectorStroke, inferAnchorType, insertAnchor, insertWidthPoint, interpolateMorphContours, interpolateRigidMatrix, interpolateVectorColor, interpolateVectorPaint, interpolateVectorPaths, interpolateVectorStyle, interpolateWidthProfiles, invertMatrix, isClosedBezierShape, isIdentityMatrix, isUniformWidthProfile, isVectorBlendGroup, isVectorLiveBoolean, isVectorTextTarget, joinSubpaths, knifePath, lineSubpath, locateVectorNode, matrixRotation, mergePaths, mirrorWidthProfile, morphContourToSubpath, morphPathsCross, moveAnchorHandle, multiplyMatrices, nearestSegment, nearestStrokePosition, nextVectorCornerKind, nodeMatrix, normalizeVectorEffectParams, offsetPaths, parseSvgTransform, parseVectorSvg, pathsCenter, planShapeBuilder, polygonSubpath, polylineBounds, pressureWidthProfile, puckerBloatPaths, recognizeInkShape, rectSubpath, refineMorphContour, refreshVectorBlends, releaseVectorBlend, removeAnchorKeepingShape, removeAnchors, removeAnchorsKeepingShape, removeRedundantPoints, removeWidthPoints, repeatPaths, resampleGradientStops, resolveVectorBlendOptions, reverseMorphContour, reverseSubpath, reverseWidthProfile, rotateMatrix, roundCornerPaths, roundSubpaths, samplePolyline, sanitizeVectorEffects, sanitizeWidthProfile, scaleFor, scaleMatrix, setAnchorCorner, setSubpathCorners, setWidthPoint, simplifyPolyline, smoothSubpath, splitIntoFaces, splitSubpathAt, starSubpath, strokePositionPoint, strokeWidthProfileOf, subpathEnclosesArea, subpathPointAt, subpathSegment, subpathSegmentCount, subpathToMorphContour, subpathsToBezier, taperWaveFactor, toVectorKeyInput, toVectorModifiers, toVectorPointerInput, transformVectorEffects, transformVectorNode, translateAnchor, translateMatrix, trimIntervals, trimPaths, trimPathsIndividually, turnMorphContour, twistPaths, unionBounds, variableStrokeOutline, variableStrokeRings, vectorAppearanceNodes, vectorAppearanceOutline, vectorAppearanceShapes, vectorBlendColorDistance, vectorBlendKeyTargets, vectorBlendKeys, vectorBlendRail, vectorBlendRailAt, vectorBlendSpine, vectorBlendStepCount, vectorBuilderErasedEdges, vectorCornerAt, vectorCorners, vectorCornersAttribute, vectorDiamondPath, vectorDocumentToSvg, vectorEnteredGroups, vectorFillMap, vectorInkShapeName, vectorLiveBooleanSteps, vectorNodeBounds, vectorNodeRotation, vectorNodeToBezier, vectorOperandOperation, vectorPaintToHex, vectorPaintToSvg, vectorParentMatrix, vectorPathData, vectorPathEntries, vectorPathWorldBezier, vectorPathfinderShape, vectorRepeaterCopies, vectorResizeCursor, vectorResultStyle, vectorShapeBuilderHit, vectorShapeBuilderMap, vectorStrokeLineArea, vectorStrokeOutline, vectorStrokeOutlinePath, vectorStrokeParts, vectorStrokeReach, vectorStrokeSvgParts, vectorStrokeWidthGeometry, vectorToolLabel, vectorWorldMatrix, walkVectorNodes, widthProfileAt, widthProfileFromAttribute, widthProfileMaxScale, widthProfilePreset, widthProfilePresetId, widthProfileToAttribute, wigglePaths, zigzagPaths };
|