use-scroll-animate 9.0.0 → 9.2.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 @@
1
+ {"version":3,"file":"fx-lottie.cjs","sources":["../../src/components/fx2/lottie.ts"],"sourcesContent":["/**\n * 9.2 — Lottie import (`motionary/fx/lottie`, also `motionary/components/fx-lottie`).\n *\n * `lottieToKeyframes(json)` converts the layer transforms of a Lottie\n * (bodymovin) JSON — position `p`, scale `s`, rotation `r`, opacity `o`\n * (static or keyframed) — into WAAPI keyframes per layer plus the duration\n * (`op − ip` frames at `fr` fps), so a designer's After Effects motion runs\n * on Motionary's clock without lottie-web. `lottieToSvg(json)` renders the\n * simple vector shapes (ellipse `el`, rect `rc`, path `sh`, fill `fl`,\n * stroke `st`) as SVG groups, one per layer. `riveInputs(instance, el, map)`\n * wires Motionary-style triggers (hover / press / click / enter) to the\n * boolean / trigger inputs of a Rive state machine you created with the\n * Rive runtime.\n *\n * Effects: `lottie-play` (attention) plays the keyframes stored on an\n * element by `<usa-lottie>`; `icon-pop` (click) a sticker-like pop with a\n * ring burst for icons. Reduced motion: no motion.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\n\ntype Prop = { a?: number; k: any };\nexport interface LottieLayerMotion {\n name: string;\n index: number;\n keyframes: Keyframe[];\n anchor: [number, number];\n}\nexport interface LottieMotion {\n width: number;\n height: number;\n duration: number;\n layers: LottieLayerMotion[];\n}\n\nconst arr = (v: any): number[] => (Array.isArray(v) ? v.map(Number) : [Number(v)]);\n/** Frames (t) → values for one transform property (static props give one key at t = ip) (9.2). */\nfunction track(p: Prop | undefined, ip: number): { t: number; v: number[] }[] {\n if (!p) return [];\n if (!p.a || !Array.isArray(p.k) || typeof p.k[0] !== 'object') return [{ t: ip, v: arr(p.k) }];\n return (p.k as any[]).filter((k) => k && k.s != null).map((k) => ({ t: Number(k.t), v: arr(k.s) }));\n}\nconst at = (tr: { t: number; v: number[] }[], t: number): number[] | undefined => {\n if (!tr.length) return undefined;\n if (t <= tr[0].t) return tr[0].v;\n for (let i = 1; i < tr.length; i++)\n if (t <= tr[i].t) {\n const a = tr[i - 1];\n const b = tr[i];\n const u = b.t === a.t ? 1 : (t - a.t) / (b.t - a.t);\n return a.v.map((x, j) => x + ((b.v[j] ?? x) - x) * u);\n }\n return tr[tr.length - 1].v;\n};\nconst r2 = (n: number) => Math.round(n * 100) / 100;\n\n/** Lottie JSON → WAAPI keyframes per layer + duration (ms) (9.2). */\nexport function lottieToKeyframes(json: any): LottieMotion {\n const d = typeof json === 'string' ? JSON.parse(json) : json;\n const fr = Number(d?.fr) || 30;\n const ip = Number(d?.ip) || 0;\n const op = Number(d?.op) || ip + fr;\n const span = Math.max(1, op - ip);\n const layers: LottieLayerMotion[] = (Array.isArray(d?.layers) ? d.layers : []).map((L: any, index: number) => {\n const ks = L?.ks || {};\n const tracks = { p: track(ks.p, ip), s: track(ks.s, ip), r: track(ks.r, ip), o: track(ks.o, ip) };\n const anchor = (arr(ks.a?.k ?? [0, 0]).slice(0, 2) as [number, number]) || [0, 0];\n const times = Array.from(new Set([ip, op, ...Object.values(tracks).flat().map((k) => k.t)])).filter((t) => t >= ip && t <= op).sort((a, b) => a - b);\n const keyframes: Keyframe[] = times.map((t) => {\n const p = at(tracks.p, t);\n const s = at(tracks.s, t);\n const r = at(tracks.r, t);\n const o = at(tracks.o, t);\n // Lottie order: move the anchor to the position, rotate + scale around the anchor\n const pp = p || anchor;\n const tf: string[] = [`translate(${r2(pp[0])}px, ${r2(pp[1] ?? 0)}px)`];\n if (r) tf.push(`rotate(${r2(r[0])}deg)`);\n if (s) tf.push(`scale(${r2(s[0] / 100)}, ${r2((s[1] ?? s[0]) / 100)})`);\n tf.push(`translate(${r2(-anchor[0])}px, ${r2(-anchor[1])}px)`);\n const k: Keyframe = { offset: r2((t - ip) / span), transform: tf.join(' ') };\n if (o) k.opacity = r2(o[0] / 100);\n return k;\n });\n return { name: String(L?.nm ?? `layer ${index + 1}`), index, keyframes, anchor };\n });\n return { width: Number(d?.w) || 100, height: Number(d?.h) || 100, duration: Math.round((span / fr) * 1000), layers };\n}\n\nconst hex = (c: any): string => {\n const v = arr(c?.k ?? c).slice(0, 3).map((x) => Math.round(Math.min(1, Math.max(0, x)) * 255));\n return `#${v.map((x) => x.toString(16).padStart(2, '0')).join('')}`;\n};\nfunction shapes(items: any[], fill: string, stroke: string, sw: number): string {\n let f = fill;\n let s = stroke;\n let w = sw;\n for (const it of items) {\n if (it?.ty === 'fl') f = hex(it.c);\n if (it?.ty === 'st') {\n s = hex(it.c);\n w = Number(it.w?.k) || 2;\n }\n }\n const paint = `fill=\"${f}\"${s !== 'none' ? ` stroke=\"${s}\" stroke-width=\"${w}\"` : ''}`;\n return items\n .map((it) => {\n if (it?.ty === 'gr') return `<g>${shapes(it.it || [], f, s, w)}</g>`;\n if (it?.ty === 'el') {\n const [cx, cy] = arr(it.p?.k ?? [0, 0]);\n const [sx, sy] = arr(it.s?.k ?? [10, 10]);\n return `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${sx / 2}\" ry=\"${(sy ?? sx) / 2}\" ${paint}/>`;\n }\n if (it?.ty === 'rc') {\n const [cx, cy] = arr(it.p?.k ?? [0, 0]);\n const [sx, sy] = arr(it.s?.k ?? [10, 10]);\n return `<rect x=\"${cx - sx / 2}\" y=\"${cy - sy / 2}\" width=\"${sx}\" height=\"${sy}\" rx=\"${Number(it.r?.k) || 0}\" ${paint}/>`;\n }\n if (it?.ty === 'sh') {\n const k = it.ks?.k;\n const v: number[][] = k?.v || [];\n if (!v.length) return '';\n const i: number[][] = k.i || [];\n const o: number[][] = k.o || [];\n let dd = `M${v[0][0]} ${v[0][1]}`;\n for (let n = 1; n < v.length + (k.c ? 1 : 0); n++) {\n const a = v[n - 1];\n const b = v[n % v.length];\n const c1 = [a[0] + (o[n - 1]?.[0] || 0), a[1] + (o[n - 1]?.[1] || 0)];\n const c2 = [b[0] + (i[n % v.length]?.[0] || 0), b[1] + (i[n % v.length]?.[1] || 0)];\n dd += ` C${c1[0]} ${c1[1]} ${c2[0]} ${c2[1]} ${b[0]} ${b[1]}`;\n }\n return `<path d=\"${dd}${k.c ? 'Z' : ''}\" ${paint}/>`;\n }\n return '';\n })\n .join('');\n}\n\n/** Render the simple vector layers of a Lottie JSON as an SVG string (one `<g data-layer>` per layer, top layer last) (9.2). */\nexport function lottieToSvg(json: any): string {\n const d = typeof json === 'string' ? JSON.parse(json) : json;\n const w = Number(d?.w) || 100;\n const h = Number(d?.h) || 100;\n const ls: any[] = Array.isArray(d?.layers) ? d.layers : [];\n const groups = ls\n .map((L, i) => ({ L, i }))\n .reverse()\n .map(({ L, i }) => `<g data-layer=\"${i}\"><g class=\"usa-lt-inner\">${shapes(L?.shapes || [], '#000', 'none', 0)}</g></g>`)\n .join('');\n return `<svg viewBox=\"0 0 ${w} ${h}\" width=\"${w}\" height=\"${h}\" aria-hidden=\"true\">${groups}</svg>`;\n}\n\n/** Wire hover / press / click / enter on `el` to a Rive state machine's inputs: map { hover: 'isHover', click: 'fire' } (9.2). */\nexport function riveInputs(instance: { stateMachineInputs(sm: string): any[] }, stateMachine: string, el: HTMLElement, map: Partial<Record<'hover' | 'press' | 'click' | 'enter', string>>): () => void {\n const inputs = (instance.stateMachineInputs(stateMachine) || []) as { name: string; type?: number; value?: boolean; fire?: () => void }[];\n const get = (n?: string) => inputs.find((i) => i.name === n);\n const set = (n: string | undefined, v: boolean) => {\n const i = get(n);\n if (!i) return;\n // Rive StateMachineInputType: 58 = trigger (fire on true), 59 = boolean\n if (i.type === 58 && typeof i.fire === 'function') {\n if (v) i.fire();\n } else i.value = v;\n };\n const offs: (() => void)[] = [];\n const on = (t: string, fn: (e: Event) => void) => {\n el.addEventListener(t, fn);\n offs.push(() => el.removeEventListener(t, fn));\n };\n if (map.hover) (on('pointerenter', () => set(map.hover, true)), on('pointerleave', () => set(map.hover, false)));\n if (map.press) (on('pointerdown', () => set(map.press, true)), on('pointerup', () => set(map.press, false)));\n if (map.click) on('click', () => set(map.click, true));\n if (map.enter && typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver((es) => es.forEach((e) => set(map.enter, e.isIntersecting)));\n io.observe(el);\n offs.push(() => io.disconnect());\n }\n return () => offs.splice(0).forEach((f) => f());\n}\n\nexport const LOTTIE_FX: EffectDefinition[] = [\n {\n name: 'lottie-play',\n kind: 'attention',\n description: 'Replays the Lottie keyframes stored on an element by <usa-lottie> (or a `json` option) once.',\n defaults: {},\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return;\n const host = el.closest('usa-lottie') as (HTMLElement & { play?: () => void }) | null;\n if (host?.play) return void host.play();\n if (!o.json) return;\n const m = lottieToKeyframes(o.json);\n return Promise.all(m.layers.map((l) => ctx.animate(el, l.keyframes, { duration: m.duration })?.finished.catch(() => undefined))).then(() => undefined);\n },\n },\n {\n name: 'icon-pop',\n kind: 'click',\n description: 'A sticker-like pop with a ring burst, for icons (`color`).',\n defaults: { color: '#f43f5e', duration: 500 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return;\n if (getComputedStyle(el).position === 'static') {\n const prev = el.style.position;\n el.style.position = 'relative';\n ctx.onCleanup(() => (el.style.position = prev));\n }\n const ring = document.createElement('span');\n ring.setAttribute('aria-hidden', 'true');\n Object.assign(ring.style, { position: 'absolute', inset: '0', borderRadius: '50%', border: `2px solid ${o.color}`, pointerEvents: 'none' });\n el.appendChild(ring);\n ctx.onCleanup(() => ring.remove());\n const a = ctx.animate(el, [{ transform: 'scale(1)' }, { transform: 'scale(.8)', offset: 0.2 }, { transform: 'scale(1.2)', offset: 0.55 }, { transform: 'scale(1)' }], { duration: o.duration, easing: 'cubic-bezier(.3,1.5,.5,1)' });\n const b = ctx.animate(ring, [{ transform: 'scale(.6)', opacity: 1 }, { transform: 'scale(1.8)', opacity: 0 }], { duration: o.duration, easing: 'ease-out' });\n const end = () => ring.remove();\n return Promise.all([a?.finished.catch(() => undefined), b?.finished.catch(() => undefined)]).then(end, end);\n },\n },\n];\n\n/** Register lottie-play and icon-pop (9.2). */\nexport function registerLottiePack(): void {\n registerEffects(LOTTIE_FX);\n}\n"],"names":["registerEffects"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ type MotionSensitivity = 'full' | 'gentle' | 'minimal' | 'static';
2
+ type Cleanup = () => void;
3
+
4
+ /**
5
+ * 5.0 — unified plugin-style effect registration. Every effect (built-in or
6
+ * yours) is a plain object registered once and played the same way:
7
+ * `playEffect(el, name)`, `bindEffect(el, name, { trigger })` or
8
+ * `<usa-fx effect="name" trigger="click">`. Effects get a context that
9
+ * already applies reduced motion, motion sensitivity, intensity and the
10
+ * animation budget.
11
+ */
12
+
13
+ declare const EFFECT_KINDS: readonly ["enter", "exit", "attention", "click", "hover", "card", "loop", "page", "background", "text", "cursor", "scroll"];
14
+ type EffectKind = (typeof EFFECT_KINDS)[number];
15
+ interface EffectContext {
16
+ /** Reduced motion applies (OS setting, `minimal` / `static` sensitivity). */
17
+ readonly reduced: boolean;
18
+ readonly sensitivity: MotionSensitivity;
19
+ /** The triggering event (pointer position for click effects), if any. */
20
+ readonly event?: Event;
21
+ /** `el.animate()` with the library's motion rules (may return `null`). */
22
+ animate(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;
23
+ /** Register teardown for long-running effects (loops, listeners). */
24
+ onCleanup(fn: Cleanup): void;
25
+ }
26
+ interface EffectDefinition<O extends Record<string, unknown> = Record<string, any>> {
27
+ /** Unique, kebab-case. */
28
+ name: string;
29
+ kind: EffectKind;
30
+ /** One line for docs and the gallery. */
31
+ description?: string;
32
+ /** Option defaults (merged under the caller's options). */
33
+ defaults?: Partial<O>;
34
+ /**
35
+ * Under reduced motion: `'skip'` (do nothing — default for loop, background
36
+ * and cursor effects) or `'run'` (run with `ctx.reduced === true`, the
37
+ * effect degrades itself — default for everything else).
38
+ */
39
+ reduced?: 'skip' | 'run';
40
+ /** Play the effect. Return an Animation / Promise to be awaited, or a cleanup. */
41
+ run(el: HTMLElement, options: O, ctx: EffectContext): void | Cleanup | Animation | null | Promise<unknown>;
42
+ }
43
+
44
+ /**
45
+ * 9.2 — Lottie import (`motionary/fx/lottie`, also `motionary/components/fx-lottie`).
46
+ *
47
+ * `lottieToKeyframes(json)` converts the layer transforms of a Lottie
48
+ * (bodymovin) JSON — position `p`, scale `s`, rotation `r`, opacity `o`
49
+ * (static or keyframed) — into WAAPI keyframes per layer plus the duration
50
+ * (`op − ip` frames at `fr` fps), so a designer's After Effects motion runs
51
+ * on Motionary's clock without lottie-web. `lottieToSvg(json)` renders the
52
+ * simple vector shapes (ellipse `el`, rect `rc`, path `sh`, fill `fl`,
53
+ * stroke `st`) as SVG groups, one per layer. `riveInputs(instance, el, map)`
54
+ * wires Motionary-style triggers (hover / press / click / enter) to the
55
+ * boolean / trigger inputs of a Rive state machine you created with the
56
+ * Rive runtime.
57
+ *
58
+ * Effects: `lottie-play` (attention) plays the keyframes stored on an
59
+ * element by `<usa-lottie>`; `icon-pop` (click) a sticker-like pop with a
60
+ * ring burst for icons. Reduced motion: no motion.
61
+ */
62
+
63
+ interface LottieLayerMotion {
64
+ name: string;
65
+ index: number;
66
+ keyframes: Keyframe[];
67
+ anchor: [number, number];
68
+ }
69
+ interface LottieMotion {
70
+ width: number;
71
+ height: number;
72
+ duration: number;
73
+ layers: LottieLayerMotion[];
74
+ }
75
+ /** Lottie JSON → WAAPI keyframes per layer + duration (ms) (9.2). */
76
+ declare function lottieToKeyframes(json: any): LottieMotion;
77
+ /** Render the simple vector layers of a Lottie JSON as an SVG string (one `<g data-layer>` per layer, top layer last) (9.2). */
78
+ declare function lottieToSvg(json: any): string;
79
+ /** Wire hover / press / click / enter on `el` to a Rive state machine's inputs: map { hover: 'isHover', click: 'fire' } (9.2). */
80
+ declare function riveInputs(instance: {
81
+ stateMachineInputs(sm: string): any[];
82
+ }, stateMachine: string, el: HTMLElement, map: Partial<Record<'hover' | 'press' | 'click' | 'enter', string>>): () => void;
83
+ declare const LOTTIE_FX: EffectDefinition[];
84
+ /** Register lottie-play and icon-pop (9.2). */
85
+ declare function registerLottiePack(): void;
86
+
87
+ export { LOTTIE_FX, lottieToKeyframes, lottieToSvg, registerLottiePack, riveInputs };
88
+ export type { LottieLayerMotion, LottieMotion };
@@ -0,0 +1,88 @@
1
+ type MotionSensitivity = 'full' | 'gentle' | 'minimal' | 'static';
2
+ type Cleanup = () => void;
3
+
4
+ /**
5
+ * 5.0 — unified plugin-style effect registration. Every effect (built-in or
6
+ * yours) is a plain object registered once and played the same way:
7
+ * `playEffect(el, name)`, `bindEffect(el, name, { trigger })` or
8
+ * `<usa-fx effect="name" trigger="click">`. Effects get a context that
9
+ * already applies reduced motion, motion sensitivity, intensity and the
10
+ * animation budget.
11
+ */
12
+
13
+ declare const EFFECT_KINDS: readonly ["enter", "exit", "attention", "click", "hover", "card", "loop", "page", "background", "text", "cursor", "scroll"];
14
+ type EffectKind = (typeof EFFECT_KINDS)[number];
15
+ interface EffectContext {
16
+ /** Reduced motion applies (OS setting, `minimal` / `static` sensitivity). */
17
+ readonly reduced: boolean;
18
+ readonly sensitivity: MotionSensitivity;
19
+ /** The triggering event (pointer position for click effects), if any. */
20
+ readonly event?: Event;
21
+ /** `el.animate()` with the library's motion rules (may return `null`). */
22
+ animate(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;
23
+ /** Register teardown for long-running effects (loops, listeners). */
24
+ onCleanup(fn: Cleanup): void;
25
+ }
26
+ interface EffectDefinition<O extends Record<string, unknown> = Record<string, any>> {
27
+ /** Unique, kebab-case. */
28
+ name: string;
29
+ kind: EffectKind;
30
+ /** One line for docs and the gallery. */
31
+ description?: string;
32
+ /** Option defaults (merged under the caller's options). */
33
+ defaults?: Partial<O>;
34
+ /**
35
+ * Under reduced motion: `'skip'` (do nothing — default for loop, background
36
+ * and cursor effects) or `'run'` (run with `ctx.reduced === true`, the
37
+ * effect degrades itself — default for everything else).
38
+ */
39
+ reduced?: 'skip' | 'run';
40
+ /** Play the effect. Return an Animation / Promise to be awaited, or a cleanup. */
41
+ run(el: HTMLElement, options: O, ctx: EffectContext): void | Cleanup | Animation | null | Promise<unknown>;
42
+ }
43
+
44
+ /**
45
+ * 9.2 — Lottie import (`motionary/fx/lottie`, also `motionary/components/fx-lottie`).
46
+ *
47
+ * `lottieToKeyframes(json)` converts the layer transforms of a Lottie
48
+ * (bodymovin) JSON — position `p`, scale `s`, rotation `r`, opacity `o`
49
+ * (static or keyframed) — into WAAPI keyframes per layer plus the duration
50
+ * (`op − ip` frames at `fr` fps), so a designer's After Effects motion runs
51
+ * on Motionary's clock without lottie-web. `lottieToSvg(json)` renders the
52
+ * simple vector shapes (ellipse `el`, rect `rc`, path `sh`, fill `fl`,
53
+ * stroke `st`) as SVG groups, one per layer. `riveInputs(instance, el, map)`
54
+ * wires Motionary-style triggers (hover / press / click / enter) to the
55
+ * boolean / trigger inputs of a Rive state machine you created with the
56
+ * Rive runtime.
57
+ *
58
+ * Effects: `lottie-play` (attention) plays the keyframes stored on an
59
+ * element by `<usa-lottie>`; `icon-pop` (click) a sticker-like pop with a
60
+ * ring burst for icons. Reduced motion: no motion.
61
+ */
62
+
63
+ interface LottieLayerMotion {
64
+ name: string;
65
+ index: number;
66
+ keyframes: Keyframe[];
67
+ anchor: [number, number];
68
+ }
69
+ interface LottieMotion {
70
+ width: number;
71
+ height: number;
72
+ duration: number;
73
+ layers: LottieLayerMotion[];
74
+ }
75
+ /** Lottie JSON → WAAPI keyframes per layer + duration (ms) (9.2). */
76
+ declare function lottieToKeyframes(json: any): LottieMotion;
77
+ /** Render the simple vector layers of a Lottie JSON as an SVG string (one `<g data-layer>` per layer, top layer last) (9.2). */
78
+ declare function lottieToSvg(json: any): string;
79
+ /** Wire hover / press / click / enter on `el` to a Rive state machine's inputs: map { hover: 'isHover', click: 'fire' } (9.2). */
80
+ declare function riveInputs(instance: {
81
+ stateMachineInputs(sm: string): any[];
82
+ }, stateMachine: string, el: HTMLElement, map: Partial<Record<'hover' | 'press' | 'click' | 'enter', string>>): () => void;
83
+ declare const LOTTIE_FX: EffectDefinition[];
84
+ /** Register lottie-play and icon-pop (9.2). */
85
+ declare function registerLottiePack(): void;
86
+
87
+ export { LOTTIE_FX, lottieToKeyframes, lottieToSvg, registerLottiePack, riveInputs };
88
+ export type { LottieLayerMotion, LottieMotion };
@@ -0,0 +1,210 @@
1
+ import { registerEffects } from '../chunks/registry-CnO7ZVPK.js';
2
+ import '../chunks/base-CLuqlLfG.js';
3
+
4
+ const arr = (v) => (Array.isArray(v) ? v.map(Number) : [Number(v)]);
5
+ /** Frames (t) → values for one transform property (static props give one key at t = ip) (9.2). */
6
+ function track(p, ip) {
7
+ if (!p)
8
+ return [];
9
+ if (!p.a || !Array.isArray(p.k) || typeof p.k[0] !== 'object')
10
+ return [{ t: ip, v: arr(p.k) }];
11
+ return p.k.filter((k) => k && k.s != null).map((k) => ({ t: Number(k.t), v: arr(k.s) }));
12
+ }
13
+ const at = (tr, t) => {
14
+ if (!tr.length)
15
+ return undefined;
16
+ if (t <= tr[0].t)
17
+ return tr[0].v;
18
+ for (let i = 1; i < tr.length; i++)
19
+ if (t <= tr[i].t) {
20
+ const a = tr[i - 1];
21
+ const b = tr[i];
22
+ const u = b.t === a.t ? 1 : (t - a.t) / (b.t - a.t);
23
+ return a.v.map((x, j) => x + ((b.v[j] ?? x) - x) * u);
24
+ }
25
+ return tr[tr.length - 1].v;
26
+ };
27
+ const r2 = (n) => Math.round(n * 100) / 100;
28
+ /** Lottie JSON → WAAPI keyframes per layer + duration (ms) (9.2). */
29
+ function lottieToKeyframes(json) {
30
+ const d = typeof json === 'string' ? JSON.parse(json) : json;
31
+ const fr = Number(d?.fr) || 30;
32
+ const ip = Number(d?.ip) || 0;
33
+ const op = Number(d?.op) || ip + fr;
34
+ const span = Math.max(1, op - ip);
35
+ const layers = (Array.isArray(d?.layers) ? d.layers : []).map((L, index) => {
36
+ const ks = L?.ks || {};
37
+ const tracks = { p: track(ks.p, ip), s: track(ks.s, ip), r: track(ks.r, ip), o: track(ks.o, ip) };
38
+ const anchor = arr(ks.a?.k ?? [0, 0]).slice(0, 2) || [0, 0];
39
+ const times = Array.from(new Set([ip, op, ...Object.values(tracks).flat().map((k) => k.t)])).filter((t) => t >= ip && t <= op).sort((a, b) => a - b);
40
+ const keyframes = times.map((t) => {
41
+ const p = at(tracks.p, t);
42
+ const s = at(tracks.s, t);
43
+ const r = at(tracks.r, t);
44
+ const o = at(tracks.o, t);
45
+ // Lottie order: move the anchor to the position, rotate + scale around the anchor
46
+ const pp = p || anchor;
47
+ const tf = [`translate(${r2(pp[0])}px, ${r2(pp[1] ?? 0)}px)`];
48
+ if (r)
49
+ tf.push(`rotate(${r2(r[0])}deg)`);
50
+ if (s)
51
+ tf.push(`scale(${r2(s[0] / 100)}, ${r2((s[1] ?? s[0]) / 100)})`);
52
+ tf.push(`translate(${r2(-anchor[0])}px, ${r2(-anchor[1])}px)`);
53
+ const k = { offset: r2((t - ip) / span), transform: tf.join(' ') };
54
+ if (o)
55
+ k.opacity = r2(o[0] / 100);
56
+ return k;
57
+ });
58
+ return { name: String(L?.nm ?? `layer ${index + 1}`), index, keyframes, anchor };
59
+ });
60
+ return { width: Number(d?.w) || 100, height: Number(d?.h) || 100, duration: Math.round((span / fr) * 1000), layers };
61
+ }
62
+ const hex = (c) => {
63
+ const v = arr(c?.k ?? c).slice(0, 3).map((x) => Math.round(Math.min(1, Math.max(0, x)) * 255));
64
+ return `#${v.map((x) => x.toString(16).padStart(2, '0')).join('')}`;
65
+ };
66
+ function shapes(items, fill, stroke, sw) {
67
+ let f = fill;
68
+ let s = stroke;
69
+ let w = sw;
70
+ for (const it of items) {
71
+ if (it?.ty === 'fl')
72
+ f = hex(it.c);
73
+ if (it?.ty === 'st') {
74
+ s = hex(it.c);
75
+ w = Number(it.w?.k) || 2;
76
+ }
77
+ }
78
+ const paint = `fill="${f}"${s !== 'none' ? ` stroke="${s}" stroke-width="${w}"` : ''}`;
79
+ return items
80
+ .map((it) => {
81
+ if (it?.ty === 'gr')
82
+ return `<g>${shapes(it.it || [], f, s, w)}</g>`;
83
+ if (it?.ty === 'el') {
84
+ const [cx, cy] = arr(it.p?.k ?? [0, 0]);
85
+ const [sx, sy] = arr(it.s?.k ?? [10, 10]);
86
+ return `<ellipse cx="${cx}" cy="${cy}" rx="${sx / 2}" ry="${(sy ?? sx) / 2}" ${paint}/>`;
87
+ }
88
+ if (it?.ty === 'rc') {
89
+ const [cx, cy] = arr(it.p?.k ?? [0, 0]);
90
+ const [sx, sy] = arr(it.s?.k ?? [10, 10]);
91
+ return `<rect x="${cx - sx / 2}" y="${cy - sy / 2}" width="${sx}" height="${sy}" rx="${Number(it.r?.k) || 0}" ${paint}/>`;
92
+ }
93
+ if (it?.ty === 'sh') {
94
+ const k = it.ks?.k;
95
+ const v = k?.v || [];
96
+ if (!v.length)
97
+ return '';
98
+ const i = k.i || [];
99
+ const o = k.o || [];
100
+ let dd = `M${v[0][0]} ${v[0][1]}`;
101
+ for (let n = 1; n < v.length + (k.c ? 1 : 0); n++) {
102
+ const a = v[n - 1];
103
+ const b = v[n % v.length];
104
+ const c1 = [a[0] + (o[n - 1]?.[0] || 0), a[1] + (o[n - 1]?.[1] || 0)];
105
+ const c2 = [b[0] + (i[n % v.length]?.[0] || 0), b[1] + (i[n % v.length]?.[1] || 0)];
106
+ dd += ` C${c1[0]} ${c1[1]} ${c2[0]} ${c2[1]} ${b[0]} ${b[1]}`;
107
+ }
108
+ return `<path d="${dd}${k.c ? 'Z' : ''}" ${paint}/>`;
109
+ }
110
+ return '';
111
+ })
112
+ .join('');
113
+ }
114
+ /** Render the simple vector layers of a Lottie JSON as an SVG string (one `<g data-layer>` per layer, top layer last) (9.2). */
115
+ function lottieToSvg(json) {
116
+ const d = typeof json === 'string' ? JSON.parse(json) : json;
117
+ const w = Number(d?.w) || 100;
118
+ const h = Number(d?.h) || 100;
119
+ const ls = Array.isArray(d?.layers) ? d.layers : [];
120
+ const groups = ls
121
+ .map((L, i) => ({ L, i }))
122
+ .reverse()
123
+ .map(({ L, i }) => `<g data-layer="${i}"><g class="usa-lt-inner">${shapes(L?.shapes || [], '#000', 'none', 0)}</g></g>`)
124
+ .join('');
125
+ return `<svg viewBox="0 0 ${w} ${h}" width="${w}" height="${h}" aria-hidden="true">${groups}</svg>`;
126
+ }
127
+ /** Wire hover / press / click / enter on `el` to a Rive state machine's inputs: map { hover: 'isHover', click: 'fire' } (9.2). */
128
+ function riveInputs(instance, stateMachine, el, map) {
129
+ const inputs = (instance.stateMachineInputs(stateMachine) || []);
130
+ const get = (n) => inputs.find((i) => i.name === n);
131
+ const set = (n, v) => {
132
+ const i = get(n);
133
+ if (!i)
134
+ return;
135
+ // Rive StateMachineInputType: 58 = trigger (fire on true), 59 = boolean
136
+ if (i.type === 58 && typeof i.fire === 'function') {
137
+ if (v)
138
+ i.fire();
139
+ }
140
+ else
141
+ i.value = v;
142
+ };
143
+ const offs = [];
144
+ const on = (t, fn) => {
145
+ el.addEventListener(t, fn);
146
+ offs.push(() => el.removeEventListener(t, fn));
147
+ };
148
+ if (map.hover)
149
+ (on('pointerenter', () => set(map.hover, true)), on('pointerleave', () => set(map.hover, false)));
150
+ if (map.press)
151
+ (on('pointerdown', () => set(map.press, true)), on('pointerup', () => set(map.press, false)));
152
+ if (map.click)
153
+ on('click', () => set(map.click, true));
154
+ if (map.enter && typeof IntersectionObserver !== 'undefined') {
155
+ const io = new IntersectionObserver((es) => es.forEach((e) => set(map.enter, e.isIntersecting)));
156
+ io.observe(el);
157
+ offs.push(() => io.disconnect());
158
+ }
159
+ return () => offs.splice(0).forEach((f) => f());
160
+ }
161
+ const LOTTIE_FX = [
162
+ {
163
+ name: 'lottie-play',
164
+ kind: 'attention',
165
+ description: 'Replays the Lottie keyframes stored on an element by <usa-lottie> (or a `json` option) once.',
166
+ defaults: {},
167
+ run: (el, o, ctx) => {
168
+ if (ctx.reduced)
169
+ return;
170
+ const host = el.closest('usa-lottie');
171
+ if (host?.play)
172
+ return void host.play();
173
+ if (!o.json)
174
+ return;
175
+ const m = lottieToKeyframes(o.json);
176
+ return Promise.all(m.layers.map((l) => ctx.animate(el, l.keyframes, { duration: m.duration })?.finished.catch(() => undefined))).then(() => undefined);
177
+ },
178
+ },
179
+ {
180
+ name: 'icon-pop',
181
+ kind: 'click',
182
+ description: 'A sticker-like pop with a ring burst, for icons (`color`).',
183
+ defaults: { color: '#f43f5e', duration: 500 },
184
+ run: (el, o, ctx) => {
185
+ if (ctx.reduced)
186
+ return;
187
+ if (getComputedStyle(el).position === 'static') {
188
+ const prev = el.style.position;
189
+ el.style.position = 'relative';
190
+ ctx.onCleanup(() => (el.style.position = prev));
191
+ }
192
+ const ring = document.createElement('span');
193
+ ring.setAttribute('aria-hidden', 'true');
194
+ Object.assign(ring.style, { position: 'absolute', inset: '0', borderRadius: '50%', border: `2px solid ${o.color}`, pointerEvents: 'none' });
195
+ el.appendChild(ring);
196
+ ctx.onCleanup(() => ring.remove());
197
+ const a = ctx.animate(el, [{ transform: 'scale(1)' }, { transform: 'scale(.8)', offset: 0.2 }, { transform: 'scale(1.2)', offset: 0.55 }, { transform: 'scale(1)' }], { duration: o.duration, easing: 'cubic-bezier(.3,1.5,.5,1)' });
198
+ const b = ctx.animate(ring, [{ transform: 'scale(.6)', opacity: 1 }, { transform: 'scale(1.8)', opacity: 0 }], { duration: o.duration, easing: 'ease-out' });
199
+ const end = () => ring.remove();
200
+ return Promise.all([a?.finished.catch(() => undefined), b?.finished.catch(() => undefined)]).then(end, end);
201
+ },
202
+ },
203
+ ];
204
+ /** Register lottie-play and icon-pop (9.2). */
205
+ function registerLottiePack() {
206
+ registerEffects(LOTTIE_FX);
207
+ }
208
+
209
+ export { LOTTIE_FX, lottieToKeyframes, lottieToSvg, registerLottiePack, riveInputs };
210
+ //# sourceMappingURL=fx-lottie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx-lottie.js","sources":["../../src/components/fx2/lottie.ts"],"sourcesContent":["/**\n * 9.2 — Lottie import (`motionary/fx/lottie`, also `motionary/components/fx-lottie`).\n *\n * `lottieToKeyframes(json)` converts the layer transforms of a Lottie\n * (bodymovin) JSON — position `p`, scale `s`, rotation `r`, opacity `o`\n * (static or keyframed) — into WAAPI keyframes per layer plus the duration\n * (`op − ip` frames at `fr` fps), so a designer's After Effects motion runs\n * on Motionary's clock without lottie-web. `lottieToSvg(json)` renders the\n * simple vector shapes (ellipse `el`, rect `rc`, path `sh`, fill `fl`,\n * stroke `st`) as SVG groups, one per layer. `riveInputs(instance, el, map)`\n * wires Motionary-style triggers (hover / press / click / enter) to the\n * boolean / trigger inputs of a Rive state machine you created with the\n * Rive runtime.\n *\n * Effects: `lottie-play` (attention) plays the keyframes stored on an\n * element by `<usa-lottie>`; `icon-pop` (click) a sticker-like pop with a\n * ring burst for icons. Reduced motion: no motion.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\n\ntype Prop = { a?: number; k: any };\nexport interface LottieLayerMotion {\n name: string;\n index: number;\n keyframes: Keyframe[];\n anchor: [number, number];\n}\nexport interface LottieMotion {\n width: number;\n height: number;\n duration: number;\n layers: LottieLayerMotion[];\n}\n\nconst arr = (v: any): number[] => (Array.isArray(v) ? v.map(Number) : [Number(v)]);\n/** Frames (t) → values for one transform property (static props give one key at t = ip) (9.2). */\nfunction track(p: Prop | undefined, ip: number): { t: number; v: number[] }[] {\n if (!p) return [];\n if (!p.a || !Array.isArray(p.k) || typeof p.k[0] !== 'object') return [{ t: ip, v: arr(p.k) }];\n return (p.k as any[]).filter((k) => k && k.s != null).map((k) => ({ t: Number(k.t), v: arr(k.s) }));\n}\nconst at = (tr: { t: number; v: number[] }[], t: number): number[] | undefined => {\n if (!tr.length) return undefined;\n if (t <= tr[0].t) return tr[0].v;\n for (let i = 1; i < tr.length; i++)\n if (t <= tr[i].t) {\n const a = tr[i - 1];\n const b = tr[i];\n const u = b.t === a.t ? 1 : (t - a.t) / (b.t - a.t);\n return a.v.map((x, j) => x + ((b.v[j] ?? x) - x) * u);\n }\n return tr[tr.length - 1].v;\n};\nconst r2 = (n: number) => Math.round(n * 100) / 100;\n\n/** Lottie JSON → WAAPI keyframes per layer + duration (ms) (9.2). */\nexport function lottieToKeyframes(json: any): LottieMotion {\n const d = typeof json === 'string' ? JSON.parse(json) : json;\n const fr = Number(d?.fr) || 30;\n const ip = Number(d?.ip) || 0;\n const op = Number(d?.op) || ip + fr;\n const span = Math.max(1, op - ip);\n const layers: LottieLayerMotion[] = (Array.isArray(d?.layers) ? d.layers : []).map((L: any, index: number) => {\n const ks = L?.ks || {};\n const tracks = { p: track(ks.p, ip), s: track(ks.s, ip), r: track(ks.r, ip), o: track(ks.o, ip) };\n const anchor = (arr(ks.a?.k ?? [0, 0]).slice(0, 2) as [number, number]) || [0, 0];\n const times = Array.from(new Set([ip, op, ...Object.values(tracks).flat().map((k) => k.t)])).filter((t) => t >= ip && t <= op).sort((a, b) => a - b);\n const keyframes: Keyframe[] = times.map((t) => {\n const p = at(tracks.p, t);\n const s = at(tracks.s, t);\n const r = at(tracks.r, t);\n const o = at(tracks.o, t);\n // Lottie order: move the anchor to the position, rotate + scale around the anchor\n const pp = p || anchor;\n const tf: string[] = [`translate(${r2(pp[0])}px, ${r2(pp[1] ?? 0)}px)`];\n if (r) tf.push(`rotate(${r2(r[0])}deg)`);\n if (s) tf.push(`scale(${r2(s[0] / 100)}, ${r2((s[1] ?? s[0]) / 100)})`);\n tf.push(`translate(${r2(-anchor[0])}px, ${r2(-anchor[1])}px)`);\n const k: Keyframe = { offset: r2((t - ip) / span), transform: tf.join(' ') };\n if (o) k.opacity = r2(o[0] / 100);\n return k;\n });\n return { name: String(L?.nm ?? `layer ${index + 1}`), index, keyframes, anchor };\n });\n return { width: Number(d?.w) || 100, height: Number(d?.h) || 100, duration: Math.round((span / fr) * 1000), layers };\n}\n\nconst hex = (c: any): string => {\n const v = arr(c?.k ?? c).slice(0, 3).map((x) => Math.round(Math.min(1, Math.max(0, x)) * 255));\n return `#${v.map((x) => x.toString(16).padStart(2, '0')).join('')}`;\n};\nfunction shapes(items: any[], fill: string, stroke: string, sw: number): string {\n let f = fill;\n let s = stroke;\n let w = sw;\n for (const it of items) {\n if (it?.ty === 'fl') f = hex(it.c);\n if (it?.ty === 'st') {\n s = hex(it.c);\n w = Number(it.w?.k) || 2;\n }\n }\n const paint = `fill=\"${f}\"${s !== 'none' ? ` stroke=\"${s}\" stroke-width=\"${w}\"` : ''}`;\n return items\n .map((it) => {\n if (it?.ty === 'gr') return `<g>${shapes(it.it || [], f, s, w)}</g>`;\n if (it?.ty === 'el') {\n const [cx, cy] = arr(it.p?.k ?? [0, 0]);\n const [sx, sy] = arr(it.s?.k ?? [10, 10]);\n return `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${sx / 2}\" ry=\"${(sy ?? sx) / 2}\" ${paint}/>`;\n }\n if (it?.ty === 'rc') {\n const [cx, cy] = arr(it.p?.k ?? [0, 0]);\n const [sx, sy] = arr(it.s?.k ?? [10, 10]);\n return `<rect x=\"${cx - sx / 2}\" y=\"${cy - sy / 2}\" width=\"${sx}\" height=\"${sy}\" rx=\"${Number(it.r?.k) || 0}\" ${paint}/>`;\n }\n if (it?.ty === 'sh') {\n const k = it.ks?.k;\n const v: number[][] = k?.v || [];\n if (!v.length) return '';\n const i: number[][] = k.i || [];\n const o: number[][] = k.o || [];\n let dd = `M${v[0][0]} ${v[0][1]}`;\n for (let n = 1; n < v.length + (k.c ? 1 : 0); n++) {\n const a = v[n - 1];\n const b = v[n % v.length];\n const c1 = [a[0] + (o[n - 1]?.[0] || 0), a[1] + (o[n - 1]?.[1] || 0)];\n const c2 = [b[0] + (i[n % v.length]?.[0] || 0), b[1] + (i[n % v.length]?.[1] || 0)];\n dd += ` C${c1[0]} ${c1[1]} ${c2[0]} ${c2[1]} ${b[0]} ${b[1]}`;\n }\n return `<path d=\"${dd}${k.c ? 'Z' : ''}\" ${paint}/>`;\n }\n return '';\n })\n .join('');\n}\n\n/** Render the simple vector layers of a Lottie JSON as an SVG string (one `<g data-layer>` per layer, top layer last) (9.2). */\nexport function lottieToSvg(json: any): string {\n const d = typeof json === 'string' ? JSON.parse(json) : json;\n const w = Number(d?.w) || 100;\n const h = Number(d?.h) || 100;\n const ls: any[] = Array.isArray(d?.layers) ? d.layers : [];\n const groups = ls\n .map((L, i) => ({ L, i }))\n .reverse()\n .map(({ L, i }) => `<g data-layer=\"${i}\"><g class=\"usa-lt-inner\">${shapes(L?.shapes || [], '#000', 'none', 0)}</g></g>`)\n .join('');\n return `<svg viewBox=\"0 0 ${w} ${h}\" width=\"${w}\" height=\"${h}\" aria-hidden=\"true\">${groups}</svg>`;\n}\n\n/** Wire hover / press / click / enter on `el` to a Rive state machine's inputs: map { hover: 'isHover', click: 'fire' } (9.2). */\nexport function riveInputs(instance: { stateMachineInputs(sm: string): any[] }, stateMachine: string, el: HTMLElement, map: Partial<Record<'hover' | 'press' | 'click' | 'enter', string>>): () => void {\n const inputs = (instance.stateMachineInputs(stateMachine) || []) as { name: string; type?: number; value?: boolean; fire?: () => void }[];\n const get = (n?: string) => inputs.find((i) => i.name === n);\n const set = (n: string | undefined, v: boolean) => {\n const i = get(n);\n if (!i) return;\n // Rive StateMachineInputType: 58 = trigger (fire on true), 59 = boolean\n if (i.type === 58 && typeof i.fire === 'function') {\n if (v) i.fire();\n } else i.value = v;\n };\n const offs: (() => void)[] = [];\n const on = (t: string, fn: (e: Event) => void) => {\n el.addEventListener(t, fn);\n offs.push(() => el.removeEventListener(t, fn));\n };\n if (map.hover) (on('pointerenter', () => set(map.hover, true)), on('pointerleave', () => set(map.hover, false)));\n if (map.press) (on('pointerdown', () => set(map.press, true)), on('pointerup', () => set(map.press, false)));\n if (map.click) on('click', () => set(map.click, true));\n if (map.enter && typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver((es) => es.forEach((e) => set(map.enter, e.isIntersecting)));\n io.observe(el);\n offs.push(() => io.disconnect());\n }\n return () => offs.splice(0).forEach((f) => f());\n}\n\nexport const LOTTIE_FX: EffectDefinition[] = [\n {\n name: 'lottie-play',\n kind: 'attention',\n description: 'Replays the Lottie keyframes stored on an element by <usa-lottie> (or a `json` option) once.',\n defaults: {},\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return;\n const host = el.closest('usa-lottie') as (HTMLElement & { play?: () => void }) | null;\n if (host?.play) return void host.play();\n if (!o.json) return;\n const m = lottieToKeyframes(o.json);\n return Promise.all(m.layers.map((l) => ctx.animate(el, l.keyframes, { duration: m.duration })?.finished.catch(() => undefined))).then(() => undefined);\n },\n },\n {\n name: 'icon-pop',\n kind: 'click',\n description: 'A sticker-like pop with a ring burst, for icons (`color`).',\n defaults: { color: '#f43f5e', duration: 500 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return;\n if (getComputedStyle(el).position === 'static') {\n const prev = el.style.position;\n el.style.position = 'relative';\n ctx.onCleanup(() => (el.style.position = prev));\n }\n const ring = document.createElement('span');\n ring.setAttribute('aria-hidden', 'true');\n Object.assign(ring.style, { position: 'absolute', inset: '0', borderRadius: '50%', border: `2px solid ${o.color}`, pointerEvents: 'none' });\n el.appendChild(ring);\n ctx.onCleanup(() => ring.remove());\n const a = ctx.animate(el, [{ transform: 'scale(1)' }, { transform: 'scale(.8)', offset: 0.2 }, { transform: 'scale(1.2)', offset: 0.55 }, { transform: 'scale(1)' }], { duration: o.duration, easing: 'cubic-bezier(.3,1.5,.5,1)' });\n const b = ctx.animate(ring, [{ transform: 'scale(.6)', opacity: 1 }, { transform: 'scale(1.8)', opacity: 0 }], { duration: o.duration, easing: 'ease-out' });\n const end = () => ring.remove();\n return Promise.all([a?.finished.catch(() => undefined), b?.finished.catch(() => undefined)]).then(end, end);\n },\n },\n];\n\n/** Register lottie-play and icon-pop (9.2). */\nexport function registerLottiePack(): void {\n registerEffects(LOTTIE_FX);\n}\n"],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ var components_fxPaper = require('./fx-paper.cjs');
26
26
  var components_fxSurface = require('./fx-surface.cjs');
27
27
  var components_fxGesture = require('./fx-gesture.cjs');
28
28
  var components_fxSpatial = require('./fx-spatial.cjs');
29
+ var components_fxCinema = require('./fx-cinema.cjs');
30
+ var components_fxLottie = require('./fx-lottie.cjs');
29
31
  require('../chunks/registry-BVklOepd.cjs');
30
32
  require('../chunks/base-DoRUZBy-.cjs');
31
33
  require('../chunks/generative-BHIj-NU0.cjs');
@@ -59,6 +61,8 @@ const EFFECT_PACKS = {
59
61
  surface: components_fxSurface.SURFACE_FX,
60
62
  gesture3: components_fxGesture.GESTURE3_FX,
61
63
  spatial: components_fxSpatial.SPATIAL_FX,
64
+ cinema: components_fxCinema.CINEMA_FX,
65
+ lottie: components_fxLottie.LOTTIE_FX,
62
66
  };
63
67
  /** Register every 6.x effect pack (idempotent). */
64
68
  function registerEffectPacks() {
@@ -87,6 +91,8 @@ function registerEffectPacks() {
87
91
  components_fxSurface.registerSurfacePack();
88
92
  components_fxGesture.registerGesture3Pack();
89
93
  components_fxSpatial.registerSpatialPack();
94
+ components_fxCinema.registerCinemaPack();
95
+ components_fxLottie.registerLottiePack();
90
96
  }
91
97
 
92
98
  exports.EFFECT_PACK_FORMAT = manifest.EFFECT_PACK_FORMAT;
@@ -182,6 +188,15 @@ exports.SPATIAL_FX = components_fxSpatial.SPATIAL_FX;
182
188
  exports.registerSpatialPack = components_fxSpatial.registerSpatialPack;
183
189
  exports.xrSupport = components_fxSpatial.xrSupport;
184
190
  exports.yawToOffset = components_fxSpatial.yawToOffset;
191
+ exports.CAMERA_MOVES = components_fxCinema.CAMERA_MOVES;
192
+ exports.CINEMA_FX = components_fxCinema.CINEMA_FX;
193
+ exports.cameraFrame = components_fxCinema.cameraFrame;
194
+ exports.registerCinemaPack = components_fxCinema.registerCinemaPack;
195
+ exports.LOTTIE_FX = components_fxLottie.LOTTIE_FX;
196
+ exports.lottieToKeyframes = components_fxLottie.lottieToKeyframes;
197
+ exports.lottieToSvg = components_fxLottie.lottieToSvg;
198
+ exports.registerLottiePack = components_fxLottie.registerLottiePack;
199
+ exports.riveInputs = components_fxLottie.riveInputs;
185
200
  exports.EFFECT_PACKS = EFFECT_PACKS;
186
201
  exports.registerEffectPacks = registerEffectPacks;
187
202
  //# 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';\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from './manifest';\nexport type { EffectPackManifest } from './manifest';\nimport { GPU_FX, registerGpuPack } from './gpu';\nimport { TEXT3_FX, registerTextPack, splitChars } from './text3';\nimport { LIGHT_FX, registerLightPack, trackPointer } from './light';\nimport { DEPTH3_FX, register3dPack } from './depth3';\nimport { MORPH2_FX, registerMorphPack, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionsPack, pageTransition, crossDocumentTransitions } from './transitions2';\nimport { WEATHER_FX, registerWeatherPack, skyAt } from './weather';\nimport { PHYSICS2_FX, registerPhysicsPack, VerletWorld } from './physics2';\nimport { FOCUS_FX, registerFocusPack } from './focus';\nimport { MUSIC_FX, registerMusicPack, syntheticSample, musicSample } from './music';\nimport { CHART_FX, registerChartPack, parseFigure } from './chart';\nimport { SHOP_FX, registerShopPack, arcPath } from './shop';\nimport { SOCIAL_FX, registerSocialPack, fanAngles } from './social';\nimport { GAME_FX, registerGamePack, throwPath } from './game';\nimport { GEO_FX, registerGeoPack, routeLength } from './geo';\nimport { FORM_FX, registerFormPack, shakeFrames } from './form';\nimport { AI_FX, registerAiPack, splitWords } from './ai';\nimport { FESTIVAL_FX, registerFestivalPack, sparkVectors } from './festival';\nimport { RETRO_FX, registerRetroPack, pixelSteps } from './retro2';\nimport { ORGANIC_FX, registerOrganicPack, blobRadius } from './organic';\nimport { CYBER_FX, registerCyberPack, decodeFrame } from './cyber';\nimport { PAPER_FX, registerPaperPack, roughLine, paperRandom } from './paper';\nimport { SURFACE_FX, registerSurfacePack, SURFACE_THEMES, applySurfaceTheme } from './themefx';\nimport { GESTURE3_FX, registerGesture3Pack, pinchScale, pinchAngle, orientationToTilt } from './gesture3';\nimport { SPATIAL_FX, registerSpatialPack, yawToOffset, xrSupport } from './spatial';\n\nexport { GPU_FX, registerGpuPack, TEXT3_FX, registerTextPack, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport { supportsWebGPU, glslToWgsl, wgslModule, webgpuBackground, WGSL_HEAD } from './webgpu';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightPack, trackPointer };\n\nexport { DEPTH3_FX, register3dPack };\n\nexport { MORPH2_FX, registerMorphPack, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionsPack, pageTransition, crossDocumentTransitions };\n\nexport { WEATHER_FX, registerWeatherPack, skyAt };\n\nexport { PHYSICS2_FX, registerPhysicsPack, VerletWorld };\n\nexport { FOCUS_FX, registerFocusPack };\n\nexport { MUSIC_FX, registerMusicPack, syntheticSample, musicSample };\n\nexport { CHART_FX, registerChartPack, parseFigure };\n\nexport { SHOP_FX, registerShopPack, arcPath };\n\nexport { SOCIAL_FX, registerSocialPack, fanAngles };\n\nexport { GAME_FX, registerGamePack, throwPath };\n\nexport { GEO_FX, registerGeoPack, routeLength };\n\nexport { FORM_FX, registerFormPack, shakeFrames };\n\nexport { AI_FX, registerAiPack, splitWords };\n\nexport { FESTIVAL_FX, registerFestivalPack, sparkVectors };\n\nexport { RETRO_FX, registerRetroPack, pixelSteps };\n\nexport { ORGANIC_FX, registerOrganicPack, blobRadius };\n\nexport { CYBER_FX, registerCyberPack, decodeFrame };\n\nexport { PAPER_FX, registerPaperPack, roughLine, paperRandom };\n\nexport { SURFACE_FX, registerSurfacePack, SURFACE_THEMES, applySurfaceTheme };\n\nexport { GESTURE3_FX, registerGesture3Pack, pinchScale, pinchAngle, orientationToTilt };\n\nexport { SPATIAL_FX, registerSpatialPack, yawToOffset, xrSupport };\n\n/** The 6.x effect packs by name. */\nexport const EFFECT_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 focus: FOCUS_FX,\n music: MUSIC_FX,\n chart: CHART_FX,\n shop: SHOP_FX,\n social: SOCIAL_FX,\n game: GAME_FX,\n geo: GEO_FX,\n form: FORM_FX,\n ai: AI_FX,\n festival: FESTIVAL_FX,\n retro: RETRO_FX,\n organic: ORGANIC_FX,\n cyber: CYBER_FX,\n paper: PAPER_FX,\n surface: SURFACE_FX,\n gesture3: GESTURE3_FX,\n spatial: SPATIAL_FX,\n};\n\n/** Register every 6.x effect pack (idempotent). */\nexport function registerEffectPacks(): void {\n registerGpuPack();\n registerTextPack();\n registerLightPack();\n register3dPack();\n registerMorphPack();\n registerTransitionsPack();\n registerWeatherPack();\n registerPhysicsPack();\n registerFocusPack();\n registerMusicPack();\n registerChartPack();\n registerShopPack();\n registerSocialPack();\n registerGamePack();\n registerGeoPack();\n registerFormPack();\n registerAiPack();\n registerFestivalPack();\n registerRetroPack();\n registerOrganicPack();\n registerCyberPack();\n registerPaperPack();\n registerSurfacePack();\n registerGesture3Pack();\n registerSpatialPack();\n}\n\n\n"],"names":["GPU_FX","TEXT3_FX","LIGHT_FX","DEPTH3_FX","MORPH2_FX","TRANSITIONS2_FX","WEATHER_FX","PHYSICS2_FX","FOCUS_FX","MUSIC_FX","CHART_FX","SHOP_FX","SOCIAL_FX","GAME_FX","GEO_FX","FORM_FX","AI_FX","FESTIVAL_FX","RETRO_FX","ORGANIC_FX","CYBER_FX","PAPER_FX","SURFACE_FX","GESTURE3_FX","SPATIAL_FX","registerGpuPack","registerTextPack","registerLightPack","register3dPack","registerMorphPack","registerTransitionsPack","registerWeatherPack","registerPhysicsPack","registerFocusPack","registerMusicPack","registerChartPack","registerShopPack","registerSocialPack","registerGamePack","registerGeoPack","registerFormPack","registerAiPack","registerFestivalPack","registerRetroPack","registerOrganicPack","registerCyberPack","registerPaperPack","registerSurfacePack","registerGesture3Pack","registerSpatialPack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFA;AACO,MAAM,YAAY,GAAuC;AAC9D,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;AACpB,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,IAAI,EAAEC,yBAAO;AACb,IAAA,MAAM,EAAEC,6BAAS;AACjB,IAAA,IAAI,EAAEC,yBAAO;AACb,IAAA,GAAG,EAAEC,uBAAM;AACX,IAAA,IAAI,EAAEC,yBAAO;AACb,IAAA,EAAE,EAAEC,qBAAK;AACT,IAAA,QAAQ,EAAEC,iCAAW;AACrB,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,OAAO,EAAEC,+BAAU;AACnB,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,OAAO,EAAEC,+BAAU;AACnB,IAAA,QAAQ,EAAEC,gCAAW;AACrB,IAAA,OAAO,EAAEC,+BAAU;;AAGrB;SACgB,mBAAmB,GAAA;AACjC,IAAAC,gCAAe,EAAE;AACjB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,8BAAc,EAAE;AAChB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,gDAAuB,EAAE;AACzB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,sCAAkB,EAAE;AACpB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,gCAAe,EAAE;AACjB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,8BAAc,EAAE;AAChB,IAAAC,0CAAoB,EAAE;AACtB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,yCAAoB,EAAE;AACtB,IAAAC,wCAAmB,EAAE;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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';\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from './manifest';\nexport type { EffectPackManifest } from './manifest';\nimport { GPU_FX, registerGpuPack } from './gpu';\nimport { TEXT3_FX, registerTextPack, splitChars } from './text3';\nimport { LIGHT_FX, registerLightPack, trackPointer } from './light';\nimport { DEPTH3_FX, register3dPack } from './depth3';\nimport { MORPH2_FX, registerMorphPack, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionsPack, pageTransition, crossDocumentTransitions } from './transitions2';\nimport { WEATHER_FX, registerWeatherPack, skyAt } from './weather';\nimport { PHYSICS2_FX, registerPhysicsPack, VerletWorld } from './physics2';\nimport { FOCUS_FX, registerFocusPack } from './focus';\nimport { MUSIC_FX, registerMusicPack, syntheticSample, musicSample } from './music';\nimport { CHART_FX, registerChartPack, parseFigure } from './chart';\nimport { SHOP_FX, registerShopPack, arcPath } from './shop';\nimport { SOCIAL_FX, registerSocialPack, fanAngles } from './social';\nimport { GAME_FX, registerGamePack, throwPath } from './game';\nimport { GEO_FX, registerGeoPack, routeLength } from './geo';\nimport { FORM_FX, registerFormPack, shakeFrames } from './form';\nimport { AI_FX, registerAiPack, splitWords } from './ai';\nimport { FESTIVAL_FX, registerFestivalPack, sparkVectors } from './festival';\nimport { RETRO_FX, registerRetroPack, pixelSteps } from './retro2';\nimport { ORGANIC_FX, registerOrganicPack, blobRadius } from './organic';\nimport { CYBER_FX, registerCyberPack, decodeFrame } from './cyber';\nimport { PAPER_FX, registerPaperPack, roughLine, paperRandom } from './paper';\nimport { SURFACE_FX, registerSurfacePack, SURFACE_THEMES, applySurfaceTheme } from './themefx';\nimport { GESTURE3_FX, registerGesture3Pack, pinchScale, pinchAngle, orientationToTilt } from './gesture3';\nimport { SPATIAL_FX, registerSpatialPack, yawToOffset, xrSupport } from './spatial';\nimport { CINEMA_FX, registerCinemaPack, cameraFrame, CAMERA_MOVES } from './cinema';\nimport { LOTTIE_FX, registerLottiePack, lottieToKeyframes, lottieToSvg, riveInputs } from './lottie';\n\nexport { GPU_FX, registerGpuPack, TEXT3_FX, registerTextPack, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport { supportsWebGPU, glslToWgsl, wgslModule, webgpuBackground, WGSL_HEAD } from './webgpu';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightPack, trackPointer };\n\nexport { DEPTH3_FX, register3dPack };\n\nexport { MORPH2_FX, registerMorphPack, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionsPack, pageTransition, crossDocumentTransitions };\n\nexport { WEATHER_FX, registerWeatherPack, skyAt };\n\nexport { PHYSICS2_FX, registerPhysicsPack, VerletWorld };\n\nexport { FOCUS_FX, registerFocusPack };\n\nexport { MUSIC_FX, registerMusicPack, syntheticSample, musicSample };\n\nexport { CHART_FX, registerChartPack, parseFigure };\n\nexport { SHOP_FX, registerShopPack, arcPath };\n\nexport { SOCIAL_FX, registerSocialPack, fanAngles };\n\nexport { GAME_FX, registerGamePack, throwPath };\n\nexport { GEO_FX, registerGeoPack, routeLength };\n\nexport { FORM_FX, registerFormPack, shakeFrames };\n\nexport { AI_FX, registerAiPack, splitWords };\n\nexport { FESTIVAL_FX, registerFestivalPack, sparkVectors };\n\nexport { RETRO_FX, registerRetroPack, pixelSteps };\n\nexport { ORGANIC_FX, registerOrganicPack, blobRadius };\n\nexport { CYBER_FX, registerCyberPack, decodeFrame };\n\nexport { PAPER_FX, registerPaperPack, roughLine, paperRandom };\n\nexport { SURFACE_FX, registerSurfacePack, SURFACE_THEMES, applySurfaceTheme };\n\nexport { GESTURE3_FX, registerGesture3Pack, pinchScale, pinchAngle, orientationToTilt };\n\nexport { SPATIAL_FX, registerSpatialPack, yawToOffset, xrSupport };\n\nexport { CINEMA_FX, registerCinemaPack, cameraFrame, CAMERA_MOVES };\n\nexport { LOTTIE_FX, registerLottiePack, lottieToKeyframes, lottieToSvg, riveInputs };\n\n/** The 6.x effect packs by name. */\nexport const EFFECT_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 focus: FOCUS_FX,\n music: MUSIC_FX,\n chart: CHART_FX,\n shop: SHOP_FX,\n social: SOCIAL_FX,\n game: GAME_FX,\n geo: GEO_FX,\n form: FORM_FX,\n ai: AI_FX,\n festival: FESTIVAL_FX,\n retro: RETRO_FX,\n organic: ORGANIC_FX,\n cyber: CYBER_FX,\n paper: PAPER_FX,\n surface: SURFACE_FX,\n gesture3: GESTURE3_FX,\n spatial: SPATIAL_FX,\n cinema: CINEMA_FX,\n lottie: LOTTIE_FX,\n};\n\n/** Register every 6.x effect pack (idempotent). */\nexport function registerEffectPacks(): void {\n registerGpuPack();\n registerTextPack();\n registerLightPack();\n register3dPack();\n registerMorphPack();\n registerTransitionsPack();\n registerWeatherPack();\n registerPhysicsPack();\n registerFocusPack();\n registerMusicPack();\n registerChartPack();\n registerShopPack();\n registerSocialPack();\n registerGamePack();\n registerGeoPack();\n registerFormPack();\n registerAiPack();\n registerFestivalPack();\n registerRetroPack();\n registerOrganicPack();\n registerCyberPack();\n registerPaperPack();\n registerSurfacePack();\n registerGesture3Pack();\n registerSpatialPack();\n registerCinemaPack();\n registerLottiePack();\n}\n\n\n"],"names":["GPU_FX","TEXT3_FX","LIGHT_FX","DEPTH3_FX","MORPH2_FX","TRANSITIONS2_FX","WEATHER_FX","PHYSICS2_FX","FOCUS_FX","MUSIC_FX","CHART_FX","SHOP_FX","SOCIAL_FX","GAME_FX","GEO_FX","FORM_FX","AI_FX","FESTIVAL_FX","RETRO_FX","ORGANIC_FX","CYBER_FX","PAPER_FX","SURFACE_FX","GESTURE3_FX","SPATIAL_FX","CINEMA_FX","LOTTIE_FX","registerGpuPack","registerTextPack","registerLightPack","register3dPack","registerMorphPack","registerTransitionsPack","registerWeatherPack","registerPhysicsPack","registerFocusPack","registerMusicPack","registerChartPack","registerShopPack","registerSocialPack","registerGamePack","registerGeoPack","registerFormPack","registerAiPack","registerFestivalPack","registerRetroPack","registerOrganicPack","registerCyberPack","registerPaperPack","registerSurfacePack","registerGesture3Pack","registerSpatialPack","registerCinemaPack","registerLottiePack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FA;AACO,MAAM,YAAY,GAAuC;AAC9D,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;AACpB,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,IAAI,EAAEC,yBAAO;AACb,IAAA,MAAM,EAAEC,6BAAS;AACjB,IAAA,IAAI,EAAEC,yBAAO;AACb,IAAA,GAAG,EAAEC,uBAAM;AACX,IAAA,IAAI,EAAEC,yBAAO;AACb,IAAA,EAAE,EAAEC,qBAAK;AACT,IAAA,QAAQ,EAAEC,iCAAW;AACrB,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,OAAO,EAAEC,+BAAU;AACnB,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,KAAK,EAAEC,2BAAQ;AACf,IAAA,OAAO,EAAEC,+BAAU;AACnB,IAAA,QAAQ,EAAEC,gCAAW;AACrB,IAAA,OAAO,EAAEC,+BAAU;AACnB,IAAA,MAAM,EAAEC,6BAAS;AACjB,IAAA,MAAM,EAAEC,6BAAS;;AAGnB;SACgB,mBAAmB,GAAA;AACjC,IAAAC,gCAAe,EAAE;AACjB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,8BAAc,EAAE;AAChB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,gDAAuB,EAAE;AACzB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,sCAAkB,EAAE;AACpB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,gCAAe,EAAE;AACjB,IAAAC,kCAAgB,EAAE;AAClB,IAAAC,8BAAc,EAAE;AAChB,IAAAC,0CAAoB,EAAE;AACtB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,oCAAiB,EAAE;AACnB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,yCAAoB,EAAE;AACtB,IAAAC,wCAAmB,EAAE;AACrB,IAAAC,sCAAkB,EAAE;AACpB,IAAAC,sCAAkB,EAAE;AACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}