@pixerate/editor 0.33.0 → 0.34.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.
@@ -1,4 +1,4 @@
1
- import { C as CanvasGradientDef, A as AffineMatrix, B as BezierPathInput, a as BezierPath, S as SvgGradientDef } from '../bezier-6KPx3w7Z.cjs';
1
+ import { C as CanvasGradientDef, A as AffineMatrix, B as BezierPathInput, a as BezierPath, S as SvgGradientDef } from '../bezier-D8bsO-L0.cjs';
2
2
  import { P as Point } from '../types-BFkYA4eF.cjs';
3
3
  import { H as HistoryManager } from '../HistoryManager-DeQQMBCj.cjs';
4
4
  import { C as CommandSpec } from '../registry-D0GADKc7.cjs';
@@ -339,10 +339,222 @@ declare function parseSvgTransform(value: string | undefined): AffineMatrix;
339
339
  /** Parses SVG markup into a vector document. Throws when there is no `<svg>` element. */
340
340
  declare function parseVectorSvg(svg: string, options?: VectorSvgImportOptions): VectorDocument;
341
341
 
342
+ /**
343
+ * What a guide line shows: `align` lines run from a target through the snapped point or box,
344
+ * `construction` lines from where a drawn point leaves, `spacing` marks equal gaps and `size`
345
+ * the side whose length matches another object's.
346
+ */
347
+ type VectorGuideKind = 'align' | 'construction' | 'spacing' | 'size';
348
+ /** A guide line in document units. */
349
+ interface VectorGuideLine {
350
+ kind: VectorGuideKind;
351
+ x1: number;
352
+ y1: number;
353
+ x2: number;
354
+ y2: number;
355
+ }
356
+ /** What a point or box snapped to. */
357
+ type VectorSnapKind = 'anchor' | 'centre' | 'intersect' | 'perpendicular' | 'tangent' | 'path' | 'construction' | 'align' | 'spacing' | 'size';
358
+ /** A guide label in document units: the snap kind's name, or a distance for gaps and sizes. */
359
+ interface VectorGuideLabel {
360
+ kind: VectorSnapKind;
361
+ x: number;
362
+ y: number;
363
+ text: string;
364
+ }
365
+ interface VectorSnapGuides {
366
+ lines: VectorGuideLine[];
367
+ labels: VectorGuideLabel[];
368
+ }
369
+ interface VectorPointSnap extends VectorSnapGuides {
370
+ point: Vec2;
371
+ /** The rule that placed the point, or null when nothing was in reach. */
372
+ kind: VectorSnapKind | null;
373
+ /** Whether x / y were set by a target (for falling back to the grid on the other axis). */
374
+ x: boolean;
375
+ y: boolean;
376
+ }
377
+ interface VectorRectSnap extends VectorSnapGuides {
378
+ /** Correction to add to the move. */
379
+ dx: number;
380
+ dy: number;
381
+ x: boolean;
382
+ y: boolean;
383
+ }
384
+ interface VectorScaleSnap extends VectorSnapGuides {
385
+ sx: number;
386
+ sy: number;
387
+ snapped: boolean;
388
+ }
389
+ /**
390
+ * The point a drawn point leaves from (the anchor before it, a shape's start, a handle's
391
+ * anchor) and how it keeps to it.
392
+ */
393
+ interface VectorSnapLeave {
394
+ at: Vec2;
395
+ /**
396
+ * Shift held: keep to 45° steps round `at` (`angle`), to a diagonal (`square`, a box's
397
+ * corner) or to the nearer axis (`axis`, a dragged point).
398
+ */
399
+ constrain?: 'angle' | 'square' | 'axis' | null;
400
+ /** Construction guide angles through `at`, degrees counter-clockwise on screen. */
401
+ angles?: readonly number[];
402
+ /** Snap to the perpendicular foot and tangent points from `at` on paths (default true). */
403
+ curves?: boolean;
404
+ }
405
+ /** The construction guide angles new editors start with. */
406
+ declare const VECTOR_CONSTRUCTION_ANGLES: readonly number[];
407
+ /** Where `constrain` puts `p` (unchanged without one). */
408
+ declare function constrainToLeave(leave: VectorSnapLeave | null | undefined, p: Vec2): Vec2;
409
+ /**
410
+ * Snap targets in document space, gathered once per gesture. Build them with `forMove`,
411
+ * `forResize`, `forDrawing`, `forAnchorDrag` or `forHandle`, then call `snapFrom`,
412
+ * `snapRect` or `snapScale` on every pointer move. Tolerances are in document units (screen
413
+ * pixels divided by the zoom).
414
+ */
415
+ declare class VectorSnapTargets {
416
+ private readonly points;
417
+ private readonly xs;
418
+ private readonly ys;
419
+ private readonly segments;
420
+ /** Bounds of the objects a moved box spaces itself evenly with. */
421
+ private readonly boxes;
422
+ /** Side lengths of the other objects (in their own frames), which a resize may match. */
423
+ private readonly sizes;
424
+ private constructor();
425
+ /** How many targets of each sort were gathered. */
426
+ get counts(): {
427
+ points: number;
428
+ lines: number;
429
+ segments: number;
430
+ boxes: number;
431
+ };
432
+ /** Targets for moving nodes `ids`: the other art's anchors, bounds and centres, the artboard, and boxes to space evenly with. */
433
+ static forMove(doc: VectorDocument, ids: readonly string[]): VectorSnapTargets;
434
+ /** Targets for resizing nodes `ids`: as for a move, plus the other objects' sizes. */
435
+ static forResize(doc: VectorDocument, ids: readonly string[]): VectorSnapTargets;
436
+ /**
437
+ * Targets for a drawn point (pen, shape tools): the art but `exclude`, its anchors (as
438
+ * points and in line), centres, edges and segments. The anchors and segments of `exclude`
439
+ * (the path being drawn, whose bounds grow with it) stay targets.
440
+ */
441
+ static forDrawing(doc: VectorDocument, exclude?: readonly string[]): VectorSnapTargets;
442
+ /**
443
+ * Targets for dragging anchors: the other art with its segments, and the anchors and
444
+ * segments that stay put on the paths being reshaped (their bounds move along, so they are
445
+ * no targets). The moving anchors are left out.
446
+ */
447
+ static forAnchorDrag(doc: VectorDocument, anchors: readonly VectorAnchorRef[]): VectorSnapTargets;
448
+ /**
449
+ * Targets for dragging a handle of path `nodeId`: the other art and that path's anchors
450
+ * (its bounds and the segments through the handle move with it, so they would chase it).
451
+ */
452
+ static forHandle(doc: VectorDocument, nodeId: string): VectorSnapTargets;
453
+ /** The anchors of the paths `ids` as targets (on them and in line), and their segments when `segments`. */
454
+ private pushPaths;
455
+ private pushAnchor;
456
+ /** The segments of `sp` (mapped by `m`) that stay put while the anchors `moving` accepts move. */
457
+ private pushSegments;
458
+ private pushRect;
459
+ /** Sorts the targets for `within` (stable: of targets alike, the first gathered wins). */
460
+ private index;
461
+ /**
462
+ * Gathers targets from the artboard and every visible node but `exclude` (and what is inside
463
+ * those): each leaf's anchors (also as lines for `drawing`), its segments (`segments`,
464
+ * `drawing`), its bounds' corners as lines and its centre; and the top-level objects' boxes and
465
+ * sizes (inside a group holding an excluded node, that group's other members).
466
+ */
467
+ private static collect;
468
+ /** Snaps a single point (see `snapFrom`). */
469
+ snapPoint(p: Vec2, tol: number): VectorPointSnap;
470
+ /**
471
+ * Snaps a point `p`, drawn or dragged from `leave` when given. With `leave.constrain` it keeps
472
+ * to its angle round `leave.at`, sliding along that way into line with the nearest target.
473
+ * Otherwise it lands, in order, on an anchor or centre, an intersection of two paths, the
474
+ * perpendicular foot or a tangent point from `leave.at`, a path, a construction guide
475
+ * through `leave.at` (where a target's line crosses it if one does nearby), or else lines up
476
+ * with targets on x and y.
477
+ */
478
+ snapFrom(p: Vec2, leave: VectorSnapLeave | null | undefined, tol: number): VectorPointSnap;
479
+ private label;
480
+ /** The anchor or centre nearest `p`, within `tol`. */
481
+ private nearestPoint;
482
+ /**
483
+ * Slides `q`, on the line through `at` along `dir` (beyond `at` only for a `ray`), to where
484
+ * the nearest target line crosses it, at most twice `tol` away: where it lands and the
485
+ * target point that line comes from.
486
+ */
487
+ private slide;
488
+ /** The guides of a point `q` slid into line with the target at `from`: the line and "align", or the target's own label when `q` sits on it. */
489
+ private linedUp;
490
+ /** Target segments whose control box reaches `p` and which pass within `tol` of it, nearest first. */
491
+ private segmentsNear;
492
+ private onSegment;
493
+ /** Where two of the target segments near `p` cross, the crossing nearest `p` within `tol`. */
494
+ private crossing;
495
+ /**
496
+ * The foot of a perpendicular, or a tangent point, from `base` on a target segment near `p`
497
+ * (within `tol` of it): roots of `(B(t) − base) · B′(t)` and `(B(t) − base) × B′(t)`
498
+ * bracketed by sign changes of samples and narrowed by bisection.
499
+ */
500
+ private curvePoint;
501
+ /**
502
+ * Snaps a moving box `r` (the moved selection's bounds): its edge or centre nearest a target
503
+ * line on each axis (`axes` limits which may move). With `spacing`, an axis that lines up
504
+ * with nothing spaces the box evenly in its row or column. Returns the correction and guides.
505
+ */
506
+ snapRect(r: VectorBounds, tol: number, options?: {
507
+ spacing?: boolean;
508
+ axes?: {
509
+ x?: boolean;
510
+ y?: boolean;
511
+ };
512
+ }): VectorRectSnap;
513
+ /**
514
+ * Equal spacing along x (`horizontal`) or y for the moved box `r`, among the objects of its
515
+ * row (column): the shift within `tol` that centres it between its neighbours, or leaves it
516
+ * as far from the neighbour before or after it as two other objects of the row are apart;
517
+ * and the gaps that are equal then, as (start, end, where across).
518
+ */
519
+ private evenSpacing;
520
+ /** A gap mark: a line across the gap with a tick at each end, and its length as a label. */
521
+ private gapMarks;
522
+ /** The other objects' side length nearest `length`, within `tol`, or null. */
523
+ matchSize(length: number, tol: number): number | null;
524
+ /**
525
+ * Snaps a selection-box resize. `sx / sy` are the scale `scaleFor` gave for dragging
526
+ * `handle` of `frame` (in the box's own, possibly rotated frame), `mods.shift` keeps the
527
+ * proportions and `mods.alt` scales about the centre. The handle lands on an anchor or
528
+ * centre within `tol`, else the corner or the side it moves lines up with the nearest
529
+ * target, whatever the box's angle; a handle with one way to go (a side, or a proportional
530
+ * corner) slides along it until one of them is on a target. An axis that snaps to nothing
531
+ * may match another object's width or height instead.
532
+ */
533
+ snapScale(frame: VectorBounds & {
534
+ angle: number;
535
+ }, handle: Exclude<VectorTransformHandle, 'rotate'>, sx: number, sy: number, mods: {
536
+ shift?: boolean;
537
+ alt?: boolean;
538
+ }, tol: number): VectorScaleSnap;
539
+ }
540
+
342
541
  interface VectorSnapOptions {
343
- /** Grid size in document units (0 = off, default 0). */
542
+ /** Grid size in document units (0 = off, default 0). Points and boxes that snap to no object snap to it. */
344
543
  grid: number;
544
+ /**
545
+ * Snap to other objects (default true): anchors, paths and their intersections, bounding-box
546
+ * edges and centres, the artboard, construction angles, equal spacing and matching sizes.
547
+ */
548
+ objects: boolean;
549
+ /** Show smart guide lines and labels while snapping (default true). */
550
+ guides: boolean;
551
+ /** How near a target pulls, in screen pixels (default 5). */
552
+ threshold: number;
553
+ /** Construction guide angles through the point a drawn point leaves from, in degrees (default 0, 45, 90, 135). */
554
+ angles: readonly number[];
345
555
  }
556
+ /** Snap options new editors start with. Hold Cmd / Ctrl (`mod`) during a drag to bypass snapping. */
557
+ declare const DEFAULT_VECTOR_SNAP: Readonly<VectorSnapOptions>;
346
558
  interface VectorEditorOptions {
347
559
  document?: VectorDocument;
348
560
  /** History to record into, e.g. one shared with the rest of the app (default: a new one). */
@@ -435,6 +647,8 @@ interface VectorEditorState {
435
647
  viewport: VectorViewport;
436
648
  defaults: Readonly<Required<Pick<VectorDefaults, 'polygonSides' | 'starPoints' | 'starInnerRatio' | 'cornerRadius'>> & VectorStyle>;
437
649
  snap: VectorSnapOptions;
650
+ /** Smart guides of the snap in progress, in document units (null when there are none). */
651
+ guides: VectorSnapGuides | null;
438
652
  hitRadius: number;
439
653
  hover: VectorHover | null;
440
654
  /** A CSS cursor for the canvas. */
@@ -575,6 +789,11 @@ declare class VectorEditorController {
575
789
  private pointer;
576
790
  private drag;
577
791
  private interaction;
792
+ private guides;
793
+ /** Whether the last `snapDrawn` landed on an object (guides may be hidden). */
794
+ private snappedToObject;
795
+ /** Drawing targets for hovering the pen and shape tools, kept while the document and the excluded path stay the same. */
796
+ private hoverTargets;
578
797
  private spaceHeld;
579
798
  private clipboard;
580
799
  private readonly createId;
@@ -636,8 +855,23 @@ declare class VectorEditorController {
636
855
  setTool(tool: VectorTool): void;
637
856
  setDefaults(defaults: Partial<VectorDefaults>): void;
638
857
  setSnap(snap: Partial<VectorSnapOptions>): void;
858
+ /** Turns object snapping on or off (the toolbar's snapping toggle). */
859
+ toggleSnapping(on?: boolean): void;
860
+ private gridValue;
639
861
  private snapPoint;
640
- private snapDelta;
862
+ /** The pull distance in document units. */
863
+ private snapTolerance;
864
+ private setGuides;
865
+ /**
866
+ * Where a drawn or dragged point `p` goes: onto the smart guide `targets` (gathered by
867
+ * `gather` when missing), else onto the grid, kept to `leave`'s constraint. Cmd / Ctrl
868
+ * bypasses snapping.
869
+ */
870
+ private snapDrawn;
871
+ /** Drawing targets for the pen and shape tools, reused while the document stays the same. */
872
+ private drawingTargets;
873
+ /** Where the pointer at `p` would place a point with the pen or a shape tool (and the guides showing why). */
874
+ private hoverSnap;
641
875
  /** Replaces the document. Undoable unless `{ history: false }` (then history is cleared). */
642
876
  setDocument(doc: VectorDocument, options?: {
643
877
  history?: boolean;
@@ -832,6 +1066,12 @@ declare class VectorEditorController {
832
1066
  private downShape;
833
1067
  /** Pointer moved over the canvas (with or without a button down). */
834
1068
  pointerMove(screen: Vec2, input?: VectorPointerInput): void;
1069
+ /** Snaps a move of the selection by (dx, dy): its bounds line up with targets or space evenly, else go to the grid. */
1070
+ private snapMove;
1071
+ /** The anchor a point drag snaps by, where it started: the grabbed one, else the moving one nearest the press. */
1072
+ private leadAnchor;
1073
+ /** A shape's dragged corner moved so its width or height matches another object's, when one is within reach. */
1074
+ private matchShapeSize;
835
1075
  /** Primary button released. */
836
1076
  pointerUp(screen?: Vec2, input?: VectorPointerInput): void;
837
1077
  /** The pointer left the canvas. */
@@ -910,6 +1150,21 @@ interface VectorRenderHandle {
910
1150
  anchorY: number;
911
1151
  hovered: boolean;
912
1152
  }
1153
+ /** A smart guide line in screen pixels. */
1154
+ interface VectorRenderGuideLine {
1155
+ kind: VectorGuideKind;
1156
+ x1: number;
1157
+ y1: number;
1158
+ x2: number;
1159
+ y2: number;
1160
+ }
1161
+ /** A smart guide label ("anchor", "intersect", "align", "centre", a gap or a size) at a screen position. */
1162
+ interface VectorRenderGuideLabel {
1163
+ kind: VectorSnapKind;
1164
+ x: number;
1165
+ y: number;
1166
+ text: string;
1167
+ }
913
1168
  interface VectorOverlayRenderData {
914
1169
  /** Outlines (screen-space path data) of hovered and selected nodes. */
915
1170
  outlines: {
@@ -936,6 +1191,11 @@ interface VectorOverlayRenderData {
936
1191
  penPreview: string | null;
937
1192
  /** Artboard rectangle, screen space. */
938
1193
  artboard: VectorBounds;
1194
+ /** Smart guides of the snap in progress, screen space (empty when nothing snapped). */
1195
+ guides: {
1196
+ lines: VectorRenderGuideLine[];
1197
+ labels: VectorRenderGuideLabel[];
1198
+ };
939
1199
  /** A short status, e.g. "W 120 × H 80" or "45°". */
940
1200
  status: string | null;
941
1201
  }
@@ -951,6 +1211,8 @@ declare function getVectorOverlayRenderData(state: VectorEditorState): VectorOve
951
1211
  /** Colours and sizes (screen pixels) the bundled canvases draw the overlay with. */
952
1212
  declare const VECTOR_OVERLAY_THEME: {
953
1213
  readonly accent: "#0ea5e9";
1214
+ /** Smart guide lines and labels. */
1215
+ readonly guide: "#ff3dfc";
954
1216
  readonly handleFill: "#ffffff";
955
1217
  readonly marqueeFill: "rgba(14, 165, 233, 0.08)";
956
1218
  readonly transformHandleSize: 8;
@@ -1049,4 +1311,4 @@ interface VectorNodeListing {
1049
1311
  */
1050
1312
  declare function createVectorCommands(controller: VectorEditorController, options?: VectorCommandOptions): CommandSpec[];
1051
1313
 
1052
- export { type AddVectorNodeOptions, AffineMatrix, IDENTITY_MATRIX, KAPPA, type NearestSegment, SvgGradientDef, VECTOR_CLIPBOARD_TYPE, VECTOR_OVERLAY_THEME, VECTOR_ROTATE_HANDLE_OFFSET, VECTOR_TOOLS, VECTOR_TOOL_GLYPHS, VECTOR_TOOL_SHORTCUTS, VECTOR_TRANSFORM_HANDLES, type Vec2, type VectorActionResult, type VectorAlign, type VectorAnchor, type VectorAnchorRef, type VectorAnchorType, type VectorArrange, type VectorBooleanOperation, type VectorBounds, type VectorCommandOptions, type VectorDefaults, type VectorDistribute, type VectorDocument, VectorEditorController, type VectorEditorOptions, type VectorEditorState, type VectorFillRule, type VectorGroupNode, type VectorHandleRef, type VectorHover, type VectorInteraction, type VectorKeyInput, type VectorLineCap, type VectorLineJoin, type VectorMatrix, type VectorModifiers, type VectorNode, type VectorNodeListing, type VectorOverlayRenderData, type VectorPaint, type VectorPathNode, type VectorPointerInput, type VectorRenderAnchor, type VectorRenderGroup, type VectorRenderHandle, type VectorRenderNode, type VectorRenderPath, type VectorSceneRenderData, type VectorSelectionBoxGeometry, type VectorSelectionFrame, type VectorSelectionStyle, type VectorShapeInput, type VectorSnapOptions, type VectorStyle, type VectorSubpath, type VectorSvgExportOptions, type VectorSvgImportOptions, type VectorTool, type VectorTransformHandle, type VectorViewport, applyMatrix, applyMatrixLinear, bezierToSubpaths, boundsFromPoints, boundsIntersect, cloneAnchor, cloneSubpath, cloneVectorDocument, cloneVectorNode, collectPathNodes, convertAnchor, createVectorCommands, decomposeRigid, ellipseSubpath, findVectorNode, getAnchor, getAnchorWorld, getEditablePathIds, getTransformHandlePositions, getVectorOverlayRenderData, getVectorSceneRenderData, getVectorSelectionBoxGeometry, getVectorSelectionFrame, getVectorSelectionStyle, getVisibleAnchors, getVisibleHandles, hasPaint, hitTestVectorNode, hitTestVectorNodes, inferAnchorType, insertAnchor, invertMatrix, isIdentityMatrix, isVectorTextTarget, lineSubpath, locateVectorNode, matrixRotation, moveAnchorHandle, multiplyMatrices, nearestSegment, nodeMatrix, parseSvgTransform, parseVectorSvg, polygonSubpath, rectSubpath, removeAnchors, reverseSubpath, rotateMatrix, roundSubpaths, scaleFor, scaleMatrix, starSubpath, subpathSegment, subpathSegmentCount, subpathsToBezier, toVectorKeyInput, toVectorModifiers, toVectorPointerInput, transformVectorNode, translateAnchor, translateMatrix, unionBounds, vectorDocumentToSvg, vectorNodeBounds, vectorNodeRotation, vectorNodeToBezier, vectorPaintToHex, vectorPaintToSvg, vectorParentMatrix, vectorPathData, vectorPathWorldBezier, vectorResizeCursor, vectorToolLabel, vectorWorldMatrix, walkVectorNodes };
1314
+ export { type AddVectorNodeOptions, AffineMatrix, DEFAULT_VECTOR_SNAP, IDENTITY_MATRIX, KAPPA, type NearestSegment, SvgGradientDef, VECTOR_CLIPBOARD_TYPE, VECTOR_CONSTRUCTION_ANGLES, VECTOR_OVERLAY_THEME, VECTOR_ROTATE_HANDLE_OFFSET, VECTOR_TOOLS, VECTOR_TOOL_GLYPHS, VECTOR_TOOL_SHORTCUTS, VECTOR_TRANSFORM_HANDLES, type Vec2, type VectorActionResult, type VectorAlign, type VectorAnchor, type VectorAnchorRef, type VectorAnchorType, type VectorArrange, type VectorBooleanOperation, type VectorBounds, type VectorCommandOptions, type VectorDefaults, type VectorDistribute, type VectorDocument, VectorEditorController, type VectorEditorOptions, type VectorEditorState, type VectorFillRule, type VectorGroupNode, type VectorGuideKind, type VectorGuideLabel, type VectorGuideLine, type VectorHandleRef, type VectorHover, type VectorInteraction, type VectorKeyInput, type VectorLineCap, type VectorLineJoin, type VectorMatrix, type VectorModifiers, type VectorNode, type VectorNodeListing, type VectorOverlayRenderData, type VectorPaint, type VectorPathNode, type VectorPointSnap, type VectorPointerInput, type VectorRectSnap, type VectorRenderAnchor, type VectorRenderGroup, type VectorRenderGuideLabel, type VectorRenderGuideLine, type VectorRenderHandle, type VectorRenderNode, type VectorRenderPath, type VectorScaleSnap, type VectorSceneRenderData, type VectorSelectionBoxGeometry, type VectorSelectionFrame, type VectorSelectionStyle, type VectorShapeInput, type VectorSnapGuides, type VectorSnapKind, type VectorSnapLeave, type VectorSnapOptions, VectorSnapTargets, type VectorStyle, type VectorSubpath, type VectorSvgExportOptions, type VectorSvgImportOptions, type VectorTool, type VectorTransformHandle, type VectorViewport, applyMatrix, applyMatrixLinear, bezierToSubpaths, boundsFromPoints, boundsIntersect, cloneAnchor, cloneSubpath, cloneVectorDocument, cloneVectorNode, collectPathNodes, constrainToLeave, convertAnchor, createVectorCommands, decomposeRigid, ellipseSubpath, findVectorNode, getAnchor, getAnchorWorld, getEditablePathIds, getTransformHandlePositions, getVectorOverlayRenderData, getVectorSceneRenderData, getVectorSelectionBoxGeometry, getVectorSelectionFrame, getVectorSelectionStyle, getVisibleAnchors, getVisibleHandles, hasPaint, hitTestVectorNode, hitTestVectorNodes, inferAnchorType, insertAnchor, invertMatrix, isIdentityMatrix, isVectorTextTarget, lineSubpath, locateVectorNode, matrixRotation, moveAnchorHandle, multiplyMatrices, nearestSegment, nodeMatrix, parseSvgTransform, parseVectorSvg, polygonSubpath, rectSubpath, removeAnchors, reverseSubpath, rotateMatrix, roundSubpaths, scaleFor, scaleMatrix, starSubpath, subpathSegment, subpathSegmentCount, subpathsToBezier, toVectorKeyInput, toVectorModifiers, toVectorPointerInput, transformVectorNode, translateAnchor, translateMatrix, unionBounds, vectorDocumentToSvg, vectorNodeBounds, vectorNodeRotation, vectorNodeToBezier, vectorPaintToHex, vectorPaintToSvg, vectorParentMatrix, vectorPathData, vectorPathWorldBezier, vectorResizeCursor, vectorToolLabel, vectorWorldMatrix, walkVectorNodes };