motionary 6.4.0 → 6.6.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.
- package/CHANGELOG.md +28 -0
- package/dist/components/fx-3d.cjs +236 -0
- package/dist/components/fx-3d.cjs.map +1 -0
- package/dist/components/fx-3d.d.cts +67 -0
- package/dist/components/fx-3d.d.ts +67 -0
- package/dist/components/fx-3d.js +233 -0
- package/dist/components/fx-3d.js.map +1 -0
- package/dist/components/fx-morph.cjs +292 -0
- package/dist/components/fx-morph.cjs.map +1 -0
- package/dist/components/fx-morph.d.cts +71 -0
- package/dist/components/fx-morph.d.ts +71 -0
- package/dist/components/fx-morph.js +287 -0
- package/dist/components/fx-morph.js.map +1 -0
- package/dist/components/fx2.cjs +12 -0
- package/dist/components/fx2.cjs.map +1 -1
- package/dist/components/fx2.d.cts +51 -1
- package/dist/components/fx2.d.ts +51 -1
- package/dist/components/fx2.js +8 -1
- package/dist/components/fx2.js.map +1 -1
- package/dist/components/widgets.cjs +901 -21
- package/dist/components/widgets.cjs.map +1 -1
- package/dist/components/widgets.d.cts +135 -2
- package/dist/components/widgets.d.ts +135 -2
- package/dist/components/widgets.js +891 -22
- package/dist/components/widgets.js.map +1 -1
- package/dist/widgets.umd.js +1 -1
- package/dist/widgets.umd.js.map +1 -1
- package/docs/ROADMAP.md +2 -2
- package/docs/components.md +51 -0
- package/package.json +21 -1
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { c as registerEffects } from '../chunks/registry-Bu5NrAyA.js';
|
|
2
|
+
import { a as all } from '../chunks/shared-CkKHWrtJ.js';
|
|
3
|
+
import { trackPointer } from './fx-light.js';
|
|
4
|
+
import '../chunks/base-DchG4q_S.js';
|
|
5
|
+
import '../chunks/generative-2LhxG5BJ.js';
|
|
6
|
+
|
|
7
|
+
const layers = (el) => {
|
|
8
|
+
const marked = Array.from(el.querySelectorAll('[data-depth]'));
|
|
9
|
+
return marked.length ? marked : Array.from(el.children);
|
|
10
|
+
};
|
|
11
|
+
const raf = (f) => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);
|
|
12
|
+
const caf = (h) => {
|
|
13
|
+
if (h && typeof cancelAnimationFrame === 'function')
|
|
14
|
+
cancelAnimationFrame(h);
|
|
15
|
+
};
|
|
16
|
+
const DEPTH3_FX = [
|
|
17
|
+
{
|
|
18
|
+
name: 'depth-stack',
|
|
19
|
+
kind: 'card',
|
|
20
|
+
reduced: 'run',
|
|
21
|
+
description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',
|
|
22
|
+
defaults: { tilt: 14, depth: 28 },
|
|
23
|
+
run: (el, o, ctx) => {
|
|
24
|
+
const prev = [el.style.transform, el.style.transformStyle, el.style.transition];
|
|
25
|
+
el.style.transformStyle = 'preserve-3d';
|
|
26
|
+
el.style.transition = 'transform .25s ease-out';
|
|
27
|
+
const ls = layers(el);
|
|
28
|
+
const saved = ls.map((l) => [l.style.transform, l.style.transition]);
|
|
29
|
+
ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));
|
|
30
|
+
const stop = trackPointer(el, ctx, (x, y, inside) => {
|
|
31
|
+
const rx = (0.5 - y) * 2 * o.tilt;
|
|
32
|
+
const ry = (x - 0.5) * 2 * o.tilt;
|
|
33
|
+
el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';
|
|
34
|
+
ls.forEach((l, i) => {
|
|
35
|
+
const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);
|
|
36
|
+
l.style.transform = `translateZ(${d.toFixed(1)}px)`;
|
|
37
|
+
});
|
|
38
|
+
}, 0.5, 0.5);
|
|
39
|
+
return () => {
|
|
40
|
+
stop();
|
|
41
|
+
[el.style.transform, el.style.transformStyle, el.style.transition] = prev;
|
|
42
|
+
ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'product-spin',
|
|
48
|
+
kind: 'card',
|
|
49
|
+
description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',
|
|
50
|
+
defaults: { idle: 18, friction: 0.94, tilt: -8 },
|
|
51
|
+
run: (el, o, ctx) => {
|
|
52
|
+
const prev = [el.style.transform, el.style.touchAction, el.style.cursor];
|
|
53
|
+
el.style.touchAction = 'pan-y';
|
|
54
|
+
el.style.cursor = 'grab';
|
|
55
|
+
let a = 0;
|
|
56
|
+
let v = 0;
|
|
57
|
+
let drag = false;
|
|
58
|
+
let lx = 0;
|
|
59
|
+
let h = 0;
|
|
60
|
+
let last = performance.now();
|
|
61
|
+
const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);
|
|
62
|
+
paint();
|
|
63
|
+
const tick = (now) => {
|
|
64
|
+
const dt = Math.min(64, now - last) / 1000;
|
|
65
|
+
last = now;
|
|
66
|
+
if (!drag) {
|
|
67
|
+
v *= o.friction;
|
|
68
|
+
a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);
|
|
69
|
+
}
|
|
70
|
+
paint();
|
|
71
|
+
h = raf(tick);
|
|
72
|
+
};
|
|
73
|
+
h = raf(tick);
|
|
74
|
+
const down = (e) => {
|
|
75
|
+
drag = true;
|
|
76
|
+
lx = e.clientX;
|
|
77
|
+
v = 0;
|
|
78
|
+
el.style.cursor = 'grabbing';
|
|
79
|
+
el.setPointerCapture?.(e.pointerId);
|
|
80
|
+
};
|
|
81
|
+
const move = (e) => {
|
|
82
|
+
if (!drag)
|
|
83
|
+
return;
|
|
84
|
+
const dx = e.clientX - lx;
|
|
85
|
+
lx = e.clientX;
|
|
86
|
+
a += dx * 0.6;
|
|
87
|
+
v = dx * 36;
|
|
88
|
+
};
|
|
89
|
+
const up = () => {
|
|
90
|
+
drag = false;
|
|
91
|
+
el.style.cursor = 'grab';
|
|
92
|
+
};
|
|
93
|
+
el.addEventListener('pointerdown', down);
|
|
94
|
+
el.addEventListener('pointermove', move);
|
|
95
|
+
el.addEventListener('pointerup', up);
|
|
96
|
+
el.addEventListener('pointercancel', up);
|
|
97
|
+
return () => {
|
|
98
|
+
caf(h);
|
|
99
|
+
el.removeEventListener('pointerdown', down);
|
|
100
|
+
el.removeEventListener('pointermove', move);
|
|
101
|
+
el.removeEventListener('pointerup', up);
|
|
102
|
+
el.removeEventListener('pointercancel', up);
|
|
103
|
+
[el.style.transform, el.style.touchAction, el.style.cursor] = prev;
|
|
104
|
+
};
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'card-flip-3d',
|
|
109
|
+
kind: 'click',
|
|
110
|
+
description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',
|
|
111
|
+
defaults: { duration: 800, axis: 'y', thickness: 6 },
|
|
112
|
+
run: (el, o, ctx) => {
|
|
113
|
+
const [front, back] = Array.from(el.children);
|
|
114
|
+
if (!front || !back)
|
|
115
|
+
return null;
|
|
116
|
+
const R = o.axis === 'x' ? 'rotateX' : 'rotateY';
|
|
117
|
+
if (!el.dataset.usaFlip) {
|
|
118
|
+
el.dataset.usaFlip = 'front';
|
|
119
|
+
el.style.display = 'grid';
|
|
120
|
+
el.style.transformStyle = 'preserve-3d';
|
|
121
|
+
for (const f of [front, back]) {
|
|
122
|
+
f.style.gridArea = '1 / 1';
|
|
123
|
+
f.style.backfaceVisibility = 'hidden';
|
|
124
|
+
}
|
|
125
|
+
back.setAttribute('aria-hidden', 'true');
|
|
126
|
+
back.style.transform = `${R}(180deg)`;
|
|
127
|
+
}
|
|
128
|
+
const toBack = el.dataset.usaFlip === 'front';
|
|
129
|
+
el.dataset.usaFlip = toBack ? 'back' : 'front';
|
|
130
|
+
front.setAttribute('aria-hidden', String(toBack));
|
|
131
|
+
back.setAttribute('aria-hidden', String(!toBack));
|
|
132
|
+
const from = toBack ? 0 : 180;
|
|
133
|
+
const to = toBack ? 180 : 0;
|
|
134
|
+
el.style.transform = `perspective(1000px) ${R}(${to}deg)`;
|
|
135
|
+
if (ctx.reduced)
|
|
136
|
+
return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });
|
|
137
|
+
return ctx.animate(el, [
|
|
138
|
+
{ transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },
|
|
139
|
+
{ transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },
|
|
140
|
+
{ transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },
|
|
141
|
+
], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'origami',
|
|
146
|
+
kind: 'enter',
|
|
147
|
+
description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',
|
|
148
|
+
defaults: { panels: 4, duration: 420 },
|
|
149
|
+
reduced: 'skip',
|
|
150
|
+
run: (el, o, ctx) => {
|
|
151
|
+
if (el.dataset.usaOrigami)
|
|
152
|
+
return null;
|
|
153
|
+
el.dataset.usaOrigami = '1';
|
|
154
|
+
const n = Math.max(2, Math.min(8, Math.round(o.panels)));
|
|
155
|
+
if (getComputedStyle(el).position === 'static')
|
|
156
|
+
el.style.position = 'relative';
|
|
157
|
+
const prevVis = el.style.visibility;
|
|
158
|
+
const wrap = document.createElement('div');
|
|
159
|
+
wrap.setAttribute('aria-hidden', 'true');
|
|
160
|
+
wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';
|
|
161
|
+
const anims = [];
|
|
162
|
+
for (let i = 0; i < n; i++) {
|
|
163
|
+
const slice = el.cloneNode(true);
|
|
164
|
+
slice.removeAttribute('id');
|
|
165
|
+
slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));
|
|
166
|
+
const top = (i / n) * 100;
|
|
167
|
+
const bottom = 100 - ((i + 1) / n) * 100;
|
|
168
|
+
slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;
|
|
169
|
+
wrap.appendChild(slice);
|
|
170
|
+
const dir = i % 2 ? 1 : -1;
|
|
171
|
+
anims.push(ctx.animate(slice, [
|
|
172
|
+
{ transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },
|
|
173
|
+
{ opacity: 1, offset: 0.15 },
|
|
174
|
+
{ transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },
|
|
175
|
+
], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));
|
|
176
|
+
}
|
|
177
|
+
el.style.visibility = 'hidden';
|
|
178
|
+
el.appendChild(wrap);
|
|
179
|
+
const done = () => {
|
|
180
|
+
wrap.remove();
|
|
181
|
+
el.style.visibility = prevVis;
|
|
182
|
+
delete el.dataset.usaOrigami;
|
|
183
|
+
};
|
|
184
|
+
return all(anims).then(done, done);
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: 'orbit-camera',
|
|
189
|
+
kind: 'scroll',
|
|
190
|
+
description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',
|
|
191
|
+
defaults: { range: 70, tilt: 10, depth: 60 },
|
|
192
|
+
run: (el, o, ctx) => {
|
|
193
|
+
const prev = [el.style.transform, el.style.transformStyle];
|
|
194
|
+
const ls = layers(el);
|
|
195
|
+
el.style.transformStyle = 'preserve-3d';
|
|
196
|
+
if (!ctx.reduced)
|
|
197
|
+
ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));
|
|
198
|
+
let h = 0;
|
|
199
|
+
const paint = () => {
|
|
200
|
+
h = 0;
|
|
201
|
+
const r = el.getBoundingClientRect();
|
|
202
|
+
const vh = window.innerHeight || 800;
|
|
203
|
+
const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));
|
|
204
|
+
el.style.setProperty('--usa-orbit', p.toFixed(3));
|
|
205
|
+
if (!ctx.reduced)
|
|
206
|
+
el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;
|
|
207
|
+
};
|
|
208
|
+
paint();
|
|
209
|
+
const on = () => {
|
|
210
|
+
if (!h)
|
|
211
|
+
h = raf(paint);
|
|
212
|
+
};
|
|
213
|
+
if (!ctx.reduced) {
|
|
214
|
+
window.addEventListener('scroll', on, { passive: true });
|
|
215
|
+
window.addEventListener('resize', on);
|
|
216
|
+
}
|
|
217
|
+
return () => {
|
|
218
|
+
caf(h);
|
|
219
|
+
window.removeEventListener('scroll', on);
|
|
220
|
+
window.removeEventListener('resize', on);
|
|
221
|
+
[el.style.transform, el.style.transformStyle] = prev;
|
|
222
|
+
ls.forEach((l) => (l.style.transform = ''));
|
|
223
|
+
};
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
];
|
|
227
|
+
/** Register the 6.5 3D pack (idempotent). */
|
|
228
|
+
function register3dEffects() {
|
|
229
|
+
registerEffects(DEPTH3_FX);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export { DEPTH3_FX, register3dEffects };
|
|
233
|
+
//# sourceMappingURL=fx-3d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fx-3d.js","sources":["../../src/components/fx2/depth3.ts"],"sourcesContent":["/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dEffects(): void {\n registerEffects(DEPTH3_FX);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var registry = require('../chunks/registry-DehBVRDV.cjs');
|
|
4
|
+
var shared = require('../chunks/shared-jkgRH-Hx.cjs');
|
|
5
|
+
require('../chunks/base-BaQV-2ha.cjs');
|
|
6
|
+
|
|
7
|
+
const NS = 'http://www.w3.org/2000/svg';
|
|
8
|
+
const raf = (f) => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);
|
|
9
|
+
const caf = (h) => {
|
|
10
|
+
if (h && typeof cancelAnimationFrame === 'function')
|
|
11
|
+
cancelAnimationFrame(h);
|
|
12
|
+
};
|
|
13
|
+
/** Sample `d` into `n` points (needs SVG geometry support; `null` without it). */
|
|
14
|
+
function samplePath(d, n = 64) {
|
|
15
|
+
const p = document.createElementNS(NS, 'path');
|
|
16
|
+
p.setAttribute('d', d);
|
|
17
|
+
const svg = document.createElementNS(NS, 'svg');
|
|
18
|
+
svg.setAttribute('aria-hidden', 'true');
|
|
19
|
+
svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';
|
|
20
|
+
svg.appendChild(p);
|
|
21
|
+
document.body.appendChild(svg);
|
|
22
|
+
try {
|
|
23
|
+
if (typeof p.getTotalLength !== 'function')
|
|
24
|
+
return null;
|
|
25
|
+
const L = p.getTotalLength();
|
|
26
|
+
if (!L)
|
|
27
|
+
return null;
|
|
28
|
+
const out = [];
|
|
29
|
+
for (let i = 0; i < n; i++) {
|
|
30
|
+
const pt = p.getPointAtLength((i / n) * L);
|
|
31
|
+
out.push([pt.x, pt.y]);
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
svg.remove();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Points → closed path `d`. */
|
|
43
|
+
const pointsToPath = (pts) => (pts.length ? `M${pts.map(([x, y]) => `${x.toFixed(2)} ${y.toFixed(2)}`).join('L')}Z` : '');
|
|
44
|
+
/** Rotate `b` so its start point is the one closest to `a[0]` (less twisting). */
|
|
45
|
+
function align(a, b) {
|
|
46
|
+
let best = 0;
|
|
47
|
+
let bd = Infinity;
|
|
48
|
+
for (let i = 0; i < b.length; i++) {
|
|
49
|
+
const d = (b[i][0] - a[0][0]) ** 2 + (b[i][1] - a[0][1]) ** 2;
|
|
50
|
+
if (d < bd) {
|
|
51
|
+
bd = d;
|
|
52
|
+
best = i;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return b.slice(best).concat(b.slice(0, best));
|
|
56
|
+
}
|
|
57
|
+
const ease = (t) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);
|
|
58
|
+
const MORPH2_FX = [
|
|
59
|
+
{
|
|
60
|
+
name: 'path-morph',
|
|
61
|
+
kind: 'loop',
|
|
62
|
+
description: 'An SVG `<path>` flows between shapes (`paths`: `d` strings; `duration` per shape, `hold` ms). Shapes are resampled, so any two paths morph.',
|
|
63
|
+
defaults: { paths: [], duration: 1200, hold: 600, points: 72 },
|
|
64
|
+
run: (el, o) => {
|
|
65
|
+
const path = (el.localName === 'path' ? el : el.querySelector('path'));
|
|
66
|
+
if (!path)
|
|
67
|
+
return;
|
|
68
|
+
const ds = [path.getAttribute('d') || '', ...(o.paths || [])].filter(Boolean);
|
|
69
|
+
const shapes = ds.map((d) => samplePath(d, o.points)).filter(Boolean);
|
|
70
|
+
if (shapes.length < 2)
|
|
71
|
+
return;
|
|
72
|
+
for (let i = 1; i < shapes.length; i++)
|
|
73
|
+
shapes[i] = align(shapes[i - 1], shapes[i]);
|
|
74
|
+
const orig = path.getAttribute('d');
|
|
75
|
+
let i = 0;
|
|
76
|
+
let t0 = performance.now();
|
|
77
|
+
let h = 0;
|
|
78
|
+
const tick = (now) => {
|
|
79
|
+
const a = shapes[i % shapes.length];
|
|
80
|
+
const b = shapes[(i + 1) % shapes.length];
|
|
81
|
+
const k = Math.min(1, Math.max(0, (now - t0) / o.duration));
|
|
82
|
+
const e = ease(k);
|
|
83
|
+
path.setAttribute('d', pointsToPath(a.map(([x, y], j) => [x + (b[j][0] - x) * e, y + (b[j][1] - y) * e])));
|
|
84
|
+
if (now - t0 > o.duration + o.hold) {
|
|
85
|
+
i++;
|
|
86
|
+
t0 = now;
|
|
87
|
+
}
|
|
88
|
+
h = raf(tick);
|
|
89
|
+
};
|
|
90
|
+
h = raf(tick);
|
|
91
|
+
return () => {
|
|
92
|
+
caf(h);
|
|
93
|
+
if (orig !== null)
|
|
94
|
+
path.setAttribute('d', orig);
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'blob-button',
|
|
100
|
+
kind: 'hover',
|
|
101
|
+
reduced: 'run',
|
|
102
|
+
description: 'A liquid blob behind the element wobbles and bulges toward the pointer (persistent; `color`, `wobble` 0–1, `bulge` px).',
|
|
103
|
+
defaults: { color: '#7c5cff', wobble: 0.5, bulge: 10, points: 10 },
|
|
104
|
+
run: (el, o, ctx) => {
|
|
105
|
+
if (getComputedStyle(el).position === 'static')
|
|
106
|
+
el.style.position = 'relative';
|
|
107
|
+
const prevZ = el.style.isolation;
|
|
108
|
+
el.style.isolation = 'isolate';
|
|
109
|
+
const svg = document.createElementNS(NS, 'svg');
|
|
110
|
+
svg.setAttribute('aria-hidden', 'true');
|
|
111
|
+
svg.setAttribute('width', '100%');
|
|
112
|
+
svg.setAttribute('height', '100%');
|
|
113
|
+
svg.style.cssText = 'position:absolute;inset:-14px;width:calc(100% + 28px);height:calc(100% + 28px);z-index:-1;pointer-events:none;overflow:visible';
|
|
114
|
+
const path = document.createElementNS(NS, 'path');
|
|
115
|
+
path.setAttribute('fill', o.color);
|
|
116
|
+
svg.appendChild(path);
|
|
117
|
+
el.prepend(svg);
|
|
118
|
+
const n = Math.max(6, o.points | 0);
|
|
119
|
+
let px = 0.5;
|
|
120
|
+
let py = 0.5;
|
|
121
|
+
let hover = 0;
|
|
122
|
+
let target = 0;
|
|
123
|
+
let h = 0;
|
|
124
|
+
const t0 = performance.now();
|
|
125
|
+
const draw = (now) => {
|
|
126
|
+
const w = el.offsetWidth + 28 || 128;
|
|
127
|
+
const hh = el.offsetHeight + 28 || 72;
|
|
128
|
+
const t = ctx.reduced ? 0 : (now - t0) / 1000;
|
|
129
|
+
hover += (target - hover) * 0.12;
|
|
130
|
+
const pts = [];
|
|
131
|
+
for (let i = 0; i < n; i++) {
|
|
132
|
+
const a = (i / n) * Math.PI * 2;
|
|
133
|
+
const cx = Math.cos(a);
|
|
134
|
+
const cy = Math.sin(a);
|
|
135
|
+
const toward = Math.max(0, cx * (px - 0.5) * 2 + cy * (py - 0.5) * 2);
|
|
136
|
+
const r = 1 + (ctx.reduced ? 0 : o.wobble * 0.06 * Math.sin(t * 2.2 + i * 1.7)) + (toward * o.bulge * hover) / Math.min(w, hh);
|
|
137
|
+
pts.push([w / 2 + cx * (w / 2 - 12) * r, hh / 2 + cy * (hh / 2 - 12) * r]);
|
|
138
|
+
}
|
|
139
|
+
// smooth closed curve through the points (Catmull-Rom → cubic Bézier)
|
|
140
|
+
let d = `M${pts[0][0].toFixed(1)} ${pts[0][1].toFixed(1)}`;
|
|
141
|
+
for (let i = 0; i < n; i++) {
|
|
142
|
+
const p0 = pts[(i - 1 + n) % n];
|
|
143
|
+
const p1 = pts[i];
|
|
144
|
+
const p2 = pts[(i + 1) % n];
|
|
145
|
+
const p3 = pts[(i + 2) % n];
|
|
146
|
+
d += `C${(p1[0] + (p2[0] - p0[0]) / 6).toFixed(1)} ${(p1[1] + (p2[1] - p0[1]) / 6).toFixed(1)} ${(p2[0] - (p3[0] - p1[0]) / 6).toFixed(1)} ${(p2[1] - (p3[1] - p1[1]) / 6).toFixed(1)} ${p2[0].toFixed(1)} ${p2[1].toFixed(1)}`;
|
|
147
|
+
}
|
|
148
|
+
path.setAttribute('d', d + 'Z');
|
|
149
|
+
h = !ctx.reduced && (target || Math.abs(hover) > 0.01 || o.wobble) ? raf(draw) : 0;
|
|
150
|
+
};
|
|
151
|
+
const kick = () => {
|
|
152
|
+
if (!h)
|
|
153
|
+
h = raf(draw);
|
|
154
|
+
};
|
|
155
|
+
const move = (e) => {
|
|
156
|
+
const r = el.getBoundingClientRect();
|
|
157
|
+
px = r.width ? (e.clientX - r.left) / r.width : 0.5;
|
|
158
|
+
py = r.height ? (e.clientY - r.top) / r.height : 0.5;
|
|
159
|
+
target = 1;
|
|
160
|
+
kick();
|
|
161
|
+
};
|
|
162
|
+
const leave = () => {
|
|
163
|
+
target = 0;
|
|
164
|
+
kick();
|
|
165
|
+
};
|
|
166
|
+
draw(t0);
|
|
167
|
+
el.addEventListener('pointermove', move);
|
|
168
|
+
el.addEventListener('pointerleave', leave);
|
|
169
|
+
return () => {
|
|
170
|
+
caf(h);
|
|
171
|
+
el.removeEventListener('pointermove', move);
|
|
172
|
+
el.removeEventListener('pointerleave', leave);
|
|
173
|
+
svg.remove();
|
|
174
|
+
el.style.isolation = prevZ;
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'stroke-draw',
|
|
180
|
+
kind: 'enter',
|
|
181
|
+
description: 'Every stroke of an inline SVG draws itself, staggered, then the fills fade in (`duration`, `stagger`).',
|
|
182
|
+
defaults: { duration: 1200, stagger: 120 },
|
|
183
|
+
run: (el, o, ctx) => {
|
|
184
|
+
const shapes = Array.from(el.querySelectorAll('path, line, polyline, polygon, circle, ellipse, rect'));
|
|
185
|
+
return shared.all(shapes.map((s, i) => {
|
|
186
|
+
let L = 0;
|
|
187
|
+
try {
|
|
188
|
+
L = typeof s.getTotalLength === 'function' ? s.getTotalLength() : 0;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
L = 0;
|
|
192
|
+
}
|
|
193
|
+
if (ctx.reduced || !L)
|
|
194
|
+
return ctx.animate(s, [{ opacity: 0 }, { opacity: 1 }], { duration: 300, delay: i * 40, fill: 'backwards' });
|
|
195
|
+
const fill = getComputedStyle(s).fillOpacity || '1';
|
|
196
|
+
return ctx.animate(s, [
|
|
197
|
+
{ strokeDasharray: `${L}`, strokeDashoffset: `${L}`, fillOpacity: 0 },
|
|
198
|
+
{ strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: 0, offset: 0.75 },
|
|
199
|
+
{ strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: fill },
|
|
200
|
+
], { duration: o.duration, delay: i * o.stagger, easing: 'ease-in-out', fill: 'backwards' });
|
|
201
|
+
}));
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: 'noise-reveal',
|
|
206
|
+
kind: 'enter',
|
|
207
|
+
description: 'The element condenses out of SVG turbulence — displacement and blur settle to zero (`duration`, `strength`). An SVG-filter transition.',
|
|
208
|
+
defaults: { duration: 1100, strength: 60 },
|
|
209
|
+
run: (el, o, ctx) => {
|
|
210
|
+
if (ctx.reduced)
|
|
211
|
+
return ctx.animate(el, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 });
|
|
212
|
+
const id = `usa-noise-${Math.random().toString(36).slice(2, 8)}`;
|
|
213
|
+
const svg = document.createElementNS(NS, 'svg');
|
|
214
|
+
svg.setAttribute('aria-hidden', 'true');
|
|
215
|
+
svg.setAttribute('width', '0');
|
|
216
|
+
svg.setAttribute('height', '0');
|
|
217
|
+
svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';
|
|
218
|
+
svg.innerHTML = `<filter id="${id}" x="-20%" y="-20%" width="140%" height="140%"><feTurbulence type="fractalNoise" baseFrequency="0.035" numOctaves="2" result="n"/><feDisplacementMap in="SourceGraphic" in2="n" scale="${o.strength}" xChannelSelector="R" yChannelSelector="G"/><feGaussianBlur stdDeviation="0"/></filter>`;
|
|
219
|
+
document.body.appendChild(svg);
|
|
220
|
+
const disp = svg.querySelector('feDisplacementMap');
|
|
221
|
+
const blur = svg.querySelector('feGaussianBlur');
|
|
222
|
+
const prev = el.style.filter;
|
|
223
|
+
el.style.filter = `url(#${id})`;
|
|
224
|
+
const fade = ctx.animate(el, [{ opacity: 0 }, { opacity: 1, offset: 0.4 }, { opacity: 1 }], { duration: o.duration, easing: 'ease-out' });
|
|
225
|
+
const t0 = performance.now();
|
|
226
|
+
return new Promise((done) => {
|
|
227
|
+
const end = () => {
|
|
228
|
+
el.style.filter = prev;
|
|
229
|
+
svg.remove();
|
|
230
|
+
done();
|
|
231
|
+
};
|
|
232
|
+
const tick = (now) => {
|
|
233
|
+
const k = Math.min(1, (now - t0) / o.duration);
|
|
234
|
+
const e = 1 - Math.pow(1 - k, 3);
|
|
235
|
+
disp?.setAttribute('scale', ((1 - e) * o.strength).toFixed(2));
|
|
236
|
+
blur?.setAttribute('stdDeviation', ((1 - e) * 4).toFixed(2));
|
|
237
|
+
if (k < 1)
|
|
238
|
+
raf(tick);
|
|
239
|
+
else
|
|
240
|
+
end();
|
|
241
|
+
};
|
|
242
|
+
if (!raf(tick))
|
|
243
|
+
(fade ? fade.finished.then(end, end) : end());
|
|
244
|
+
});
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'icon-swap',
|
|
249
|
+
kind: 'click',
|
|
250
|
+
description: 'Cycles through the element\'s child icons with a gooey morph — blur, scale and rotate crossfade (`duration`). The visible icon is the only one not `aria-hidden`.',
|
|
251
|
+
defaults: { duration: 420 },
|
|
252
|
+
run: (el, o, ctx) => {
|
|
253
|
+
const icons = Array.from(el.children);
|
|
254
|
+
if (icons.length < 2)
|
|
255
|
+
return null;
|
|
256
|
+
if (!el.dataset.usaSwap) {
|
|
257
|
+
el.dataset.usaSwap = '0';
|
|
258
|
+
el.style.display = el.style.display || 'inline-grid';
|
|
259
|
+
icons.forEach((ic, i) => {
|
|
260
|
+
ic.style.gridArea = '1 / 1';
|
|
261
|
+
ic.style.opacity = i ? '0' : '1';
|
|
262
|
+
ic.setAttribute('aria-hidden', String(i !== 0));
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
const cur = Number(el.dataset.usaSwap) || 0;
|
|
266
|
+
const nxt = (cur + 1) % icons.length;
|
|
267
|
+
el.dataset.usaSwap = String(nxt);
|
|
268
|
+
const a = icons[cur];
|
|
269
|
+
const b = icons[nxt];
|
|
270
|
+
a.setAttribute('aria-hidden', 'true');
|
|
271
|
+
b.setAttribute('aria-hidden', 'false');
|
|
272
|
+
a.style.opacity = '0';
|
|
273
|
+
b.style.opacity = '1';
|
|
274
|
+
if (ctx.reduced)
|
|
275
|
+
return shared.all([ctx.animate(a, [{ opacity: 1 }, { opacity: 0 }], { duration: 150 }), ctx.animate(b, [{ opacity: 0 }, { opacity: 1 }], { duration: 150 })]);
|
|
276
|
+
return shared.all([
|
|
277
|
+
ctx.animate(a, [{ opacity: 1, transform: 'none', filter: 'blur(0)' }, { opacity: 0, transform: 'scale(.3) rotate(-90deg)', filter: 'blur(6px)' }], { duration: o.duration, easing: 'cubic-bezier(.5,0,.75,0)' }),
|
|
278
|
+
ctx.animate(b, [{ opacity: 0, transform: 'scale(.3) rotate(90deg)', filter: 'blur(6px)' }, { opacity: 1, transform: 'scale(1.15) rotate(-8deg)', filter: 'blur(0)', offset: 0.7 }, { opacity: 1, transform: 'none', filter: 'blur(0)' }], { duration: o.duration * 1.3, easing: 'cubic-bezier(.2,.8,.3,1.2)' }),
|
|
279
|
+
]);
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
];
|
|
283
|
+
/** Register the 6.6 morph & SVG pack (idempotent). */
|
|
284
|
+
function registerMorphEffects2() {
|
|
285
|
+
registry.registerEffects(MORPH2_FX);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
exports.MORPH2_FX = MORPH2_FX;
|
|
289
|
+
exports.pointsToPath = pointsToPath;
|
|
290
|
+
exports.registerMorphEffects2 = registerMorphEffects2;
|
|
291
|
+
exports.samplePath = samplePath;
|
|
292
|
+
//# sourceMappingURL=fx-morph.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fx-morph.cjs","sources":["../../src/components/fx2/morph2.ts"],"sourcesContent":["/**\n * 6.6 — Morph & SVG 2.0 (`motionary/components/fx-morph`), registered\n * through `registerEffect()`:\n *\n * - `path-morph` (loop) — an SVG `<path>` flows between shapes (`paths`, any\n * number of `d` strings): both shapes are resampled to the same number of\n * points, so paths with different commands still morph smoothly.\n * - `blob-button` (hover, persistent) — a liquid blob behind the element\n * wobbles and bulges toward the pointer.\n * - `stroke-draw` (enter) — every stroke in an inline SVG draws itself,\n * staggered, then the fills fade in.\n * - `noise-reveal` (enter) — the element condenses out of SVG turbulence\n * (displacement + blur) — an SVG-filter transition.\n * - `icon-swap` (click) — cycles through the element's child icons with a\n * gooey morph (blur + scale + rotate crossfade).\n *\n * Reduced motion: no loops / wobble; enter effects and swaps fade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\n\nconst NS = 'http://www.w3.org/2000/svg';\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\n/** Sample `d` into `n` points (needs SVG geometry support; `null` without it). */\nexport function samplePath(d: string, n = 64): [number, number][] | null {\n const p = document.createElementNS(NS, 'path') as SVGPathElement;\n p.setAttribute('d', d);\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.appendChild(p);\n document.body.appendChild(svg);\n try {\n if (typeof p.getTotalLength !== 'function') return null;\n const L = p.getTotalLength();\n if (!L) return null;\n const out: [number, number][] = [];\n for (let i = 0; i < n; i++) {\n const pt = p.getPointAtLength((i / n) * L);\n out.push([pt.x, pt.y]);\n }\n return out;\n } catch {\n return null;\n } finally {\n svg.remove();\n }\n}\n\n/** Points → closed path `d`. */\nexport const pointsToPath = (pts: [number, number][]): string => (pts.length ? `M${pts.map(([x, y]) => `${x.toFixed(2)} ${y.toFixed(2)}`).join('L')}Z` : '');\n\n/** Rotate `b` so its start point is the one closest to `a[0]` (less twisting). */\nfunction align(a: [number, number][], b: [number, number][]): [number, number][] {\n let best = 0;\n let bd = Infinity;\n for (let i = 0; i < b.length; i++) {\n const d = (b[i][0] - a[0][0]) ** 2 + (b[i][1] - a[0][1]) ** 2;\n if (d < bd) {\n bd = d;\n best = i;\n }\n }\n return b.slice(best).concat(b.slice(0, best));\n}\n\nconst ease = (t: number) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);\n\nexport const MORPH2_FX: EffectDefinition[] = [\n {\n name: 'path-morph',\n kind: 'loop',\n description: 'An SVG `<path>` flows between shapes (`paths`: `d` strings; `duration` per shape, `hold` ms). Shapes are resampled, so any two paths morph.',\n defaults: { paths: [] as string[], duration: 1200, hold: 600, points: 72 },\n run: (el: HTMLElement, o: any) => {\n const path = ((el as Element).localName === 'path' ? el : el.querySelector('path')) as unknown as SVGPathElement | null;\n if (!path) return;\n const ds: string[] = [path.getAttribute('d') || '', ...(o.paths || [])].filter(Boolean);\n const shapes = ds.map((d) => samplePath(d, o.points)).filter(Boolean) as [number, number][][];\n if (shapes.length < 2) return;\n for (let i = 1; i < shapes.length; i++) shapes[i] = align(shapes[i - 1], shapes[i]);\n const orig = path.getAttribute('d');\n let i = 0;\n let t0 = performance.now();\n let h = 0;\n const tick = (now: number) => {\n const a = shapes[i % shapes.length];\n const b = shapes[(i + 1) % shapes.length];\n const k = Math.min(1, Math.max(0, (now - t0) / o.duration));\n const e = ease(k);\n path.setAttribute('d', pointsToPath(a.map(([x, y], j) => [x + (b[j][0] - x) * e, y + (b[j][1] - y) * e])));\n if (now - t0 > o.duration + o.hold) {\n i++;\n t0 = now;\n }\n h = raf(tick);\n };\n h = raf(tick);\n return () => {\n caf(h);\n if (orig !== null) path.setAttribute('d', orig);\n };\n },\n },\n {\n name: 'blob-button',\n kind: 'hover',\n reduced: 'run',\n description: 'A liquid blob behind the element wobbles and bulges toward the pointer (persistent; `color`, `wobble` 0–1, `bulge` px).',\n defaults: { color: '#7c5cff', wobble: 0.5, bulge: 10, points: 10 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevZ = el.style.isolation;\n el.style.isolation = 'isolate';\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n svg.style.cssText = 'position:absolute;inset:-14px;width:calc(100% + 28px);height:calc(100% + 28px);z-index:-1;pointer-events:none;overflow:visible';\n const path = document.createElementNS(NS, 'path');\n path.setAttribute('fill', o.color);\n svg.appendChild(path);\n el.prepend(svg);\n const n = Math.max(6, o.points | 0);\n let px = 0.5;\n let py = 0.5;\n let hover = 0;\n let target = 0;\n let h = 0;\n const t0 = performance.now();\n const draw = (now: number) => {\n const w = el.offsetWidth + 28 || 128;\n const hh = el.offsetHeight + 28 || 72;\n const t = ctx.reduced ? 0 : (now - t0) / 1000;\n hover += (target - hover) * 0.12;\n const pts: [number, number][] = [];\n for (let i = 0; i < n; i++) {\n const a = (i / n) * Math.PI * 2;\n const cx = Math.cos(a);\n const cy = Math.sin(a);\n const toward = Math.max(0, cx * (px - 0.5) * 2 + cy * (py - 0.5) * 2);\n const r = 1 + (ctx.reduced ? 0 : o.wobble * 0.06 * Math.sin(t * 2.2 + i * 1.7)) + (toward * o.bulge * hover) / Math.min(w, hh);\n pts.push([w / 2 + cx * (w / 2 - 12) * r, hh / 2 + cy * (hh / 2 - 12) * r]);\n }\n // smooth closed curve through the points (Catmull-Rom → cubic Bézier)\n let d = `M${pts[0][0].toFixed(1)} ${pts[0][1].toFixed(1)}`;\n for (let i = 0; i < n; i++) {\n const p0 = pts[(i - 1 + n) % n];\n const p1 = pts[i];\n const p2 = pts[(i + 1) % n];\n const p3 = pts[(i + 2) % n];\n d += `C${(p1[0] + (p2[0] - p0[0]) / 6).toFixed(1)} ${(p1[1] + (p2[1] - p0[1]) / 6).toFixed(1)} ${(p2[0] - (p3[0] - p1[0]) / 6).toFixed(1)} ${(p2[1] - (p3[1] - p1[1]) / 6).toFixed(1)} ${p2[0].toFixed(1)} ${p2[1].toFixed(1)}`;\n }\n path.setAttribute('d', d + 'Z');\n h = !ctx.reduced && (target || Math.abs(hover) > 0.01 || o.wobble) ? raf(draw) : 0;\n };\n const kick = () => {\n if (!h) h = raf(draw);\n };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n px = r.width ? (e.clientX - r.left) / r.width : 0.5;\n py = r.height ? (e.clientY - r.top) / r.height : 0.5;\n target = 1;\n kick();\n };\n const leave = () => {\n target = 0;\n kick();\n };\n draw(t0);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n return () => {\n caf(h);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n svg.remove();\n el.style.isolation = prevZ;\n };\n },\n },\n {\n name: 'stroke-draw',\n kind: 'enter',\n description: 'Every stroke of an inline SVG draws itself, staggered, then the fills fade in (`duration`, `stagger`).',\n defaults: { duration: 1200, stagger: 120 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const shapes = Array.from(el.querySelectorAll<SVGGeometryElement>('path, line, polyline, polygon, circle, ellipse, rect'));\n return all(shapes.map((s, i) => {\n let L = 0;\n try {\n L = typeof s.getTotalLength === 'function' ? s.getTotalLength() : 0;\n } catch {\n L = 0;\n }\n if (ctx.reduced || !L) return ctx.animate(s, [{ opacity: 0 }, { opacity: 1 }], { duration: 300, delay: i * 40, fill: 'backwards' });\n const fill = getComputedStyle(s).fillOpacity || '1';\n return ctx.animate(s, [\n { strokeDasharray: `${L}`, strokeDashoffset: `${L}`, fillOpacity: 0 },\n { strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: 0, offset: 0.75 },\n { strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: fill },\n ], { duration: o.duration, delay: i * o.stagger, easing: 'ease-in-out', fill: 'backwards' });\n }));\n },\n },\n {\n name: 'noise-reveal',\n kind: 'enter',\n description: 'The element condenses out of SVG turbulence — displacement and blur settle to zero (`duration`, `strength`). An SVG-filter transition.',\n defaults: { duration: 1100, strength: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return ctx.animate(el, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 });\n const id = `usa-noise-${Math.random().toString(36).slice(2, 8)}`;\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.innerHTML = `<filter id=\"${id}\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.035\" numOctaves=\"2\" result=\"n\"/><feDisplacementMap in=\"SourceGraphic\" in2=\"n\" scale=\"${o.strength}\" xChannelSelector=\"R\" yChannelSelector=\"G\"/><feGaussianBlur stdDeviation=\"0\"/></filter>`;\n document.body.appendChild(svg);\n const disp = svg.querySelector('feDisplacementMap');\n const blur = svg.querySelector('feGaussianBlur');\n const prev = el.style.filter;\n el.style.filter = `url(#${id})`;\n const fade = ctx.animate(el, [{ opacity: 0 }, { opacity: 1, offset: 0.4 }, { opacity: 1 }], { duration: o.duration, easing: 'ease-out' });\n const t0 = performance.now();\n return new Promise<void>((done) => {\n const end = () => {\n el.style.filter = prev;\n svg.remove();\n done();\n };\n const tick = (now: number) => {\n const k = Math.min(1, (now - t0) / o.duration);\n const e = 1 - Math.pow(1 - k, 3);\n disp?.setAttribute('scale', ((1 - e) * o.strength).toFixed(2));\n blur?.setAttribute('stdDeviation', ((1 - e) * 4).toFixed(2));\n if (k < 1) raf(tick);\n else end();\n };\n if (!raf(tick)) (fade ? fade.finished.then(end, end) : end());\n });\n },\n },\n {\n name: 'icon-swap',\n kind: 'click',\n description: 'Cycles through the element\\'s child icons with a gooey morph — blur, scale and rotate crossfade (`duration`). The visible icon is the only one not `aria-hidden`.',\n defaults: { duration: 420 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const icons = Array.from(el.children) as HTMLElement[];\n if (icons.length < 2) return null;\n if (!el.dataset.usaSwap) {\n el.dataset.usaSwap = '0';\n el.style.display = el.style.display || 'inline-grid';\n icons.forEach((ic, i) => {\n ic.style.gridArea = '1 / 1';\n ic.style.opacity = i ? '0' : '1';\n ic.setAttribute('aria-hidden', String(i !== 0));\n });\n }\n const cur = Number(el.dataset.usaSwap) || 0;\n const nxt = (cur + 1) % icons.length;\n el.dataset.usaSwap = String(nxt);\n const a = icons[cur];\n const b = icons[nxt];\n a.setAttribute('aria-hidden', 'true');\n b.setAttribute('aria-hidden', 'false');\n a.style.opacity = '0';\n b.style.opacity = '1';\n if (ctx.reduced) return all([ctx.animate(a, [{ opacity: 1 }, { opacity: 0 }], { duration: 150 }), ctx.animate(b, [{ opacity: 0 }, { opacity: 1 }], { duration: 150 })]);\n return all([\n ctx.animate(a, [{ opacity: 1, transform: 'none', filter: 'blur(0)' }, { opacity: 0, transform: 'scale(.3) rotate(-90deg)', filter: 'blur(6px)' }], { duration: o.duration, easing: 'cubic-bezier(.5,0,.75,0)' }),\n ctx.animate(b, [{ opacity: 0, transform: 'scale(.3) rotate(90deg)', filter: 'blur(6px)' }, { opacity: 1, transform: 'scale(1.15) rotate(-8deg)', filter: 'blur(0)', offset: 0.7 }, { opacity: 1, transform: 'none', filter: 'blur(0)' }], { duration: o.duration * 1.3, easing: 'cubic-bezier(.2,.8,.3,1.2)' }),\n ]);\n },\n },\n];\n\n/** Register the 6.6 morph & SVG pack (idempotent). */\nexport function registerMorphEffects2(): void {\n registerEffects(MORPH2_FX);\n}\n"],"names":["all","registerEffects"],"mappings":"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"}
|