@pixerate/editor 0.56.0 → 0.58.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 +15 -1
- package/dist/animation/index.cjs.map +1 -1
- package/dist/animation/index.d.cts +1 -0
- package/dist/animation/index.d.ts +1 -0
- package/dist/animation/index.js +14 -0
- package/dist/animation-editor/index.cjs +452 -129
- package/dist/animation-editor/index.cjs.map +1 -1
- package/dist/animation-editor/index.d.cts +315 -35
- package/dist/animation-editor/index.d.ts +315 -35
- package/dist/animation-editor/index.js +411 -88
- 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/chunk-3NYXDBBW.js +122 -0
- package/dist/chunk-3NYXDBBW.js.map +1 -0
- package/dist/{chunk-XCXQDPID.cjs → chunk-FKONE6AO.cjs} +23 -8
- package/dist/chunk-FKONE6AO.cjs.map +1 -0
- package/dist/{chunk-NONDTTH7.js → chunk-PYMV7HLI.js} +16 -1
- package/dist/{chunk-NONDTTH7.js.map → chunk-PYMV7HLI.js.map} +1 -1
- package/dist/chunk-ZCNLBRT6.cjs +122 -0
- package/dist/chunk-ZCNLBRT6.cjs.map +1 -0
- 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 +471 -471
- package/dist/vector/index.d.cts +2 -2
- package/dist/vector/index.d.ts +2 -2
- package/dist/vector/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-XCXQDPID.cjs.map +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Behaviours: how a change gets from `from` to `to` other than straight along its ease (a
|
|
3
|
+
* pulse there and back, an oscillation, a seeded wriggle, a springy overshoot). Ported from
|
|
4
|
+
* `@pixerate/flair` (MIT): `SvgBehavior` and `behaviorProgress` in `vector/motion.ts`, the
|
|
5
|
+
* oscillate and overshoot evaluators in `scene/behavior.ts` and the noise in `time/noise.ts`.
|
|
6
|
+
* The numbers must stay identical to Flair's, so a behaviour exported to Flair plays the same
|
|
7
|
+
* frames there as here (the animation editor writes them as Flair `behavior`s, Flair ≥ 0.38).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* A behaviour: its progress `u` at each moment, where 0 is `from`, 1 is `to`, and numbers go
|
|
11
|
+
* past either. `t` is the change's time, 0–1, through its ease (linear unless given).
|
|
12
|
+
*
|
|
13
|
+
* - `pulse`: there and back `count` times (default 1): u = sin²(π·count·t).
|
|
14
|
+
* - `oscillate`: swings round `from`, out to `to` and as far the other way, `count` times
|
|
15
|
+
* (default 1), dying away by (1 − t)^`decay` (default 0, no decay).
|
|
16
|
+
* - `wriggle`: wanders round `from` by up to about `to − from`, as seeded smooth fractal noise
|
|
17
|
+
* at `frequency` Hz (default 2) with `octaves` layers (default 2); each number in a value
|
|
18
|
+
* wanders on its own channel. It eases out of and back to rest over the first and last 15%
|
|
19
|
+
* of its time. The same `seed` (default 42) gives the same wander.
|
|
20
|
+
* - `overshoot`: goes to `to`, past it and back, settling like a spring:
|
|
21
|
+
* u = 1 − e^(−damping·t)·cos(cycles·π·t) (default 3 cycles, damping 4).
|
|
22
|
+
*/
|
|
23
|
+
type MotionBehavior = {
|
|
24
|
+
type: 'pulse';
|
|
25
|
+
count?: number;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'oscillate';
|
|
28
|
+
count?: number;
|
|
29
|
+
decay?: number;
|
|
30
|
+
wave?: 'sine' | 'triangle' | 'square' | 'sawtooth';
|
|
31
|
+
} | {
|
|
32
|
+
type: 'wriggle';
|
|
33
|
+
frequency?: number;
|
|
34
|
+
octaves?: number;
|
|
35
|
+
seed?: number;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'overshoot';
|
|
38
|
+
cycles?: number;
|
|
39
|
+
damping?: number;
|
|
40
|
+
};
|
|
41
|
+
/** Every `MotionBehavior` type. */
|
|
42
|
+
declare const MOTION_BEHAVIORS: readonly ["pulse", "oscillate", "wriggle", "overshoot"];
|
|
43
|
+
/**
|
|
44
|
+
* A behaviour's progress at `t` (0–1, eased) of a change lasting `ms`, for the `index`-th number
|
|
45
|
+
* in a value (only a wriggle tells numbers apart).
|
|
46
|
+
*/
|
|
47
|
+
declare function behaviorProgress(behavior: MotionBehavior, t: number, index?: number, ms?: number): number;
|
|
48
|
+
/** Whether `value` is a well-formed `MotionBehavior`. */
|
|
49
|
+
declare function isMotionBehavior(value: unknown): value is MotionBehavior;
|
|
50
|
+
/** A seed from an id (FNV-1a), so each element wriggles its own way: Flair's `seedOf`. */
|
|
51
|
+
declare function motionSeedFromId(id: string): number;
|
|
52
|
+
/** 6t⁵ − 15t⁴ + 10t³: zero slope and curvature at 0 and 1. */
|
|
53
|
+
declare function quinticFade(t: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* Multi-octave smooth noise (After Effects' `wiggle`): the sum over `octaves` of
|
|
56
|
+
* amp·ampMult^k · noise(freq·2^k·t), each octave and `dimension` seeded apart. `t` in seconds.
|
|
57
|
+
*/
|
|
58
|
+
declare function fractalWiggle(freq: number, amp: number, octaves?: number, ampMult?: number, t?: number, seed?: number, dimension?: number): number;
|
|
59
|
+
|
|
60
|
+
export { MOTION_BEHAVIORS as M, type MotionBehavior as a, behaviorProgress as b, fractalWiggle as f, isMotionBehavior as i, motionSeedFromId as m, quinticFade as q };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Behaviours: how a change gets from `from` to `to` other than straight along its ease (a
|
|
3
|
+
* pulse there and back, an oscillation, a seeded wriggle, a springy overshoot). Ported from
|
|
4
|
+
* `@pixerate/flair` (MIT): `SvgBehavior` and `behaviorProgress` in `vector/motion.ts`, the
|
|
5
|
+
* oscillate and overshoot evaluators in `scene/behavior.ts` and the noise in `time/noise.ts`.
|
|
6
|
+
* The numbers must stay identical to Flair's, so a behaviour exported to Flair plays the same
|
|
7
|
+
* frames there as here (the animation editor writes them as Flair `behavior`s, Flair ≥ 0.38).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* A behaviour: its progress `u` at each moment, where 0 is `from`, 1 is `to`, and numbers go
|
|
11
|
+
* past either. `t` is the change's time, 0–1, through its ease (linear unless given).
|
|
12
|
+
*
|
|
13
|
+
* - `pulse`: there and back `count` times (default 1): u = sin²(π·count·t).
|
|
14
|
+
* - `oscillate`: swings round `from`, out to `to` and as far the other way, `count` times
|
|
15
|
+
* (default 1), dying away by (1 − t)^`decay` (default 0, no decay).
|
|
16
|
+
* - `wriggle`: wanders round `from` by up to about `to − from`, as seeded smooth fractal noise
|
|
17
|
+
* at `frequency` Hz (default 2) with `octaves` layers (default 2); each number in a value
|
|
18
|
+
* wanders on its own channel. It eases out of and back to rest over the first and last 15%
|
|
19
|
+
* of its time. The same `seed` (default 42) gives the same wander.
|
|
20
|
+
* - `overshoot`: goes to `to`, past it and back, settling like a spring:
|
|
21
|
+
* u = 1 − e^(−damping·t)·cos(cycles·π·t) (default 3 cycles, damping 4).
|
|
22
|
+
*/
|
|
23
|
+
type MotionBehavior = {
|
|
24
|
+
type: 'pulse';
|
|
25
|
+
count?: number;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'oscillate';
|
|
28
|
+
count?: number;
|
|
29
|
+
decay?: number;
|
|
30
|
+
wave?: 'sine' | 'triangle' | 'square' | 'sawtooth';
|
|
31
|
+
} | {
|
|
32
|
+
type: 'wriggle';
|
|
33
|
+
frequency?: number;
|
|
34
|
+
octaves?: number;
|
|
35
|
+
seed?: number;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'overshoot';
|
|
38
|
+
cycles?: number;
|
|
39
|
+
damping?: number;
|
|
40
|
+
};
|
|
41
|
+
/** Every `MotionBehavior` type. */
|
|
42
|
+
declare const MOTION_BEHAVIORS: readonly ["pulse", "oscillate", "wriggle", "overshoot"];
|
|
43
|
+
/**
|
|
44
|
+
* A behaviour's progress at `t` (0–1, eased) of a change lasting `ms`, for the `index`-th number
|
|
45
|
+
* in a value (only a wriggle tells numbers apart).
|
|
46
|
+
*/
|
|
47
|
+
declare function behaviorProgress(behavior: MotionBehavior, t: number, index?: number, ms?: number): number;
|
|
48
|
+
/** Whether `value` is a well-formed `MotionBehavior`. */
|
|
49
|
+
declare function isMotionBehavior(value: unknown): value is MotionBehavior;
|
|
50
|
+
/** A seed from an id (FNV-1a), so each element wriggles its own way: Flair's `seedOf`. */
|
|
51
|
+
declare function motionSeedFromId(id: string): number;
|
|
52
|
+
/** 6t⁵ − 15t⁴ + 10t³: zero slope and curvature at 0 and 1. */
|
|
53
|
+
declare function quinticFade(t: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* Multi-octave smooth noise (After Effects' `wiggle`): the sum over `octaves` of
|
|
56
|
+
* amp·ampMult^k · noise(freq·2^k·t), each octave and `dimension` seeded apart. `t` in seconds.
|
|
57
|
+
*/
|
|
58
|
+
declare function fractalWiggle(freq: number, amp: number, octaves?: number, ampMult?: number, t?: number, seed?: number, dimension?: number): number;
|
|
59
|
+
|
|
60
|
+
export { MOTION_BEHAVIORS as M, type MotionBehavior as a, behaviorProgress as b, fractalWiggle as f, isMotionBehavior as i, motionSeedFromId as m, quinticFade as q };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// src/animation/behavior.ts
|
|
2
|
+
var MOTION_BEHAVIORS = ["pulse", "oscillate", "wriggle", "overshoot"];
|
|
3
|
+
var WRIGGLE_EDGE = 0.15;
|
|
4
|
+
function wave(kind, angle) {
|
|
5
|
+
switch (kind) {
|
|
6
|
+
case "square":
|
|
7
|
+
return Math.sin(angle) >= 0 ? 1 : -1;
|
|
8
|
+
case "triangle":
|
|
9
|
+
return 2 / Math.PI * Math.asin(Math.sin(angle));
|
|
10
|
+
case "sawtooth": {
|
|
11
|
+
const norm = angle / (2 * Math.PI) % 1;
|
|
12
|
+
return 2 * (norm < 0 ? norm + 1 : norm) - 1;
|
|
13
|
+
}
|
|
14
|
+
default:
|
|
15
|
+
return Math.sin(angle);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function behaviorProgress(behavior, t, index = 0, ms = 800) {
|
|
19
|
+
const time = Math.max(0, t);
|
|
20
|
+
switch (behavior.type) {
|
|
21
|
+
case "pulse":
|
|
22
|
+
return 0.5 + 0.5 * Math.sin(2 * Math.PI * (behavior.count ?? 1) * time - Math.PI / 2);
|
|
23
|
+
case "oscillate": {
|
|
24
|
+
const w = wave(behavior.wave, 2 * Math.PI * (behavior.count ?? 1) * time);
|
|
25
|
+
const decay = behavior.decay ?? 0;
|
|
26
|
+
return decay > 0 ? w * Math.max(0, 1 - t) ** decay : w;
|
|
27
|
+
}
|
|
28
|
+
case "wriggle": {
|
|
29
|
+
const edge = quinticFade(Math.min(1, Math.max(0, Math.min(t, 1 - t) / WRIGGLE_EDGE)));
|
|
30
|
+
if (edge === 0) return 0;
|
|
31
|
+
return edge * fractalWiggle(behavior.frequency ?? 2, 1, behavior.octaves ?? 2, 0.5, t * ms / 1e3, behavior.seed ?? 42, index);
|
|
32
|
+
}
|
|
33
|
+
case "overshoot": {
|
|
34
|
+
const p = Math.min(1, time);
|
|
35
|
+
if (p >= 1) return 1;
|
|
36
|
+
return 1 - Math.exp(-(behavior.damping ?? 4) * p) * Math.cos((behavior.cycles ?? 3) * Math.PI * p);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function isMotionBehavior(value) {
|
|
41
|
+
if (typeof value !== "object" || value === null) return false;
|
|
42
|
+
const b = value;
|
|
43
|
+
const positive = (k) => b[k] === void 0 || typeof b[k] === "number" && Number.isFinite(b[k]) && b[k] > 0;
|
|
44
|
+
const atLeastZero = (k) => b[k] === void 0 || typeof b[k] === "number" && Number.isFinite(b[k]) && b[k] >= 0;
|
|
45
|
+
switch (b.type) {
|
|
46
|
+
case "pulse":
|
|
47
|
+
return positive("count");
|
|
48
|
+
case "oscillate":
|
|
49
|
+
return positive("count") && atLeastZero("decay") && (b.wave === void 0 || ["sine", "triangle", "square", "sawtooth"].includes(b.wave));
|
|
50
|
+
case "wriggle":
|
|
51
|
+
return positive("frequency") && positive("octaves") && (b.seed === void 0 || Number.isInteger(b.seed));
|
|
52
|
+
case "overshoot":
|
|
53
|
+
return positive("cycles") && atLeastZero("damping");
|
|
54
|
+
default:
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function motionSeedFromId(id) {
|
|
59
|
+
let h = 2166136261;
|
|
60
|
+
for (let i = 0; i < id.length; i++) h = Math.imul(h ^ id.charCodeAt(i), 16777619);
|
|
61
|
+
return (h >>> 0) % 2147483647 || 1;
|
|
62
|
+
}
|
|
63
|
+
var GOLDEN_GAMMA = 0x9e3779b97f4a7c15n;
|
|
64
|
+
var MULT1 = 0xbf58476d1ce4e5b9n;
|
|
65
|
+
var MULT2 = 0x94d049bb133111ebn;
|
|
66
|
+
var MASK64 = 0xffffffffffffffffn;
|
|
67
|
+
var BASE_MIX = 0x2545f4914f6cdd1dn;
|
|
68
|
+
var POW2_53 = 9007199254740992;
|
|
69
|
+
function hash64(x) {
|
|
70
|
+
let v = x + GOLDEN_GAMMA & MASK64;
|
|
71
|
+
v = (v ^ v >> 30n) * MULT1 & MASK64;
|
|
72
|
+
v = (v ^ v >> 27n) * MULT2 & MASK64;
|
|
73
|
+
return (v ^ v >> 31n) & MASK64;
|
|
74
|
+
}
|
|
75
|
+
function mixSeeds(parts) {
|
|
76
|
+
let h = BASE_MIX;
|
|
77
|
+
for (const p of parts) {
|
|
78
|
+
const val = typeof p === "bigint" ? p : BigInt(Math.floor(p));
|
|
79
|
+
h = hash64(h ^ hash64(val & MASK64));
|
|
80
|
+
}
|
|
81
|
+
return h;
|
|
82
|
+
}
|
|
83
|
+
function unitFloat(seed) {
|
|
84
|
+
return Number(hash64(seed) >> 11n) / POW2_53;
|
|
85
|
+
}
|
|
86
|
+
function quinticFade(t) {
|
|
87
|
+
return t * t * t * (t * (t * 6 - 15) + 10);
|
|
88
|
+
}
|
|
89
|
+
function noise1d(seed, x) {
|
|
90
|
+
if (!Number.isFinite(x)) return 0;
|
|
91
|
+
const floorX = Math.floor(x);
|
|
92
|
+
const u = quinticFade(x - floorX);
|
|
93
|
+
const i = BigInt(floorX);
|
|
94
|
+
const a = unitFloat(seed ^ hash64(i & MASK64)) * 2 - 1;
|
|
95
|
+
const b = unitFloat(seed ^ hash64(i + 1n & MASK64)) * 2 - 1;
|
|
96
|
+
return a + (b - a) * u;
|
|
97
|
+
}
|
|
98
|
+
function fractalWiggle(freq, amp, octaves = 3, ampMult = 0.5, t = 0, seed = 42, dimension = 0) {
|
|
99
|
+
const oct = Math.max(1, Math.min(16, Math.floor(octaves)));
|
|
100
|
+
let currentAmp = amp;
|
|
101
|
+
let currentFreq = freq;
|
|
102
|
+
let sum = 0;
|
|
103
|
+
const baseSeed = BigInt(Math.floor(seed));
|
|
104
|
+
for (let k = 0; k < oct; k++) {
|
|
105
|
+
const s = mixSeeds([baseSeed, BigInt(dimension), BigInt(k)]);
|
|
106
|
+
const phaseOffset = unitFloat(s) * 1e3;
|
|
107
|
+
sum += currentAmp * noise1d(s, currentFreq * t + phaseOffset);
|
|
108
|
+
currentAmp *= ampMult;
|
|
109
|
+
currentFreq *= 2;
|
|
110
|
+
}
|
|
111
|
+
return sum;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export {
|
|
115
|
+
MOTION_BEHAVIORS,
|
|
116
|
+
behaviorProgress,
|
|
117
|
+
isMotionBehavior,
|
|
118
|
+
motionSeedFromId,
|
|
119
|
+
quinticFade,
|
|
120
|
+
fractalWiggle
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=chunk-3NYXDBBW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/animation/behavior.ts"],"sourcesContent":["/**\n * Behaviours: how a change gets from `from` to `to` other than straight along its ease (a\n * pulse there and back, an oscillation, a seeded wriggle, a springy overshoot). Ported from\n * `@pixerate/flair` (MIT): `SvgBehavior` and `behaviorProgress` in `vector/motion.ts`, the\n * oscillate and overshoot evaluators in `scene/behavior.ts` and the noise in `time/noise.ts`.\n * The numbers must stay identical to Flair's, so a behaviour exported to Flair plays the same\n * frames there as here (the animation editor writes them as Flair `behavior`s, Flair ≥ 0.38).\n */\n\n/**\n * A behaviour: its progress `u` at each moment, where 0 is `from`, 1 is `to`, and numbers go\n * past either. `t` is the change's time, 0–1, through its ease (linear unless given).\n *\n * - `pulse`: there and back `count` times (default 1): u = sin²(π·count·t).\n * - `oscillate`: swings round `from`, out to `to` and as far the other way, `count` times\n * (default 1), dying away by (1 − t)^`decay` (default 0, no decay).\n * - `wriggle`: wanders round `from` by up to about `to − from`, as seeded smooth fractal noise\n * at `frequency` Hz (default 2) with `octaves` layers (default 2); each number in a value\n * wanders on its own channel. It eases out of and back to rest over the first and last 15%\n * of its time. The same `seed` (default 42) gives the same wander.\n * - `overshoot`: goes to `to`, past it and back, settling like a spring:\n * u = 1 − e^(−damping·t)·cos(cycles·π·t) (default 3 cycles, damping 4).\n */\nexport type MotionBehavior =\n\t| { type: 'pulse'; count?: number }\n\t| { type: 'oscillate'; count?: number; decay?: number; wave?: 'sine' | 'triangle' | 'square' | 'sawtooth' }\n\t| { type: 'wriggle'; frequency?: number; octaves?: number; seed?: number }\n\t| { type: 'overshoot'; cycles?: number; damping?: number };\n\n/** Every `MotionBehavior` type. */\nexport const MOTION_BEHAVIORS = ['pulse', 'oscillate', 'wriggle', 'overshoot'] as const;\n\n/** Share of a wriggle's time spent easing out of and back to rest, at each end. */\nconst WRIGGLE_EDGE = 0.15;\n\nfunction wave(kind: 'sine' | 'triangle' | 'square' | 'sawtooth' | undefined, angle: number): number {\n\tswitch (kind) {\n\t\tcase 'square':\n\t\t\treturn Math.sin(angle) >= 0 ? 1 : -1;\n\t\tcase 'triangle':\n\t\t\treturn (2 / Math.PI) * Math.asin(Math.sin(angle));\n\t\tcase 'sawtooth': {\n\t\t\tconst norm = (angle / (2 * Math.PI)) % 1;\n\t\t\treturn 2 * (norm < 0 ? norm + 1 : norm) - 1;\n\t\t}\n\t\tdefault:\n\t\t\treturn Math.sin(angle);\n\t}\n}\n\n/**\n * A behaviour's progress at `t` (0–1, eased) of a change lasting `ms`, for the `index`-th number\n * in a value (only a wriggle tells numbers apart).\n */\nexport function behaviorProgress(behavior: MotionBehavior, t: number, index = 0, ms = 800): number {\n\tconst time = Math.max(0, t);\n\tswitch (behavior.type) {\n\t\tcase 'pulse':\n\t\t\t// sin²(πct) = (1 − cos 2πct) / 2: written as Flair writes it, so the numbers match.\n\t\t\treturn 0.5 + 0.5 * Math.sin(2 * Math.PI * (behavior.count ?? 1) * time - Math.PI / 2);\n\t\tcase 'oscillate': {\n\t\t\tconst w = wave(behavior.wave, 2 * Math.PI * (behavior.count ?? 1) * time);\n\t\t\tconst decay = behavior.decay ?? 0;\n\t\t\treturn decay > 0 ? w * Math.max(0, 1 - t) ** decay : w;\n\t\t}\n\t\tcase 'wriggle': {\n\t\t\tconst edge = quinticFade(Math.min(1, Math.max(0, Math.min(t, 1 - t) / WRIGGLE_EDGE)));\n\t\t\tif (edge === 0) return 0;\n\t\t\treturn edge * fractalWiggle(behavior.frequency ?? 2, 1, behavior.octaves ?? 2, 0.5, (t * ms) / 1000, behavior.seed ?? 42, index);\n\t\t}\n\t\tcase 'overshoot': {\n\t\t\tconst p = Math.min(1, time);\n\t\t\tif (p >= 1) return 1;\n\t\t\treturn 1 - Math.exp(-(behavior.damping ?? 4) * p) * Math.cos((behavior.cycles ?? 3) * Math.PI * p);\n\t\t}\n\t}\n}\n\n/** Whether `value` is a well-formed `MotionBehavior`. */\nexport function isMotionBehavior(value: unknown): value is MotionBehavior {\n\tif (typeof value !== 'object' || value === null) return false;\n\tconst b = value as Record<string, unknown>;\n\tconst positive = (k: string) => b[k] === undefined || (typeof b[k] === 'number' && Number.isFinite(b[k]) && (b[k] as number) > 0);\n\tconst atLeastZero = (k: string) => b[k] === undefined || (typeof b[k] === 'number' && Number.isFinite(b[k]) && (b[k] as number) >= 0);\n\tswitch (b.type) {\n\t\tcase 'pulse':\n\t\t\treturn positive('count');\n\t\tcase 'oscillate':\n\t\t\treturn positive('count') && atLeastZero('decay') && (b.wave === undefined || ['sine', 'triangle', 'square', 'sawtooth'].includes(b.wave as string));\n\t\tcase 'wriggle':\n\t\t\treturn positive('frequency') && positive('octaves') && (b.seed === undefined || Number.isInteger(b.seed));\n\t\tcase 'overshoot':\n\t\t\treturn positive('cycles') && atLeastZero('damping');\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/** A seed from an id (FNV-1a), so each element wriggles its own way: Flair's `seedOf`. */\nexport function motionSeedFromId(id: string): number {\n\tlet h = 0x811c9dc5;\n\tfor (let i = 0; i < id.length; i++) h = Math.imul(h ^ id.charCodeAt(i), 0x01000193);\n\treturn (h >>> 0) % 2147483647 || 1;\n}\n\n// ── Noise (SplitMix64 hashing, quintic value noise), as Flair's `time/noise.ts` ─────────────\n\nconst GOLDEN_GAMMA = 0x9e3779b97f4a7c15n;\nconst MULT1 = 0xbf58476d1ce4e5b9n;\nconst MULT2 = 0x94d049bb133111ebn;\nconst MASK64 = 0xffffffffffffffffn;\nconst BASE_MIX = 0x2545f4914f6cdd1dn;\nconst POW2_53 = 9007199254740992;\n\nfunction hash64(x: bigint): bigint {\n\tlet v = (x + GOLDEN_GAMMA) & MASK64;\n\tv = ((v ^ (v >> 30n)) * MULT1) & MASK64;\n\tv = ((v ^ (v >> 27n)) * MULT2) & MASK64;\n\treturn (v ^ (v >> 31n)) & MASK64;\n}\n\nfunction mixSeeds(parts: (bigint | number)[]): bigint {\n\tlet h = BASE_MIX;\n\tfor (const p of parts) {\n\t\tconst val = typeof p === 'bigint' ? p : BigInt(Math.floor(p));\n\t\th = hash64(h ^ hash64(val & MASK64));\n\t}\n\treturn h;\n}\n\nfunction unitFloat(seed: bigint): number {\n\treturn Number(hash64(seed) >> 11n) / POW2_53;\n}\n\n/** 6t⁵ − 15t⁴ + 10t³: zero slope and curvature at 0 and 1. */\nexport function quinticFade(t: number): number {\n\treturn t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n\nfunction noise1d(seed: bigint, x: number): number {\n\tif (!Number.isFinite(x)) return 0;\n\tconst floorX = Math.floor(x);\n\tconst u = quinticFade(x - floorX);\n\tconst i = BigInt(floorX);\n\tconst a = unitFloat(seed ^ hash64(i & MASK64)) * 2 - 1;\n\tconst b = unitFloat(seed ^ hash64((i + 1n) & MASK64)) * 2 - 1;\n\treturn a + (b - a) * u;\n}\n\n/**\n * Multi-octave smooth noise (After Effects' `wiggle`): the sum over `octaves` of\n * amp·ampMult^k · noise(freq·2^k·t), each octave and `dimension` seeded apart. `t` in seconds.\n */\nexport function fractalWiggle(freq: number, amp: number, octaves = 3, ampMult = 0.5, t = 0, seed = 42, dimension = 0): number {\n\tconst oct = Math.max(1, Math.min(16, Math.floor(octaves)));\n\tlet currentAmp = amp;\n\tlet currentFreq = freq;\n\tlet sum = 0;\n\tconst baseSeed = BigInt(Math.floor(seed));\n\tfor (let k = 0; k < oct; k++) {\n\t\tconst s = mixSeeds([baseSeed, BigInt(dimension), BigInt(k)]);\n\t\tconst phaseOffset = unitFloat(s) * 1000.0;\n\t\tsum += currentAmp * noise1d(s, currentFreq * t + phaseOffset);\n\t\tcurrentAmp *= ampMult;\n\t\tcurrentFreq *= 2.0;\n\t}\n\treturn sum;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -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-FKONE6AO.cjs.map
|