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.
- package/CHANGELOG.md +24 -0
- package/dist/components/fx-cinema.cjs +100 -0
- package/dist/components/fx-cinema.cjs.map +1 -0
- package/dist/components/fx-cinema.d.cts +70 -0
- package/dist/components/fx-cinema.d.ts +70 -0
- package/dist/components/fx-cinema.js +95 -0
- package/dist/components/fx-cinema.js.map +1 -0
- package/dist/components/fx-lottie.cjs +216 -0
- package/dist/components/fx-lottie.cjs.map +1 -0
- package/dist/components/fx-lottie.d.cts +88 -0
- package/dist/components/fx-lottie.d.ts +88 -0
- package/dist/components/fx-lottie.js +210 -0
- package/dist/components/fx-lottie.js.map +1 -0
- package/dist/components/fx2.cjs +15 -0
- package/dist/components/fx2.cjs.map +1 -1
- package/dist/components/fx2.d.cts +68 -1
- package/dist/components/fx2.d.ts +68 -1
- package/dist/components/fx2.js +9 -1
- package/dist/components/fx2.js.map +1 -1
- package/dist/components/marketplace.cjs +2 -0
- package/dist/components/marketplace.cjs.map +1 -1
- package/dist/components/marketplace.js +2 -0
- package/dist/components/marketplace.js.map +1 -1
- package/dist/components/widgets.cjs +545 -207
- package/dist/components/widgets.cjs.map +1 -1
- package/dist/components/widgets.d.cts +106 -2
- package/dist/components/widgets.d.ts +106 -2
- package/dist/components/widgets.js +542 -209
- 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 +38 -0
- package/package.json +41 -1
|
@@ -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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"}
|
package/dist/components/fx2.cjs
CHANGED
|
@@ -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":"
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|