@sarmal/core 0.9.0 → 0.9.1
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/auto-init.cjs +206 -139
- package/dist/auto-init.cjs.map +1 -1
- package/dist/auto-init.d.cts +1 -2
- package/dist/auto-init.d.ts +1 -2
- package/dist/auto-init.js +205 -138
- package/dist/auto-init.js.map +1 -1
- package/dist/curves/artemis2.cjs +26 -0
- package/dist/curves/artemis2.cjs.map +1 -0
- package/dist/curves/artemis2.d.cts +9 -0
- package/dist/curves/artemis2.d.ts +9 -0
- package/dist/curves/artemis2.js +24 -0
- package/dist/curves/artemis2.js.map +1 -0
- package/dist/curves/astroid.cjs +22 -0
- package/dist/curves/astroid.cjs.map +1 -0
- package/dist/curves/astroid.d.cts +9 -0
- package/dist/curves/astroid.d.ts +9 -0
- package/dist/curves/astroid.js +20 -0
- package/dist/curves/astroid.js.map +1 -0
- package/dist/curves/deltoid.cjs +20 -0
- package/dist/curves/deltoid.cjs.map +1 -0
- package/dist/curves/deltoid.d.cts +9 -0
- package/dist/curves/deltoid.d.ts +9 -0
- package/dist/curves/deltoid.js +18 -0
- package/dist/curves/deltoid.js.map +1 -0
- package/dist/curves/epicycloid3.cjs +20 -0
- package/dist/curves/epicycloid3.cjs.map +1 -0
- package/dist/curves/epicycloid3.d.cts +9 -0
- package/dist/curves/epicycloid3.d.ts +9 -0
- package/dist/curves/epicycloid3.js +18 -0
- package/dist/curves/epicycloid3.js.map +1 -0
- package/dist/curves/epitrochoid7.cjs +29 -0
- package/dist/curves/epitrochoid7.cjs.map +1 -0
- package/dist/curves/epitrochoid7.d.cts +9 -0
- package/dist/curves/epitrochoid7.d.ts +9 -0
- package/dist/curves/epitrochoid7.js +27 -0
- package/dist/curves/epitrochoid7.js.map +1 -0
- package/dist/curves/index.cjs +206 -0
- package/dist/curves/index.cjs.map +1 -0
- package/dist/curves/index.d.cts +19 -0
- package/dist/curves/index.d.ts +19 -0
- package/dist/curves/index.js +206 -0
- package/dist/curves/index.js.map +1 -0
- package/dist/curves/lame.cjs +24 -0
- package/dist/curves/lame.cjs.map +1 -0
- package/dist/curves/lame.d.cts +9 -0
- package/dist/curves/lame.d.ts +9 -0
- package/dist/curves/lame.js +22 -0
- package/dist/curves/lame.js.map +1 -0
- package/dist/curves/lissajous32.cjs +22 -0
- package/dist/curves/lissajous32.cjs.map +1 -0
- package/dist/curves/lissajous32.d.cts +9 -0
- package/dist/curves/lissajous32.d.ts +9 -0
- package/dist/curves/lissajous32.js +20 -0
- package/dist/curves/lissajous32.js.map +1 -0
- package/dist/curves/lissajous43.cjs +22 -0
- package/dist/curves/lissajous43.cjs.map +1 -0
- package/dist/curves/lissajous43.d.cts +9 -0
- package/dist/curves/lissajous43.d.ts +9 -0
- package/dist/curves/lissajous43.js +20 -0
- package/dist/curves/lissajous43.js.map +1 -0
- package/dist/curves/rose3.cjs +21 -0
- package/dist/curves/rose3.cjs.map +1 -0
- package/dist/curves/rose3.d.cts +9 -0
- package/dist/curves/rose3.d.ts +9 -0
- package/dist/curves/rose3.js +19 -0
- package/dist/curves/rose3.js.map +1 -0
- package/dist/curves/rose5.cjs +21 -0
- package/dist/curves/rose5.cjs.map +1 -0
- package/dist/curves/rose5.d.cts +9 -0
- package/dist/curves/rose5.d.ts +9 -0
- package/dist/curves/rose5.js +19 -0
- package/dist/curves/rose5.js.map +1 -0
- package/dist/index.cjs +208 -139
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -233
- package/dist/index.d.ts +64 -233
- package/dist/index.js +215 -139
- package/dist/index.js.map +1 -1
- package/dist/types-DX8VfIVK.d.cts +226 -0
- package/dist/types-DX8VfIVK.d.ts +226 -0
- package/package.json +11 -1
package/dist/auto-init.js
CHANGED
|
@@ -49,7 +49,7 @@ function resolveCurve(curveDef) {
|
|
|
49
49
|
period: curveDef.period ?? TWO_PI,
|
|
50
50
|
speed: curveDef.speed ?? 1,
|
|
51
51
|
skeleton: curveDef.skeleton,
|
|
52
|
-
skeletonFn: curveDef.skeletonFn
|
|
52
|
+
skeletonFn: curveDef.skeletonFn,
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
function createEngine(curveDef, trailLength = 120) {
|
|
@@ -75,7 +75,7 @@ function createEngine(curveDef, trailLength = 120) {
|
|
|
75
75
|
actualTime += deltaTime;
|
|
76
76
|
if (morphCurveB !== null && _morphAlpha !== null) {
|
|
77
77
|
const a = curve.fn(t, actualTime, {});
|
|
78
|
-
const tB = _morphStrategy === "normalized" ? t / curve.period * morphCurveB.period : t;
|
|
78
|
+
const tB = _morphStrategy === "normalized" ? (t / curve.period) * morphCurveB.period : t;
|
|
79
79
|
const b = morphCurveB.fn(tB, actualTime, {});
|
|
80
80
|
trail.push(a.x + (b.x - a.x) * _morphAlpha, a.y + (b.y - a.y) * _morphAlpha);
|
|
81
81
|
} else {
|
|
@@ -99,14 +99,14 @@ function createEngine(curveDef, trailLength = 120) {
|
|
|
99
99
|
trail.clear();
|
|
100
100
|
},
|
|
101
101
|
seek(newT, { clearTrail = false } = {}) {
|
|
102
|
-
t = (newT % curve.period + curve.period) % curve.period;
|
|
102
|
+
t = ((newT % curve.period) + curve.period) % curve.period;
|
|
103
103
|
if (clearTrail) {
|
|
104
104
|
trail.clear();
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
107
|
seekWithTrail(targetT, { wrap = false, step = curve.period / trailLength } = {}) {
|
|
108
108
|
const advance = curve.speed * step;
|
|
109
|
-
const target = (targetT % curve.period + curve.period) % curve.period;
|
|
109
|
+
const target = ((targetT % curve.period) + curve.period) % curve.period;
|
|
110
110
|
const targetTime = target / curve.speed;
|
|
111
111
|
t = target;
|
|
112
112
|
actualTime = targetTime;
|
|
@@ -132,13 +132,16 @@ function createEngine(curveDef, trailLength = 120) {
|
|
|
132
132
|
...frozenB,
|
|
133
133
|
fn: (sampleT, time, params) => {
|
|
134
134
|
const a = frozenA.fn(sampleT, time, params);
|
|
135
|
-
const tB =
|
|
135
|
+
const tB =
|
|
136
|
+
frozenStrategy === "normalized"
|
|
137
|
+
? (sampleT / frozenA.period) * frozenB.period
|
|
138
|
+
: sampleT;
|
|
136
139
|
const b = frozenB.fn(tB, time, params);
|
|
137
140
|
return {
|
|
138
141
|
x: a.x + (b.x - a.x) * frozenAlpha,
|
|
139
|
-
y: a.y + (b.y - a.y) * frozenAlpha
|
|
142
|
+
y: a.y + (b.y - a.y) * frozenAlpha,
|
|
140
143
|
};
|
|
141
|
-
}
|
|
144
|
+
},
|
|
142
145
|
};
|
|
143
146
|
}
|
|
144
147
|
_morphStrategy = strategy;
|
|
@@ -151,7 +154,7 @@ function createEngine(curveDef, trailLength = 120) {
|
|
|
151
154
|
completeMorph() {
|
|
152
155
|
if (morphCurveB !== null) {
|
|
153
156
|
if (_morphStrategy === "normalized" && curve.period !== morphCurveB.period) {
|
|
154
|
-
t = t / curve.period * morphCurveB.period;
|
|
157
|
+
t = (t / curve.period) * morphCurveB.period;
|
|
155
158
|
}
|
|
156
159
|
curve = morphCurveB;
|
|
157
160
|
}
|
|
@@ -163,23 +166,26 @@ function createEngine(curveDef, trailLength = 120) {
|
|
|
163
166
|
const points = new Array(steps);
|
|
164
167
|
if (morphCurveB !== null && _morphAlpha !== null) {
|
|
165
168
|
for (let i = 0; i < steps; i++) {
|
|
166
|
-
const sampleT = i / (steps - 1) * curve.period;
|
|
169
|
+
const sampleT = (i / (steps - 1)) * curve.period;
|
|
167
170
|
const a = sampleSkeleton(curve, sampleT);
|
|
168
|
-
const tB =
|
|
171
|
+
const tB =
|
|
172
|
+
_morphStrategy === "normalized"
|
|
173
|
+
? (sampleT / curve.period) * morphCurveB.period
|
|
174
|
+
: sampleT;
|
|
169
175
|
const b = sampleSkeleton(morphCurveB, tB);
|
|
170
176
|
points[i] = {
|
|
171
177
|
x: a.x + (b.x - a.x) * _morphAlpha,
|
|
172
|
-
y: a.y + (b.y - a.y) * _morphAlpha
|
|
178
|
+
y: a.y + (b.y - a.y) * _morphAlpha,
|
|
173
179
|
};
|
|
174
180
|
}
|
|
175
181
|
return points;
|
|
176
182
|
}
|
|
177
183
|
for (let i = 0; i < steps; i++) {
|
|
178
|
-
const sampleT = i / (steps - 1) * curve.period;
|
|
184
|
+
const sampleT = (i / (steps - 1)) * curve.period;
|
|
179
185
|
points[i] = sampleSkeleton(curve, sampleT);
|
|
180
186
|
}
|
|
181
187
|
return points;
|
|
182
|
-
}
|
|
188
|
+
},
|
|
183
189
|
};
|
|
184
190
|
}
|
|
185
191
|
|
|
@@ -199,7 +205,7 @@ var GRADIENT = {
|
|
|
199
205
|
ocean: ["#1e3a8a", "#06b6d4", "#22d3ee", "#e0f2fe"],
|
|
200
206
|
ice: ["#1e3a8a", "#67e8f9"],
|
|
201
207
|
fire: ["#7f1d1d", "#fbbf24"],
|
|
202
|
-
forest: ["#14532d", "#86efac"]
|
|
208
|
+
forest: ["#14532d", "#86efac"],
|
|
203
209
|
};
|
|
204
210
|
var PRESETS = {
|
|
205
211
|
bard: GRADIENT.bard,
|
|
@@ -207,16 +213,16 @@ var PRESETS = {
|
|
|
207
213
|
ocean: GRADIENT.ocean,
|
|
208
214
|
ice: GRADIENT.ice,
|
|
209
215
|
fire: GRADIENT.fire,
|
|
210
|
-
forest: GRADIENT.forest
|
|
216
|
+
forest: GRADIENT.forest,
|
|
211
217
|
};
|
|
212
218
|
function hexToRgb(hex) {
|
|
213
219
|
const n = parseInt(hex.slice(1), 16);
|
|
214
|
-
return { r: n >> 16, g: n >> 8 & 255, b: n & 255 };
|
|
220
|
+
return { r: n >> 16, g: (n >> 8) & 255, b: n & 255 };
|
|
215
221
|
}
|
|
216
222
|
var lerpRgb = (a, b, t) => ({
|
|
217
223
|
r: Math.round(a.r + (b.r - a.r) * t),
|
|
218
224
|
g: Math.round(a.g + (b.g - a.g) * t),
|
|
219
|
-
b: Math.round(a.b + (b.b - a.b) * t)
|
|
225
|
+
b: Math.round(a.b + (b.b - a.b) * t),
|
|
220
226
|
});
|
|
221
227
|
function getPaletteColor(palette, position, timeOffset = 0) {
|
|
222
228
|
if (palette.length === 0) return { r: 255, g: 255, b: 255 };
|
|
@@ -236,7 +242,7 @@ function resolvePalette(palette, trailStyle) {
|
|
|
236
242
|
}
|
|
237
243
|
function hexToRgbComponents(hex) {
|
|
238
244
|
const n = parseInt(hex.slice(1), 16);
|
|
239
|
-
return `${n >> 16},${n >> 8 & 255},${n & 255}`;
|
|
245
|
+
return `${n >> 16},${(n >> 8) & 255},${n & 255}`;
|
|
240
246
|
}
|
|
241
247
|
function computeTangent(trail, i) {
|
|
242
248
|
const count = trail.length;
|
|
@@ -281,7 +287,7 @@ function createRenderer(options) {
|
|
|
281
287
|
skeletonColor: options.skeletonColor ?? DEFAULT_SKELETON_COLOR,
|
|
282
288
|
trailColor: options.trailColor ?? "#ffffff",
|
|
283
289
|
headColor: options.headColor ?? "#ffffff",
|
|
284
|
-
headRadius: options.headRadius ?? DEFAULT_HEAD_RADIUS
|
|
290
|
+
headRadius: options.headRadius ?? DEFAULT_HEAD_RADIUS,
|
|
285
291
|
};
|
|
286
292
|
const trailStyle = options.trailStyle ?? "default";
|
|
287
293
|
const palette = resolvePalette(options.palette, trailStyle);
|
|
@@ -314,7 +320,10 @@ function createRenderer(options) {
|
|
|
314
320
|
function computeBoundaries(pts) {
|
|
315
321
|
if (pts.length === 0) return null;
|
|
316
322
|
const first = pts[0];
|
|
317
|
-
let minX = first.x,
|
|
323
|
+
let minX = first.x,
|
|
324
|
+
maxX = first.x,
|
|
325
|
+
minY = first.y,
|
|
326
|
+
maxY = first.y;
|
|
318
327
|
for (const p of pts) {
|
|
319
328
|
if (p.x < minX) minX = p.x;
|
|
320
329
|
if (p.x > maxX) maxX = p.x;
|
|
@@ -331,7 +340,7 @@ function createRenderer(options) {
|
|
|
331
340
|
return {
|
|
332
341
|
scale: s,
|
|
333
342
|
offsetX: (logicalWidth - boundsWidth) / 2 - minX * s,
|
|
334
|
-
offsetY: (logicalHeight - boundsHeight) / 2 - minY * s
|
|
343
|
+
offsetY: (logicalHeight - boundsHeight) / 2 - minY * s,
|
|
335
344
|
};
|
|
336
345
|
}
|
|
337
346
|
function calculateBoundaries() {
|
|
@@ -537,156 +546,199 @@ function createRenderer(options) {
|
|
|
537
546
|
return new Promise((resolve) => {
|
|
538
547
|
morphResolve = resolve;
|
|
539
548
|
});
|
|
540
|
-
}
|
|
549
|
+
},
|
|
541
550
|
};
|
|
542
551
|
}
|
|
543
552
|
|
|
544
|
-
// src/curves.ts
|
|
553
|
+
// src/curves/artemis2.ts
|
|
545
554
|
var TWO_PI2 = Math.PI * 2;
|
|
546
|
-
function
|
|
547
|
-
const a = 0.35,
|
|
548
|
-
|
|
555
|
+
function artemis2Fn(t, _time, _params) {
|
|
556
|
+
const a = 0.35,
|
|
557
|
+
b = 0.15,
|
|
558
|
+
ox = 0.175;
|
|
559
|
+
const s = Math.sin(t),
|
|
560
|
+
c = Math.cos(t);
|
|
549
561
|
const denom = 1 + s * s;
|
|
550
562
|
return {
|
|
551
|
-
x: c * (1 + a * c) / denom - ox,
|
|
552
|
-
y: s * c * (1 + b * c) / denom
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
function epitrochoid7(t, _time, _params) {
|
|
556
|
-
const d = 1 + 0.55 * Math.sin(t * 0.5);
|
|
557
|
-
return {
|
|
558
|
-
x: 7 * Math.cos(t) - d * Math.cos(7 * t),
|
|
559
|
-
y: 7 * Math.sin(t) - d * Math.sin(7 * t)
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
function epitrochoid7Skeleton(t) {
|
|
563
|
-
const d = 1.275;
|
|
564
|
-
return {
|
|
565
|
-
x: 7 * Math.cos(t) - d * Math.cos(7 * t),
|
|
566
|
-
y: 7 * Math.sin(t) - d * Math.sin(7 * t)
|
|
563
|
+
x: (c * (1 + a * c)) / denom - ox,
|
|
564
|
+
y: (s * c * (1 + b * c)) / denom,
|
|
567
565
|
};
|
|
568
566
|
}
|
|
569
|
-
|
|
567
|
+
var artemis2 = {
|
|
568
|
+
name: "Artemis II",
|
|
569
|
+
fn: artemis2Fn,
|
|
570
|
+
period: TWO_PI2,
|
|
571
|
+
speed: 0.7,
|
|
572
|
+
};
|
|
573
|
+
|
|
574
|
+
// src/curves/astroid.ts
|
|
575
|
+
var TWO_PI3 = Math.PI * 2;
|
|
576
|
+
function astroidFn(t, _time, _params) {
|
|
570
577
|
const c = Math.cos(t);
|
|
571
578
|
const s = Math.sin(t);
|
|
572
579
|
return {
|
|
573
580
|
x: c * c * c,
|
|
574
|
-
y: s * s * s
|
|
581
|
+
y: s * s * s,
|
|
575
582
|
};
|
|
576
583
|
}
|
|
577
|
-
|
|
584
|
+
var astroid = {
|
|
585
|
+
name: "Astroid",
|
|
586
|
+
fn: astroidFn,
|
|
587
|
+
period: TWO_PI3,
|
|
588
|
+
speed: 1.1,
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
// src/curves/deltoid.ts
|
|
592
|
+
var TWO_PI4 = Math.PI * 2;
|
|
593
|
+
function deltoidFn(t, _time, _params) {
|
|
578
594
|
return {
|
|
579
595
|
x: 2 * Math.cos(t) + Math.cos(2 * t),
|
|
580
|
-
y: 2 * Math.sin(t) - Math.sin(2 * t)
|
|
596
|
+
y: 2 * Math.sin(t) - Math.sin(2 * t),
|
|
581
597
|
};
|
|
582
598
|
}
|
|
583
|
-
|
|
584
|
-
|
|
599
|
+
var deltoid = {
|
|
600
|
+
name: "Deltoid",
|
|
601
|
+
fn: deltoidFn,
|
|
602
|
+
period: TWO_PI4,
|
|
603
|
+
speed: 0.9,
|
|
604
|
+
};
|
|
605
|
+
|
|
606
|
+
// src/curves/epicycloid3.ts
|
|
607
|
+
var TWO_PI5 = Math.PI * 2;
|
|
608
|
+
function epicycloid3Fn(t, _time, _params) {
|
|
585
609
|
return {
|
|
586
|
-
x:
|
|
587
|
-
y:
|
|
610
|
+
x: 4 * Math.cos(t) - Math.cos(4 * t),
|
|
611
|
+
y: 4 * Math.sin(t) - Math.sin(4 * t),
|
|
588
612
|
};
|
|
589
613
|
}
|
|
590
|
-
|
|
591
|
-
|
|
614
|
+
var epicycloid3 = {
|
|
615
|
+
name: "Epicycloid (n=3)",
|
|
616
|
+
fn: epicycloid3Fn,
|
|
617
|
+
period: TWO_PI5,
|
|
618
|
+
speed: 0.75,
|
|
619
|
+
};
|
|
620
|
+
|
|
621
|
+
// src/curves/epitrochoid7.ts
|
|
622
|
+
var TWO_PI6 = Math.PI * 2;
|
|
623
|
+
function epitrochoid7Fn(t, _time, _params) {
|
|
624
|
+
const d = 1 + 0.55 * Math.sin(t * 0.5);
|
|
592
625
|
return {
|
|
593
|
-
x:
|
|
594
|
-
y:
|
|
626
|
+
x: 7 * Math.cos(t) - d * Math.cos(7 * t),
|
|
627
|
+
y: 7 * Math.sin(t) - d * Math.sin(7 * t),
|
|
595
628
|
};
|
|
596
629
|
}
|
|
597
|
-
function
|
|
630
|
+
function epitrochoid7SkeletonFn(t) {
|
|
631
|
+
const d = 1.275;
|
|
632
|
+
return {
|
|
633
|
+
x: 7 * Math.cos(t) - d * Math.cos(7 * t),
|
|
634
|
+
y: 7 * Math.sin(t) - d * Math.sin(7 * t),
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
var epitrochoid7 = {
|
|
638
|
+
name: "Epitrochoid",
|
|
639
|
+
fn: epitrochoid7Fn,
|
|
640
|
+
period: TWO_PI6,
|
|
641
|
+
speed: 1.4,
|
|
642
|
+
skeletonFn: epitrochoid7SkeletonFn,
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
// src/curves/lissajous32.ts
|
|
646
|
+
var TWO_PI7 = Math.PI * 2;
|
|
647
|
+
function lissajous32Fn(t, time, _params) {
|
|
598
648
|
const phi = time * 0.45;
|
|
599
649
|
return {
|
|
600
650
|
x: Math.sin(3 * t + phi),
|
|
601
|
-
y: Math.sin(2 * t)
|
|
651
|
+
y: Math.sin(2 * t),
|
|
602
652
|
};
|
|
603
653
|
}
|
|
604
|
-
|
|
654
|
+
var lissajous32 = {
|
|
655
|
+
name: "Lissajous 3:2",
|
|
656
|
+
fn: lissajous32Fn,
|
|
657
|
+
period: TWO_PI7,
|
|
658
|
+
speed: 2,
|
|
659
|
+
skeleton: "live",
|
|
660
|
+
};
|
|
661
|
+
|
|
662
|
+
// src/curves/lissajous43.ts
|
|
663
|
+
var TWO_PI8 = Math.PI * 2;
|
|
664
|
+
function lissajous43Fn(t, time, _params) {
|
|
605
665
|
const phi = time * 0.38;
|
|
606
666
|
return {
|
|
607
667
|
x: Math.sin(4 * t + phi),
|
|
608
|
-
y: Math.sin(3 * t)
|
|
668
|
+
y: Math.sin(3 * t),
|
|
609
669
|
};
|
|
610
670
|
}
|
|
611
|
-
|
|
671
|
+
var lissajous43 = {
|
|
672
|
+
name: "Lissajous 4:3",
|
|
673
|
+
fn: lissajous43Fn,
|
|
674
|
+
period: TWO_PI8,
|
|
675
|
+
speed: 1.8,
|
|
676
|
+
skeleton: "live",
|
|
677
|
+
};
|
|
678
|
+
|
|
679
|
+
// src/curves/lame.ts
|
|
680
|
+
var TWO_PI9 = Math.PI * 2;
|
|
681
|
+
function lameFn(t, time, _params) {
|
|
682
|
+
const p = 1.75 + 1.25 * Math.sin(time * 0.48);
|
|
683
|
+
const c = Math.cos(t),
|
|
684
|
+
s = Math.sin(t);
|
|
612
685
|
return {
|
|
613
|
-
x:
|
|
614
|
-
y:
|
|
686
|
+
x: Math.sign(c) * Math.pow(Math.abs(c), p),
|
|
687
|
+
y: Math.sign(s) * Math.pow(Math.abs(s), p),
|
|
615
688
|
};
|
|
616
689
|
}
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
690
|
+
var lame = {
|
|
691
|
+
name: "Lam\xE9 Curve",
|
|
692
|
+
fn: lameFn,
|
|
693
|
+
period: TWO_PI9,
|
|
694
|
+
speed: 1,
|
|
695
|
+
skeleton: "live",
|
|
696
|
+
};
|
|
697
|
+
|
|
698
|
+
// src/curves/rose3.ts
|
|
699
|
+
var TWO_PI10 = Math.PI * 2;
|
|
700
|
+
function rose3Fn(t, _time, _params) {
|
|
701
|
+
const r = Math.cos(3 * t);
|
|
620
702
|
return {
|
|
621
|
-
x:
|
|
622
|
-
y:
|
|
703
|
+
x: r * Math.cos(t),
|
|
704
|
+
y: r * Math.sin(t),
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
var rose3 = {
|
|
708
|
+
name: "Rose (n=3)",
|
|
709
|
+
fn: rose3Fn,
|
|
710
|
+
period: TWO_PI10,
|
|
711
|
+
speed: 1.15,
|
|
712
|
+
};
|
|
713
|
+
|
|
714
|
+
// src/curves/rose5.ts
|
|
715
|
+
var TWO_PI11 = Math.PI * 2;
|
|
716
|
+
function rose5Fn(t, _time, _params) {
|
|
717
|
+
const r = Math.cos(5 * t);
|
|
718
|
+
return {
|
|
719
|
+
x: r * Math.cos(t),
|
|
720
|
+
y: r * Math.sin(t),
|
|
623
721
|
};
|
|
624
722
|
}
|
|
723
|
+
var rose5 = {
|
|
724
|
+
name: "Rose (n=5)",
|
|
725
|
+
fn: rose5Fn,
|
|
726
|
+
period: TWO_PI11,
|
|
727
|
+
speed: 1,
|
|
728
|
+
};
|
|
729
|
+
|
|
730
|
+
// src/curves/index.ts
|
|
625
731
|
var curves = {
|
|
626
|
-
artemis2
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
speed: 1.4,
|
|
637
|
-
skeletonFn: epitrochoid7Skeleton
|
|
638
|
-
},
|
|
639
|
-
astroid: {
|
|
640
|
-
name: "Astroid",
|
|
641
|
-
fn: astroid,
|
|
642
|
-
period: TWO_PI2,
|
|
643
|
-
speed: 1.1
|
|
644
|
-
},
|
|
645
|
-
deltoid: {
|
|
646
|
-
name: "Deltoid",
|
|
647
|
-
fn: deltoid,
|
|
648
|
-
period: TWO_PI2,
|
|
649
|
-
speed: 0.9
|
|
650
|
-
},
|
|
651
|
-
rose5: {
|
|
652
|
-
name: "Rose (n=5)",
|
|
653
|
-
fn: rose5,
|
|
654
|
-
period: TWO_PI2,
|
|
655
|
-
speed: 1
|
|
656
|
-
},
|
|
657
|
-
rose3: {
|
|
658
|
-
name: "Rose (n=3)",
|
|
659
|
-
fn: rose3,
|
|
660
|
-
period: TWO_PI2,
|
|
661
|
-
speed: 1.15
|
|
662
|
-
},
|
|
663
|
-
lissajous32: {
|
|
664
|
-
name: "Lissajous 3:2",
|
|
665
|
-
fn: lissajous32,
|
|
666
|
-
period: TWO_PI2,
|
|
667
|
-
speed: 2,
|
|
668
|
-
skeleton: "live"
|
|
669
|
-
},
|
|
670
|
-
lissajous43: {
|
|
671
|
-
name: "Lissajous 4:3",
|
|
672
|
-
fn: lissajous43,
|
|
673
|
-
period: TWO_PI2,
|
|
674
|
-
speed: 1.8,
|
|
675
|
-
skeleton: "live"
|
|
676
|
-
},
|
|
677
|
-
epicycloid3: {
|
|
678
|
-
name: "Epicycloid (n=3)",
|
|
679
|
-
fn: epicycloid3,
|
|
680
|
-
period: TWO_PI2,
|
|
681
|
-
speed: 0.75
|
|
682
|
-
},
|
|
683
|
-
lame: {
|
|
684
|
-
name: "Lam\xE9 Curve",
|
|
685
|
-
fn: lame,
|
|
686
|
-
period: TWO_PI2,
|
|
687
|
-
speed: 1,
|
|
688
|
-
skeleton: "live"
|
|
689
|
-
}
|
|
732
|
+
artemis2,
|
|
733
|
+
epitrochoid7,
|
|
734
|
+
astroid,
|
|
735
|
+
deltoid,
|
|
736
|
+
rose5,
|
|
737
|
+
rose3,
|
|
738
|
+
lissajous32,
|
|
739
|
+
lissajous43,
|
|
740
|
+
epicycloid3,
|
|
741
|
+
lame,
|
|
690
742
|
};
|
|
691
743
|
|
|
692
744
|
// src/index.ts
|
|
@@ -697,6 +749,15 @@ function createSarmal(canvas, curveDef, options) {
|
|
|
697
749
|
}
|
|
698
750
|
|
|
699
751
|
// src/auto-init.ts
|
|
752
|
+
function parsePalette(value) {
|
|
753
|
+
try {
|
|
754
|
+
const parsed = JSON.parse(value);
|
|
755
|
+
if (Array.isArray(parsed)) {
|
|
756
|
+
return parsed;
|
|
757
|
+
}
|
|
758
|
+
} catch {}
|
|
759
|
+
return value;
|
|
760
|
+
}
|
|
700
761
|
function init() {
|
|
701
762
|
const canvases = document.querySelectorAll("canvas[data-sarmal]");
|
|
702
763
|
canvases.forEach((canvas) => {
|
|
@@ -709,19 +770,25 @@ function init() {
|
|
|
709
770
|
return console.error(`[sarmal] "${curveName}" is not a valid curve name`);
|
|
710
771
|
}
|
|
711
772
|
const sarmal = createSarmal(canvas, curveDef, {
|
|
712
|
-
...canvas.dataset.trailColor && { trailColor: canvas.dataset.trailColor },
|
|
713
|
-
...canvas.dataset.skeletonColor && { skeletonColor: canvas.dataset.skeletonColor },
|
|
714
|
-
...canvas.dataset.headColor && { headColor: canvas.dataset.headColor },
|
|
715
|
-
...canvas.dataset.headRadius && { headRadius: parseFloat(canvas.dataset.headRadius) },
|
|
716
|
-
...canvas.dataset.trailLength && { trailLength: parseInt(canvas.dataset.trailLength, 10) }
|
|
773
|
+
...(canvas.dataset.trailColor && { trailColor: canvas.dataset.trailColor }),
|
|
774
|
+
...(canvas.dataset.skeletonColor && { skeletonColor: canvas.dataset.skeletonColor }),
|
|
775
|
+
...(canvas.dataset.headColor && { headColor: canvas.dataset.headColor }),
|
|
776
|
+
...(canvas.dataset.headRadius && { headRadius: parseFloat(canvas.dataset.headRadius) }),
|
|
777
|
+
...(canvas.dataset.trailLength && { trailLength: parseInt(canvas.dataset.trailLength, 10) }),
|
|
778
|
+
...(canvas.dataset.trailStyle && {
|
|
779
|
+
trailStyle: canvas.dataset.trailStyle,
|
|
780
|
+
}),
|
|
781
|
+
...(canvas.dataset.palette && { palette: parsePalette(canvas.dataset.palette) }),
|
|
717
782
|
});
|
|
718
783
|
sarmal.start();
|
|
719
784
|
});
|
|
720
785
|
}
|
|
721
786
|
if (document.readyState === "loading") {
|
|
722
|
-
document.addEventListener("DOMContentLoaded",
|
|
787
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
788
|
+
requestAnimationFrame(init);
|
|
789
|
+
});
|
|
723
790
|
} else {
|
|
724
|
-
init
|
|
791
|
+
requestAnimationFrame(init);
|
|
725
792
|
}
|
|
726
793
|
//# sourceMappingURL=auto-init.js.map
|
|
727
|
-
//# sourceMappingURL=auto-init.js.map
|
|
794
|
+
//# sourceMappingURL=auto-init.js.map
|