@rafaelaugusto/jolt 0.1.0-beta.13 → 0.1.0-beta.14

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 (75) hide show
  1. package/README.md +6 -6
  2. package/dist/driver/android-gradient.d.ts.map +1 -1
  3. package/dist/driver/android-gradient.js +11 -1
  4. package/dist/driver/android-gradient.js.map +1 -1
  5. package/dist/driver/android-particles.d.ts +6 -0
  6. package/dist/driver/android-particles.d.ts.map +1 -0
  7. package/dist/driver/android-particles.js +93 -0
  8. package/dist/driver/android-particles.js.map +1 -0
  9. package/dist/driver/ios-gradient.d.ts.map +1 -1
  10. package/dist/driver/ios-gradient.js +24 -2
  11. package/dist/driver/ios-gradient.js.map +1 -1
  12. package/dist/engine.d.ts.map +1 -1
  13. package/dist/engine.js +9 -3
  14. package/dist/engine.js.map +1 -1
  15. package/dist/gradient-binding.d.ts +38 -0
  16. package/dist/gradient-binding.d.ts.map +1 -0
  17. package/dist/gradient-binding.js +128 -0
  18. package/dist/gradient-binding.js.map +1 -0
  19. package/dist/gradient.d.ts +19 -4
  20. package/dist/gradient.d.ts.map +1 -1
  21. package/dist/gradient.js +331 -70
  22. package/dist/gradient.js.map +1 -1
  23. package/dist/haptics.d.ts.map +1 -1
  24. package/dist/haptics.js +101 -28
  25. package/dist/haptics.js.map +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/motion-scope.d.ts +1 -1
  30. package/dist/motion-scope.d.ts.map +1 -1
  31. package/dist/motion-scope.js +8 -1
  32. package/dist/motion-scope.js.map +1 -1
  33. package/dist/motion-value.d.ts +17 -0
  34. package/dist/motion-value.d.ts.map +1 -1
  35. package/dist/motion-value.js +38 -0
  36. package/dist/motion-value.js.map +1 -1
  37. package/dist/native/index.d.ts +1 -0
  38. package/dist/native/index.d.ts.map +1 -1
  39. package/dist/native/index.js +1 -0
  40. package/dist/native/index.js.map +1 -1
  41. package/dist/particles.d.ts +5 -2
  42. package/dist/particles.d.ts.map +1 -1
  43. package/dist/particles.js +16 -10
  44. package/dist/particles.js.map +1 -1
  45. package/dist/scene-appearance.d.ts +14 -0
  46. package/dist/scene-appearance.d.ts.map +1 -0
  47. package/dist/scene-appearance.js +68 -0
  48. package/dist/scene-appearance.js.map +1 -0
  49. package/dist/types.d.ts +1 -1
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/vue/index.d.ts.map +1 -1
  52. package/dist/vue/index.js +28 -5
  53. package/dist/vue/index.js.map +1 -1
  54. package/package.json +1 -1
  55. package/platforms/android/java/org/rafaelaugusto/jolt/GradientLayer.java +30 -1
  56. package/platforms/android/java/org/rafaelaugusto/jolt/ParticleEmitter.java +192 -0
  57. package/platforms/android/java/org/rafaelaugusto/jolt/ParticleSimulation.java +114 -0
  58. package/platforms/android/proguard-rules.pro +2 -0
  59. package/src/android-plugin.d.ts +56 -0
  60. package/src/driver/android-gradient.ts +8 -1
  61. package/src/driver/android-particles.ts +118 -0
  62. package/src/driver/ios-gradient.ts +24 -2
  63. package/src/engine.ts +10 -4
  64. package/src/gradient-binding.ts +158 -0
  65. package/src/gradient.ts +376 -91
  66. package/src/haptics.ts +106 -28
  67. package/src/index.ts +1 -0
  68. package/src/ios-plugin.d.ts +7 -0
  69. package/src/motion-scope.ts +9 -2
  70. package/src/motion-value.ts +43 -0
  71. package/src/native/index.ts +7 -0
  72. package/src/particles.ts +18 -17
  73. package/src/scene-appearance.ts +92 -0
  74. package/src/types.ts +1 -1
  75. package/src/vue/index.ts +29 -5
@@ -0,0 +1,128 @@
1
+ import { parseColor } from './color.js';
2
+ import { reducedMotion } from './config.js';
3
+ import { isDerived, valueSource, } from './motion-value.js';
4
+ export function cloneFrame(frame) {
5
+ return { ...frame, colors: [...frame.colors], stops: [...frame.stops] };
6
+ }
7
+ export function put(frame, key, value) {
8
+ if (key.startsWith('color:'))
9
+ frame.colors[Number(key.slice(6))] = value;
10
+ else if (key.startsWith('stop:'))
11
+ frame.stops[Number(key.slice(5))] = value;
12
+ else
13
+ frame[key] = value;
14
+ }
15
+ export function take(frame, key) {
16
+ if (key.startsWith('color:'))
17
+ return frame.colors[Number(key.slice(6))];
18
+ if (key.startsWith('stop:'))
19
+ return frame.stops[Number(key.slice(5))];
20
+ return frame[key];
21
+ }
22
+ /** Validate structural/static inputs before touching any existing owner. */
23
+ export function gradientPatch(values, count) {
24
+ if (!values || typeof values !== 'object' || Array.isArray(values))
25
+ throw new TypeError('Gradient values must be an object.');
26
+ const patch = new Map();
27
+ const add = (key, value, color = false) => {
28
+ if (value === undefined)
29
+ return;
30
+ if (isDerived(value))
31
+ patch.set(key, valueSource(value, color));
32
+ else if (color)
33
+ patch.set(key, parseColor(value));
34
+ else {
35
+ if (typeof value !== 'number' || !Number.isFinite(value))
36
+ throw new RangeError(`Invalid gradient ${key}: ${String(value)}.`);
37
+ if (key === 'radius' && value < 0)
38
+ throw new RangeError('Gradient radius must not be negative.');
39
+ if (key.startsWith('stop:') && (value < 0 || value > 1))
40
+ throw new RangeError('Gradient stops must be from 0 to 1.');
41
+ patch.set(key, value);
42
+ }
43
+ };
44
+ if (values.colors !== undefined) {
45
+ if (!Array.isArray(values.colors) ||
46
+ values.colors.length < 2 ||
47
+ values.colors.length > 8)
48
+ throw new RangeError('A gradient needs between two and eight colors.');
49
+ count = values.colors.length;
50
+ Array.from(values.colors).forEach((value, i) => {
51
+ if (value === undefined)
52
+ throw new TypeError('Gradient colors cannot be empty.');
53
+ add(`color:${i}`, value, true);
54
+ });
55
+ }
56
+ if (values.stops !== undefined) {
57
+ if (!Array.isArray(values.stops) || values.stops.length !== count)
58
+ throw new RangeError('Gradient stops need one value per color.');
59
+ Array.from(values.stops).forEach((value, i) => {
60
+ if (value === undefined)
61
+ throw new TypeError('Gradient stops cannot be empty.');
62
+ add(`stop:${i}`, value);
63
+ });
64
+ if (values.stops.every((value) => typeof value === 'number') &&
65
+ values.stops.some((value, i) => i > 0 && value < values.stops[i - 1]))
66
+ throw new RangeError('Gradient stops must be ordered without going back.');
67
+ }
68
+ else if (values.colors !== undefined) {
69
+ // Preserve the concrete API's rule: replacing colors resets unspecified stops.
70
+ values.colors.forEach((_, i) => patch.set(`stop:${i}`, i / (count - 1)));
71
+ }
72
+ add('angle', values.angle);
73
+ if (values.center !== undefined &&
74
+ (!values.center || typeof values.center !== 'object'))
75
+ throw new TypeError('Gradient center needs x/y components.');
76
+ add('x', values.center?.x);
77
+ add('y', values.center?.y);
78
+ add('radius', values.radius);
79
+ return patch;
80
+ }
81
+ /** Native windows share a source clock. Only setup/commands/window boundaries enter JS. */
82
+ export function gradientProgram(base, bindings) {
83
+ const roots = new Map();
84
+ for (const value of bindings.values())
85
+ if (typeof value !== 'number' && !roots.has(value.identity))
86
+ roots.set(value.identity, value.snapshot());
87
+ const moving = [...roots.values()].filter((state) => state.running);
88
+ const remaining = Math.max(base.remaining, ...moving.map((state) => state.track.end - state.elapsed), 0);
89
+ const duration = Math.min(4000, remaining);
90
+ const anchor = moving[0];
91
+ const elapsed = anchor
92
+ ? () => Math.max(0, anchor.time() - anchor.elapsed)
93
+ : base.elapsed;
94
+ const reduced = reducedMotion();
95
+ const at = (delta) => {
96
+ const frame = cloneFrame(base.at(delta));
97
+ for (const [key, source] of bindings) {
98
+ if (typeof source === 'number') {
99
+ put(frame, key, source);
100
+ continue;
101
+ }
102
+ const state = roots.get(source.identity);
103
+ const geometry = key === 'angle' || key === 'x' || key === 'y' || key === 'radius';
104
+ const input = reduced && geometry && state.running
105
+ ? state.track.to
106
+ : state.running
107
+ ? state.track.valueAt(state.elapsed + delta)
108
+ : state.value;
109
+ const value = source.read(input);
110
+ if (!Number.isFinite(value))
111
+ throw new RangeError(`Nonfinite gradient binding: ${key}.`);
112
+ put(frame, key, value);
113
+ }
114
+ // Project the complete vector without sorting colors. Spring overshoot may
115
+ // merge adjacent stops; their identity and order are retained.
116
+ frame.radius = Math.max(0, frame.radius);
117
+ frame.stops = frame.stops.map((stop) => Math.min(1, Math.max(0, stop)));
118
+ for (let i = 1; i < frame.stops.length; i++)
119
+ frame.stops[i] = Math.max(frame.stops[i - 1], frame.stops[i]);
120
+ return frame;
121
+ };
122
+ const current = at(0);
123
+ const steps = Math.max(1, Math.ceil((duration * 60) / 1000));
124
+ const times = Array.from({ length: steps + 1 }, (_, i) => i / steps);
125
+ const frames = times.map((time) => at(time * duration));
126
+ return { current, frames, times, duration, remaining, elapsed, at };
127
+ }
128
+ //# sourceMappingURL=gradient-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient-binding.js","sourceRoot":"","sources":["../src/gradient-binding.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import { type ColorValue } from './color.js';
3
3
  import type { Animation } from './engine.js';
4
4
  import { type SpringName, type Transition } from './transition.js';
5
5
  import type { Target } from './types.js';
6
+ import { type GradientBindings, type GradientPatch } from './gradient-binding.js';
7
+ export type { GradientBindings } from './gradient-binding.js';
6
8
  export type GradientType = 'linear' | 'radial' | 'conic';
7
9
  export interface GradientValues {
8
10
  /** Two to eight colors. Animating keeps the count. */
@@ -19,9 +21,9 @@ export interface GradientValues {
19
21
  /** `radial`: the radius, in fractions of the view's shorter side. */
20
22
  radius?: number;
21
23
  }
22
- export interface GradientOptions extends GradientValues {
24
+ export interface GradientOptions extends GradientBindings {
23
25
  type: GradientType;
24
- colors: readonly ColorValue[];
26
+ colors: NonNullable<GradientBindings['colors']>;
25
27
  }
26
28
  export interface Gradient {
27
29
  readonly type: GradientType;
@@ -29,8 +31,16 @@ export interface Gradient {
29
31
  animate(values: GradientValues, transition?: Transition | SpringName): Animation;
30
32
  /** Applies values at once, stopping the animation in progress. */
31
33
  set(values: GradientValues): void;
32
- /** Stops the animation in progress where it is. */
34
+ /** Holds the current frame and detaches all gradient bindings; sources keep running. */
33
35
  stop(): void;
36
+ /** Attach mixed static/value components. Cleanup holds their current values; newer owners survive. */
37
+ bind(values: GradientBindings): () => void;
38
+ /** Whether this gradient is explicitly suspended (independent of app/view lifecycle). */
39
+ readonly suspended: boolean;
40
+ /** Hold and detach source subscriptions until resume; source playback is not paused. */
41
+ suspend(): void;
42
+ /** Catch up to current source positions and reattach once. */
43
+ resume(): void;
34
44
  /** Takes the gradient off the view. */
35
45
  remove(): void;
36
46
  }
@@ -54,6 +64,7 @@ export interface GradientPainter {
54
64
  /** Plays sampled frames natively; `onEnd(false)` when cancelled. */
55
65
  play(frames: readonly GradientFrame[], times: readonly number[], timing: GradientTiming, onEnd: (finished: boolean) => void): {
56
66
  cancel(): void;
67
+ control?(elapsed: number, paused: boolean): void;
57
68
  };
58
69
  remove(): void;
59
70
  }
@@ -69,6 +80,11 @@ export declare function setGradientPainter(next: PainterFactory | undefined): vo
69
80
  * ```
70
81
  */
71
82
  export declare function gradient(target: Target, options: GradientOptions): Gradient;
83
+ /** Validate declarative replacements before removing their current native layer. */
84
+ export declare function prepareGradient(options: GradientOptions): {
85
+ frame: GradientFrame;
86
+ patch: GradientPatch;
87
+ };
72
88
  /** One frame between two states. Geometry follows the curve, overshoot included; colors and stops stay between their ends. */
73
89
  export declare function mix(from: GradientFrame, to: GradientFrame, progress: number, reduced?: boolean): GradientFrame;
74
90
  /**
@@ -86,5 +102,4 @@ export declare function gradientPoints(type: GradientType, frame: GradientFrame,
86
102
  y: number;
87
103
  };
88
104
  };
89
- export {};
90
105
  //# sourceMappingURL=gradient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../src/gradient.ts"],"names":[],"mappings":"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"}