@svgsketch/core 1.5.0 → 1.6.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/dist/index.d.mts CHANGED
@@ -97,12 +97,13 @@ type CycleBehavior = 'restart' | 'alternate';
97
97
  * A single keyframe in an animation track.
98
98
  *
99
99
  * - `time` — Absolute time in seconds within the track.
100
- * - `value` — The property value at this point (number for numeric, string for colors/paths).
100
+ * - `value` — The property value at this point (number for numeric, string
101
+ * for colors/paths, or a 6-number matrix for `transformMatrix`).
101
102
  * - `easing` — The easing curve *leading into* this keyframe (from the previous keyframe).
102
103
  */
103
104
  interface AnimationKeyframe {
104
105
  time: number;
105
- value: number | string;
106
+ value: number | string | number[];
106
107
  easing: EasingType;
107
108
  /** Custom cubic-bezier control points [x1, y1, x2, y2] when easing is CUSTOM_BEZIER. */
108
109
  customBezier?: [number, number, number, number];
@@ -340,7 +341,7 @@ interface SerializedAnimationTimeline {
340
341
  calcMode?: 'linear' | 'discrete' | 'paced' | 'spline';
341
342
  keyframes: {
342
343
  time: number;
343
- value: number | string;
344
+ value: number | string | number[];
344
345
  easing: string;
345
346
  customBezier?: [number, number, number, number];
346
347
  linearPoints?: {
@@ -1532,6 +1533,68 @@ interface Measurement {
1532
1533
  opacity?: number;
1533
1534
  }
1534
1535
 
1536
+ /** SVG affine matrix in `[a,b,c,d,e,f]` order. */
1537
+ type AffineTransformMatrix = number[];
1538
+ /**
1539
+ * Persisted/editor-facing transform state shared by document serialization,
1540
+ * editor shape state, and public plugin geometry types.
1541
+ */
1542
+ interface ShapeTransformState {
1543
+ /**
1544
+ * Canonical local affine transform mapping shape-local geometry into the
1545
+ * parent frame. This matrix is the definitive transform state when present.
1546
+ */
1547
+ transformMatrix?: AffineTransformMatrix | null;
1548
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1549
+ scaleX?: number;
1550
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1551
+ scaleY?: number;
1552
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1553
+ translateX?: number;
1554
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1555
+ translateY?: number;
1556
+ /** @deprecated Legacy text resize anchor; fold into `transformMatrix` on read. */
1557
+ scaleAnchor?: Point | null;
1558
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1559
+ rotation?: number;
1560
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1561
+ skewX?: number;
1562
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1563
+ skewY?: number;
1564
+ customPivot?: Point | null;
1565
+ /** @deprecated Use `transformMatrix`; retained only for legacy/source-fidelity imports. */
1566
+ rawTransform?: string;
1567
+ /** @deprecated Legacy v2 import field. Fold into `transformMatrix` on read; never use at runtime. */
1568
+ ancestorTransform?: AffineTransformMatrix;
1569
+ }
1570
+ declare const SHAPE_TRANSFORM_STATE_KEYS: readonly ["transformMatrix", "scaleX", "scaleY", "translateX", "translateY", "rotation", "skewX", "skewY", "customPivot", "rawTransform"];
1571
+ declare const NUMERIC_SHAPE_TRANSFORM_STATE_KEYS: readonly ["transformMatrix", "scaleX", "scaleY", "translateX", "translateY", "rotation", "skewX", "skewY"];
1572
+ /**
1573
+ * Runtime scene-node transform state after schema defaults are applied.
1574
+ * Unlike serialized shape state, these properties are always present.
1575
+ */
1576
+ interface CommonTransformNodeProps {
1577
+ /**
1578
+ * Canonical local transform matrix in SVG affine order `[a,b,c,d,e,f]`.
1579
+ * This maps shape-local geometry into the parent scene-node frame.
1580
+ */
1581
+ transformMatrix: AffineTransformMatrix | null;
1582
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1583
+ translateX: number;
1584
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1585
+ translateY: number;
1586
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1587
+ rotation: number;
1588
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1589
+ skewX: number;
1590
+ /** @deprecated Use `transformMatrix`; retained as a decomposed compatibility projection. */
1591
+ skewY: number;
1592
+ customPivot: Point | null;
1593
+ /** @deprecated Use `transformMatrix`; retained only for legacy/source-fidelity imports. */
1594
+ rawTransform: string | null;
1595
+ }
1596
+ declare const COMMON_TRANSFORM_NODE_DEFAULTS: CommonTransformNodeProps;
1597
+
1535
1598
  /**
1536
1599
  * @svgsketch/core — Serialized document types.
1537
1600
  *
@@ -1540,114 +1603,108 @@ interface Measurement {
1540
1603
  * SVGSketch documents.
1541
1604
  */
1542
1605
 
1606
+ type SerializedShapeState = ShapeTransformState & {
1607
+ [key: string]: unknown;
1608
+ x?: number;
1609
+ y?: number;
1610
+ width?: number;
1611
+ height?: number;
1612
+ radius?: number;
1613
+ rx?: number;
1614
+ ry?: number;
1615
+ cornerRadius?: number;
1616
+ cornerShape?: 'round' | 'notch' | 'bevel' | 'scoop';
1617
+ cornerMode?: 'uniform' | 'non-uniform';
1618
+ cornerRadiusTL?: number;
1619
+ cornerRadiusTR?: number;
1620
+ cornerRadiusBL?: number;
1621
+ cornerRadiusBR?: number;
1622
+ cornerShapeTL?: 'round' | 'notch' | 'bevel' | 'scoop';
1623
+ cornerShapeTR?: 'round' | 'notch' | 'bevel' | 'scoop';
1624
+ cornerShapeBL?: 'round' | 'notch' | 'bevel' | 'scoop';
1625
+ cornerShapeBR?: 'round' | 'notch' | 'bevel' | 'scoop';
1626
+ fontSize?: number;
1627
+ text?: string;
1628
+ fontFamily?: string;
1629
+ fontWeight?: string;
1630
+ fontStyle?: string;
1631
+ fontVariant?: string;
1632
+ fontVariantLigatures?: string;
1633
+ fontVariantPosition?: string;
1634
+ fontVariantCaps?: string;
1635
+ fontVariantNumeric?: string;
1636
+ fontVariantEastAsian?: string;
1637
+ textDecoration?: {
1638
+ underline?: boolean;
1639
+ strikethrough?: boolean;
1640
+ overline?: boolean;
1641
+ };
1642
+ textTransform?: string;
1643
+ baselineShift?: string;
1644
+ dominantBaseline?: string;
1645
+ writingMode?: 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';
1646
+ textAnchor?: string;
1647
+ letterSpacing?: number;
1648
+ wordSpacing?: number;
1649
+ lineHeight?: number;
1650
+ inlineSize?: number;
1651
+ overflowWrap?: 'normal' | 'break-word' | 'anywhere';
1652
+ whiteSpace?: 'normal' | 'nowrap' | 'pre' | 'pre-wrap' | 'pre-line' | 'break-spaces';
1653
+ textDirection?: 'ltr' | 'rtl';
1654
+ unicodeBidi?: 'normal' | 'embed' | 'bidi-override' | 'isolate' | 'isolate-override' | 'plaintext';
1655
+ fontVariationSettings?: Record<string, number>;
1656
+ /**
1657
+ * Per-glyph positioning data, mirroring SVG 2 §11.2's five attribute
1658
+ * lists (`x`, `y`, `dx`, `dy`, `rotate`).
1659
+ *
1660
+ * - `x`/`y` are absolute user coordinates; `null` means "no
1661
+ * override at this glyph — the cursor advances naturally".
1662
+ * - `dx`/`dy` are additive shifts on top of natural advance.
1663
+ * - `rotate` is per-glyph rotation in degrees.
1664
+ *
1665
+ * For backward compatibility, the legacy three-field shape
1666
+ * `{x, y, rotate}` (produced before the spec-aligned model shipped)
1667
+ * is still accepted on read; its `x`/`y` are interpreted as the
1668
+ * additive shifts (`dx`/`dy`).
1669
+ */
1670
+ charOffsets?: ({
1671
+ x: number | null;
1672
+ y: number | null;
1673
+ dx: number;
1674
+ dy: number;
1675
+ rotate: number;
1676
+ } | {
1677
+ x: number;
1678
+ y: number;
1679
+ rotate: number;
1680
+ })[];
1681
+ linePositions?: {
1682
+ x: number;
1683
+ dy: number;
1684
+ }[];
1685
+ textLength?: number;
1686
+ lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
1687
+ /**
1688
+ * Whether this text element uses the rich-text model (styled runs with
1689
+ * per-character formatting) versus the plain-text model. When true,
1690
+ * `richTextData` is the authoritative source for text content and
1691
+ * formatting; when false/absent, `text` is authoritative.
1692
+ */
1693
+ useRichText?: boolean;
1694
+ richTextData?: RichTextData;
1695
+ textX?: number;
1696
+ textY?: number;
1697
+ fillColor?: string;
1698
+ fillOpacity?: number;
1699
+ borderColor?: string;
1700
+ borderWidth?: number | string;
1701
+ strokeOpacity?: number;
1702
+ };
1543
1703
  interface SerializedShape {
1544
1704
  id: string;
1545
1705
  /** Shape type identifier. Built-in types: 'circle', 'rectangle', etc. Plugin shapes use custom ids. */
1546
1706
  type: string;
1547
- state: {
1548
- x?: number;
1549
- y?: number;
1550
- width?: number;
1551
- height?: number;
1552
- radius?: number;
1553
- rx?: number;
1554
- ry?: number;
1555
- cornerRadius?: number;
1556
- cornerShape?: 'round' | 'notch' | 'bevel' | 'scoop';
1557
- cornerMode?: 'uniform' | 'non-uniform';
1558
- cornerRadiusTL?: number;
1559
- cornerRadiusTR?: number;
1560
- cornerRadiusBL?: number;
1561
- cornerRadiusBR?: number;
1562
- cornerShapeTL?: 'round' | 'notch' | 'bevel' | 'scoop';
1563
- cornerShapeTR?: 'round' | 'notch' | 'bevel' | 'scoop';
1564
- cornerShapeBL?: 'round' | 'notch' | 'bevel' | 'scoop';
1565
- cornerShapeBR?: 'round' | 'notch' | 'bevel' | 'scoop';
1566
- fontSize?: number;
1567
- text?: string;
1568
- fontFamily?: string;
1569
- fontWeight?: string;
1570
- fontStyle?: string;
1571
- fontVariant?: string;
1572
- fontVariantLigatures?: string;
1573
- fontVariantPosition?: string;
1574
- fontVariantCaps?: string;
1575
- fontVariantNumeric?: string;
1576
- fontVariantEastAsian?: string;
1577
- textDecoration?: {
1578
- underline?: boolean;
1579
- strikethrough?: boolean;
1580
- overline?: boolean;
1581
- };
1582
- textTransform?: string;
1583
- baselineShift?: string;
1584
- dominantBaseline?: string;
1585
- writingMode?: 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';
1586
- textAnchor?: string;
1587
- letterSpacing?: number;
1588
- wordSpacing?: number;
1589
- lineHeight?: number;
1590
- inlineSize?: number;
1591
- overflowWrap?: 'normal' | 'break-word' | 'anywhere';
1592
- whiteSpace?: 'normal' | 'nowrap' | 'pre' | 'pre-wrap' | 'pre-line' | 'break-spaces';
1593
- textDirection?: 'ltr' | 'rtl';
1594
- unicodeBidi?: 'normal' | 'embed' | 'bidi-override' | 'isolate' | 'isolate-override' | 'plaintext';
1595
- fontVariationSettings?: Record<string, number>;
1596
- /**
1597
- * Per-glyph positioning data, mirroring SVG 2 §11.2's five attribute
1598
- * lists (`x`, `y`, `dx`, `dy`, `rotate`).
1599
- *
1600
- * - `x`/`y` are absolute user coordinates; `null` means "no
1601
- * override at this glyph — the cursor advances naturally".
1602
- * - `dx`/`dy` are additive shifts on top of natural advance.
1603
- * - `rotate` is per-glyph rotation in degrees.
1604
- *
1605
- * For backward compatibility, the legacy three-field shape
1606
- * `{x, y, rotate}` (produced before the spec-aligned model shipped)
1607
- * is still accepted on read; its `x`/`y` are interpreted as the
1608
- * additive shifts (`dx`/`dy`).
1609
- */
1610
- charOffsets?: ({
1611
- x: number | null;
1612
- y: number | null;
1613
- dx: number;
1614
- dy: number;
1615
- rotate: number;
1616
- } | {
1617
- x: number;
1618
- y: number;
1619
- rotate: number;
1620
- })[];
1621
- linePositions?: {
1622
- x: number;
1623
- dy: number;
1624
- }[];
1625
- textLength?: number;
1626
- lengthAdjust?: 'spacing' | 'spacingAndGlyphs';
1627
- /**
1628
- * Whether this text element uses the rich-text model (styled runs with
1629
- * per-character formatting) versus the plain-text model. When true,
1630
- * `richTextData` is the authoritative source for text content and
1631
- * formatting; when false/absent, `text` is authoritative.
1632
- */
1633
- useRichText?: boolean;
1634
- richTextData?: RichTextData;
1635
- scaleX?: number;
1636
- scaleY?: number;
1637
- translateX?: number;
1638
- translateY?: number;
1639
- textX?: number;
1640
- textY?: number;
1641
- scaleAnchor?: Point | null;
1642
- rotation?: number;
1643
- skewX?: number;
1644
- skewY?: number;
1645
- customPivot?: Point | null;
1646
- fillColor?: string;
1647
- fillOpacity?: number;
1648
- borderColor?: string;
1649
- borderWidth?: number | string;
1650
- strokeOpacity?: number;
1707
+ state: SerializedShapeState & {
1651
1708
  /**
1652
1709
  * Inherit `fill` from the ancestor cascade rather than emit an explicit
1653
1710
  * attribute. Set at import for shapes inside `<defs>`/`<symbol>` that
@@ -1790,8 +1847,6 @@ interface SerializedShape {
1790
1847
  filterWidth?: string;
1791
1848
  /** @deprecated v2 — see `filterX`. */
1792
1849
  filterHeight?: string;
1793
- rawTransform?: string;
1794
- ancestorTransform?: number[];
1795
1850
  pathPoints?: PathPoint[];
1796
1851
  pathCurveType?: PathCurveType;
1797
1852
  pathClosed?: boolean;
@@ -2133,6 +2188,26 @@ interface SerializedShape {
2133
2188
  };
2134
2189
  }
2135
2190
  type SerializedViewbox = Viewbox;
2191
+ /**
2192
+ * Scene-graph placement for a node in the document tree.
2193
+ *
2194
+ * This is intentionally independent of SVG DOM serialization: `parentId`
2195
+ * identifies the scene parent (`null` means the document root) and `index`
2196
+ * is the sibling slot inside that parent.
2197
+ */
2198
+ interface SerializedSceneNodePlacement {
2199
+ id: string;
2200
+ parentId: string | null;
2201
+ index: number;
2202
+ updatedAt?: number;
2203
+ clientId?: string;
2204
+ }
2205
+ interface SerializedPaintServerDef {
2206
+ id: string;
2207
+ type: 'mask' | 'clipPath' | 'filter' | 'linearGradient' | 'radialGradient' | 'pattern' | 'symbol';
2208
+ /** Serialized SVG element markup for this def. */
2209
+ markup: string;
2210
+ }
2136
2211
  /**
2137
2212
  * Schema version for the HistorySnapshot format.
2138
2213
  *
@@ -2154,7 +2229,7 @@ type SerializedViewbox = Viewbox;
2154
2229
  * (version - 1) snapshots into the new format.
2155
2230
  * c. Register it in the migrateSnapshot() chain.
2156
2231
  */
2157
- declare const CURRENT_SCHEMA_VERSION = 2;
2232
+ declare const CURRENT_SCHEMA_VERSION = 4;
2158
2233
  interface HistorySnapshot {
2159
2234
  /**
2160
2235
  * Schema version — written on save, read on load to trigger migrations.
@@ -2165,6 +2240,12 @@ interface HistorySnapshot {
2165
2240
  viewboxes: SerializedViewbox[];
2166
2241
  guides?: Guide[];
2167
2242
  measurements?: Measurement[];
2243
+ /**
2244
+ * Canonical scene-graph hierarchy/order. Optional for backward
2245
+ * compatibility with older snapshots that encoded structure only through
2246
+ * container-owned `state.children` and legacy group side channels.
2247
+ */
2248
+ sceneTree?: SerializedSceneNodePlacement[];
2168
2249
  /** Group structure: array of group IDs with their parent group ID (null for top-level) */
2169
2250
  groups?: SerializedGroup[];
2170
2251
  /** Clip/mask group structure for undo/redo support */
@@ -2203,6 +2284,12 @@ interface HistorySnapshot {
2203
2284
  * `innerHTML`-append into editor defs on restore.
2204
2285
  */
2205
2286
  rawPaintServerDefs?: string[];
2287
+ /**
2288
+ * Typed paint-server/defs fragments that are not yet represented by the
2289
+ * structured `library` records. This supersedes `rawPaintServerDefs` for
2290
+ * new writers while the legacy string array remains for older clients.
2291
+ */
2292
+ paintServerDefs?: SerializedPaintServerDef[];
2206
2293
  /** @deprecated v2 — use `library`. Read-only: v1 docs migrate into `library`. */
2207
2294
  customPatterns?: CustomPatternDef[];
2208
2295
  /** @deprecated v2 — use `library`. Read-only: v1 docs migrate into `library`. */
@@ -2617,19 +2704,13 @@ type LibraryDefOfKind<K extends LibraryKind> = Extract<LibraryDef, {
2617
2704
  * - Serialization format for the `.svgs` document format
2618
2705
  */
2619
2706
 
2620
- interface CommonNodeProps {
2707
+ interface CommonNodeProps extends CommonTransformNodeProps {
2621
2708
  fillColor: string;
2622
2709
  borderColor: string;
2623
2710
  borderWidth: number;
2624
2711
  opacity: number;
2625
2712
  fillOpacity: number;
2626
2713
  strokeOpacity: number;
2627
- translateX: number;
2628
- translateY: number;
2629
- rotation: number;
2630
- skewX: number;
2631
- skewY: number;
2632
- customPivot: Point | null;
2633
2714
  locked: boolean;
2634
2715
  visible: boolean;
2635
2716
  fillType: string;
@@ -2654,8 +2735,6 @@ interface CommonNodeProps {
2654
2735
  filterY: string | null;
2655
2736
  filterWidth: string | null;
2656
2737
  filterHeight: string | null;
2657
- rawTransform: string | null;
2658
- ancestorTransform: number[] | null;
2659
2738
  metadata: unknown | null;
2660
2739
  cssClipPath: string | null;
2661
2740
  cssMaskProperties: Record<string, string> | null;
@@ -2736,6 +2815,7 @@ interface TextNodeProps extends CommonNodeProps {
2736
2815
  unicodeBidi: string;
2737
2816
  scaleX: number;
2738
2817
  scaleY: number;
2818
+ /** @deprecated Runtime-only legacy text anchor; persisted transforms use transformMatrix. */
2739
2819
  scaleAnchor: Point | null;
2740
2820
  useRichText: boolean;
2741
2821
  richTextData: unknown | null;
@@ -3225,6 +3305,33 @@ declare function roundSerializedShape(shape: SerializedShape, precision: number)
3225
3305
  */
3226
3306
  declare function roundSnapshot(snapshot: HistorySnapshot, precision: number): HistorySnapshot;
3227
3307
 
3308
+ type Affine2D = readonly [number, number, number, number, number, number];
3309
+ declare const IDENTITY_AFFINE: Affine2D;
3310
+ declare function affine(a: number, b: number, c: number, d: number, e: number, f: number): Affine2D;
3311
+ declare function affineFromArray(m: readonly number[]): Affine2D;
3312
+ declare function affineToArray(m: Affine2D): number[];
3313
+ declare function isFiniteAffineArray(m: unknown): m is readonly number[];
3314
+ declare function isIdentityAffine(m: readonly number[], epsilon?: number): boolean;
3315
+ declare function multiplyAffine(parent: Affine2D, child: Affine2D): Affine2D;
3316
+ declare function translateAffine(tx: number, ty?: number): Affine2D;
3317
+ declare function scaleAffine(sx: number, sy?: number): Affine2D;
3318
+ declare function rotateAffine(angleDeg: number): Affine2D;
3319
+ declare function skewXAffine(angleDeg: number): Affine2D;
3320
+ declare function skewYAffine(angleDeg: number): Affine2D;
3321
+ declare function around(origin: Point, operation: Affine2D): Affine2D;
3322
+ declare function parseSvgTransformList(transform: string): Affine2D;
3323
+ declare function matrixTransformPart(matrix: readonly number[] | null | undefined): string | null;
3324
+ declare function composeLegacyTransformMatrix(state: Record<string, unknown>, defaultPivot?: Point): Affine2D;
3325
+ declare function canonicalTransformString(state: Record<string, unknown>, defaultPivot?: Point): string | null;
3326
+ /**
3327
+ * Compatibility normalizer for documents that still carry the pre-v3
3328
+ * `ancestorTransform` field. The legacy ancestor matrix is composed as the
3329
+ * outer transform and then removed so runtime/editor code only sees the
3330
+ * canonical local `transformMatrix`.
3331
+ */
3332
+ declare function foldLegacyAncestorTransformIntoMatrix(state: Record<string, unknown>, defaultPivot?: Point): void;
3333
+ declare function canonicalPolygonTransformString(state: Record<string, unknown>, cx: number, cy: number): string;
3334
+
3228
3335
  /**
3229
3336
  * Document-level SVG renderer.
3230
3337
  *
@@ -3605,7 +3712,7 @@ declare function getBuiltInMarkerDefs(): SerializedMarkerDef[];
3605
3712
  *
3606
3713
  * Produces:
3607
3714
  * - `<animate>` for numeric and color properties
3608
- * - `<animateTransform>` for rotation, skewX, skewY
3715
+ * - `<animateTransform>` for transformMatrix, rotation, skewX, skewY
3609
3716
  * - `<animateMotion>` for path-based motion
3610
3717
  * - `<discard>` for remove-at-time tracks
3611
3718
  *
@@ -4080,6 +4187,10 @@ declare abstract class ShapeBuilder<T extends ShapeBuilder<T>> {
4080
4187
  scale(x: number, y?: number): T;
4081
4188
  /** Set a custom pivot point for transforms. */
4082
4189
  pivot(x: number, y: number): T;
4190
+ /** Set the canonical local affine transform matrix directly. */
4191
+ transformMatrix(matrix: readonly [number, number, number, number, number, number] | number[]): T;
4192
+ private refreshTransformMatrix;
4193
+ private defaultTransformPivot;
4083
4194
  /** Add one or more filters to the shape. */
4084
4195
  filter(...filters: ShapeFilter[]): T;
4085
4196
  /** Add a drop shadow filter. */
@@ -4811,11 +4922,11 @@ declare class Track {
4811
4922
  * Add a keyframe at the given time.
4812
4923
  *
4813
4924
  * @param time - Time in seconds from the start of the track.
4814
- * @param value - The property value at this time (number or color string).
4925
+ * @param value - The property value at this time.
4815
4926
  * @param easing - Easing curve leading *into* this keyframe.
4816
4927
  * Defaults to LINEAR.
4817
4928
  */
4818
- keyframe(time: number, value: number | string, easing?: EasingType): Track;
4929
+ keyframe(time: number, value: number | string | number[], easing?: EasingType): Track;
4819
4930
  /**
4820
4931
  * Add a keyframe with a custom cubic-bezier easing.
4821
4932
  *
@@ -4823,7 +4934,7 @@ declare class Track {
4823
4934
  * @param value - The property value.
4824
4935
  * @param points - Cubic-bezier control points [x1, y1, x2, y2].
4825
4936
  */
4826
- keyframeBezier(time: number, value: number | string, points: [number, number, number, number]): Track;
4937
+ keyframeBezier(time: number, value: number | string | number[], points: [number, number, number, number]): Track;
4827
4938
  /**
4828
4939
  * Add a keyframe with a CSS linear() easing function.
4829
4940
  *
@@ -4831,7 +4942,7 @@ declare class Track {
4831
4942
  * @param value - The property value.
4832
4943
  * @param linearPoints - Control points for the piecewise linear function.
4833
4944
  */
4834
- keyframeLinear(time: number, value: number | string, linearPoints: LinearEasingPoint[]): Track;
4945
+ keyframeLinear(time: number, value: number | string | number[], linearPoints: LinearEasingPoint[]): Track;
4835
4946
  /** Add multiple keyframes at once. */
4836
4947
  keyframes(...kfs: AnimationKeyframe[]): Track;
4837
4948
  /** Disable this track (excluded from playback/export). */
@@ -5483,4 +5594,4 @@ declare function solveSudoku(grid: SudokuGrid, options?: SolveSudokuOptions): Su
5483
5594
  declare function validateSudokuPuzzle(grid: SudokuGrid): SudokuValidationResult;
5484
5595
  declare function generateSudokuPuzzle(options: GenerateSudokuOptions): GeneratedSudokuPuzzle;
5485
5596
 
5486
- export { type AnimatablePropertyDescriptor, type AnimationKeyframe, type AnimationTimeline, type AnimationTrack, type AnimationTrigger, type AnimationTriggerType, type AnyNodeProps, type ArcParams$1 as ArcParams, type AriaRole, Arrow, type ArrowNodeProps, Audio, BUILTIN_MARKER_ID_MAP, type BaseFilter, type BaseFilterPrimitive, type BlackAndWhiteFilter, type BlurQuality, type BrightnessFilter, CURRENT_SCHEMA_VERSION, type ChannelPainterFilter, Circle, type CircleNodeProps, Cloud, type CodeFormat, type CodegenOptions, type CommonNodeProps, type ConnectionDirection, type ConnectionPoint, Container, ContainerShapeBuilder, type ContouringDiscreteFilter, type ContouringTableFilter, type ContrastFilter, type CornerShapeValue, type CreateDocumentOptions, type CreateShapeOptions, Cross, type CrossNodeProps, type CrumpledPlasticFilter, type CustomPatternDef, type CycleBehavior, DEFAULT_COORDINATE_PRECISION, type DiffuseLightingFilter, Document, type DocumentMetadata, type DocumentNodeProps, type DocumentOptions, type DocumentScript, type DocumentStyle, type DropShadowFilter, type DuotoneFilter, EASING_CURVES, EVENT_TRIGGER_OPTIONS, EasingType, Ellipse, type EllipseNodeProps, type EmbossFilter, type ExtractedVariables, type FeBlendPrimitive, type FeColorMatrixPrimitive, type FeComponentTransferPrimitive, type FeCompositePrimitive, type FeConvolveMatrixPrimitive, type FeDiffuseLightingPrimitive, type FeDisplacementMapPrimitive, type FeDropShadowPrimitive, type FeFloodPrimitive, type FeGaussianBlurPrimitive, type FeImagePrimitive, type FeMergePrimitive, type FeMorphologyPrimitive, type FeOffsetPrimitive, type FeSpecularLightingPrimitive, type FeTilePrimitive, type FeTurbulencePrimitive, type FillType, type FilmGrainFilter, type FilterBlendMode, type FilterLibraryDef, type FilterLightSource, type FilterPrimitive, type FilterPrimitiveType, type FilterType, type GaussianBlurFilter, Gear, type GearNodeProps, type GenerateSudokuOptions, type GeneratedSudokuPuzzle, type GlowFilter, type GouacheFilter, type GradientDefinition, type GradientSpreadMethod, type GradientStop, type GradientUnits, type GrayscaleFilter, type GroupNodeProps, type Guide, Heart, type HistorySnapshot, type HueRotateFilter, Hyperlink, type ImageAttribution, type ImageNodeProps, ImageShape, type InkBlotFilter, type InnerGlowFilter, type InnerShadowFilter, type InvertFilter, LIBRARY_EMIT_ORDER, type LibraryDef, type LibraryDefBase, type LibraryDefOfKind, type LibraryKind, type LicenseType, type LightSource, Lightning, Line, type LineEndpointValue, type LineNodeProps, type LinearEasingPoint, type LinearGradient, LinearGradientBuilder, type LinearGradientLibraryDef, type LinkTarget, MARKER_HEIGHT, MARKER_VIEWBOX, MARKER_WIDTH, MAX_COORDINATE_PRECISION, MIGRATIONS, type MarkerDescriptor, type MarkerLibraryDef, type Measurement, type Migration, type MorphologyFilter, type MorphologyOperator, type MotionBlurFilter, NGon, type NGonNodeProps, NestedSvg, type NodeTypePropsMap, type NoiseFilter, type OpacityFilter, type OutlineFilter, type OutlinePosition, PUZZLE_DEFAULTS, type ParseOptions, Path, PathCurveType, type PathNodeProps, type PathPoint, PathPointType, PatternBuilder, type PatternElement, type PatternFill, type PatternLibraryDef, type PatternParams, type PatternSvgContentResult, type PatternType, type PixelateFilter, type Point, type PointLightFilter, type PolygonBaseNodeProps, Polyline, type PolylineNodeProps, type PuzzleBounds, type PuzzleOptions, type PuzzlePiece, type PuzzleStyle, type PuzzleTabPattern, type RadialGradient, RadialGradientBuilder, type RadialGradientLibraryDef, type RawSvgFilter, Rectangle, type RectangleNodeProps, type RenderOptions, type RichTextData, type RichTextLine, type RichTextSegment, type RichTextSegmentStyle, type RiddledFilter, Ring, type RingNodeProps, type RoundEdgesFilter, type SaturateFilter, type SegmentCurveType, type SepiaFilter, type SerializedAnimationTimeline, type SerializedClipMaskGroup, type SerializedColorGlyph, type SerializedColorGlyphLibrary, type SerializedGroup, type SerializedMarkerDef, type SerializedShape, type SerializedSymbolDef, type SerializedVariantAxis, type SerializedViewbox, ShapeBuilder, type ShapeFilter, type ShapeMetadata, ShapeReference, type SharpenFilter, type SolveSudokuOptions, type SpecularLightingFilter, SpeechBubble, Spiral, type SpiralNodeProps, type SpotLightFilter, Square, type SquareNodeProps, Star, type StarNodeProps, type StepPosition, type StepsParams, type StringifyOptions, type StrokeType, type SudokuDifficulty, type SudokuGrid, type SudokuRating, type SudokuValidationResult, type SvgPrimitiveChainFilter, Switch, type SymbolInstanceNodeProps, type SymbolLibraryDef, type TemplateVariable, type TemplateVariableMode, type TemplateVariableSource, type TemplateVariableType, Text, type TextNodeProps, Timeline, Track, type TransferFunc, Triangle, type TriangleNodeProps, type ValidationError, type ValidationResult, type VariableMap, Video, View, type Viewbox, type WarpFilter, type WarpType, type WatercolorFilter, type XrayFilter, collectReferencedLibraryIds, computeArrowVertices, computeCloudPath, computeCrossVertices, computeDashArray, computeGearPath, computeGearVertices, computeHeartPath, computeLightningVertices, computePolygonVertices, computeRectanglePath, computeRingPath, computeSpeechBubbleVertices, computeSpiralPath, computeSplinePath, computeStarVertices, createDocument, createShape, createViewbox, defaultVariableMode, escXml, extractVariables, filterAttr, generateCode, generateCssCode, generateD3Code, generateId, generatePatternSvgContent, generatePuzzlePieces, generateReactCode, generateSudokuPuzzle, generateSvgCode, generateVueCode, getBuiltInMarkerDefs, getEasingCubicBezier, getEffectivePrecision, getMarkerDescriptors, getPatternElements, linearGradient, migrateSnapshot, parseDocument, parseVariableArgs, pattern, radialGradient, renderAnimationElements, renderBuiltinMarkerDefs, renderCircle, renderEllipse, renderFilterDefs, renderFilterLibraryDef, renderFilterPrimitive, renderFilterPrimitivesForType, renderImage, renderLibraryDef, renderLibraryDefs, renderLine, renderLinearGradientLibraryDef, renderMarkerLibraryDef, renderPatternLibraryDef, renderPolygonShape, renderPolyline, renderRadialGradientLibraryDef, renderRectangle, renderReferencedLibraryDefs, renderShape, renderSpline, renderSvgPrimitiveChainFilter, renderSymbolLibraryDef, renderText, renderToSvg, roundCoord, roundNumberString, roundSerializedShape, roundSnapshot, solveSudoku, stringifyDocument, substituteString, substituteVariables, validateSnapshot, validateSudokuPuzzle, verticesToPath };
5597
+ export { type Affine2D, type AffineTransformMatrix, type AnimatablePropertyDescriptor, type AnimationKeyframe, type AnimationTimeline, type AnimationTrack, type AnimationTrigger, type AnimationTriggerType, type AnyNodeProps, type ArcParams$1 as ArcParams, type AriaRole, Arrow, type ArrowNodeProps, Audio, BUILTIN_MARKER_ID_MAP, type BaseFilter, type BaseFilterPrimitive, type BlackAndWhiteFilter, type BlurQuality, type BrightnessFilter, COMMON_TRANSFORM_NODE_DEFAULTS, CURRENT_SCHEMA_VERSION, type ChannelPainterFilter, Circle, type CircleNodeProps, Cloud, type CodeFormat, type CodegenOptions, type CommonNodeProps, type CommonTransformNodeProps, type ConnectionDirection, type ConnectionPoint, Container, ContainerShapeBuilder, type ContouringDiscreteFilter, type ContouringTableFilter, type ContrastFilter, type CornerShapeValue, type CreateDocumentOptions, type CreateShapeOptions, Cross, type CrossNodeProps, type CrumpledPlasticFilter, type CustomPatternDef, type CycleBehavior, DEFAULT_COORDINATE_PRECISION, type DiffuseLightingFilter, Document, type DocumentMetadata, type DocumentNodeProps, type DocumentOptions, type DocumentScript, type DocumentStyle, type DropShadowFilter, type DuotoneFilter, EASING_CURVES, EVENT_TRIGGER_OPTIONS, EasingType, Ellipse, type EllipseNodeProps, type EmbossFilter, type ExtractedVariables, type FeBlendPrimitive, type FeColorMatrixPrimitive, type FeComponentTransferPrimitive, type FeCompositePrimitive, type FeConvolveMatrixPrimitive, type FeDiffuseLightingPrimitive, type FeDisplacementMapPrimitive, type FeDropShadowPrimitive, type FeFloodPrimitive, type FeGaussianBlurPrimitive, type FeImagePrimitive, type FeMergePrimitive, type FeMorphologyPrimitive, type FeOffsetPrimitive, type FeSpecularLightingPrimitive, type FeTilePrimitive, type FeTurbulencePrimitive, type FillType, type FilmGrainFilter, type FilterBlendMode, type FilterLibraryDef, type FilterLightSource, type FilterPrimitive, type FilterPrimitiveType, type FilterType, type GaussianBlurFilter, Gear, type GearNodeProps, type GenerateSudokuOptions, type GeneratedSudokuPuzzle, type GlowFilter, type GouacheFilter, type GradientDefinition, type GradientSpreadMethod, type GradientStop, type GradientUnits, type GrayscaleFilter, type GroupNodeProps, type Guide, Heart, type HistorySnapshot, type HueRotateFilter, Hyperlink, IDENTITY_AFFINE, type ImageAttribution, type ImageNodeProps, ImageShape, type InkBlotFilter, type InnerGlowFilter, type InnerShadowFilter, type InvertFilter, LIBRARY_EMIT_ORDER, type LibraryDef, type LibraryDefBase, type LibraryDefOfKind, type LibraryKind, type LicenseType, type LightSource, Lightning, Line, type LineEndpointValue, type LineNodeProps, type LinearEasingPoint, type LinearGradient, LinearGradientBuilder, type LinearGradientLibraryDef, type LinkTarget, MARKER_HEIGHT, MARKER_VIEWBOX, MARKER_WIDTH, MAX_COORDINATE_PRECISION, MIGRATIONS, type MarkerDescriptor, type MarkerLibraryDef, type Measurement, type Migration, type MorphologyFilter, type MorphologyOperator, type MotionBlurFilter, NGon, type NGonNodeProps, NUMERIC_SHAPE_TRANSFORM_STATE_KEYS, NestedSvg, type NodeTypePropsMap, type NoiseFilter, type OpacityFilter, type OutlineFilter, type OutlinePosition, PUZZLE_DEFAULTS, type ParseOptions, Path, PathCurveType, type PathNodeProps, type PathPoint, PathPointType, PatternBuilder, type PatternElement, type PatternFill, type PatternLibraryDef, type PatternParams, type PatternSvgContentResult, type PatternType, type PixelateFilter, type Point, type PointLightFilter, type PolygonBaseNodeProps, Polyline, type PolylineNodeProps, type PuzzleBounds, type PuzzleOptions, type PuzzlePiece, type PuzzleStyle, type PuzzleTabPattern, type RadialGradient, RadialGradientBuilder, type RadialGradientLibraryDef, type RawSvgFilter, Rectangle, type RectangleNodeProps, type RenderOptions, type RichTextData, type RichTextLine, type RichTextSegment, type RichTextSegmentStyle, type RiddledFilter, Ring, type RingNodeProps, type RoundEdgesFilter, SHAPE_TRANSFORM_STATE_KEYS, type SaturateFilter, type SegmentCurveType, type SepiaFilter, type SerializedAnimationTimeline, type SerializedClipMaskGroup, type SerializedColorGlyph, type SerializedColorGlyphLibrary, type SerializedGroup, type SerializedMarkerDef, type SerializedPaintServerDef, type SerializedSceneNodePlacement, type SerializedShape, type SerializedShapeState, type SerializedSymbolDef, type SerializedVariantAxis, type SerializedViewbox, ShapeBuilder, type ShapeFilter, type ShapeMetadata, ShapeReference, type ShapeTransformState, type SharpenFilter, type SolveSudokuOptions, type SpecularLightingFilter, SpeechBubble, Spiral, type SpiralNodeProps, type SpotLightFilter, Square, type SquareNodeProps, Star, type StarNodeProps, type StepPosition, type StepsParams, type StringifyOptions, type StrokeType, type SudokuDifficulty, type SudokuGrid, type SudokuRating, type SudokuValidationResult, type SvgPrimitiveChainFilter, Switch, type SymbolInstanceNodeProps, type SymbolLibraryDef, type TemplateVariable, type TemplateVariableMode, type TemplateVariableSource, type TemplateVariableType, Text, type TextNodeProps, Timeline, Track, type TransferFunc, Triangle, type TriangleNodeProps, type ValidationError, type ValidationResult, type VariableMap, Video, View, type Viewbox, type WarpFilter, type WarpType, type WatercolorFilter, type XrayFilter, affine, affineFromArray, affineToArray, around, canonicalPolygonTransformString, canonicalTransformString, collectReferencedLibraryIds, composeLegacyTransformMatrix, computeArrowVertices, computeCloudPath, computeCrossVertices, computeDashArray, computeGearPath, computeGearVertices, computeHeartPath, computeLightningVertices, computePolygonVertices, computeRectanglePath, computeRingPath, computeSpeechBubbleVertices, computeSpiralPath, computeSplinePath, computeStarVertices, createDocument, createShape, createViewbox, defaultVariableMode, escXml, extractVariables, filterAttr, foldLegacyAncestorTransformIntoMatrix, generateCode, generateCssCode, generateD3Code, generateId, generatePatternSvgContent, generatePuzzlePieces, generateReactCode, generateSudokuPuzzle, generateSvgCode, generateVueCode, getBuiltInMarkerDefs, getEasingCubicBezier, getEffectivePrecision, getMarkerDescriptors, getPatternElements, isFiniteAffineArray, isIdentityAffine, linearGradient, matrixTransformPart, migrateSnapshot, multiplyAffine, parseDocument, parseSvgTransformList, parseVariableArgs, pattern, radialGradient, renderAnimationElements, renderBuiltinMarkerDefs, renderCircle, renderEllipse, renderFilterDefs, renderFilterLibraryDef, renderFilterPrimitive, renderFilterPrimitivesForType, renderImage, renderLibraryDef, renderLibraryDefs, renderLine, renderLinearGradientLibraryDef, renderMarkerLibraryDef, renderPatternLibraryDef, renderPolygonShape, renderPolyline, renderRadialGradientLibraryDef, renderRectangle, renderReferencedLibraryDefs, renderShape, renderSpline, renderSvgPrimitiveChainFilter, renderSymbolLibraryDef, renderText, renderToSvg, rotateAffine, roundCoord, roundNumberString, roundSerializedShape, roundSnapshot, scaleAffine, skewXAffine, skewYAffine, solveSudoku, stringifyDocument, substituteString, substituteVariables, translateAffine, validateSnapshot, validateSudokuPuzzle, verticesToPath };