@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.
Files changed (81) hide show
  1. package/dist/auto-init.cjs +206 -139
  2. package/dist/auto-init.cjs.map +1 -1
  3. package/dist/auto-init.d.cts +1 -2
  4. package/dist/auto-init.d.ts +1 -2
  5. package/dist/auto-init.js +205 -138
  6. package/dist/auto-init.js.map +1 -1
  7. package/dist/curves/artemis2.cjs +26 -0
  8. package/dist/curves/artemis2.cjs.map +1 -0
  9. package/dist/curves/artemis2.d.cts +9 -0
  10. package/dist/curves/artemis2.d.ts +9 -0
  11. package/dist/curves/artemis2.js +24 -0
  12. package/dist/curves/artemis2.js.map +1 -0
  13. package/dist/curves/astroid.cjs +22 -0
  14. package/dist/curves/astroid.cjs.map +1 -0
  15. package/dist/curves/astroid.d.cts +9 -0
  16. package/dist/curves/astroid.d.ts +9 -0
  17. package/dist/curves/astroid.js +20 -0
  18. package/dist/curves/astroid.js.map +1 -0
  19. package/dist/curves/deltoid.cjs +20 -0
  20. package/dist/curves/deltoid.cjs.map +1 -0
  21. package/dist/curves/deltoid.d.cts +9 -0
  22. package/dist/curves/deltoid.d.ts +9 -0
  23. package/dist/curves/deltoid.js +18 -0
  24. package/dist/curves/deltoid.js.map +1 -0
  25. package/dist/curves/epicycloid3.cjs +20 -0
  26. package/dist/curves/epicycloid3.cjs.map +1 -0
  27. package/dist/curves/epicycloid3.d.cts +9 -0
  28. package/dist/curves/epicycloid3.d.ts +9 -0
  29. package/dist/curves/epicycloid3.js +18 -0
  30. package/dist/curves/epicycloid3.js.map +1 -0
  31. package/dist/curves/epitrochoid7.cjs +29 -0
  32. package/dist/curves/epitrochoid7.cjs.map +1 -0
  33. package/dist/curves/epitrochoid7.d.cts +9 -0
  34. package/dist/curves/epitrochoid7.d.ts +9 -0
  35. package/dist/curves/epitrochoid7.js +27 -0
  36. package/dist/curves/epitrochoid7.js.map +1 -0
  37. package/dist/curves/index.cjs +206 -0
  38. package/dist/curves/index.cjs.map +1 -0
  39. package/dist/curves/index.d.cts +19 -0
  40. package/dist/curves/index.d.ts +19 -0
  41. package/dist/curves/index.js +206 -0
  42. package/dist/curves/index.js.map +1 -0
  43. package/dist/curves/lame.cjs +24 -0
  44. package/dist/curves/lame.cjs.map +1 -0
  45. package/dist/curves/lame.d.cts +9 -0
  46. package/dist/curves/lame.d.ts +9 -0
  47. package/dist/curves/lame.js +22 -0
  48. package/dist/curves/lame.js.map +1 -0
  49. package/dist/curves/lissajous32.cjs +22 -0
  50. package/dist/curves/lissajous32.cjs.map +1 -0
  51. package/dist/curves/lissajous32.d.cts +9 -0
  52. package/dist/curves/lissajous32.d.ts +9 -0
  53. package/dist/curves/lissajous32.js +20 -0
  54. package/dist/curves/lissajous32.js.map +1 -0
  55. package/dist/curves/lissajous43.cjs +22 -0
  56. package/dist/curves/lissajous43.cjs.map +1 -0
  57. package/dist/curves/lissajous43.d.cts +9 -0
  58. package/dist/curves/lissajous43.d.ts +9 -0
  59. package/dist/curves/lissajous43.js +20 -0
  60. package/dist/curves/lissajous43.js.map +1 -0
  61. package/dist/curves/rose3.cjs +21 -0
  62. package/dist/curves/rose3.cjs.map +1 -0
  63. package/dist/curves/rose3.d.cts +9 -0
  64. package/dist/curves/rose3.d.ts +9 -0
  65. package/dist/curves/rose3.js +19 -0
  66. package/dist/curves/rose3.js.map +1 -0
  67. package/dist/curves/rose5.cjs +21 -0
  68. package/dist/curves/rose5.cjs.map +1 -0
  69. package/dist/curves/rose5.d.cts +9 -0
  70. package/dist/curves/rose5.d.ts +9 -0
  71. package/dist/curves/rose5.js +19 -0
  72. package/dist/curves/rose5.js.map +1 -0
  73. package/dist/index.cjs +208 -139
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.d.cts +64 -233
  76. package/dist/index.d.ts +64 -233
  77. package/dist/index.js +215 -139
  78. package/dist/index.js.map +1 -1
  79. package/dist/types-DX8VfIVK.d.cts +226 -0
  80. package/dist/types-DX8VfIVK.d.ts +226 -0
  81. package/package.json +11 -1
@@ -1,4 +1,4 @@
1
- 'use strict';
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 = frozenStrategy === "normalized" ? sampleT / frozenA.period * frozenB.period : sampleT;
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 = _morphStrategy === "normalized" ? sampleT / curve.period * morphCurveB.period : sampleT;
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, maxX = first.x, minY = first.y, maxY = first.y;
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 artemis2(t, _time, _params) {
549
- const a = 0.35, b = 0.15, ox = 0.175;
550
- const s = Math.sin(t), c = Math.cos(t);
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
- function astroid(t, _time, _params) {
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
- function deltoid(t, _time, _params) {
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
- function rose5(t, _time, _params) {
586
- const r = Math.cos(5 * t);
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: r * Math.cos(t),
589
- y: r * Math.sin(t)
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
- function rose3(t, _time, _params) {
593
- const r = Math.cos(3 * t);
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: r * Math.cos(t),
596
- y: r * Math.sin(t)
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 lissajous32(t, time, _params) {
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
- function lissajous43(t, time, _params) {
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
- function epicycloid3(t, _time, _params) {
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: 4 * Math.cos(t) - Math.cos(4 * t),
616
- y: 4 * Math.sin(t) - Math.sin(4 * t)
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
- function lame(t, time, _params) {
620
- const p = 1.75 + 1.25 * Math.sin(time * 0.48);
621
- const c = Math.cos(t), s = Math.sin(t);
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: Math.sign(c) * Math.pow(Math.abs(c), p),
624
- y: Math.sign(s) * Math.pow(Math.abs(s), p)
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
- name: "Artemis II",
630
- fn: artemis2,
631
- period: TWO_PI2,
632
- speed: 0.7
633
- },
634
- epitrochoid7: {
635
- name: "Epitrochoid",
636
- fn: epitrochoid7,
637
- period: TWO_PI2,
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", init);
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