@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
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 = frozenStrategy === "normalized" ? sampleT / frozenA.period * frozenB.period : sampleT;
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 = _morphStrategy === "normalized" ? sampleT / curve.period * morphCurveB.period : sampleT;
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, maxX = first.x, minY = first.y, maxY = first.y;
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 artemis2(t, _time, _params) {
547
- const a = 0.35, b = 0.15, ox = 0.175;
548
- const s = Math.sin(t), c = Math.cos(t);
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
- function astroid(t, _time, _params) {
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
- function deltoid(t, _time, _params) {
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
- function rose5(t, _time, _params) {
584
- const r = Math.cos(5 * t);
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: r * Math.cos(t),
587
- y: r * Math.sin(t)
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
- function rose3(t, _time, _params) {
591
- const r = Math.cos(3 * t);
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: r * Math.cos(t),
594
- y: r * Math.sin(t)
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 lissajous32(t, time, _params) {
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
- function lissajous43(t, time, _params) {
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
- function epicycloid3(t, _time, _params) {
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: 4 * Math.cos(t) - Math.cos(4 * t),
614
- y: 4 * Math.sin(t) - Math.sin(4 * t)
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
- function lame(t, time, _params) {
618
- const p = 1.75 + 1.25 * Math.sin(time * 0.48);
619
- const c = Math.cos(t), s = Math.sin(t);
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: Math.sign(c) * Math.pow(Math.abs(c), p),
622
- y: Math.sign(s) * Math.pow(Math.abs(s), p)
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
- name: "Artemis II",
628
- fn: artemis2,
629
- period: TWO_PI2,
630
- speed: 0.7
631
- },
632
- epitrochoid7: {
633
- name: "Epitrochoid",
634
- fn: epitrochoid7,
635
- period: TWO_PI2,
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", init);
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