motionary 6.7.0 → 6.8.0

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.
@@ -0,0 +1,261 @@
1
+ import { registerEffects } from '../chunks/registry-D23neB4M.js';
2
+ import { c as canvasBackground } from '../chunks/generative-2LhxG5BJ.js';
3
+ import { r as rand } from '../chunks/shared-CkKHWrtJ.js';
4
+ import '../chunks/base-DchG4q_S.js';
5
+
6
+ const bg = (name, description, defaults, spec) => ({
7
+ name,
8
+ kind: 'background',
9
+ description,
10
+ reduced: 'run',
11
+ defaults: { speed: 1, quality: 1, ...defaults },
12
+ run: (el, o, ctx) => {
13
+ const stop = canvasBackground(el, ctx, spec, o);
14
+ ctx.onCleanup(stop);
15
+ return stop;
16
+ },
17
+ });
18
+ const step = (state, t) => {
19
+ const dt = state.last ? Math.min(0.05, t - state.last) : 0;
20
+ state.last = t;
21
+ return dt;
22
+ };
23
+ /** Mix two `[r,g,b]` colours. */
24
+ const mix = (a, b, k) => `rgb(${a.map((v, i) => Math.round(v + (b[i] - v) * k)).join(',')})`;
25
+ /** Sky colours (top, bottom) for an hour 0–24. */
26
+ function skyAt(hour) {
27
+ const keys = [
28
+ [0, [8, 10, 30], [22, 26, 60]],
29
+ [5, [30, 27, 75], [250, 140, 110]],
30
+ [7, [90, 160, 230], [255, 210, 160]],
31
+ [12, [40, 130, 230], [170, 215, 255]],
32
+ [17, [70, 120, 200], [255, 190, 130]],
33
+ [19, [60, 40, 110], [250, 110, 90]],
34
+ [21, [12, 14, 40], [40, 36, 90]],
35
+ [24, [8, 10, 30], [22, 26, 60]],
36
+ ];
37
+ const h = ((hour % 24) + 24) % 24;
38
+ let i = 0;
39
+ while (i < keys.length - 2 && keys[i + 1][0] <= h)
40
+ i++;
41
+ const [h0, t0, b0] = keys[i];
42
+ const [h1, t1, b1] = keys[i + 1];
43
+ const k = (h - h0) / (h1 - h0 || 1);
44
+ return [mix(t0, t1, k), mix(b0, b1, k)];
45
+ }
46
+ const WEATHER_FX = [
47
+ bg('rain-glass', 'Droplets on a window pane grow and run down, leaving trails (Canvas 2D).', { count: 70, tint: 'rgba(200,225,255,.55)' }, {
48
+ init: (w, h, o) => ({ d: Array.from({ length: o.count }, () => ({ x: Math.random() * w, y: Math.random() * h, r: rand(1, 3.2), v: 0, trail: [] })) }),
49
+ draw: ({ ctx, w, h, t, state, o }) => {
50
+ const dt = step(state, t) * o.speed;
51
+ ctx.clearRect(0, 0, w, h);
52
+ ctx.fillStyle = 'rgba(30,50,80,.12)';
53
+ ctx.fillRect(0, 0, w, h);
54
+ for (const d of state.d) {
55
+ if (d.r > 2.6 && Math.random() < dt * 0.6)
56
+ d.v = rand(40, 110);
57
+ if (d.v) {
58
+ d.y += d.v * dt;
59
+ d.x += Math.sin(d.y * 0.05) * 0.3;
60
+ d.trail.push([d.x, d.y]);
61
+ if (d.trail.length > 18)
62
+ d.trail.shift();
63
+ if (d.y > h + 6)
64
+ Object.assign(d, { y: -4, x: Math.random() * w, r: rand(1, 2.4), v: 0, trail: [] });
65
+ }
66
+ else
67
+ d.r = Math.min(3.4, d.r + dt * 0.25);
68
+ if (d.trail.length > 1) {
69
+ ctx.strokeStyle = 'rgba(220,235,255,.25)';
70
+ ctx.lineWidth = d.r * 0.7;
71
+ ctx.beginPath();
72
+ d.trail.forEach(([x, y], i) => (i ? ctx.lineTo(x, y) : ctx.moveTo(x, y)));
73
+ ctx.stroke();
74
+ }
75
+ const g = ctx.createRadialGradient(d.x - d.r * 0.3, d.y - d.r * 0.4, 0, d.x, d.y, d.r * 1.4);
76
+ g.addColorStop(0, 'rgba(255,255,255,.9)');
77
+ g.addColorStop(1, o.tint);
78
+ ctx.fillStyle = g;
79
+ ctx.beginPath();
80
+ ctx.ellipse(d.x, d.y, d.r, d.r * 1.15, 0, 0, Math.PI * 2);
81
+ ctx.fill();
82
+ }
83
+ },
84
+ }),
85
+ bg('snowfall', 'Snowflakes drift down and pile up along the bottom edge (Canvas 2D).', { count: 90, pile: 18, color: '#ffffff' }, {
86
+ init: (w, h, o) => ({ f: Array.from({ length: o.count }, () => ({ x: Math.random() * w, y: Math.random() * h, r: rand(1, 3.4), ph: rand(0, 6.3) })), pile: new Float32Array(Math.max(2, Math.ceil(w / 6))) }),
87
+ draw: ({ ctx, w, h, t, state, o, quality }) => {
88
+ const dt = step(state, t) * o.speed;
89
+ ctx.clearRect(0, 0, w, h);
90
+ ctx.fillStyle = o.color;
91
+ const n = Math.max(8, Math.round(state.f.length * quality));
92
+ for (let i = 0; i < n; i++) {
93
+ const f = state.f[i];
94
+ f.y += (14 + f.r * 9) * dt;
95
+ f.x += Math.sin(t * 0.8 + f.ph) * 12 * dt;
96
+ const col = Math.min(state.pile.length - 1, Math.max(0, Math.floor(f.x / 6)));
97
+ if (f.y > h - state.pile[col]) {
98
+ state.pile[col] = Math.min(o.pile, state.pile[col] + f.r * 0.12);
99
+ f.y = -5;
100
+ f.x = Math.random() * w;
101
+ }
102
+ ctx.globalAlpha = 0.55 + f.r / 8;
103
+ ctx.beginPath();
104
+ ctx.arc(f.x, f.y, f.r, 0, Math.PI * 2);
105
+ ctx.fill();
106
+ }
107
+ ctx.globalAlpha = 0.95;
108
+ ctx.beginPath();
109
+ ctx.moveTo(0, h);
110
+ for (let c = 0; c < state.pile.length; c++)
111
+ ctx.lineTo(c * 6 + 3, h - state.pile[c] - Math.sin(c * 0.7) * Math.min(2, state.pile[c] * 0.2));
112
+ ctx.lineTo(w, h);
113
+ ctx.fill();
114
+ ctx.globalAlpha = 1;
115
+ },
116
+ }),
117
+ bg('lightning', 'A safe storm: branching bolts at most once per `interval` (≥ 2.5 s), sky glow capped at 22 %, no flash under reduced motion (Canvas 2D).', { interval: 4, glow: 0.22, color: '#c7d2fe' }, {
118
+ init: () => ({ next: 1.2, bolt: null, age: 0 }),
119
+ draw: ({ ctx, w, h, t, state, o }) => {
120
+ const dt = step(state, t);
121
+ ctx.clearRect(0, 0, w, h);
122
+ const sky = ctx.createLinearGradient(0, 0, 0, h);
123
+ sky.addColorStop(0, '#0b1020');
124
+ sky.addColorStop(1, '#1e293b');
125
+ ctx.fillStyle = sky;
126
+ ctx.fillRect(0, 0, w, h);
127
+ if (t === 0)
128
+ return;
129
+ const every = Math.max(2.5, Number(o.interval) || 4);
130
+ if (t > state.next) {
131
+ state.next = t + every + Math.random() * every * 0.5;
132
+ const segs = [];
133
+ const branch = (x, y, len, depth) => {
134
+ let cx = x;
135
+ let cy = y;
136
+ const path = [[cx, cy]];
137
+ while (cy < y + len && cy < h) {
138
+ cx += rand(-14, 14);
139
+ cy += rand(8, 18);
140
+ path.push([cx, cy]);
141
+ if (depth < 2 && Math.random() < 0.12)
142
+ branch(cx, cy, len * 0.4, depth + 1);
143
+ }
144
+ segs.push(path);
145
+ };
146
+ branch(rand(w * 0.2, w * 0.8), 0, h * 0.85, 0);
147
+ state.bolt = segs;
148
+ state.age = 0;
149
+ }
150
+ if (state.bolt) {
151
+ state.age += dt;
152
+ const a = Math.max(0, 1 - state.age / 0.45);
153
+ ctx.fillStyle = `rgba(200,210,255,${(Math.min(0.22, Number(o.glow) || 0.22) * a).toFixed(3)})`;
154
+ ctx.fillRect(0, 0, w, h);
155
+ ctx.strokeStyle = o.color;
156
+ ctx.shadowColor = o.color;
157
+ ctx.shadowBlur = 12;
158
+ ctx.globalAlpha = a;
159
+ state.bolt.forEach((p, i) => {
160
+ ctx.lineWidth = i === state.bolt.length - 1 ? 2.4 : 1;
161
+ ctx.beginPath();
162
+ p.forEach(([x, y], j) => (j ? ctx.lineTo(x, y) : ctx.moveTo(x, y)));
163
+ ctx.stroke();
164
+ });
165
+ ctx.globalAlpha = 1;
166
+ ctx.shadowBlur = 0;
167
+ if (a <= 0)
168
+ state.bolt = null;
169
+ }
170
+ },
171
+ }),
172
+ bg('fog', 'Soft layered fog banks drifting at different speeds (Canvas 2D).', { banks: 9, color: '226,232,240', density: 0.35 }, {
173
+ init: (w, h, o) => ({ b: Array.from({ length: o.banks }, (_, i) => ({ x: Math.random() * w, y: h * (0.35 + (i / o.banks) * 0.65), r: rand(0.35, 0.7) * Math.max(w, h), v: rand(6, 22) * (i % 2 ? 1 : -1) })) }),
174
+ draw: ({ ctx, w, h, t, state, o }) => {
175
+ const dt = step(state, t) * o.speed;
176
+ ctx.clearRect(0, 0, w, h);
177
+ for (const b of state.b) {
178
+ b.x += b.v * dt;
179
+ if (b.x > w + b.r)
180
+ b.x = -b.r;
181
+ if (b.x < -b.r)
182
+ b.x = w + b.r;
183
+ const g = ctx.createRadialGradient(b.x, b.y, 0, b.x, b.y, b.r);
184
+ g.addColorStop(0, `rgba(${o.color},${o.density})`);
185
+ g.addColorStop(1, `rgba(${o.color},0)`);
186
+ ctx.fillStyle = g;
187
+ ctx.fillRect(0, 0, w, h);
188
+ }
189
+ },
190
+ }),
191
+ bg('aurora-veil', 'Curtains of northern lights waving over a starry night sky (Canvas 2D).', { colors: ['#22d3ee', '#a3e635', '#c084fc'], stars: 60 }, {
192
+ init: (w, h, o) => ({ s: Array.from({ length: o.stars }, () => [Math.random() * w, Math.random() * h * 0.7, Math.random()]) }),
193
+ draw: ({ ctx, w, h, t, state, o }) => {
194
+ const sky = ctx.createLinearGradient(0, 0, 0, h);
195
+ sky.addColorStop(0, '#020617');
196
+ sky.addColorStop(1, '#0f172a');
197
+ ctx.fillStyle = sky;
198
+ ctx.fillRect(0, 0, w, h);
199
+ for (const [x, y, k] of state.s) {
200
+ ctx.fillStyle = `rgba(255,255,255,${(0.3 + 0.5 * Math.abs(Math.sin(t * 1.5 + k * 9))).toFixed(2)})`;
201
+ ctx.fillRect(x, y, 1.4, 1.4);
202
+ }
203
+ ctx.globalCompositeOperation = 'lighter';
204
+ o.colors.forEach((c, i) => {
205
+ const base = h * (0.25 + i * 0.12);
206
+ for (let x = 0; x < w; x += 4) {
207
+ const y = base + Math.sin(x * 0.012 + t * (0.5 + i * 0.2) + i) * h * 0.08 + Math.sin(x * 0.03 - t * 0.7) * h * 0.03;
208
+ const len = h * (0.22 + 0.12 * Math.sin(x * 0.02 + t + i));
209
+ const g = ctx.createLinearGradient(0, y - len, 0, y);
210
+ g.addColorStop(0, 'rgba(0,0,0,0)');
211
+ g.addColorStop(1, c);
212
+ ctx.globalAlpha = 0.16;
213
+ ctx.fillStyle = g;
214
+ ctx.fillRect(x, y - len, 4, len);
215
+ }
216
+ });
217
+ ctx.globalAlpha = 1;
218
+ ctx.globalCompositeOperation = 'source-over';
219
+ },
220
+ }),
221
+ bg('day-cycle', 'The sky moves through dawn, day, dusk and night with the sun and moon on an arc (`cycle` seconds or a fixed `hour`) (Canvas 2D).', { cycle: 24, hour: null }, {
222
+ draw: ({ ctx, w, h, t, o }) => {
223
+ const hour = typeof o.hour === 'number' ? o.hour : (8 + (t / Math.max(4, Number(o.cycle) || 24)) * 24) % 24;
224
+ const [top, bot] = skyAt(hour);
225
+ const g = ctx.createLinearGradient(0, 0, 0, h);
226
+ g.addColorStop(0, top);
227
+ g.addColorStop(1, bot);
228
+ ctx.fillStyle = g;
229
+ ctx.fillRect(0, 0, w, h);
230
+ const body = (k, color, r) => {
231
+ if (k < 0 || k > 1)
232
+ return;
233
+ const x = w * k;
234
+ const y = h * 0.9 - Math.sin(k * Math.PI) * h * 0.75;
235
+ ctx.fillStyle = color;
236
+ ctx.shadowColor = color;
237
+ ctx.shadowBlur = 24;
238
+ ctx.beginPath();
239
+ ctx.arc(x, y, r, 0, Math.PI * 2);
240
+ ctx.fill();
241
+ ctx.shadowBlur = 0;
242
+ };
243
+ body((hour - 6) / 12, '#fde047', Math.min(w, h) * 0.07);
244
+ body(((hour + 6) % 24) / 12, '#e2e8f0', Math.min(w, h) * 0.05);
245
+ ctx.fillStyle = 'rgba(15,23,42,.55)';
246
+ ctx.beginPath();
247
+ ctx.moveTo(0, h);
248
+ for (let x = 0; x <= w; x += 8)
249
+ ctx.lineTo(x, h * 0.88 - Math.sin(x * 0.015) * h * 0.05 - Math.sin(x * 0.041) * h * 0.02);
250
+ ctx.lineTo(w, h);
251
+ ctx.fill();
252
+ },
253
+ }),
254
+ ];
255
+ /** Register the 6.8 weather & ambience pack (idempotent). */
256
+ function registerWeatherEffects() {
257
+ registerEffects(WEATHER_FX);
258
+ }
259
+
260
+ export { WEATHER_FX, registerWeatherEffects, skyAt };
261
+ //# sourceMappingURL=fx-weather.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx-weather.js","sources":["../../src/components/fx2/weather.ts"],"sourcesContent":["/**\n * 6.8 — Weather & ambience (`motionary/components/fx-weather`), registered\n * through `registerEffect()` (kind `background`, Canvas 2D):\n *\n * - `rain-glass` — droplets sit on a window pane, grow, and run down leaving\n * trails.\n * - `snowfall` — flakes drift down and pile up along the bottom edge.\n * - `lightning` — a safe storm: branching bolts at most once per `interval`\n * (≥ 2.5 s, far below the WCAG 2.3.1 limit of 3 flashes / s), the sky glow\n * is capped at 22 % brightness and there is no flash at all under reduced\n * motion.\n * - `fog` — soft layered fog banks drifting at different speeds.\n * - `aurora-veil` — curtains of northern lights waving over a night sky.\n * - `day-cycle` — the sky moves through dawn, day, dusk and night with the sun\n * and moon on an arc (`cycle` seconds, or a fixed `hour` 0–24).\n *\n * Every effect renders only while visible, adapts its quality and draws one\n * static frame under reduced motion.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, type GenerativeSpec } from '../effects/generative';\nimport { rand } from '../effects/shared';\n\nconst bg = (name: string, description: string, defaults: Record<string, unknown>, spec: GenerativeSpec): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { speed: 1, quality: 1, ...defaults },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = canvasBackground(el, ctx, spec, o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\nconst step = (state: any, t: number): number => {\n const dt = state.last ? Math.min(0.05, t - state.last) : 0;\n state.last = t;\n return dt;\n};\n\n/** Mix two `[r,g,b]` colours. */\nconst mix = (a: number[], b: number[], k: number): string => `rgb(${a.map((v, i) => Math.round(v + (b[i] - v) * k)).join(',')})`;\n\n/** Sky colours (top, bottom) for an hour 0–24. */\nexport function skyAt(hour: number): [string, string] {\n const keys: [number, number[], number[]][] = [\n [0, [8, 10, 30], [22, 26, 60]],\n [5, [30, 27, 75], [250, 140, 110]],\n [7, [90, 160, 230], [255, 210, 160]],\n [12, [40, 130, 230], [170, 215, 255]],\n [17, [70, 120, 200], [255, 190, 130]],\n [19, [60, 40, 110], [250, 110, 90]],\n [21, [12, 14, 40], [40, 36, 90]],\n [24, [8, 10, 30], [22, 26, 60]],\n ];\n const h = ((hour % 24) + 24) % 24;\n let i = 0;\n while (i < keys.length - 2 && keys[i + 1][0] <= h) i++;\n const [h0, t0, b0] = keys[i];\n const [h1, t1, b1] = keys[i + 1];\n const k = (h - h0) / (h1 - h0 || 1);\n return [mix(t0, t1, k), mix(b0, b1, k)];\n}\n\nexport const WEATHER_FX: EffectDefinition[] = [\n bg('rain-glass', 'Droplets on a window pane grow and run down, leaving trails (Canvas 2D).', { count: 70, tint: 'rgba(200,225,255,.55)' }, {\n init: (w, h, o) => ({ d: Array.from({ length: o.count }, () => ({ x: Math.random() * w, y: Math.random() * h, r: rand(1, 3.2), v: 0, trail: [] as number[][] })) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = step(state, t) * o.speed;\n ctx.clearRect(0, 0, w, h);\n ctx.fillStyle = 'rgba(30,50,80,.12)';\n ctx.fillRect(0, 0, w, h);\n for (const d of state.d) {\n if (d.r > 2.6 && Math.random() < dt * 0.6) d.v = rand(40, 110);\n if (d.v) {\n d.y += d.v * dt;\n d.x += Math.sin(d.y * 0.05) * 0.3;\n d.trail.push([d.x, d.y]);\n if (d.trail.length > 18) d.trail.shift();\n if (d.y > h + 6) Object.assign(d, { y: -4, x: Math.random() * w, r: rand(1, 2.4), v: 0, trail: [] });\n } else d.r = Math.min(3.4, d.r + dt * 0.25);\n if (d.trail.length > 1) {\n ctx.strokeStyle = 'rgba(220,235,255,.25)';\n ctx.lineWidth = d.r * 0.7;\n ctx.beginPath();\n d.trail.forEach(([x, y]: number[], i: number) => (i ? ctx.lineTo(x, y) : ctx.moveTo(x, y)));\n ctx.stroke();\n }\n const g = ctx.createRadialGradient(d.x - d.r * 0.3, d.y - d.r * 0.4, 0, d.x, d.y, d.r * 1.4);\n g.addColorStop(0, 'rgba(255,255,255,.9)');\n g.addColorStop(1, o.tint);\n ctx.fillStyle = g;\n ctx.beginPath();\n ctx.ellipse(d.x, d.y, d.r, d.r * 1.15, 0, 0, Math.PI * 2);\n ctx.fill();\n }\n },\n }),\n bg('snowfall', 'Snowflakes drift down and pile up along the bottom edge (Canvas 2D).', { count: 90, pile: 18, color: '#ffffff' }, {\n init: (w, h, o) => ({ f: Array.from({ length: o.count }, () => ({ x: Math.random() * w, y: Math.random() * h, r: rand(1, 3.4), ph: rand(0, 6.3) })), pile: new Float32Array(Math.max(2, Math.ceil(w / 6))) }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n const dt = step(state, t) * o.speed;\n ctx.clearRect(0, 0, w, h);\n ctx.fillStyle = o.color;\n const n = Math.max(8, Math.round(state.f.length * quality));\n for (let i = 0; i < n; i++) {\n const f = state.f[i];\n f.y += (14 + f.r * 9) * dt;\n f.x += Math.sin(t * 0.8 + f.ph) * 12 * dt;\n const col = Math.min(state.pile.length - 1, Math.max(0, Math.floor(f.x / 6)));\n if (f.y > h - state.pile[col]) {\n state.pile[col] = Math.min(o.pile, state.pile[col] + f.r * 0.12);\n f.y = -5;\n f.x = Math.random() * w;\n }\n ctx.globalAlpha = 0.55 + f.r / 8;\n ctx.beginPath();\n ctx.arc(f.x, f.y, f.r, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.globalAlpha = 0.95;\n ctx.beginPath();\n ctx.moveTo(0, h);\n for (let c = 0; c < state.pile.length; c++) ctx.lineTo(c * 6 + 3, h - state.pile[c] - Math.sin(c * 0.7) * Math.min(2, state.pile[c] * 0.2));\n ctx.lineTo(w, h);\n ctx.fill();\n ctx.globalAlpha = 1;\n },\n }),\n bg('lightning', 'A safe storm: branching bolts at most once per `interval` (≥ 2.5 s), sky glow capped at 22 %, no flash under reduced motion (Canvas 2D).', { interval: 4, glow: 0.22, color: '#c7d2fe' }, {\n init: () => ({ next: 1.2, bolt: null as number[][][] | null, age: 0 }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = step(state, t);\n ctx.clearRect(0, 0, w, h);\n const sky = ctx.createLinearGradient(0, 0, 0, h);\n sky.addColorStop(0, '#0b1020');\n sky.addColorStop(1, '#1e293b');\n ctx.fillStyle = sky;\n ctx.fillRect(0, 0, w, h);\n if (t === 0) return;\n const every = Math.max(2.5, Number(o.interval) || 4);\n if (t > state.next) {\n state.next = t + every + Math.random() * every * 0.5;\n const segs: number[][][] = [];\n const branch = (x: number, y: number, len: number, depth: number) => {\n let cx = x;\n let cy = y;\n const path: number[][] = [[cx, cy]];\n while (cy < y + len && cy < h) {\n cx += rand(-14, 14);\n cy += rand(8, 18);\n path.push([cx, cy]);\n if (depth < 2 && Math.random() < 0.12) branch(cx, cy, len * 0.4, depth + 1);\n }\n segs.push(path);\n };\n branch(rand(w * 0.2, w * 0.8), 0, h * 0.85, 0);\n state.bolt = segs;\n state.age = 0;\n }\n if (state.bolt) {\n state.age += dt;\n const a = Math.max(0, 1 - state.age / 0.45);\n ctx.fillStyle = `rgba(200,210,255,${(Math.min(0.22, Number(o.glow) || 0.22) * a).toFixed(3)})`;\n ctx.fillRect(0, 0, w, h);\n ctx.strokeStyle = o.color;\n ctx.shadowColor = o.color;\n ctx.shadowBlur = 12;\n ctx.globalAlpha = a;\n state.bolt.forEach((p: number[][], i: number) => {\n ctx.lineWidth = i === state.bolt.length - 1 ? 2.4 : 1;\n ctx.beginPath();\n p.forEach(([x, y], j) => (j ? ctx.lineTo(x, y) : ctx.moveTo(x, y)));\n ctx.stroke();\n });\n ctx.globalAlpha = 1;\n ctx.shadowBlur = 0;\n if (a <= 0) state.bolt = null;\n }\n },\n }),\n bg('fog', 'Soft layered fog banks drifting at different speeds (Canvas 2D).', { banks: 9, color: '226,232,240', density: 0.35 }, {\n init: (w, h, o) => ({ b: Array.from({ length: o.banks }, (_, i) => ({ x: Math.random() * w, y: h * (0.35 + (i / o.banks) * 0.65), r: rand(0.35, 0.7) * Math.max(w, h), v: rand(6, 22) * (i % 2 ? 1 : -1) })) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = step(state, t) * o.speed;\n ctx.clearRect(0, 0, w, h);\n for (const b of state.b) {\n b.x += b.v * dt;\n if (b.x > w + b.r) b.x = -b.r;\n if (b.x < -b.r) b.x = w + b.r;\n const g = ctx.createRadialGradient(b.x, b.y, 0, b.x, b.y, b.r);\n g.addColorStop(0, `rgba(${o.color},${o.density})`);\n g.addColorStop(1, `rgba(${o.color},0)`);\n ctx.fillStyle = g;\n ctx.fillRect(0, 0, w, h);\n }\n },\n }),\n bg('aurora-veil', 'Curtains of northern lights waving over a starry night sky (Canvas 2D).', { colors: ['#22d3ee', '#a3e635', '#c084fc'], stars: 60 }, {\n init: (w, h, o) => ({ s: Array.from({ length: o.stars }, () => [Math.random() * w, Math.random() * h * 0.7, Math.random()]) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const sky = ctx.createLinearGradient(0, 0, 0, h);\n sky.addColorStop(0, '#020617');\n sky.addColorStop(1, '#0f172a');\n ctx.fillStyle = sky;\n ctx.fillRect(0, 0, w, h);\n for (const [x, y, k] of state.s) {\n ctx.fillStyle = `rgba(255,255,255,${(0.3 + 0.5 * Math.abs(Math.sin(t * 1.5 + k * 9))).toFixed(2)})`;\n ctx.fillRect(x, y, 1.4, 1.4);\n }\n ctx.globalCompositeOperation = 'lighter';\n (o.colors as string[]).forEach((c, i) => {\n const base = h * (0.25 + i * 0.12);\n for (let x = 0; x < w; x += 4) {\n const y = base + Math.sin(x * 0.012 + t * (0.5 + i * 0.2) + i) * h * 0.08 + Math.sin(x * 0.03 - t * 0.7) * h * 0.03;\n const len = h * (0.22 + 0.12 * Math.sin(x * 0.02 + t + i));\n const g = ctx.createLinearGradient(0, y - len, 0, y);\n g.addColorStop(0, 'rgba(0,0,0,0)');\n g.addColorStop(1, c);\n ctx.globalAlpha = 0.16;\n ctx.fillStyle = g;\n ctx.fillRect(x, y - len, 4, len);\n }\n });\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n },\n }),\n bg('day-cycle', 'The sky moves through dawn, day, dusk and night with the sun and moon on an arc (`cycle` seconds or a fixed `hour`) (Canvas 2D).', { cycle: 24, hour: null }, {\n draw: ({ ctx, w, h, t, o }) => {\n const hour = typeof o.hour === 'number' ? o.hour : (8 + (t / Math.max(4, Number(o.cycle) || 24)) * 24) % 24;\n const [top, bot] = skyAt(hour);\n const g = ctx.createLinearGradient(0, 0, 0, h);\n g.addColorStop(0, top);\n g.addColorStop(1, bot);\n ctx.fillStyle = g;\n ctx.fillRect(0, 0, w, h);\n const body = (k: number, color: string, r: number) => {\n if (k < 0 || k > 1) return;\n const x = w * k;\n const y = h * 0.9 - Math.sin(k * Math.PI) * h * 0.75;\n ctx.fillStyle = color;\n ctx.shadowColor = color;\n ctx.shadowBlur = 24;\n ctx.beginPath();\n ctx.arc(x, y, r, 0, Math.PI * 2);\n ctx.fill();\n ctx.shadowBlur = 0;\n };\n body((hour - 6) / 12, '#fde047', Math.min(w, h) * 0.07);\n body(((hour + 6) % 24) / 12, '#e2e8f0', Math.min(w, h) * 0.05);\n ctx.fillStyle = 'rgba(15,23,42,.55)';\n ctx.beginPath();\n ctx.moveTo(0, h);\n for (let x = 0; x <= w; x += 8) ctx.lineTo(x, h * 0.88 - Math.sin(x * 0.015) * h * 0.05 - Math.sin(x * 0.041) * h * 0.02);\n ctx.lineTo(w, h);\n ctx.fill();\n },\n }),\n];\n\n/** Register the 6.8 weather & ambience pack (idempotent). */\nexport function registerWeatherEffects(): void {\n registerEffects(WEATHER_FX);\n}\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ var components_fxLight = require('./fx-light.cjs');
6
6
  var components_fx3d = require('./fx-3d.cjs');
7
7
  var components_fxMorph = require('./fx-morph.cjs');
8
8
  var components_fxTransitions = require('./fx-transitions.cjs');
9
+ var components_fxWeather = require('./fx-weather.cjs');
10
+ var components_fxPhysics = require('./fx-physics.cjs');
9
11
  require('../chunks/registry-DehBVRDV.cjs');
10
12
  require('../chunks/base-BaQV-2ha.cjs');
11
13
  require('../chunks/generative-BHIj-NU0.cjs');
@@ -19,6 +21,8 @@ const FX2_PACKS = {
19
21
  depth: components_fx3d.DEPTH3_FX,
20
22
  morph: components_fxMorph.MORPH2_FX,
21
23
  transitions: components_fxTransitions.TRANSITIONS2_FX,
24
+ weather: components_fxWeather.WEATHER_FX,
25
+ physics: components_fxPhysics.PHYSICS2_FX,
22
26
  };
23
27
  /** Register every 6.x pack (idempotent). */
24
28
  function registerFx2() {
@@ -28,6 +32,8 @@ function registerFx2() {
28
32
  components_fx3d.register3dEffects();
29
33
  components_fxMorph.registerMorphEffects2();
30
34
  components_fxTransitions.registerTransitionEffects2();
35
+ components_fxWeather.registerWeatherEffects();
36
+ components_fxPhysics.registerPhysicsEffects2();
31
37
  }
32
38
 
33
39
  exports.GLSL_HEAD = components_fxGpu.GLSL_HEAD;
@@ -52,6 +58,12 @@ exports.TRANSITIONS2_FX = components_fxTransitions.TRANSITIONS2_FX;
52
58
  exports.crossDocumentTransitions = components_fxTransitions.crossDocumentTransitions;
53
59
  exports.pageTransition = components_fxTransitions.pageTransition;
54
60
  exports.registerTransitionEffects2 = components_fxTransitions.registerTransitionEffects2;
61
+ exports.WEATHER_FX = components_fxWeather.WEATHER_FX;
62
+ exports.registerWeatherEffects = components_fxWeather.registerWeatherEffects;
63
+ exports.skyAt = components_fxWeather.skyAt;
64
+ exports.PHYSICS2_FX = components_fxPhysics.PHYSICS2_FX;
65
+ exports.VerletWorld = components_fxPhysics.VerletWorld;
66
+ exports.registerPhysicsEffects2 = components_fxPhysics.registerPhysicsEffects2;
55
67
  exports.FX2_PACKS = FX2_PACKS;
56
68
  exports.registerFx2 = registerFx2;
57
69
  //# sourceMappingURL=fx2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"fx2.cjs","sources":["../../src/components/fx2/index.ts"],"sourcesContent":["/**\n * The 6.x effect packs, one entry each (`motionary/components/fx-gpu`, …) so\n * their size budgets stay separate. This module (`registerFx2()`) registers\n * them all — used by dist/widgets.umd.js and the showcase.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { GPU_FX, registerGpuEffects } from './gpu';\nimport { TEXT3_FX, registerTextEffects3, splitChars } from './text3';\nimport { LIGHT_FX, registerLightEffects, trackPointer } from './light';\nimport { DEPTH3_FX, register3dEffects } from './depth3';\nimport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions } from './transitions2';\n\nexport { GPU_FX, registerGpuEffects, TEXT3_FX, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightEffects, trackPointer };\n\nexport { DEPTH3_FX, register3dEffects };\n\nexport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions };\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n light: LIGHT_FX,\n depth: DEPTH3_FX,\n morph: MORPH2_FX,\n transitions: TRANSITIONS2_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n registerTextEffects3();\n registerLightEffects();\n register3dEffects();\n registerMorphEffects2();\n registerTransitionEffects2();\n}\n"],"names":["GPU_FX","TEXT3_FX","LIGHT_FX","DEPTH3_FX","MORPH2_FX","TRANSITIONS2_FX","registerGpuEffects","registerTextEffects3","registerLightEffects","register3dEffects","registerMorphEffects2","registerTransitionEffects2"],"mappings":";;;;;;;;;;;;;AAyBA;AACO,MAAM,SAAS,GAAuC;AAC3D,IAAA,GAAG,EAAEA,uBAAM;AACX,IAAA,IAAI,EAAEC,0BAAQ;AACd,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,yBAAS;AAChB,IAAA,KAAK,EAAEC,4BAAS;AAChB,IAAA,WAAW,EAAEC,wCAAe;;AAG9B;SACgB,WAAW,GAAA;AACzB,IAAAC,mCAAkB,EAAE;AACpB,IAAAC,sCAAoB,EAAE;AACtB,IAAAC,uCAAoB,EAAE;AACtB,IAAAC,iCAAiB,EAAE;AACnB,IAAAC,wCAAqB,EAAE;AACvB,IAAAC,mDAA0B,EAAE;AAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fx2.cjs","sources":["../../src/components/fx2/index.ts"],"sourcesContent":["/**\n * The 6.x effect packs, one entry each (`motionary/components/fx-gpu`, …) so\n * their size budgets stay separate. This module (`registerFx2()`) registers\n * them all — used by dist/widgets.umd.js and the showcase.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { GPU_FX, registerGpuEffects } from './gpu';\nimport { TEXT3_FX, registerTextEffects3, splitChars } from './text3';\nimport { LIGHT_FX, registerLightEffects, trackPointer } from './light';\nimport { DEPTH3_FX, register3dEffects } from './depth3';\nimport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions } from './transitions2';\nimport { WEATHER_FX, registerWeatherEffects, skyAt } from './weather';\nimport { PHYSICS2_FX, registerPhysicsEffects2, VerletWorld } from './physics2';\n\nexport { GPU_FX, registerGpuEffects, TEXT3_FX, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightEffects, trackPointer };\n\nexport { DEPTH3_FX, register3dEffects };\n\nexport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions };\n\nexport { WEATHER_FX, registerWeatherEffects, skyAt };\n\nexport { PHYSICS2_FX, registerPhysicsEffects2, VerletWorld };\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n light: LIGHT_FX,\n depth: DEPTH3_FX,\n morph: MORPH2_FX,\n transitions: TRANSITIONS2_FX,\n weather: WEATHER_FX,\n physics: PHYSICS2_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n registerTextEffects3();\n registerLightEffects();\n register3dEffects();\n registerMorphEffects2();\n registerTransitionEffects2();\n registerWeatherEffects();\n registerPhysicsEffects2();\n}\n"],"names":["GPU_FX","TEXT3_FX","LIGHT_FX","DEPTH3_FX","MORPH2_FX","TRANSITIONS2_FX","WEATHER_FX","PHYSICS2_FX","registerGpuEffects","registerTextEffects3","registerLightEffects","register3dEffects","registerMorphEffects2","registerTransitionEffects2","registerWeatherEffects","registerPhysicsEffects2"],"mappings":";;;;;;;;;;;;;;;AA+BA;AACO,MAAM,SAAS,GAAuC;AAC3D,IAAA,GAAG,EAAEA,uBAAM;AACX,IAAA,IAAI,EAAEC,0BAAQ;AACd,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,yBAAS;AAChB,IAAA,KAAK,EAAEC,4BAAS;AAChB,IAAA,WAAW,EAAEC,wCAAe;AAC5B,IAAA,OAAO,EAAEC,+BAAU;AACnB,IAAA,OAAO,EAAEC,gCAAW;;AAGtB;SACgB,WAAW,GAAA;AACzB,IAAAC,mCAAkB,EAAE;AACpB,IAAAC,sCAAoB,EAAE;AACtB,IAAAC,uCAAoB,EAAE;AACtB,IAAAC,iCAAiB,EAAE;AACnB,IAAAC,wCAAqB,EAAE;AACvB,IAAAC,mDAA0B,EAAE;AAC5B,IAAAC,2CAAsB,EAAE;AACxB,IAAAC,4CAAuB,EAAE;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -197,6 +197,79 @@ declare function crossDocumentTransitions(effect?: string, duration?: number): (
197
197
  /** Register the 6.7 transitions pack (idempotent). */
198
198
  declare function registerTransitionEffects2(): void;
199
199
 
200
+ /**
201
+ * 6.8 — Weather & ambience (`motionary/components/fx-weather`), registered
202
+ * through `registerEffect()` (kind `background`, Canvas 2D):
203
+ *
204
+ * - `rain-glass` — droplets sit on a window pane, grow, and run down leaving
205
+ * trails.
206
+ * - `snowfall` — flakes drift down and pile up along the bottom edge.
207
+ * - `lightning` — a safe storm: branching bolts at most once per `interval`
208
+ * (≥ 2.5 s, far below the WCAG 2.3.1 limit of 3 flashes / s), the sky glow
209
+ * is capped at 22 % brightness and there is no flash at all under reduced
210
+ * motion.
211
+ * - `fog` — soft layered fog banks drifting at different speeds.
212
+ * - `aurora-veil` — curtains of northern lights waving over a night sky.
213
+ * - `day-cycle` — the sky moves through dawn, day, dusk and night with the sun
214
+ * and moon on an arc (`cycle` seconds, or a fixed `hour` 0–24).
215
+ *
216
+ * Every effect renders only while visible, adapts its quality and draws one
217
+ * static frame under reduced motion.
218
+ */
219
+
220
+ /** Sky colours (top, bottom) for an hour 0–24. */
221
+ declare function skyAt(hour: number): [string, string];
222
+ declare const WEATHER_FX: EffectDefinition[];
223
+ /** Register the 6.8 weather & ambience pack (idempotent). */
224
+ declare function registerWeatherEffects(): void;
225
+
226
+ /**
227
+ * 6.8 — Interactive physics 2.0 (`motionary/components/fx-physics`) on a tiny
228
+ * Verlet integrator (`VerletWorld`), registered through `registerEffect()`:
229
+ *
230
+ * - `soft-body` (kind `hover`) — the element wobbles like jelly: pointer
231
+ * motion pushes a damped spring that squashes and skews it.
232
+ * - `magnet` (kind `hover`) — the element's children are pulled toward the
233
+ * pointer on springs and settle back when it leaves.
234
+ * - `cloth` (kind `background`) — a cloth hangs from the top edge and ripples
235
+ * when the pointer moves through it.
236
+ * - `rope` (kind `background`) — a rope with a weight swings from the top;
237
+ * the pointer pushes it.
238
+ * - `pinball` (kind `background`) — balls fall through round bumpers that
239
+ * light up on a hit; click to drop another ball.
240
+ *
241
+ * Canvas effects render only while visible; reduced motion draws one static
242
+ * frame and the hover effects do nothing.
243
+ */
244
+
245
+ interface VerletPoint {
246
+ x: number;
247
+ y: number;
248
+ px: number;
249
+ py: number;
250
+ pinned: boolean;
251
+ }
252
+ /** A minimal Verlet world: points, distance sticks, gravity, damping. */
253
+ declare class VerletWorld {
254
+ gravity: number;
255
+ damping: number;
256
+ iterations: number;
257
+ points: VerletPoint[];
258
+ sticks: [number, number, number][];
259
+ constructor(gravity?: number, damping?: number, iterations?: number);
260
+ add(x: number, y: number, pinned?: boolean): number;
261
+ link(a: number, b: number, len?: number): void;
262
+ step(dt: number, bounds?: {
263
+ w: number;
264
+ h: number;
265
+ }): void;
266
+ /** Push points within `r` px of (x, y) by (dx, dy). */
267
+ push(x: number, y: number, dx: number, dy: number, r?: number): void;
268
+ }
269
+ declare const PHYSICS2_FX: EffectDefinition[];
270
+ /** Register the 6.8 physics 2.0 pack (idempotent). */
271
+ declare function registerPhysicsEffects2(): void;
272
+
200
273
  /**
201
274
  * 5.5 — generative backgrounds on Canvas 2D, registered through
202
275
  * `registerEffect()` (kind `background`): `flow-field`, `voronoi`,
@@ -269,5 +342,5 @@ declare const FX2_PACKS: Record<string, EffectDefinition[]>;
269
342
  /** Register every 6.x pack (idempotent). */
270
343
  declare function registerFx2(): void;
271
344
 
272
- export { DEPTH3_FX, FX2_PACKS, GLSL_HEAD, GPU_FX, LIGHT_FX, MORPH2_FX, TEXT3_FX, TRANSITIONS2_FX, crossDocumentTransitions, fieldFallback, pageTransition, pointsToPath, register3dEffects, registerFx2, registerGpuEffects, registerLightEffects, registerMorphEffects2, registerTextEffects3, registerTransitionEffects2, samplePath, shaderBackground, splitChars, supportsWebGL2, trackPointer };
345
+ export { DEPTH3_FX, FX2_PACKS, GLSL_HEAD, GPU_FX, LIGHT_FX, MORPH2_FX, PHYSICS2_FX, TEXT3_FX, TRANSITIONS2_FX, VerletWorld, WEATHER_FX, crossDocumentTransitions, fieldFallback, pageTransition, pointsToPath, register3dEffects, registerFx2, registerGpuEffects, registerLightEffects, registerMorphEffects2, registerPhysicsEffects2, registerTextEffects3, registerTransitionEffects2, registerWeatherEffects, samplePath, shaderBackground, skyAt, splitChars, supportsWebGL2, trackPointer };
273
346
  export type { ShaderSpec };
@@ -197,6 +197,79 @@ declare function crossDocumentTransitions(effect?: string, duration?: number): (
197
197
  /** Register the 6.7 transitions pack (idempotent). */
198
198
  declare function registerTransitionEffects2(): void;
199
199
 
200
+ /**
201
+ * 6.8 — Weather & ambience (`motionary/components/fx-weather`), registered
202
+ * through `registerEffect()` (kind `background`, Canvas 2D):
203
+ *
204
+ * - `rain-glass` — droplets sit on a window pane, grow, and run down leaving
205
+ * trails.
206
+ * - `snowfall` — flakes drift down and pile up along the bottom edge.
207
+ * - `lightning` — a safe storm: branching bolts at most once per `interval`
208
+ * (≥ 2.5 s, far below the WCAG 2.3.1 limit of 3 flashes / s), the sky glow
209
+ * is capped at 22 % brightness and there is no flash at all under reduced
210
+ * motion.
211
+ * - `fog` — soft layered fog banks drifting at different speeds.
212
+ * - `aurora-veil` — curtains of northern lights waving over a night sky.
213
+ * - `day-cycle` — the sky moves through dawn, day, dusk and night with the sun
214
+ * and moon on an arc (`cycle` seconds, or a fixed `hour` 0–24).
215
+ *
216
+ * Every effect renders only while visible, adapts its quality and draws one
217
+ * static frame under reduced motion.
218
+ */
219
+
220
+ /** Sky colours (top, bottom) for an hour 0–24. */
221
+ declare function skyAt(hour: number): [string, string];
222
+ declare const WEATHER_FX: EffectDefinition[];
223
+ /** Register the 6.8 weather & ambience pack (idempotent). */
224
+ declare function registerWeatherEffects(): void;
225
+
226
+ /**
227
+ * 6.8 — Interactive physics 2.0 (`motionary/components/fx-physics`) on a tiny
228
+ * Verlet integrator (`VerletWorld`), registered through `registerEffect()`:
229
+ *
230
+ * - `soft-body` (kind `hover`) — the element wobbles like jelly: pointer
231
+ * motion pushes a damped spring that squashes and skews it.
232
+ * - `magnet` (kind `hover`) — the element's children are pulled toward the
233
+ * pointer on springs and settle back when it leaves.
234
+ * - `cloth` (kind `background`) — a cloth hangs from the top edge and ripples
235
+ * when the pointer moves through it.
236
+ * - `rope` (kind `background`) — a rope with a weight swings from the top;
237
+ * the pointer pushes it.
238
+ * - `pinball` (kind `background`) — balls fall through round bumpers that
239
+ * light up on a hit; click to drop another ball.
240
+ *
241
+ * Canvas effects render only while visible; reduced motion draws one static
242
+ * frame and the hover effects do nothing.
243
+ */
244
+
245
+ interface VerletPoint {
246
+ x: number;
247
+ y: number;
248
+ px: number;
249
+ py: number;
250
+ pinned: boolean;
251
+ }
252
+ /** A minimal Verlet world: points, distance sticks, gravity, damping. */
253
+ declare class VerletWorld {
254
+ gravity: number;
255
+ damping: number;
256
+ iterations: number;
257
+ points: VerletPoint[];
258
+ sticks: [number, number, number][];
259
+ constructor(gravity?: number, damping?: number, iterations?: number);
260
+ add(x: number, y: number, pinned?: boolean): number;
261
+ link(a: number, b: number, len?: number): void;
262
+ step(dt: number, bounds?: {
263
+ w: number;
264
+ h: number;
265
+ }): void;
266
+ /** Push points within `r` px of (x, y) by (dx, dy). */
267
+ push(x: number, y: number, dx: number, dy: number, r?: number): void;
268
+ }
269
+ declare const PHYSICS2_FX: EffectDefinition[];
270
+ /** Register the 6.8 physics 2.0 pack (idempotent). */
271
+ declare function registerPhysicsEffects2(): void;
272
+
200
273
  /**
201
274
  * 5.5 — generative backgrounds on Canvas 2D, registered through
202
275
  * `registerEffect()` (kind `background`): `flow-field`, `voronoi`,
@@ -269,5 +342,5 @@ declare const FX2_PACKS: Record<string, EffectDefinition[]>;
269
342
  /** Register every 6.x pack (idempotent). */
270
343
  declare function registerFx2(): void;
271
344
 
272
- export { DEPTH3_FX, FX2_PACKS, GLSL_HEAD, GPU_FX, LIGHT_FX, MORPH2_FX, TEXT3_FX, TRANSITIONS2_FX, crossDocumentTransitions, fieldFallback, pageTransition, pointsToPath, register3dEffects, registerFx2, registerGpuEffects, registerLightEffects, registerMorphEffects2, registerTextEffects3, registerTransitionEffects2, samplePath, shaderBackground, splitChars, supportsWebGL2, trackPointer };
345
+ export { DEPTH3_FX, FX2_PACKS, GLSL_HEAD, GPU_FX, LIGHT_FX, MORPH2_FX, PHYSICS2_FX, TEXT3_FX, TRANSITIONS2_FX, VerletWorld, WEATHER_FX, crossDocumentTransitions, fieldFallback, pageTransition, pointsToPath, register3dEffects, registerFx2, registerGpuEffects, registerLightEffects, registerMorphEffects2, registerPhysicsEffects2, registerTextEffects3, registerTransitionEffects2, registerWeatherEffects, samplePath, shaderBackground, skyAt, splitChars, supportsWebGL2, trackPointer };
273
346
  export type { ShaderSpec };
@@ -9,6 +9,10 @@ import { MORPH2_FX, registerMorphEffects2 } from './fx-morph.js';
9
9
  export { pointsToPath, samplePath } from './fx-morph.js';
10
10
  import { TRANSITIONS2_FX, registerTransitionEffects2 } from './fx-transitions.js';
11
11
  export { crossDocumentTransitions, pageTransition } from './fx-transitions.js';
12
+ import { WEATHER_FX, registerWeatherEffects } from './fx-weather.js';
13
+ export { skyAt } from './fx-weather.js';
14
+ import { PHYSICS2_FX, registerPhysicsEffects2 } from './fx-physics.js';
15
+ export { VerletWorld } from './fx-physics.js';
12
16
  import '../chunks/registry-D23neB4M.js';
13
17
  import '../chunks/base-DchG4q_S.js';
14
18
  import '../chunks/generative-2LhxG5BJ.js';
@@ -22,6 +26,8 @@ const FX2_PACKS = {
22
26
  depth: DEPTH3_FX,
23
27
  morph: MORPH2_FX,
24
28
  transitions: TRANSITIONS2_FX,
29
+ weather: WEATHER_FX,
30
+ physics: PHYSICS2_FX,
25
31
  };
26
32
  /** Register every 6.x pack (idempotent). */
27
33
  function registerFx2() {
@@ -31,7 +37,9 @@ function registerFx2() {
31
37
  register3dEffects();
32
38
  registerMorphEffects2();
33
39
  registerTransitionEffects2();
40
+ registerWeatherEffects();
41
+ registerPhysicsEffects2();
34
42
  }
35
43
 
36
- export { DEPTH3_FX, FX2_PACKS, GPU_FX, LIGHT_FX, MORPH2_FX, TEXT3_FX, TRANSITIONS2_FX, register3dEffects, registerFx2, registerGpuEffects, registerLightEffects, registerMorphEffects2, registerTextEffects3, registerTransitionEffects2 };
44
+ export { DEPTH3_FX, FX2_PACKS, GPU_FX, LIGHT_FX, MORPH2_FX, PHYSICS2_FX, TEXT3_FX, TRANSITIONS2_FX, WEATHER_FX, register3dEffects, registerFx2, registerGpuEffects, registerLightEffects, registerMorphEffects2, registerPhysicsEffects2, registerTextEffects3, registerTransitionEffects2, registerWeatherEffects };
37
45
  //# sourceMappingURL=fx2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fx2.js","sources":["../../src/components/fx2/index.ts"],"sourcesContent":["/**\n * The 6.x effect packs, one entry each (`motionary/components/fx-gpu`, …) so\n * their size budgets stay separate. This module (`registerFx2()`) registers\n * them all — used by dist/widgets.umd.js and the showcase.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { GPU_FX, registerGpuEffects } from './gpu';\nimport { TEXT3_FX, registerTextEffects3, splitChars } from './text3';\nimport { LIGHT_FX, registerLightEffects, trackPointer } from './light';\nimport { DEPTH3_FX, register3dEffects } from './depth3';\nimport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions } from './transitions2';\n\nexport { GPU_FX, registerGpuEffects, TEXT3_FX, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightEffects, trackPointer };\n\nexport { DEPTH3_FX, register3dEffects };\n\nexport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions };\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n light: LIGHT_FX,\n depth: DEPTH3_FX,\n morph: MORPH2_FX,\n transitions: TRANSITIONS2_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n registerTextEffects3();\n registerLightEffects();\n register3dEffects();\n registerMorphEffects2();\n registerTransitionEffects2();\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAyBA;AACO,MAAM,SAAS,GAAuC;AAC3D,IAAA,GAAG,EAAE,MAAM;AACX,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,eAAe;;AAG9B;SACgB,WAAW,GAAA;AACzB,IAAA,kBAAkB,EAAE;AACpB,IAAA,oBAAoB,EAAE;AACtB,IAAA,oBAAoB,EAAE;AACtB,IAAA,iBAAiB,EAAE;AACnB,IAAA,qBAAqB,EAAE;AACvB,IAAA,0BAA0B,EAAE;AAC9B;;;;"}
1
+ {"version":3,"file":"fx2.js","sources":["../../src/components/fx2/index.ts"],"sourcesContent":["/**\n * The 6.x effect packs, one entry each (`motionary/components/fx-gpu`, …) so\n * their size budgets stay separate. This module (`registerFx2()`) registers\n * them all — used by dist/widgets.umd.js and the showcase.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { GPU_FX, registerGpuEffects } from './gpu';\nimport { TEXT3_FX, registerTextEffects3, splitChars } from './text3';\nimport { LIGHT_FX, registerLightEffects, trackPointer } from './light';\nimport { DEPTH3_FX, register3dEffects } from './depth3';\nimport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions } from './transitions2';\nimport { WEATHER_FX, registerWeatherEffects, skyAt } from './weather';\nimport { PHYSICS2_FX, registerPhysicsEffects2, VerletWorld } from './physics2';\n\nexport { GPU_FX, registerGpuEffects, TEXT3_FX, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightEffects, trackPointer };\n\nexport { DEPTH3_FX, register3dEffects };\n\nexport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions };\n\nexport { WEATHER_FX, registerWeatherEffects, skyAt };\n\nexport { PHYSICS2_FX, registerPhysicsEffects2, VerletWorld };\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n light: LIGHT_FX,\n depth: DEPTH3_FX,\n morph: MORPH2_FX,\n transitions: TRANSITIONS2_FX,\n weather: WEATHER_FX,\n physics: PHYSICS2_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n registerTextEffects3();\n registerLightEffects();\n register3dEffects();\n registerMorphEffects2();\n registerTransitionEffects2();\n registerWeatherEffects();\n registerPhysicsEffects2();\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA+BA;AACO,MAAM,SAAS,GAAuC;AAC3D,IAAA,GAAG,EAAE,MAAM;AACX,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,OAAO,EAAE,WAAW;;AAGtB;SACgB,WAAW,GAAA;AACzB,IAAA,kBAAkB,EAAE;AACpB,IAAA,oBAAoB,EAAE;AACtB,IAAA,oBAAoB,EAAE;AACtB,IAAA,iBAAiB,EAAE;AACnB,IAAA,qBAAqB,EAAE;AACvB,IAAA,0BAA0B,EAAE;AAC5B,IAAA,sBAAsB,EAAE;AACxB,IAAA,uBAAuB,EAAE;AAC3B;;;;"}