@rafaelaugusto/jolt 0.1.0-beta.5 → 0.1.0-beta.6

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 (150) hide show
  1. package/README.md +110 -3
  2. package/dist/animate.d.ts +4 -2
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +48 -11
  5. package/dist/animate.js.map +1 -1
  6. package/dist/config.d.ts +22 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +34 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/driver/android.d.ts.map +1 -1
  11. package/dist/driver/android.js +7 -0
  12. package/dist/driver/android.js.map +1 -1
  13. package/dist/driver/index.d.ts +2 -0
  14. package/dist/driver/index.d.ts.map +1 -1
  15. package/dist/driver/index.js.map +1 -1
  16. package/dist/driver/ios-color.js +1 -1
  17. package/dist/driver/ios-color.js.map +1 -1
  18. package/dist/driver/ios-decoration.js +1 -1
  19. package/dist/driver/ios-decoration.js.map +1 -1
  20. package/dist/driver/ios-playback.d.ts +1 -1
  21. package/dist/driver/ios-playback.d.ts.map +1 -1
  22. package/dist/driver/ios-playback.js +14 -0
  23. package/dist/driver/ios-playback.js.map +1 -1
  24. package/dist/driver/ios.d.ts.map +1 -1
  25. package/dist/driver/ios.js +1 -0
  26. package/dist/driver/ios.js.map +1 -1
  27. package/dist/engine.d.ts +16 -1
  28. package/dist/engine.d.ts.map +1 -1
  29. package/dist/engine.js +33 -1
  30. package/dist/engine.js.map +1 -1
  31. package/dist/index.d.ts +11 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +5 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/items.d.ts +20 -0
  36. package/dist/items.d.ts.map +1 -0
  37. package/dist/items.js +109 -0
  38. package/dist/items.js.map +1 -0
  39. package/dist/keyboard.d.ts +17 -0
  40. package/dist/keyboard.d.ts.map +1 -0
  41. package/dist/keyboard.js +116 -0
  42. package/dist/keyboard.js.map +1 -0
  43. package/dist/label.d.ts +7 -0
  44. package/dist/label.d.ts.map +1 -0
  45. package/dist/label.js +60 -0
  46. package/dist/label.js.map +1 -0
  47. package/dist/liquid.d.ts.map +1 -1
  48. package/dist/liquid.js +2 -1
  49. package/dist/liquid.js.map +1 -1
  50. package/dist/loader.d.ts.map +1 -1
  51. package/dist/loader.js +2 -1
  52. package/dist/loader.js.map +1 -1
  53. package/dist/particles.d.ts.map +1 -1
  54. package/dist/particles.js +4 -3
  55. package/dist/particles.js.map +1 -1
  56. package/dist/path.d.ts +12 -0
  57. package/dist/path.d.ts.map +1 -0
  58. package/dist/path.js +90 -0
  59. package/dist/path.js.map +1 -0
  60. package/dist/playback-group.d.ts.map +1 -1
  61. package/dist/playback-group.js +29 -1
  62. package/dist/playback-group.js.map +1 -1
  63. package/dist/press.d.ts.map +1 -1
  64. package/dist/press.js +3 -3
  65. package/dist/press.js.map +1 -1
  66. package/dist/reveal.d.ts.map +1 -1
  67. package/dist/reveal.js +3 -2
  68. package/dist/reveal.js.map +1 -1
  69. package/dist/roll-diff.d.ts +22 -0
  70. package/dist/roll-diff.d.ts.map +1 -0
  71. package/dist/roll-diff.js +36 -0
  72. package/dist/roll-diff.js.map +1 -0
  73. package/dist/roll.d.ts +29 -0
  74. package/dist/roll.d.ts.map +1 -0
  75. package/dist/roll.js +442 -0
  76. package/dist/roll.js.map +1 -0
  77. package/dist/scroll-linked.d.ts +10 -0
  78. package/dist/scroll-linked.d.ts.map +1 -0
  79. package/dist/scroll-linked.js +58 -0
  80. package/dist/scroll-linked.js.map +1 -0
  81. package/dist/sequence.d.ts +10 -5
  82. package/dist/sequence.d.ts.map +1 -1
  83. package/dist/sequence.js +202 -14
  84. package/dist/sequence.js.map +1 -1
  85. package/dist/shimmer.d.ts.map +1 -1
  86. package/dist/shimmer.js +2 -1
  87. package/dist/shimmer.js.map +1 -1
  88. package/dist/svg-path.d.ts +14 -0
  89. package/dist/svg-path.d.ts.map +1 -0
  90. package/dist/svg-path.js +281 -0
  91. package/dist/svg-path.js.map +1 -0
  92. package/dist/symbol-effect.d.ts.map +1 -1
  93. package/dist/symbol-effect.js +4 -3
  94. package/dist/symbol-effect.js.map +1 -1
  95. package/dist/text-layout.d.ts +8 -0
  96. package/dist/text-layout.d.ts.map +1 -1
  97. package/dist/text-layout.js +8 -2
  98. package/dist/text-layout.js.map +1 -1
  99. package/dist/text.d.ts +1 -1
  100. package/dist/text.d.ts.map +1 -1
  101. package/dist/text.js +60 -64
  102. package/dist/text.js.map +1 -1
  103. package/dist/track.d.ts +2 -0
  104. package/dist/track.d.ts.map +1 -1
  105. package/dist/track.js +62 -15
  106. package/dist/track.js.map +1 -1
  107. package/dist/types.d.ts +7 -1
  108. package/dist/types.d.ts.map +1 -1
  109. package/dist/vue/index.d.ts +89 -0
  110. package/dist/vue/index.d.ts.map +1 -0
  111. package/dist/vue/index.js +134 -0
  112. package/dist/vue/index.js.map +1 -0
  113. package/package.json +15 -3
  114. package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFollower.java +91 -0
  115. package/platforms/android/java/org/rafaelaugusto/jolt/NumberRoll.java +190 -0
  116. package/platforms/android/java/org/rafaelaugusto/jolt/TextReveal.java +180 -0
  117. package/platforms/android/proguard-rules.pro +6 -0
  118. package/src/android-plugin.d.ts +64 -0
  119. package/src/animate.ts +80 -30
  120. package/src/config.ts +46 -0
  121. package/src/driver/android.ts +14 -0
  122. package/src/driver/index.ts +2 -0
  123. package/src/driver/ios-color.ts +1 -1
  124. package/src/driver/ios-decoration.ts +1 -1
  125. package/src/driver/ios-playback.ts +15 -1
  126. package/src/driver/ios.ts +2 -0
  127. package/src/engine.ts +47 -2
  128. package/src/index.ts +11 -1
  129. package/src/items.ts +140 -0
  130. package/src/keyboard.ts +132 -0
  131. package/src/label.ts +76 -0
  132. package/src/liquid.ts +2 -1
  133. package/src/loader.ts +2 -1
  134. package/src/particles.ts +4 -4
  135. package/src/path.ts +124 -0
  136. package/src/playback-group.ts +34 -1
  137. package/src/press.ts +3 -5
  138. package/src/reveal.ts +3 -3
  139. package/src/roll-diff.ts +57 -0
  140. package/src/roll.ts +515 -0
  141. package/src/scroll-linked.ts +73 -0
  142. package/src/sequence.ts +199 -14
  143. package/src/shimmer.ts +2 -1
  144. package/src/svg-path.ts +355 -0
  145. package/src/symbol-effect.ts +4 -3
  146. package/src/text-layout.ts +14 -2
  147. package/src/text.ts +62 -81
  148. package/src/track.ts +89 -24
  149. package/src/types.ts +8 -1
  150. package/src/vue/index.ts +189 -0
package/dist/sequence.js CHANGED
@@ -1,11 +1,13 @@
1
+ import { timeScale } from './config.js';
1
2
  import { getDriver } from './driver/index.js';
2
3
  import { isDecorationProperty, validateDecorationTarget } from './decoration.js';
3
4
  import { animate, startingValues, toViews } from './animate.js';
4
- import { arrivalOf, setArrival, stopView } from './engine.js';
5
+ import { arrivalOf, arrivalTimingOf, setArrival, stopView, } from './engine.js';
6
+ import { createClock } from './playback.js';
5
7
  import { writeValue } from './properties.js';
6
8
  /**
7
- * Plays steps one after the other. A step starts once the previous one looks
8
- * done: a spring is close to its target, even if it hasn't fully settled.
9
+ * By default a step starts once the previous one looks done. `at` can overlap
10
+ * that arrival, share the previous start, or select an absolute timeline time.
9
11
  * Views in later steps take their first absolute keyframe right away, so a title
10
12
  * that fades in third doesn't show up before its turn. Relative and null keyframes
11
13
  * read the current value when their step starts.
@@ -13,24 +15,194 @@ import { writeValue } from './properties.js';
13
15
  * ```ts
14
16
  * await sequence([
15
17
  * [logo, 'popIn'],
16
- * [title, 'fadeInUp'],
17
- * [buttons, 'fadeInUp', { stagger: 50 }],
18
+ * [title, 'fadeInUp', { at: '-150' }],
19
+ * [buttons, 'fadeInUp', { stagger: 50, at: '<' }],
18
20
  * ])
19
21
  * ```
20
22
  */
21
23
  export function sequence(steps) {
22
- applyStartingValues(steps);
24
+ const prepared = steps.map((step) => {
25
+ if (typeof step === 'function')
26
+ return { step, position: undefined };
27
+ const [target, animation, options] = step;
28
+ if (typeof options !== 'object' || options === null)
29
+ return { step, position: undefined };
30
+ const { at, ...transition } = options;
31
+ const position = parsePosition(at);
32
+ return { step: [target, animation, transition], position };
33
+ });
34
+ applyStartingValues(prepared.map(({ step }) => step));
35
+ const driver = getDriver();
36
+ const slowdown = 1 / timeScale();
37
+ // Absolute positions share the platform clock, including Android duration scale.
38
+ const clock = prepared.some(({ position }) => typeof position === 'number')
39
+ ? (driver.clock?.(Infinity) ?? createClock(() => driver.now()))
40
+ : undefined;
23
41
  const started = [];
42
+ const cancellations = new Set();
24
43
  let stopped = false;
25
- const arrived = (async () => {
26
- for (const step of steps) {
27
- if (stopped)
28
- return;
29
- const animation = typeof step === 'function' ? step() : animate(...step);
30
- started.push(animation);
31
- await arrivalOf(animation);
44
+ let resolveScheduled;
45
+ let rejectScheduled;
46
+ const scheduled = new Promise((resolve, reject) => {
47
+ resolveScheduled = resolve;
48
+ rejectScheduled = reject;
49
+ });
50
+ let pending = prepared.length;
51
+ const states = prepared.map(({ step, position }) => {
52
+ return {
53
+ step,
54
+ position,
55
+ onStart: new Set(),
56
+ animation: undefined,
57
+ };
58
+ });
59
+ const cancelSchedule = () => {
60
+ for (const cancel of cancellations)
61
+ cancel();
62
+ cancellations.clear();
63
+ clock?.cancel();
64
+ };
65
+ const fail = (error) => {
66
+ if (stopped)
67
+ return;
68
+ stopped = true;
69
+ cancelSchedule();
70
+ states.forEach((state) => state.onStart.clear());
71
+ started.forEach((child) => child.stop());
72
+ rejectScheduled(error);
73
+ };
74
+ const launch = (index) => {
75
+ const state = states[index];
76
+ if (stopped || state.animation)
77
+ return;
78
+ try {
79
+ const step = state.step;
80
+ const child = typeof step === 'function' ? step() : animate(...step);
81
+ state.animation = child;
82
+ started.push(child);
83
+ // Observe setup failures immediately, even while other steps are still
84
+ // scheduled. Nested sequences can reject before this one reaches arrival.
85
+ void child.finished.catch(fail);
86
+ pending--;
87
+ for (const callback of [...state.onStart])
88
+ callback();
89
+ state.onStart.clear();
90
+ if (pending === 0) {
91
+ cancelSchedule();
92
+ resolveScheduled();
93
+ }
32
94
  }
33
- })();
95
+ catch (error) {
96
+ fail(error);
97
+ }
98
+ };
99
+ const wait = (ms, callback) => {
100
+ if (stopped)
101
+ return;
102
+ if (ms <= 0) {
103
+ callback();
104
+ return;
105
+ }
106
+ let cancel = () => { };
107
+ let fired = false;
108
+ const off = driver.after(ms, () => {
109
+ fired = true;
110
+ cancellations.delete(cancel);
111
+ if (!stopped)
112
+ callback();
113
+ });
114
+ cancel = off;
115
+ if (!fired)
116
+ cancellations.add(cancel);
117
+ };
118
+ for (let index = 0; index < states.length; index++) {
119
+ const { position } = states[index];
120
+ const begin = () => launch(index);
121
+ if (typeof position === 'number')
122
+ wait(position * slowdown - clock.time(), begin);
123
+ else if (index === 0)
124
+ wait(typeof position === 'object' ? Math.max(0, position.offset) * slowdown : 0, begin);
125
+ else {
126
+ const previous = states[index - 1];
127
+ const follow = () => {
128
+ if (stopped || !previous.animation)
129
+ return;
130
+ if (position === '<') {
131
+ begin();
132
+ return;
133
+ }
134
+ const offset = (position?.offset ?? 0) * slowdown;
135
+ if (offset < 0) {
136
+ const timing = arrivalTimingOf(previous.animation);
137
+ if (!timing) {
138
+ fail(new TypeError('A negative at offset needs an animate() or decay() arrival forecast.'));
139
+ return;
140
+ }
141
+ let off = () => { };
142
+ let cancelTimer = () => { };
143
+ let fired = false;
144
+ let disposed = false;
145
+ let queued = false;
146
+ const dispose = () => {
147
+ disposed = true;
148
+ off();
149
+ cancelTimer();
150
+ cancellations.delete(dispose);
151
+ };
152
+ const update = () => {
153
+ cancelTimer();
154
+ if (stopped || fired || disposed)
155
+ return;
156
+ const state = timing.read();
157
+ if (!state.arrived && (state.paused || state.remaining === undefined))
158
+ return;
159
+ const remaining = state.arrived ? 0 : state.remaining + offset;
160
+ if (!Number.isFinite(remaining))
161
+ return;
162
+ const fire = () => {
163
+ if (stopped || fired || disposed)
164
+ return;
165
+ fired = true;
166
+ dispose();
167
+ begin();
168
+ };
169
+ if (remaining <= 0)
170
+ fire();
171
+ else {
172
+ const cancel = driver.after(remaining, fire);
173
+ if (disposed)
174
+ cancel();
175
+ else
176
+ cancelTimer = cancel;
177
+ }
178
+ };
179
+ off = timing.subscribe(() => {
180
+ cancelTimer();
181
+ // An interruption can notify from inside another animation's
182
+ // constructor. Start followers after its ownership changes finish.
183
+ if (queued || disposed)
184
+ return;
185
+ queued = true;
186
+ void Promise.resolve().then(() => {
187
+ queued = false;
188
+ update();
189
+ });
190
+ });
191
+ cancellations.add(dispose);
192
+ update();
193
+ }
194
+ else
195
+ void arrivalOf(previous.animation).then(() => wait(offset, begin), fail);
196
+ };
197
+ if (previous.animation)
198
+ follow();
199
+ else
200
+ previous.onStart.add(follow);
201
+ }
202
+ }
203
+ if (pending === 0)
204
+ resolveScheduled();
205
+ const arrived = scheduled.then(() => Promise.all(started.map(arrivalOf)));
34
206
  const finished = arrived.then(async () => {
35
207
  const results = await Promise.all(started.map((animation) => animation.finished));
36
208
  return !stopped && results.length === steps.length && results.every(Boolean);
@@ -38,7 +210,12 @@ export function sequence(steps) {
38
210
  const animation = {
39
211
  finished,
40
212
  stop() {
213
+ if (stopped)
214
+ return;
41
215
  stopped = true;
216
+ cancelSchedule();
217
+ states.forEach((state) => state.onStart.clear());
218
+ resolveScheduled();
42
219
  started.forEach((animation) => animation.stop());
43
220
  },
44
221
  then: (onfulfilled, onrejected) => finished.then(onfulfilled, onrejected),
@@ -46,6 +223,17 @@ export function sequence(steps) {
46
223
  setArrival(animation, arrived);
47
224
  return animation;
48
225
  }
226
+ function parsePosition(at) {
227
+ if (at === undefined || at === '<')
228
+ return at;
229
+ if (typeof at === 'number' && Number.isFinite(at) && at >= 0)
230
+ return at;
231
+ if (typeof at === 'string' &&
232
+ /^[+-](?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i.test(at) &&
233
+ Number.isFinite(Number(at)))
234
+ return { offset: Number(at) };
235
+ throw new RangeError('Sequence at must be a nonnegative finite time, "<", or a signed finite offset.');
236
+ }
49
237
  function applyStartingValues(steps) {
50
238
  const claimed = new Map();
51
239
  for (const step of steps) {
@@ -1 +1 @@
1
- {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shimmer.d.ts","sourceRoot":"","sources":["../src/shimmer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAQD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,IAAI,CAQhF"}
1
+ {"version":3,"file":"shimmer.d.ts","sourceRoot":"","sources":["../src/shimmer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGxC,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAQD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,IAAI,CAQhF"}
package/dist/shimmer.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Application, isIOS } from '@nativescript/core';
2
2
  import { toView } from './animate.js';
3
+ import { reducedMotion } from './config.js';
3
4
  const running = new WeakMap();
4
5
  const key = 'jolt:shimmer';
5
6
  /**
@@ -81,7 +82,7 @@ class Shimmer {
81
82
  if (!native)
82
83
  return;
83
84
  this.observer ??= Application.ios.addNotificationObserver(UIAccessibilityReduceMotionStatusDidChangeNotification, this.update);
84
- if (UIAccessibilityIsReduceMotionEnabled())
85
+ if (reducedMotion())
85
86
  return this.remove();
86
87
  const bounds = native.layer.bounds;
87
88
  if (bounds.size.width <= 0 || bounds.size.height <= 0)
@@ -1 +1 @@
1
- {"version":3,"file":"shimmer.js","sourceRoot":"","sources":["../src/shimmer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shimmer.js","sourceRoot":"","sources":["../src/shimmer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** SVG path geometry in local DIPs. No DOM or platform path API is used. */
2
+ export interface PathPoint {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ export interface PathPose extends PathPoint {
7
+ rotate: number;
8
+ }
9
+ export interface MotionPath {
10
+ readonly length: number;
11
+ at(progress: number): PathPose;
12
+ }
13
+ export declare function parsePath(data: string): MotionPath;
14
+ //# sourceMappingURL=svg-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-path.d.ts","sourceRoot":"","sources":["../src/svg-path.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AACD,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,MAAM,EAAE,MAAM,CAAA;CACf;AAQD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;CAC/B;AAmID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAyFlD"}
@@ -0,0 +1,281 @@
1
+ const LIMIT = 1_000_000;
2
+ const MAX_SEGMENTS = 1024;
3
+ const MAX_VERTICES = 8192;
4
+ const TOLERANCE = 0.025;
5
+ const distance = (a, b) => Math.hypot(b.x - a.x, b.y - a.y);
6
+ const mix = (a, b, t) => ({
7
+ x: a.x + (b.x - a.x) * t,
8
+ y: a.y + (b.y - a.y) * t,
9
+ });
10
+ const checked = (p) => {
11
+ if (![p.x, p.y].every((n) => Number.isFinite(n) && Math.abs(n) <= LIMIT))
12
+ throw new RangeError('Path coordinates must stay within ±1000000 DIPs.');
13
+ return p;
14
+ };
15
+ const unwrap = (angle, reference) => angle + 360 * Math.round((reference - angle) / 360);
16
+ class Scanner {
17
+ text;
18
+ index = 0;
19
+ hasNumber = false;
20
+ constructor(text) {
21
+ this.text = text;
22
+ }
23
+ peek() {
24
+ while (/[\t\n\r ]/.test(this.text[this.index] ?? '\0'))
25
+ this.index++;
26
+ return this.text[this.index];
27
+ }
28
+ command() {
29
+ const value = this.peek();
30
+ this.index++;
31
+ this.hasNumber = false;
32
+ return value;
33
+ }
34
+ number(flag = false) {
35
+ this.peek();
36
+ if (this.text[this.index] === ',') {
37
+ if (!this.hasNumber)
38
+ this.error();
39
+ this.index++;
40
+ this.peek();
41
+ }
42
+ const rest = this.text.slice(this.index);
43
+ const token = flag
44
+ ? /^[01]/.exec(rest)?.[0]
45
+ : /^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?/i.exec(rest)?.[0];
46
+ if (!token)
47
+ this.error();
48
+ const value = Number(token);
49
+ if (!Number.isFinite(value) || Math.abs(value) > LIMIT)
50
+ throw new RangeError('Path numbers must be finite and within ±1000000.');
51
+ this.index += token.length;
52
+ this.hasNumber = true;
53
+ return value;
54
+ }
55
+ error() {
56
+ throw new SyntaxError(`Invalid SVG path at character ${this.index}.`);
57
+ }
58
+ }
59
+ function line(a, b) {
60
+ return { point: (t) => mix(a, b, t), tangent: () => ({ x: b.x - a.x, y: b.y - a.y }) };
61
+ }
62
+ function bezier(points) {
63
+ const evaluate = (values, t) => {
64
+ let row = [...values];
65
+ while (row.length > 1)
66
+ row = row.slice(1).map((p, i) => mix(row[i], p, t));
67
+ return row[0];
68
+ };
69
+ const derivative = points.slice(1).map((p, i) => ({
70
+ x: (p.x - points[i].x) * (points.length - 1),
71
+ y: (p.y - points[i].y) * (points.length - 1),
72
+ }));
73
+ return { point: (t) => evaluate(points, t), tangent: (t) => evaluate(derivative, t) };
74
+ }
75
+ /** Endpoint-to-center conversion: https://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter */
76
+ function arc(a, b, rx, ry, degrees, large, sweep) {
77
+ rx = Math.abs(rx);
78
+ ry = Math.abs(ry);
79
+ if (!rx || !ry || distance(a, b) === 0)
80
+ return line(a, b);
81
+ const phi = ((degrees % 360) * Math.PI) / 180, cos = Math.cos(phi), sin = Math.sin(phi);
82
+ const dx = (a.x - b.x) / 2, dy = (a.y - b.y) / 2;
83
+ const xp = cos * dx + sin * dy, yp = -sin * dx + cos * dy;
84
+ const correction = Math.max(1, Math.hypot(xp / rx, yp / ry));
85
+ rx *= correction;
86
+ ry *= correction;
87
+ const u = xp / rx, v = yp / ry, norm = u * u + v * v;
88
+ const factor = (large === sweep ? -1 : 1) * Math.sqrt(Math.max(0, (1 - norm) / norm));
89
+ const cxp = factor * rx * v, cyp = -factor * ry * u;
90
+ const cx = cos * cxp - sin * cyp + (a.x + b.x) / 2, cy = sin * cxp + cos * cyp + (a.y + b.y) / 2;
91
+ const ux = (xp - cxp) / rx, uy = (yp - cyp) / ry, vx = (-xp - cxp) / rx, vy = (-yp - cyp) / ry;
92
+ const start = Math.atan2(uy, ux);
93
+ let delta = Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);
94
+ if (!sweep && delta > 0)
95
+ delta -= 2 * Math.PI;
96
+ if (sweep && delta < 0)
97
+ delta += 2 * Math.PI;
98
+ if (![cx, cy, rx, ry, start, delta].every(Number.isFinite))
99
+ throw new RangeError('Path arc exceeds finite geometry limits.');
100
+ return {
101
+ point(t) {
102
+ if (t === 0)
103
+ return a;
104
+ if (t === 1)
105
+ return b;
106
+ const angle = start + t * delta, x = rx * Math.cos(angle), y = ry * Math.sin(angle);
107
+ return checked({ x: cx + cos * x - sin * y, y: cy + sin * x + cos * y });
108
+ },
109
+ tangent(t) {
110
+ const angle = start + t * delta, x = -rx * Math.sin(angle) * delta, y = ry * Math.cos(angle) * delta;
111
+ return { x: cos * x - sin * y, y: sin * x + cos * y };
112
+ },
113
+ };
114
+ }
115
+ export function parsePath(data) {
116
+ if (typeof data !== 'string' || !data.trim())
117
+ throw new TypeError('Path must be a nonempty SVG path string.');
118
+ if (data.length > 100_000)
119
+ throw new RangeError('SVG path is too long (100000 characters maximum).');
120
+ const scanner = new Scanner(data);
121
+ const segments = [];
122
+ let current = { x: 0, y: 0 }, first;
123
+ let command = '', previous = '', control = current;
124
+ const add = (segment, end) => {
125
+ if (segments.length >= MAX_SEGMENTS)
126
+ throw new RangeError('SVG path has too many segments (1024 maximum).');
127
+ segments.push(segment);
128
+ current = checked(end);
129
+ };
130
+ while (scanner.peek() !== undefined) {
131
+ const token = scanner.peek();
132
+ if (/[a-z]/i.test(token)) {
133
+ command = scanner.command();
134
+ if (!/[mlhvcsqtaz]/i.test(command))
135
+ scanner.error();
136
+ }
137
+ else if (!command)
138
+ scanner.error();
139
+ const upper = command.toUpperCase(), relative = command !== upper, origin = current;
140
+ const point = () => checked({
141
+ x: scanner.number() + (relative ? origin.x : 0),
142
+ y: scanner.number() + (relative ? origin.y : 0),
143
+ });
144
+ if (!first && upper !== 'M')
145
+ throw new SyntaxError('SVG path must start with M or m.');
146
+ if (upper === 'M') {
147
+ if (first)
148
+ throw new SyntaxError('Motion paths support one continuous subpath; use a single M command.');
149
+ first = current = point();
150
+ command = relative ? 'l' : 'L';
151
+ }
152
+ else if (upper === 'Z') {
153
+ add(line(current, first), first);
154
+ command = '';
155
+ }
156
+ else if (upper === 'L') {
157
+ const end = point();
158
+ add(line(current, end), end);
159
+ }
160
+ else if (upper === 'H' || upper === 'V') {
161
+ const n = scanner.number(), end = checked(upper === 'H'
162
+ ? { x: n + (relative ? origin.x : 0), y: current.y }
163
+ : { x: current.x, y: n + (relative ? origin.y : 0) });
164
+ add(line(current, end), end);
165
+ }
166
+ else if (upper === 'C' || upper === 'S') {
167
+ const c1 = upper === 'C'
168
+ ? point()
169
+ : /[CS]/.test(previous)
170
+ ? { x: 2 * current.x - control.x, y: 2 * current.y - control.y }
171
+ : current;
172
+ const c2 = point(), end = point();
173
+ checked(c1);
174
+ add(bezier([current, c1, c2, end]), end);
175
+ control = c2;
176
+ }
177
+ else if (upper === 'Q' || upper === 'T') {
178
+ const c = upper === 'Q'
179
+ ? point()
180
+ : /[QT]/.test(previous)
181
+ ? { x: 2 * current.x - control.x, y: 2 * current.y - control.y }
182
+ : current;
183
+ const end = point();
184
+ checked(c);
185
+ add(bezier([current, c, end]), end);
186
+ control = c;
187
+ }
188
+ else if (upper === 'A') {
189
+ const rx = scanner.number(), ry = scanner.number(), rotation = scanner.number(), large = scanner.number(true), sweep = scanner.number(true), end = point();
190
+ add(arc(current, end, rx, ry, rotation, !!large, !!sweep), end);
191
+ }
192
+ previous = upper;
193
+ }
194
+ return measure(first, segments);
195
+ }
196
+ function measure(first, segments) {
197
+ const vertices = [{ ...first, segment: -1, t: 0, distance: 0, heading: 0 }];
198
+ const heading = (segment, t, fallback) => {
199
+ let v = segment.tangent(t);
200
+ if (Math.hypot(v.x, v.y) < 1e-9) {
201
+ const a = segment.point(Math.max(0, t - 1e-5)), b = segment.point(Math.min(1, t + 1e-5));
202
+ v = { x: b.x - a.x, y: b.y - a.y };
203
+ if (Math.hypot(v.x, v.y) < 1e-9)
204
+ v = fallback;
205
+ }
206
+ return (Math.atan2(v.y, v.x) * 180) / Math.PI;
207
+ };
208
+ const append = (p, index, t) => {
209
+ const last = vertices.at(-1), length = distance(last, p);
210
+ if (!length)
211
+ return;
212
+ if (vertices.length >= MAX_VERTICES)
213
+ throw new RangeError('Path needs too many geometry samples (8192 maximum).');
214
+ const direction = { x: p.x - last.x, y: p.y - last.y };
215
+ const start = heading(segments[index], last.segment === index ? last.t : 0, direction);
216
+ if (vertices.length === 1)
217
+ last.heading = start;
218
+ const angle = unwrap(heading(segments[index], t, direction), unwrap(start, last.heading));
219
+ vertices.push({
220
+ ...checked(p),
221
+ segment: index,
222
+ t,
223
+ distance: last.distance + length,
224
+ heading: angle,
225
+ });
226
+ };
227
+ segments.forEach((segment, index) => {
228
+ const flatten = (t0, t1, a, b, depth) => {
229
+ const span = t1 - t0, q1 = segment.point(t0 + span * 0.25), mid = segment.point(t0 + span * 0.5), q3 = segment.point(t0 + span * 0.75);
230
+ const poly = distance(a, q1) + distance(q1, mid) + distance(mid, q3) + distance(q3, b), chord = distance(a, b);
231
+ const deviation = Math.max(distance(q1, mix(a, b, 0.25)), distance(mid, mix(a, b, 0.5)), distance(q3, mix(a, b, 0.75)));
232
+ const directions = [
233
+ t0,
234
+ t0 + span * 0.25,
235
+ t0 + span * 0.5,
236
+ t0 + span * 0.75,
237
+ t1,
238
+ ].map((t) => segment.tangent(t));
239
+ const turn = directions.some((v, i) => {
240
+ const before = directions[i - 1];
241
+ return (before &&
242
+ Math.hypot(v.x, v.y) > 1e-12 &&
243
+ Math.hypot(before.x, before.y) > 1e-12 &&
244
+ Math.abs(Math.atan2(before.x * v.y - before.y * v.x, before.x * v.x + before.y * v.y)) >
245
+ Math.PI / 8);
246
+ });
247
+ const flat = poly - chord <= TOLERANCE && deviation <= TOLERANCE;
248
+ if (flat && (!turn || depth >= 18)) {
249
+ append(b, index, t1);
250
+ return;
251
+ }
252
+ if (depth >= 18)
253
+ throw new RangeError('Path geometry exceeds the sampling precision limit.');
254
+ flatten(t0, (t0 + t1) / 2, a, mid, depth + 1);
255
+ flatten((t0 + t1) / 2, t1, mid, b, depth + 1);
256
+ };
257
+ flatten(0, 1, segment.point(0), segment.point(1), 0);
258
+ });
259
+ const length = vertices.at(-1).distance;
260
+ return {
261
+ length,
262
+ at(progress) {
263
+ if (!length)
264
+ return { ...first, rotate: 0 };
265
+ const target = Math.max(0, Math.min(1, progress)) * length;
266
+ let low = 1, high = vertices.length - 1;
267
+ while (low < high) {
268
+ const middle = (low + high) >>> 1;
269
+ if (vertices[middle].distance <= target)
270
+ low = middle + 1;
271
+ else
272
+ high = middle;
273
+ }
274
+ const b = vertices[low], a = vertices[low - 1], fraction = Math.max(0, Math.min(1, (target - a.distance) / (b.distance - a.distance)));
275
+ const point = mix(a, b, fraction), t0 = a.segment === b.segment ? a.t : 0, t = t0 + (b.t - t0) * fraction;
276
+ const angle = heading(segments[b.segment], t, { x: b.x - a.x, y: b.y - a.y });
277
+ return { ...point, rotate: unwrap(angle, b.heading) };
278
+ },
279
+ };
280
+ }
281
+ //# sourceMappingURL=svg-path.js.map