@pixerate/editor 0.57.0 → 0.59.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/animation/index.cjs +23 -3
- package/dist/animation/index.cjs.map +1 -1
- package/dist/animation/index.d.cts +3 -2
- package/dist/animation/index.d.ts +3 -2
- package/dist/animation/index.js +23 -3
- package/dist/animation-editor/index.cjs +836 -158
- package/dist/animation-editor/index.cjs.map +1 -1
- package/dist/animation-editor/index.d.cts +454 -40
- package/dist/animation-editor/index.d.ts +454 -40
- package/dist/animation-editor/index.js +790 -112
- package/dist/animation-editor/index.js.map +1 -1
- package/dist/behavior-Ymbld6jL.d.cts +60 -0
- package/dist/behavior-Ymbld6jL.d.ts +60 -0
- package/dist/canvas/index.cjs +35 -29
- package/dist/canvas/index.cjs.map +1 -1
- package/dist/canvas/index.d.cts +4 -4
- package/dist/canvas/index.d.ts +4 -4
- package/dist/canvas/index.js +9 -3
- package/dist/canvas/index.js.map +1 -1
- package/dist/{chunk-O4ONBPZW.cjs → chunk-2FGRTYJN.cjs} +4 -4
- package/dist/{chunk-O4ONBPZW.cjs.map → chunk-2FGRTYJN.cjs.map} +1 -1
- package/dist/{chunk-XZ4L3R4K.cjs → chunk-2FHLHZAL.cjs} +39 -3
- package/dist/chunk-2FHLHZAL.cjs.map +1 -0
- package/dist/chunk-3NYXDBBW.js +122 -0
- package/dist/chunk-3NYXDBBW.js.map +1 -0
- package/dist/{chunk-NONDTTH7.js → chunk-3TLL5OID.js} +17 -2
- package/dist/{chunk-NONDTTH7.js.map → chunk-3TLL5OID.js.map} +1 -1
- package/dist/{chunk-UB2OY7FD.js → chunk-AGR4P4UZ.js} +38 -2
- package/dist/chunk-AGR4P4UZ.js.map +1 -0
- package/dist/{chunk-SHOVAHUB.js → chunk-JK6M6V7G.js} +2 -2
- package/dist/{chunk-XCXQDPID.cjs → chunk-YJLCBA7V.cjs} +25 -10
- package/dist/chunk-YJLCBA7V.cjs.map +1 -0
- package/dist/chunk-ZCNLBRT6.cjs +122 -0
- package/dist/chunk-ZCNLBRT6.cjs.map +1 -0
- package/dist/{easing-CNGk-W6d.d.ts → easing-lM0Xo9Ni.d.cts} +14 -2
- package/dist/{easing-CNGk-W6d.d.cts → easing-lM0Xo9Ni.d.ts} +14 -2
- package/dist/parameters/index.cjs +2 -2
- package/dist/parameters/index.d.cts +1 -1
- package/dist/parameters/index.d.ts +1 -1
- package/dist/parameters/index.js +1 -1
- package/dist/{player-W-5DX3Go.d.ts → player-DV4Jujdq.d.ts} +1 -1
- package/dist/{player-Dg0FT0UI.d.cts → player-DrcP2xqj.d.cts} +1 -1
- package/dist/{svg-CPK82TtU.d.ts → svg-Dh17jCyA.d.ts} +22 -1
- package/dist/{svg-CLg2zqZA.d.cts → svg-ymShkNtu.d.cts} +22 -1
- package/dist/vector/index.cjs +472 -472
- package/dist/vector/index.d.cts +3 -3
- package/dist/vector/index.d.ts +3 -3
- package/dist/vector/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-UB2OY7FD.js.map +0 -1
- package/dist/chunk-XCXQDPID.cjs.map +0 -1
- package/dist/chunk-XZ4L3R4K.cjs.map +0 -1
- /package/dist/{chunk-SHOVAHUB.js.map → chunk-JK6M6V7G.js.map} +0 -0
|
@@ -12,6 +12,10 @@ var ANIMATION_EASING_PRESETS = [
|
|
|
12
12
|
"ease-in-out-elastic",
|
|
13
13
|
"elastic",
|
|
14
14
|
"spring",
|
|
15
|
+
"spring-gentle",
|
|
16
|
+
"spring-quick",
|
|
17
|
+
"spring-bouncy",
|
|
18
|
+
"spring-slow",
|
|
15
19
|
"hold"
|
|
16
20
|
];
|
|
17
21
|
var ANIMATION_EASING_LABELS = {
|
|
@@ -27,7 +31,11 @@ var ANIMATION_EASING_LABELS = {
|
|
|
27
31
|
"ease-in-elastic": "Elastic in",
|
|
28
32
|
"ease-in-out-elastic": "Elastic in-out",
|
|
29
33
|
elastic: "Elastic",
|
|
30
|
-
spring: "Spring"
|
|
34
|
+
spring: "Spring",
|
|
35
|
+
"spring-gentle": "Spring (gentle)",
|
|
36
|
+
"spring-quick": "Spring (quick)",
|
|
37
|
+
"spring-bouncy": "Spring (bouncy)",
|
|
38
|
+
"spring-slow": "Spring (slow)"
|
|
31
39
|
};
|
|
32
40
|
var CUBIC_BEZIER_PRESETS = {
|
|
33
41
|
linear: [0, 0, 1, 1],
|
|
@@ -39,6 +47,30 @@ var CUBIC_BEZIER_PRESETS = {
|
|
|
39
47
|
"ease-out-back": [0.34, 1.56, 0.64, 1]
|
|
40
48
|
};
|
|
41
49
|
var DEFAULT_SPRING = { stiffness: 170, damping: 26, mass: 1, velocity: 0 };
|
|
50
|
+
var SPRING_PRESETS = {
|
|
51
|
+
"spring-gentle": { mass: 1, stiffness: 100, damping: 15, velocity: 0 },
|
|
52
|
+
"spring-quick": { mass: 1, stiffness: 300, damping: 20, velocity: 0 },
|
|
53
|
+
"spring-bouncy": { mass: 1, stiffness: 600, damping: 15, velocity: 0 },
|
|
54
|
+
"spring-slow": { mass: 1, stiffness: 80, damping: 20, velocity: 0 }
|
|
55
|
+
};
|
|
56
|
+
function springSettleMs(spring) {
|
|
57
|
+
const stiffness = Math.max(1e-6, finite(spring.stiffness, DEFAULT_SPRING.stiffness));
|
|
58
|
+
const damping = Math.max(0, finite(spring.damping, DEFAULT_SPRING.damping));
|
|
59
|
+
const mass = Math.max(1e-6, finite(spring.mass, DEFAULT_SPRING.mass));
|
|
60
|
+
const w0 = Math.sqrt(stiffness / mass);
|
|
61
|
+
const zeta = damping / (2 * Math.sqrt(stiffness * mass));
|
|
62
|
+
let seconds;
|
|
63
|
+
if (zeta <= 0) seconds = Infinity;
|
|
64
|
+
else if (zeta < 1 - 1e-6) seconds = 6.9 / (zeta * w0);
|
|
65
|
+
else if (zeta <= 1 + 1e-6) seconds = 9.2 / w0;
|
|
66
|
+
else seconds = 9.2 / (w0 * (zeta - Math.sqrt(zeta * zeta - 1)));
|
|
67
|
+
return Math.round(Math.min(1e4, Math.max(50, seconds * 1e3)));
|
|
68
|
+
}
|
|
69
|
+
function reverseCubicBezier(easing) {
|
|
70
|
+
const r = resolveEasing(easing);
|
|
71
|
+
if (r === "hold" || r.type !== "cubic-bezier") return null;
|
|
72
|
+
return { type: "cubic-bezier", x1: 1 - r.x2, y1: 1 - r.y2, x2: 1 - r.x1, y2: 1 - r.y1 };
|
|
73
|
+
}
|
|
42
74
|
var DEFAULT_ELASTIC = { amplitude: 1, period: 0.3, mode: "out" };
|
|
43
75
|
var clamp = (v, lo, hi) => Math.min(hi, Math.max(lo, v));
|
|
44
76
|
var finite = (v, fallback) => typeof v === "number" && Number.isFinite(v) ? v : fallback;
|
|
@@ -123,6 +155,7 @@ function springAt(spring, seconds) {
|
|
|
123
155
|
function resolveEasing(easing) {
|
|
124
156
|
if (easing === "hold") return "hold";
|
|
125
157
|
if (easing === "spring") return { type: "spring", ...DEFAULT_SPRING };
|
|
158
|
+
if (typeof easing === "string" && easing in SPRING_PRESETS) return { type: "spring", ...SPRING_PRESETS[easing] };
|
|
126
159
|
if (easing === "elastic" || easing === "ease-out-elastic") {
|
|
127
160
|
return { type: "elastic", ...DEFAULT_ELASTIC, mode: "out" };
|
|
128
161
|
}
|
|
@@ -248,6 +281,9 @@ export {
|
|
|
248
281
|
ANIMATION_EASING_PRESETS,
|
|
249
282
|
ANIMATION_EASING_LABELS,
|
|
250
283
|
CUBIC_BEZIER_PRESETS,
|
|
284
|
+
SPRING_PRESETS,
|
|
285
|
+
springSettleMs,
|
|
286
|
+
reverseCubicBezier,
|
|
251
287
|
elasticAt,
|
|
252
288
|
cubicBezierAt,
|
|
253
289
|
springAt,
|
|
@@ -259,4 +295,4 @@ export {
|
|
|
259
295
|
easingToCss,
|
|
260
296
|
easingLabel
|
|
261
297
|
};
|
|
262
|
-
//# sourceMappingURL=chunk-
|
|
298
|
+
//# sourceMappingURL=chunk-AGR4P4UZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/animation/easing.ts"],"sourcesContent":["// Portions ported from filmcraft-main/crates/project/src/keyframe.rs (MIT OR Apache-2.0, © ArtCraft Team and contributors). See THIRD_PARTY_NOTICES.md.\n\n/**\n * Keyframe easing: the curve a segment follows from one keyframe to the next.\n *\n * - `hold` keeps the first keyframe's value until the next one (a step).\n * - `linear` and the CSS presets (`ease`, `ease-in`, `ease-out`, `ease-in-out`) are\n * CSS-compatible `cubic-bezier()` curves; `{ type: 'cubic-bezier', x1, y1, x2, y2 }` is any\n * such curve (x1 / y1 is the leaving keyframe's out handle, x2 / y2 the next one's in handle).\n * - `spring` is a damped spring settling on the next value (it may overshoot).\n */\n\n/** Named easing presets. */\nexport type AnimationEasingPreset =\n\t| 'linear'\n\t| 'hold'\n\t| 'ease'\n\t| 'ease-in'\n\t| 'ease-out'\n\t| 'ease-in-out'\n\t| 'ease-in-back'\n\t| 'ease-out-back'\n\t| 'ease-out-elastic'\n\t| 'ease-in-elastic'\n\t| 'ease-in-out-elastic'\n\t| 'elastic'\n\t| 'spring'\n\t| 'spring-gentle'\n\t| 'spring-quick'\n\t| 'spring-bouncy'\n\t| 'spring-slow';\n\nexport interface CubicBezierEasing {\n\ttype: 'cubic-bezier';\n\tx1: number;\n\ty1: number;\n\tx2: number;\n\ty2: number;\n}\n\nexport interface SpringEasing {\n\ttype: 'spring';\n\t/** Spring stiffness (default 170). */\n\tstiffness?: number;\n\t/** Damping (default 26). */\n\tdamping?: number;\n\t/** Mass (default 1). */\n\tmass?: number;\n\t/** Initial velocity in units of the segment's value change per second (default 0). */\n\tvelocity?: number;\n}\n\nexport interface ElasticEasing {\n\ttype: 'elastic';\n\t/** Amplitude / overshoot factor (default 1). */\n\tamplitude?: number;\n\t/** Period of oscillation as a fraction of duration (default 0.3). */\n\tperiod?: number;\n\t/** Mode of elastic oscillation ('out' | 'in' | 'in-out', default 'out'). */\n\tmode?: 'out' | 'in' | 'in-out';\n}\n\nexport type AnimationEasing = AnimationEasingPreset | CubicBezierEasing | SpringEasing | ElasticEasing;\n\n/** Preset names, in picker order. */\nexport const ANIMATION_EASING_PRESETS: readonly AnimationEasingPreset[] = [\n\t'linear',\n\t'ease',\n\t'ease-in',\n\t'ease-out',\n\t'ease-in-out',\n\t'ease-in-back',\n\t'ease-out-back',\n\t'ease-out-elastic',\n\t'ease-in-elastic',\n\t'ease-in-out-elastic',\n\t'elastic',\n\t'spring',\n\t'spring-gentle',\n\t'spring-quick',\n\t'spring-bouncy',\n\t'spring-slow',\n\t'hold'\n];\n\n/** Picker labels for the presets. */\nexport const ANIMATION_EASING_LABELS: Readonly<Record<AnimationEasingPreset, string>> = {\n\tlinear: 'Linear',\n\thold: 'Hold',\n\tease: 'Ease',\n\t'ease-in': 'Ease in',\n\t'ease-out': 'Ease out',\n\t'ease-in-out': 'Ease in-out',\n\t'ease-in-back': 'Back in',\n\t'ease-out-back': 'Back out',\n\t'ease-out-elastic': 'Elastic out',\n\t'ease-in-elastic': 'Elastic in',\n\t'ease-in-out-elastic': 'Elastic in-out',\n\telastic: 'Elastic',\n\tspring: 'Spring',\n\t'spring-gentle': 'Spring (gentle)',\n\t'spring-quick': 'Spring (quick)',\n\t'spring-bouncy': 'Spring (bouncy)',\n\t'spring-slow': 'Spring (slow)'\n};\n\n/** The CSS control points of the bezier presets (CSS Easing Functions Level 1 values for the CSS keywords). */\nexport const CUBIC_BEZIER_PRESETS: Readonly<Record<string, readonly [number, number, number, number]>> = {\n\tlinear: [0, 0, 1, 1],\n\tease: [0.25, 0.1, 0.25, 1],\n\t'ease-in': [0.42, 0, 1, 1],\n\t'ease-out': [0, 0, 0.58, 1],\n\t'ease-in-out': [0.42, 0, 0.58, 1],\n\t'ease-in-back': [0.36, 0, 0.66, -0.56],\n\t'ease-out-back': [0.34, 1.56, 0.64, 1]\n};\n\nconst DEFAULT_SPRING = { stiffness: 170, damping: 26, mass: 1, velocity: 0 };\n\n/**\n * Figma's named springs (mass 1): gentle 100 / 15, quick 300 / 20, bouncy 600 / 15, slow 80 / 20\n * (stiffness / damping). Each plays until it settles (see `springSettleMs`).\n */\nexport const SPRING_PRESETS: Readonly<Record<'spring-gentle' | 'spring-quick' | 'spring-bouncy' | 'spring-slow', Required<Omit<SpringEasing, 'type'>>>> = {\n\t'spring-gentle': { mass: 1, stiffness: 100, damping: 15, velocity: 0 },\n\t'spring-quick': { mass: 1, stiffness: 300, damping: 20, velocity: 0 },\n\t'spring-bouncy': { mass: 1, stiffness: 600, damping: 15, velocity: 0 },\n\t'spring-slow': { mass: 1, stiffness: 80, damping: 20, velocity: 0 }\n};\n\n/**\n * How long a spring takes to settle within 0.1% of its target, in ms (clamped to 50–10000):\n * 6.9 / (ζ·ω₀) s when under-damped, else 9.2 / its slowest rate.\n */\nexport function springSettleMs(spring: Omit<SpringEasing, 'type'>): number {\n\tconst stiffness = Math.max(1e-6, finite(spring.stiffness, DEFAULT_SPRING.stiffness));\n\tconst damping = Math.max(0, finite(spring.damping, DEFAULT_SPRING.damping));\n\tconst mass = Math.max(1e-6, finite(spring.mass, DEFAULT_SPRING.mass));\n\tconst w0 = Math.sqrt(stiffness / mass);\n\tconst zeta = damping / (2 * Math.sqrt(stiffness * mass));\n\tlet seconds: number;\n\tif (zeta <= 0) seconds = Infinity;\n\telse if (zeta < 1 - 1e-6) seconds = 6.9 / (zeta * w0);\n\telse if (zeta <= 1 + 1e-6) seconds = 9.2 / w0;\n\telse seconds = 9.2 / (w0 * (zeta - Math.sqrt(zeta * zeta - 1)));\n\treturn Math.round(Math.min(10000, Math.max(50, seconds * 1000)));\n}\n\n/** The same curve run backwards in time (`1 − e(1 − u)`) for a cubic-bezier, or null for other easings. */\nexport function reverseCubicBezier(easing: AnimationEasing | string | undefined | null): CubicBezierEasing | null {\n\tconst r = resolveEasing(easing);\n\tif (r === 'hold' || r.type !== 'cubic-bezier') return null;\n\treturn { type: 'cubic-bezier', x1: 1 - r.x2, y1: 1 - r.y2, x2: 1 - r.x1, y2: 1 - r.y1 };\n}\nconst DEFAULT_ELASTIC = { amplitude: 1, period: 0.3, mode: 'out' as const };\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\nconst finite = (v: unknown, fallback: number) => (typeof v === 'number' && Number.isFinite(v) ? v : fallback);\n\n/**\n * Normalised position for a parametric elastic oscillation curve (as used in Rive and Penner curves).\n * Amplitude controls the overshoot intensity; period controls the wave frequency across normalized progress `t` (0–1).\n */\nexport function elasticAt(elastic: Omit<ElasticEasing, 'type'>, t: number): number {\n\tif (t <= 0) return 0;\n\tif (t >= 1) return 1;\n\n\tconst a = Math.max(1e-6, finite(elastic.amplitude, DEFAULT_ELASTIC.amplitude));\n\tconst p = Math.max(1e-6, finite(elastic.period, DEFAULT_ELASTIC.period));\n\tconst mode = elastic.mode ?? 'out';\n\n\tconst TAU = 2 * Math.PI;\n\n\tconst solveOut = (u: number, amp: number, per: number) => {\n\t\tconst s = amp < 1 ? per / 4 : (per / TAU) * Math.asin(1 / amp);\n\t\treturn amp * Math.pow(2, -10 * u) * Math.sin(((u - s) * TAU) / per) + 1;\n\t};\n\n\tconst solveIn = (u: number, amp: number, per: number) => {\n\t\tconst s = amp < 1 ? per / 4 : (per / TAU) * Math.asin(1 / amp);\n\t\tconst adjusted = u - 1;\n\t\treturn -(amp * Math.pow(2, 10 * adjusted) * Math.sin(((adjusted - s) * TAU) / per));\n\t};\n\n\tif (mode === 'in') {\n\t\treturn solveIn(t, a, p);\n\t}\n\tif (mode === 'in-out') {\n\t\tif (t < 0.5) {\n\t\t\treturn 0.5 * solveIn(t * 2, a, p);\n\t\t}\n\t\treturn 0.5 + 0.5 * solveOut((t - 0.5) * 2, a, p);\n\t}\n\treturn solveOut(t, a, p);\n}\n\n/**\n * Solves a CSS `cubic-bezier(x1, y1, x2, y2)` for y at progress x (Newton steps with a\n * bisection fallback). x1 / x2 are clamped to 0–1 as CSS requires.\n */\nexport function cubicBezierAt(x1: number, y1: number, x2: number, y2: number, x: number): number {\n\tif (x <= 0) return 0;\n\tif (x >= 1) return 1;\n\tx1 = clamp(x1, 0, 1);\n\tx2 = clamp(x2, 0, 1);\n\tconst bx = (s: number) => 3 * (1 - s) * (1 - s) * s * x1 + 3 * (1 - s) * s * s * x2 + s * s * s;\n\tconst by = (s: number) => 3 * (1 - s) * (1 - s) * s * y1 + 3 * (1 - s) * s * s * y2 + s * s * s;\n\tconst dbx = (s: number) => 3 * (1 - s) * (1 - s) * x1 + 6 * (1 - s) * s * (x2 - x1) + 3 * s * s * (1 - x2);\n\tlet s = x;\n\tfor (let i = 0; i < 8; i++) {\n\t\tconst d = dbx(s);\n\t\tif (Math.abs(d) < 1e-9) break;\n\t\tconst next = s - (bx(s) - x) / d;\n\t\tif (!(next >= 0 && next <= 1)) break;\n\t\ts = next;\n\t}\n\tif (Math.abs(bx(s) - x) > 1e-7) {\n\t\tlet lo = 0;\n\t\tlet hi = 1;\n\t\tfor (let i = 0; i < 60; i++) {\n\t\t\ts = (lo + hi) / 2;\n\t\t\tif (bx(s) < x) lo = s;\n\t\t\telse hi = s;\n\t\t}\n\t}\n\treturn by(s);\n}\n\n/**\n * Normalised position of a damped spring released from 0 towards 1, `seconds` after release.\n * Closed form for under-, critically and over-damped springs.\n */\nexport function springAt(spring: Omit<SpringEasing, 'type'>, seconds: number): number {\n\tconst stiffness = Math.max(1e-6, finite(spring.stiffness, DEFAULT_SPRING.stiffness));\n\tconst damping = Math.max(0, finite(spring.damping, DEFAULT_SPRING.damping));\n\tconst mass = Math.max(1e-6, finite(spring.mass, DEFAULT_SPRING.mass));\n\tconst v0 = -finite(spring.velocity, DEFAULT_SPRING.velocity);\n\tconst t = Math.max(0, seconds);\n\tconst w0 = Math.sqrt(stiffness / mass);\n\tconst zeta = damping / (2 * Math.sqrt(stiffness * mass));\n\t// x(t) is the displacement from the target (starts at 1); progress = 1 - x.\n\tlet x: number;\n\tif (zeta < 1 - 1e-6) {\n\t\tconst wd = w0 * Math.sqrt(1 - zeta * zeta);\n\t\tx = Math.exp(-zeta * w0 * t) * (Math.cos(wd * t) + ((zeta * w0 + v0) / wd) * Math.sin(wd * t));\n\t} else if (zeta <= 1 + 1e-6) {\n\t\tx = Math.exp(-w0 * t) * (1 + (w0 + v0) * t);\n\t} else {\n\t\tconst r = Math.sqrt(zeta * zeta - 1);\n\t\tconst s1 = -w0 * (zeta - r);\n\t\tconst s2 = -w0 * (zeta + r);\n\t\tconst c2 = (v0 - s1) / (s2 - s1);\n\t\tconst c1 = 1 - c2;\n\t\tx = c1 * Math.exp(s1 * t) + c2 * Math.exp(s2 * t);\n\t}\n\treturn 1 - x;\n}\n\n/** Resolves an easing to a cubic-bezier, spring, elastic or hold descriptor (unknown input → linear). */\nexport function resolveEasing(\n\teasing: AnimationEasing | string | undefined | null\n): CubicBezierEasing | Required<SpringEasing> | Required<ElasticEasing> | 'hold' {\n\tif (easing === 'hold') return 'hold';\n\tif (easing === 'spring') return { type: 'spring', ...DEFAULT_SPRING };\n\tif (typeof easing === 'string' && easing in SPRING_PRESETS) return { type: 'spring', ...SPRING_PRESETS[easing as keyof typeof SPRING_PRESETS] };\n\tif (easing === 'elastic' || easing === 'ease-out-elastic') {\n\t\treturn { type: 'elastic', ...DEFAULT_ELASTIC, mode: 'out' };\n\t}\n\tif (easing === 'ease-in-elastic') {\n\t\treturn { type: 'elastic', ...DEFAULT_ELASTIC, mode: 'in' };\n\t}\n\tif (easing === 'ease-in-out-elastic') {\n\t\treturn { type: 'elastic', ...DEFAULT_ELASTIC, mode: 'in-out' };\n\t}\n\tif (typeof easing === 'string') {\n\t\tconst preset = CUBIC_BEZIER_PRESETS[easing];\n\t\tif (preset) return { type: 'cubic-bezier', x1: preset[0], y1: preset[1], x2: preset[2], y2: preset[3] };\n\t\tconst parsed = parseCssEasing(easing);\n\t\treturn parsed ? resolveEasing(parsed) : { type: 'cubic-bezier', x1: 0, y1: 0, x2: 1, y2: 1 };\n\t}\n\tif (easing && typeof easing === 'object') {\n\t\tif (easing.type === 'spring') {\n\t\t\treturn {\n\t\t\t\ttype: 'spring',\n\t\t\t\tstiffness: finite(easing.stiffness, DEFAULT_SPRING.stiffness),\n\t\t\t\tdamping: finite(easing.damping, DEFAULT_SPRING.damping),\n\t\t\t\tmass: finite(easing.mass, DEFAULT_SPRING.mass),\n\t\t\t\tvelocity: finite(easing.velocity, DEFAULT_SPRING.velocity)\n\t\t\t};\n\t\t}\n\t\tif (easing.type === 'elastic') {\n\t\t\treturn {\n\t\t\t\ttype: 'elastic',\n\t\t\t\tamplitude: finite(easing.amplitude, DEFAULT_ELASTIC.amplitude),\n\t\t\t\tperiod: finite(easing.period, DEFAULT_ELASTIC.period),\n\t\t\t\tmode: easing.mode === 'in' || easing.mode === 'in-out' ? easing.mode : 'out'\n\t\t\t};\n\t\t}\n\t\tif (easing.type === 'cubic-bezier') {\n\t\t\treturn {\n\t\t\t\ttype: 'cubic-bezier',\n\t\t\t\tx1: clamp(finite(easing.x1, 0), 0, 1),\n\t\t\t\ty1: finite(easing.y1, 0),\n\t\t\t\tx2: clamp(finite(easing.x2, 1), 0, 1),\n\t\t\t\ty2: finite(easing.y2, 1)\n\t\t\t};\n\t\t}\n\t}\n\treturn { type: 'cubic-bezier', x1: 0, y1: 0, x2: 1, y2: 1 };\n}\n\n/**\n * Eased progress for linear progress `u` (0–1) through a segment lasting `durationMs`\n * (springs depend on real time; other curves ignore it). `hold` returns 0 until `u` reaches 1.\n */\nexport function evaluateEasing(easing: AnimationEasing | string | undefined | null, u: number, durationMs = 1000): number {\n\tif (!(u > 0)) return 0;\n\tif (u >= 1) return 1;\n\tconst resolved = resolveEasing(easing);\n\tif (resolved === 'hold') return 0;\n\tif (resolved.type === 'spring') return springAt(resolved, (u * Math.max(0, durationMs)) / 1000);\n\tif (resolved.type === 'elastic') return elasticAt(resolved, u);\n\tconst { x1, y1, x2, y2 } = resolved;\n\tif (x1 === y1 && x2 === y2) return u; // linear\n\treturn cubicBezierAt(x1, y1, x2, y2, u);\n}\n\n/**\n * The easing filmcraft (and Premiere) derive from temporal \"influence\" handles: flat handles of\n * the given influences (0.01–1, default 1/3) on the leaving and arriving keyframe.\n */\nexport function easingFromInfluence(outInfluence = 1 / 3, inInfluence = 1 / 3): CubicBezierEasing {\n\treturn {\n\t\ttype: 'cubic-bezier',\n\t\tx1: clamp(outInfluence, 0.01, 1),\n\t\ty1: 0,\n\t\tx2: 1 - clamp(inInfluence, 0.01, 1),\n\t\ty2: 1\n\t};\n}\n\nconst NUMBER = String.raw`\\s*(-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)\\s*`;\nconst CUBIC_RE = new RegExp(`^cubic-bezier\\\\(${NUMBER},${NUMBER},${NUMBER},${NUMBER}\\\\)$`, 'i');\n\n/**\n * Parses a CSS easing (`linear`, `ease…`, `cubic-bezier(…)`, `steps(1, end)` / `step-end` →\n * hold) or a preset name. Returns `null` for anything else.\n */\nexport function parseCssEasing(text: string): AnimationEasing | null {\n\tconst value = text.trim().toLowerCase();\n\tif (value.length > 200) return null;\n\tif ((ANIMATION_EASING_PRESETS as readonly string[]).includes(value)) return value as AnimationEasingPreset;\n\tif (value === 'step-end' || /^steps\\(\\s*1\\s*(,\\s*(end|jump-end)\\s*)?\\)$/.test(value)) return 'hold';\n\tconst m = CUBIC_RE.exec(value);\n\tif (!m) return null;\n\tconst [x1, y1, x2, y2] = m.slice(1).map(Number);\n\tif (![x1, y1, x2, y2].every(Number.isFinite) || x1 < 0 || x1 > 1 || x2 < 0 || x2 > 1) return null;\n\treturn { type: 'cubic-bezier', x1, y1, x2, y2 };\n}\n\n/** Whether a value is a usable easing (preset name, CSS easing string or descriptor). */\nexport function isAnimationEasing(value: unknown): value is AnimationEasing {\n\tif (typeof value === 'string') return parseCssEasing(value) !== null;\n\tif (typeof value !== 'object' || value === null) return false;\n\tconst e = value as Record<string, unknown>;\n\tif (e.type === 'spring') return true;\n\tif (e.type === 'elastic') return true;\n\treturn e.type === 'cubic-bezier' && [e.x1, e.y1, e.x2, e.y2].every((v) => typeof v === 'number' && Number.isFinite(v));\n}\n\nconst round = (v: number, digits = 4) => {\n\tconst p = 10 ** digits;\n\treturn Math.round(v * p) / p;\n};\n\n/**\n * The CSS `animation-timing-function` for an easing: a keyword or `cubic-bezier()`,\n * `steps(1, end)` for hold, and a sampled `linear(…)` for springs over `durationMs`.\n */\nexport function easingToCss(easing: AnimationEasing | string | undefined | null, durationMs = 1000, samples = 24): string {\n\tconst resolved = resolveEasing(easing);\n\tif (resolved === 'hold') return 'steps(1, end)';\n\tif (resolved.type === 'spring') {\n\t\tconst n = Math.max(2, Math.floor(samples));\n\t\tconst points: string[] = [];\n\t\tfor (let i = 0; i <= n; i++) points.push(String(round(i === n ? 1 : springAt(resolved, ((i / n) * durationMs) / 1000))));\n\t\treturn `linear(${points.join(', ')})`;\n\t}\n\tif (resolved.type === 'elastic') {\n\t\tconst n = Math.max(2, Math.floor(samples));\n\t\tconst points: string[] = [];\n\t\tfor (let i = 0; i <= n; i++) points.push(String(round(i === n ? 1 : elasticAt(resolved, i / n))));\n\t\treturn `linear(${points.join(', ')})`;\n\t}\n\tconst { x1, y1, x2, y2 } = resolved;\n\tfor (const [name, p] of Object.entries(CUBIC_BEZIER_PRESETS)) {\n\t\tif (['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'].includes(name) && p[0] === x1 && p[1] === y1 && p[2] === x2 && p[3] === y2) {\n\t\t\treturn name;\n\t\t}\n\t}\n\treturn `cubic-bezier(${round(x1)}, ${round(y1)}, ${round(x2)}, ${round(y2)})`;\n}\n\n/** Short label for an easing (a preset's label, or `Custom` / `Spring` / `Elastic`). */\nexport function easingLabel(easing: AnimationEasing | undefined | null): string {\n\tif (easing === undefined || easing === null) return ANIMATION_EASING_LABELS.linear;\n\tif (typeof easing === 'string') return ANIMATION_EASING_LABELS[easing as AnimationEasingPreset] ?? easing;\n\tif (easing.type === 'spring') return 'Spring';\n\tif (easing.type === 'elastic') return 'Elastic';\n\treturn 'Custom';\n}\n"],"mappings":"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","names":["s"]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
evaluateEasing,
|
|
6
6
|
isAnimationEasing
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-AGR4P4UZ.js";
|
|
8
8
|
|
|
9
9
|
// src/animation/keyframes.ts
|
|
10
10
|
var ANIMATION_TIME_EPSILON = 1e-6;
|
|
@@ -384,4 +384,4 @@ export {
|
|
|
384
384
|
AnimationPlayer,
|
|
385
385
|
createAnimationPlayer
|
|
386
386
|
};
|
|
387
|
-
//# sourceMappingURL=chunk-
|
|
387
|
+
//# sourceMappingURL=chunk-JK6M6V7G.js.map
|
|
@@ -40,7 +40,7 @@ var _chunkMR3Z4OQIcjs = require('./chunk-MR3Z4OQI.cjs');
|
|
|
40
40
|
var _chunkA6PHCAGXcjs = require('./chunk-A6PHCAGX.cjs');
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
var
|
|
43
|
+
var _chunk2FHLHZALcjs = require('./chunk-2FHLHZAL.cjs');
|
|
44
44
|
|
|
45
45
|
// src/vector/types.ts
|
|
46
46
|
var VECTOR_CORNER_KINDS = ["round", "inverted", "chamfer"];
|
|
@@ -4874,7 +4874,7 @@ function evaluateVectorPathKeyframes(keyframes, time, options = {}) {
|
|
|
4874
4874
|
if (time === a.time) return a.value;
|
|
4875
4875
|
if (a.easing === "hold") return a.value;
|
|
4876
4876
|
const span = b.time - a.time;
|
|
4877
|
-
const u = Math.min(1, Math.max(0,
|
|
4877
|
+
const u = Math.min(1, Math.max(0, _chunk2FHLHZALcjs.evaluateEasing.call(void 0, a.easing, (time - a.time) / span, span)));
|
|
4878
4878
|
let inner = keyframeMorphs.get(a.value);
|
|
4879
4879
|
if (!inner) keyframeMorphs.set(a.value, inner = /* @__PURE__ */ new WeakMap());
|
|
4880
4880
|
let morph = inner.get(b.value);
|
|
@@ -5195,10 +5195,25 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
5195
5195
|
};
|
|
5196
5196
|
const emit2 = (node, depth) => {
|
|
5197
5197
|
if (node.visible === false && !options.includeHidden) return;
|
|
5198
|
+
const wrappers = _nullishCoalesce(_optionalChain([options, 'access', _90 => _90.wrap, 'optionalAccess', _91 => _91[node.id]]), () => ( []));
|
|
5199
|
+
wrappers.forEach((w2, i) => {
|
|
5200
|
+
let attrs = w2.id !== void 0 ? ` id="${escapeAttr(w2.id)}"` : "";
|
|
5201
|
+
if (w2.transform) attrs += ` transform="${escapeAttr(w2.transform)}"`;
|
|
5202
|
+
if (w2.clip) {
|
|
5203
|
+
const shape = Object.entries(w2.clip.attrs).map(([k, v2]) => ` ${k}="${_chunkO2UH7LZEcjs.formatNumber.call(void 0, v2, 4)}"`).join("");
|
|
5204
|
+
defs.push(`<clipPath id="${escapeAttr(w2.clip.id)}" clipPathUnits="objectBoundingBox"><${w2.clip.shape}${w2.clip.shapeId !== void 0 ? ` id="${escapeAttr(w2.clip.shapeId)}"` : ""}${shape}/></clipPath>`);
|
|
5205
|
+
attrs += ` clip-path="url(#${escapeAttr(w2.clip.id)})"`;
|
|
5206
|
+
}
|
|
5207
|
+
lines.push(`${indent(depth + i)}<g${attrs}>`);
|
|
5208
|
+
});
|
|
5209
|
+
emitNode(node, depth + wrappers.length);
|
|
5210
|
+
for (let i = wrappers.length - 1; i >= 0; i--) lines.push(`${indent(depth + i)}</g>`);
|
|
5211
|
+
};
|
|
5212
|
+
const emitNode = (node, depth) => {
|
|
5198
5213
|
if (hasOwnVectorAppearance(node)) {
|
|
5199
5214
|
const live2 = {
|
|
5200
5215
|
kind: node.type,
|
|
5201
|
-
..._optionalChain([node, 'access',
|
|
5216
|
+
..._optionalChain([node, 'access', _92 => _92.effects, 'optionalAccess', _93 => _93.length]) ? { effects: node.effects } : {},
|
|
5202
5217
|
...node.type === "group" && node.liveBoolean ? { liveBoolean: node.liveBoolean } : {}
|
|
5203
5218
|
};
|
|
5204
5219
|
lines.push(`${indent(depth)}<g${common(node)} data-vector-live="${escapeAttr(JSON.stringify(live2))}">`);
|
|
@@ -5231,7 +5246,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
5231
5246
|
let out2 = ` stroke="${escapeAttr(stroke.value)}" stroke-width="${num2(width)}"`;
|
|
5232
5247
|
if (node.strokeLinecap && node.strokeLinecap !== "butt") out2 += ` stroke-linecap="${node.strokeLinecap}"`;
|
|
5233
5248
|
if (node.strokeLinejoin && node.strokeLinejoin !== "miter") out2 += ` stroke-linejoin="${node.strokeLinejoin}"`;
|
|
5234
|
-
if (_optionalChain([node, 'access',
|
|
5249
|
+
if (_optionalChain([node, 'access', _94 => _94.strokeDasharray, 'optionalAccess', _95 => _95.length])) out2 += ` stroke-dasharray="${node.strokeDasharray.map(num2).join(" ")}"`;
|
|
5235
5250
|
return out2;
|
|
5236
5251
|
};
|
|
5237
5252
|
const parts = stroke.value !== "none" ? vectorStrokeSvgParts(node, `${prefix}clip-${node.id}`, precision) : void 0;
|
|
@@ -5251,7 +5266,7 @@ function vectorDocumentToSvg(doc, options = {}) {
|
|
|
5251
5266
|
data += ` data-vector-width-profile="${widthProfileToAttribute(profile)}"`;
|
|
5252
5267
|
if (node.strokeLinecap && node.strokeLinecap !== "butt") data += ` data-vector-stroke-linecap="${node.strokeLinecap}"`;
|
|
5253
5268
|
if (node.strokeLinejoin && node.strokeLinejoin !== "miter") data += ` data-vector-stroke-linejoin="${node.strokeLinejoin}"`;
|
|
5254
|
-
if (_optionalChain([node, 'access',
|
|
5269
|
+
if (_optionalChain([node, 'access', _96 => _96.strokeDasharray, 'optionalAccess', _97 => _97.length])) data += ` data-vector-stroke-dasharray="${node.strokeDasharray.map(num2).join(" ")}"`;
|
|
5255
5270
|
}
|
|
5256
5271
|
lines.push(`${indent(depth)}<g${common(node)}${data}>`);
|
|
5257
5272
|
lines.push(`${indent(depth + 1)}<path data-vector-part="fill" d="${d}"${fillAttrs}${live}/>`);
|
|
@@ -5434,9 +5449,9 @@ function resolveGradient(id, raw) {
|
|
|
5434
5449
|
for (let el = first; el && !chain.includes(el) && chain.length < 32; ) {
|
|
5435
5450
|
chain.push(el);
|
|
5436
5451
|
const href = _nullishCoalesce(el.attrs.href, () => ( el.attrs["xlink:href"]));
|
|
5437
|
-
el = _optionalChain([href, 'optionalAccess',
|
|
5452
|
+
el = _optionalChain([href, 'optionalAccess', _98 => _98.startsWith, 'call', _99 => _99("#")]) ? raw.get(href.slice(1)) : void 0;
|
|
5438
5453
|
}
|
|
5439
|
-
const attr = (name) => _optionalChain([chain, 'access',
|
|
5454
|
+
const attr = (name) => _optionalChain([chain, 'access', _100 => _100.find, 'call', _101 => _101((el) => el.attrs[name] !== void 0), 'optionalAccess', _102 => _102.attrs, 'access', _103 => _103[name]]);
|
|
5440
5455
|
const stops = _nullishCoalesce(chain.map(readStops).find((s) => s.length), () => ( []));
|
|
5441
5456
|
if (!stops.length) return null;
|
|
5442
5457
|
const user = attr("gradientUnits") === "userSpaceOnUse";
|
|
@@ -5586,7 +5601,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
5586
5601
|
const part = (name) => g.children.find((c) => c.name === "path" && c.attrs["data-vector-part"] === name);
|
|
5587
5602
|
const fillEl = part("fill");
|
|
5588
5603
|
const subpaths = fillEl ? shapeOf(fillEl) : null;
|
|
5589
|
-
if (!fillEl || !_optionalChain([subpaths, 'optionalAccess',
|
|
5604
|
+
if (!fillEl || !_optionalChain([subpaths, 'optionalAccess', _104 => _104.length])) return null;
|
|
5590
5605
|
const a = g.attrs;
|
|
5591
5606
|
const fs = readStyle(fillEl, style);
|
|
5592
5607
|
const strokeEl = part("stroke");
|
|
@@ -5623,7 +5638,7 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
5623
5638
|
...profile.length ? { strokeWidthProfile: profile } : {},
|
|
5624
5639
|
...keptCap ? { strokeLinecap: keptCap } : {},
|
|
5625
5640
|
...keptJoin ? { strokeLinejoin: keptJoin } : {},
|
|
5626
|
-
..._optionalChain([keptDash, 'optionalAccess',
|
|
5641
|
+
..._optionalChain([keptDash, 'optionalAccess', _105 => _105.length]) ? { strokeDasharray: keptDash } : {}
|
|
5627
5642
|
};
|
|
5628
5643
|
return placed(node, m);
|
|
5629
5644
|
};
|
|
@@ -5976,4 +5991,4 @@ function parseVectorSvg(svg, options = {}) {
|
|
|
5976
5991
|
|
|
5977
5992
|
|
|
5978
5993
|
exports.VECTOR_CORNER_KINDS = VECTOR_CORNER_KINDS; exports.VECTOR_GRADIENT_TYPES = VECTOR_GRADIENT_TYPES; exports.VECTOR_GRADIENT_SPREADS = VECTOR_GRADIENT_SPREADS; exports.VECTOR_GRADIENT_INTERPOLATIONS = VECTOR_GRADIENT_INTERPOLATIONS; exports.VECTOR_STROKE_GRADIENT_MODES = VECTOR_STROKE_GRADIENT_MODES; exports.VECTOR_ARROWHEADS = VECTOR_ARROWHEADS; exports.VECTOR_BLEND_SPACINGS = VECTOR_BLEND_SPACINGS; exports.VECTOR_TOOLS = VECTOR_TOOLS; exports.VECTOR_TRANSFORM_HANDLES = VECTOR_TRANSFORM_HANDLES; exports.VECTOR_PATHFINDER_OPERATIONS = VECTOR_PATHFINDER_OPERATIONS; exports.VECTOR_EFFECT_TYPES = VECTOR_EFFECT_TYPES; exports.VECTOR_MERGE_MODES = VECTOR_MERGE_MODES; exports.isVectorGradient = isVectorGradient; exports.parseVectorColor = parseVectorColor; exports.VECTOR_GRADIENT_MIN_STOPS = VECTOR_GRADIENT_MIN_STOPS; exports.gradientMidpointRemap = gradientMidpointRemap; exports.sortedVectorGradientStops = sortedVectorGradientStops; exports.vectorGradientNeedsExpansion = vectorGradientNeedsExpansion; exports.vectorGradientRamp = vectorGradientRamp; exports.sampleVectorGradient = sampleVectorGradient; exports.expandVectorGradientStops = expandVectorGradientStops; exports.samplePlainStops = samplePlainStops; exports.reverseVectorGradient = reverseVectorGradient; exports.insertVectorGradientStop = insertVectorGradientStop; exports.moveVectorGradientStop = moveVectorGradientStop; exports.removeVectorGradientStop = removeVectorGradientStop; exports.vectorGradientMidpointPosition = vectorGradientMidpointPosition; exports.vectorGradientMidpointFromPosition = vectorGradientMidpointFromPosition; exports.spanVectorGradientStops = spanVectorGradientStops; exports.hasExplicitGradientGeometry = hasExplicitGradientGeometry; exports.vectorGradientPoints = vectorGradientPoints; exports.vectorBoxMatrix = vectorBoxMatrix; exports.vectorGradientUnitsMatrix = vectorGradientUnitsMatrix; exports.vectorGradientMatrix = vectorGradientMatrix; exports.vectorGradientFocalParam = vectorGradientFocalParam; exports.vectorGradientParam = vectorGradientParam; exports.applyVectorGradientSpread = applyVectorGradientSpread; exports.vectorGradientTAt = vectorGradientTAt; exports.sampleVectorGradientAt = sampleVectorGradientAt; exports.vectorGradientAspect = vectorGradientAspect; exports.explicitVectorGradient = explicitVectorGradient; exports.pinVectorGradient = pinVectorGradient; exports.transformVectorGradient = transformVectorGradient; exports.mapVectorGradient = mapVectorGradient; exports.mapVectorPaint = mapVectorPaint; exports.transformVectorPaint = transformVectorPaint; exports.isCentredVectorGradient = isCentredVectorGradient; exports.vectorGradientHandles = vectorGradientHandles; exports.moveVectorGradientHandle = moveVectorGradientHandle; exports.setVectorGradientVector = setVectorGradientVector; exports.VECTOR_GRADIENT_MAX_PERIODS = VECTOR_GRADIENT_MAX_PERIODS; exports.periodicVectorGradientStops = periodicVectorGradientStops; exports.expandVectorGradientSpread = expandVectorGradientSpread; exports.vectorGradientArea = vectorGradientArea; exports.patternAttrs = patternAttrs; exports.vectorGradientSvgDefs = vectorGradientSvgDefs; exports.sampleVectorPaintDefAt = sampleVectorPaintDefAt; exports.sanitizeVectorGradient = sanitizeVectorGradient; exports.convertVectorGradient = convertVectorGradient; exports.defaultVectorGradient = defaultVectorGradient; exports.applyVectorGradientPatch = applyVectorGradientPatch; exports.vectorCornerAt = vectorCornerAt; exports.vectorCorners = vectorCorners; exports.cornerSetback = cornerSetback; exports.fitCornerRadius = fitCornerRadius; exports.cornerBisectorPoint = cornerBisectorPoint; exports.cornerRadiusChange = cornerRadiusChange; exports.hasVectorCorners = hasVectorCorners; exports.expandVectorCornersOf = expandVectorCornersOf; exports.expandVectorCorners = expandVectorCorners; exports.setAnchorCorner = setAnchorCorner; exports.nextVectorCornerKind = nextVectorCornerKind; exports.setSubpathCorners = setSubpathCorners; exports.VECTOR_WIDTH_PROFILE_MAX_POINTS = VECTOR_WIDTH_PROFILE_MAX_POINTS; exports.VECTOR_WIDTH_PROFILE_MAX_SCALE = VECTOR_WIDTH_PROFILE_MAX_SCALE; exports.VECTOR_WIDTH_SAME_T = VECTOR_WIDTH_SAME_T; exports.VECTOR_WIDTH_PRESETS = VECTOR_WIDTH_PRESETS; exports.VECTOR_WIDTH_PRESET_IDS = VECTOR_WIDTH_PRESET_IDS; exports.sanitizeWidthProfile = sanitizeWidthProfile; exports.isUniformWidthProfile = isUniformWidthProfile; exports.widthProfileAt = widthProfileAt; exports.widthProfileMaxScale = widthProfileMaxScale; exports.widthProfilePreset = widthProfilePreset; exports.widthProfilePresetId = widthProfilePresetId; exports.reverseWidthProfile = reverseWidthProfile; exports.mirrorWidthProfile = mirrorWidthProfile; exports.insertWidthPoint = insertWidthPoint; exports.setWidthPoint = setWidthPoint; exports.removeWidthPoints = removeWidthPoints; exports.taperWaveFactor = taperWaveFactor; exports.generateWidthProfile = generateWidthProfile; exports.VECTOR_PRESSURE_NOMINAL = VECTOR_PRESSURE_NOMINAL; exports.pressureWidthProfile = pressureWidthProfile; exports.dashIntervals = dashIntervals; exports.variableStrokeRings = variableStrokeRings; exports.variableStrokeOutline = variableStrokeOutline; exports.nearestStrokePosition = nearestStrokePosition; exports.strokePositionPoint = strokePositionPoint; exports.isClosedBezierShape = isClosedBezierShape; exports.effectiveStrokeAlign = effectiveStrokeAlign; exports.strokeWidthProfileOf = strokeWidthProfileOf; exports.hasStrokeExtras = hasStrokeExtras; exports.vectorStrokeLineArea = vectorStrokeLineArea; exports.arrowheadWeight = arrowheadWeight; exports.arrowheadInset = arrowheadInset; exports.arrowheadPath = arrowheadPath; exports.vectorStrokeParts = vectorStrokeParts; exports.vectorStrokeOutlinePath = vectorStrokeOutlinePath; exports.hitTestVectorStroke = hitTestVectorStroke; exports.vectorStrokeReach = vectorStrokeReach; exports.effectPathLength = effectPathLength; exports.effectPathVertexCount = effectPathVertexCount; exports.trimIntervals = trimIntervals; exports.trimPaths = trimPaths; exports.trimPathsIndividually = trimPathsIndividually; exports.puckerBloatPaths = puckerBloatPaths; exports.roundCornerPaths = roundCornerPaths; exports.offsetPaths = offsetPaths; exports.twistPaths = twistPaths; exports.zigzagPaths = zigzagPaths; exports.wigglePaths = wigglePaths; exports.mergePaths = mergePaths; exports.vectorRepeaterCopies = vectorRepeaterCopies; exports.repeatPaths = repeatPaths; exports.pathsCenter = pathsCenter; exports.mapVectorPoints = mapVectorPoints; exports.mapVectorSubpaths = mapVectorSubpaths; exports.mapBezierPath = mapBezierPath; exports.VECTOR_WARP_STYLES = VECTOR_WARP_STYLES; exports.VECTOR_WARP_STYLE_LABELS = VECTOR_WARP_STYLE_LABELS; exports.vectorWarpPresetGrid = vectorWarpPresetGrid; exports.vectorWarpPresetMesh = vectorWarpPresetMesh; exports.vectorMeshColumns = vectorMeshColumns; exports.vectorMeshRows = vectorMeshRows; exports.isValidVectorMesh = isValidVectorMesh; exports.fitVectorMesh = fitVectorMesh; exports.vectorIdentityMesh = vectorIdentityMesh; exports.evalVectorMesh = evalVectorMesh; exports.splitVectorMeshU = splitVectorMeshU; exports.splitVectorMeshV = splitVectorMeshV; exports.removeVectorMeshSplitU = removeVectorMeshSplitU; exports.removeVectorMeshSplitV = removeVectorMeshSplitV; exports.mapVectorMeshPoints = mapVectorMeshPoints; exports.resizeVectorMesh = resizeVectorMesh; exports.vectorMeshControlBounds = vectorMeshControlBounds; exports.vectorMeshParamAt = vectorMeshParamAt; exports.dragVectorMeshPoint = dragVectorMeshPoint; exports.pullVectorMesh = pullVectorMesh; exports.vectorMeshFromOutline = vectorMeshFromOutline; exports.vectorMeshOutline = vectorMeshOutline; exports.vectorMeshEditPoints = vectorMeshEditPoints; exports.vectorMeshGridCurves = vectorMeshGridCurves; exports.VECTOR_EFFECT_DEFAULTS = VECTOR_EFFECT_DEFAULTS; exports.VECTOR_EFFECT_LABELS = VECTOR_EFFECT_LABELS; exports.VECTOR_EFFECT_PARAM_SPECS = VECTOR_EFFECT_PARAM_SPECS; exports.vectorEnvelopeMesh = vectorEnvelopeMesh; exports.vectorEnvelopeMap = vectorEnvelopeMap; exports.normalizeVectorEffectParams = normalizeVectorEffectParams; exports.createVectorEffect = createVectorEffect; exports.activeVectorEffects = activeVectorEffects; exports.hasOwnVectorAppearance = hasOwnVectorAppearance; exports.hasVectorAppearance = hasVectorAppearance; exports.isVectorLiveBoolean = isVectorLiveBoolean; exports.vectorOperandOperation = vectorOperandOperation; exports.vectorLiveBooleanSteps = vectorLiveBooleanSteps; exports.clearVectorLiveBooleanCache = clearVectorLiveBooleanCache; exports.foldVectorBooleanOperands = foldVectorBooleanOperands; exports.applyVectorEffects = applyVectorEffects; exports.vectorEffectInputPaths = vectorEffectInputPaths; exports.vectorEffectInputBounds = vectorEffectInputBounds; exports.vectorNodeEnvelope = vectorNodeEnvelope; exports.vectorEnvelopeFrame = vectorEnvelopeFrame; exports.vectorAppearanceShapes = vectorAppearanceShapes; exports.vectorAppearanceOutline = vectorAppearanceOutline; exports.vectorAppearanceNodes = vectorAppearanceNodes; exports.expandVectorAppearance = expandVectorAppearance; exports.expandVectorAppearances = expandVectorAppearances; exports.sanitizeVectorEffects = sanitizeVectorEffects; exports.transformVectorEffects = transformVectorEffects; exports.vectorEnteredGroups = vectorEnteredGroups; exports.cloneAnchor = cloneAnchor; exports.cloneSubpath = cloneSubpath; exports.cloneVectorNode = cloneVectorNode; exports.cloneVectorDocument = cloneVectorDocument; exports.hasPaint = hasPaint; exports.subpathSegmentCount = subpathSegmentCount; exports.subpathSegment = subpathSegment; exports.subpathsToBezier = subpathsToBezier; exports.vectorNodeToBezier = vectorNodeToBezier; exports.vectorPathData = vectorPathData; exports.inferAnchorType = inferAnchorType; exports.bezierToSubpaths = bezierToSubpaths; exports.walkVectorNodes = walkVectorNodes; exports.findVectorNode = findVectorNode; exports.locateVectorNode = locateVectorNode; exports.collectPathNodes = collectPathNodes; exports.nodeMatrix = nodeMatrix; exports.vectorPathWorldBezier = vectorPathWorldBezier; exports.vectorNodeBounds = vectorNodeBounds; exports.unionBounds = unionBounds; exports.boundsIntersect = boundsIntersect; exports.boundsFromPoints = boundsFromPoints; exports.hitTestVectorNode = hitTestVectorNode; exports.vectorStrokeOutline = vectorStrokeOutline; exports.hitTestVectorNodes = hitTestVectorNodes; exports.nearestSegment = nearestSegment; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; exports.multiplyMatrices = multiplyMatrices; exports.translateMatrix = translateMatrix; exports.scaleMatrix = scaleMatrix; exports.rotateMatrix = rotateMatrix; exports.applyMatrix = applyMatrix; exports.isIdentityMatrix = isIdentityMatrix; exports.invertMatrix = invertMatrix; exports.applyMatrixLinear = applyMatrixLinear; exports.matrixRotation = matrixRotation; exports.decomposeRigid = decomposeRigid; exports.transformVectorNode = transformVectorNode; exports.vectorNodeRotation = vectorNodeRotation; exports.vectorWorldMatrix = vectorWorldMatrix; exports.vectorParentMatrix = vectorParentMatrix; exports.translateAnchor = translateAnchor; exports.moveAnchorHandle = moveAnchorHandle; exports.convertAnchor = convertAnchor; exports.insertAnchor = insertAnchor; exports.removeAnchors = removeAnchors; exports.reverseSubpath = reverseSubpath; exports.KAPPA = KAPPA2; exports.rectSubpath = rectSubpath; exports.ellipseSubpath = ellipseSubpath; exports.polygonSubpath = polygonSubpath; exports.starSubpath = starSubpath; exports.lineSubpath = lineSubpath; exports.roundSubpaths = roundSubpaths; exports.subpathToMorphContour = subpathToMorphContour; exports.morphContourToSubpath = morphContourToSubpath; exports.refineMorphContour = refineMorphContour; exports.reverseMorphContour = reverseMorphContour; exports.turnMorphContour = turnMorphContour; exports.correspondMorphContours = correspondMorphContours; exports.morphPathsCross = morphPathsCross; exports.interpolateMorphContours = interpolateMorphContours; exports.interpolateRigidMatrix = interpolateRigidMatrix; exports.interpolateVectorColor = interpolateVectorColor; exports.resampleGradientStops = resampleGradientStops; exports.interpolateVectorPaint = interpolateVectorPaint; exports.interpolateWidthProfiles = interpolateWidthProfiles; exports.interpolateVectorStyle = interpolateVectorStyle; exports.createVectorMorph = createVectorMorph; exports.interpolateVectorPaths = interpolateVectorPaths; exports.evaluateVectorPathKeyframes = evaluateVectorPathKeyframes; exports.vectorStrokeGradientDefs = vectorStrokeGradientDefs; exports.vectorCornersAttribute = vectorCornersAttribute; exports.applyVectorCornersAttribute = applyVectorCornersAttribute; exports.vectorPathLocalBounds = vectorPathLocalBounds; exports.vectorPaintToSvg = vectorPaintToSvg; exports.vectorStrokeSvgParts = vectorStrokeSvgParts; exports.widthProfileToAttribute = widthProfileToAttribute; exports.widthProfileFromAttribute = widthProfileFromAttribute; exports.vectorDocumentToSvg = vectorDocumentToSvg; exports.parseSvgTransform = parseSvgTransform; exports.parseVectorSvg = parseVectorSvg;
|
|
5979
|
-
//# sourceMappingURL=chunk-
|
|
5994
|
+
//# sourceMappingURL=chunk-YJLCBA7V.cjs.map
|