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