motionary 6.8.0 → 7.0.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 +39 -0
- package/README.md +2 -2
- package/README_ja.md +2 -2
- package/README_zh.md +2 -2
- package/bin/usa-codemod-7.mjs +91 -0
- package/dist/chunks/{gpu-CsP2ZB3x.js → gpu-Bkw605Ds.js} +183 -5
- package/dist/chunks/gpu-Bkw605Ds.js.map +1 -0
- package/dist/chunks/{gpu-BBRLgEzM.cjs → gpu-Dx0H875w.cjs} +187 -4
- package/dist/chunks/gpu-Dx0H875w.cjs.map +1 -0
- package/dist/chunks/{index-tags-wv0R_vkO.cjs → index-tags-BTMwrfgV.cjs} +3 -3
- package/dist/chunks/index-tags-BTMwrfgV.cjs.map +1 -0
- package/dist/chunks/{index-tags-DucKMQr_.js → index-tags-C04JP8g4.js} +3 -3
- package/dist/chunks/index-tags-C04JP8g4.js.map +1 -0
- package/dist/chunks/player-C-TwEEy6.js +516 -0
- package/dist/chunks/player-C-TwEEy6.js.map +1 -0
- package/dist/chunks/player-PS6_FzNw.cjs +525 -0
- package/dist/chunks/player-PS6_FzNw.cjs.map +1 -0
- package/dist/components/a11y.cjs +1 -1
- package/dist/components/a11y.d.cts +2 -2
- package/dist/components/a11y.d.ts +2 -2
- package/dist/components/a11y.js +1 -1
- package/dist/components/angular.cjs +2 -2
- package/dist/components/angular.cjs.map +1 -1
- package/dist/components/angular.d.cts +5 -36
- package/dist/components/angular.d.ts +5 -36
- package/dist/components/angular.js +2 -2
- package/dist/components/angular.js.map +1 -1
- package/dist/components/effects.cjs +13 -522
- package/dist/components/effects.cjs.map +1 -1
- package/dist/components/effects.js +5 -513
- package/dist/components/effects.js.map +1 -1
- package/dist/components/fx-3d.cjs +2 -2
- package/dist/components/fx-3d.cjs.map +1 -1
- package/dist/components/fx-3d.d.cts +2 -2
- package/dist/components/fx-3d.d.ts +2 -2
- package/dist/components/fx-3d.js +2 -2
- package/dist/components/fx-3d.js.map +1 -1
- package/dist/components/fx-focus.cjs +125 -0
- package/dist/components/fx-focus.cjs.map +1 -0
- package/dist/components/fx-focus.d.cts +65 -0
- package/dist/components/fx-focus.d.ts +65 -0
- package/dist/components/fx-focus.js +122 -0
- package/dist/components/fx-focus.js.map +1 -0
- package/dist/components/fx-gpu.cjs +2 -2
- package/dist/components/fx-gpu.d.cts +2 -2
- package/dist/components/fx-gpu.d.ts +2 -2
- package/dist/components/fx-gpu.js +1 -1
- package/dist/components/fx-light.cjs +2 -2
- package/dist/components/fx-light.cjs.map +1 -1
- package/dist/components/fx-light.d.cts +2 -2
- package/dist/components/fx-light.d.ts +2 -2
- package/dist/components/fx-light.js +2 -2
- package/dist/components/fx-light.js.map +1 -1
- package/dist/components/fx-morph.cjs +2 -2
- package/dist/components/fx-morph.cjs.map +1 -1
- package/dist/components/fx-morph.d.cts +2 -2
- package/dist/components/fx-morph.d.ts +2 -2
- package/dist/components/fx-morph.js +2 -2
- package/dist/components/fx-morph.js.map +1 -1
- package/dist/components/fx-physics.cjs +2 -2
- package/dist/components/fx-physics.cjs.map +1 -1
- package/dist/components/fx-physics.d.cts +2 -2
- package/dist/components/fx-physics.d.ts +2 -2
- package/dist/components/fx-physics.js +2 -2
- package/dist/components/fx-physics.js.map +1 -1
- package/dist/components/fx-text.cjs +2 -2
- package/dist/components/fx-text.cjs.map +1 -1
- package/dist/components/fx-text.d.cts +2 -2
- package/dist/components/fx-text.d.ts +2 -2
- package/dist/components/fx-text.js +2 -2
- package/dist/components/fx-text.js.map +1 -1
- package/dist/components/fx-transitions.cjs +2 -2
- package/dist/components/fx-transitions.cjs.map +1 -1
- package/dist/components/fx-transitions.d.cts +2 -2
- package/dist/components/fx-transitions.d.ts +2 -2
- package/dist/components/fx-transitions.js +2 -2
- package/dist/components/fx-transitions.js.map +1 -1
- package/dist/components/fx-weather.cjs +2 -2
- package/dist/components/fx-weather.cjs.map +1 -1
- package/dist/components/fx-weather.d.cts +2 -2
- package/dist/components/fx-weather.d.ts +2 -2
- package/dist/components/fx-weather.js +2 -2
- package/dist/components/fx-weather.js.map +1 -1
- package/dist/components/fx2.cjs +37 -22
- package/dist/components/fx2.cjs.map +1 -1
- package/dist/components/fx2.d.cts +135 -14
- package/dist/components/fx2.d.ts +135 -14
- package/dist/components/fx2.js +25 -21
- package/dist/components/fx2.js.map +1 -1
- package/dist/components/interaction.cjs +11 -94
- package/dist/components/interaction.cjs.map +1 -1
- package/dist/components/interaction.css +0 -1
- package/dist/components/interaction.d.cts +3 -21
- package/dist/components/interaction.d.ts +3 -21
- package/dist/components/interaction.js +12 -94
- package/dist/components/interaction.js.map +1 -1
- package/dist/components/jsx.d.cts +2 -2
- package/dist/components/jsx.d.ts +2 -2
- package/dist/components/lazy.cjs +1 -1
- package/dist/components/lazy.d.cts +2 -2
- package/dist/components/lazy.d.ts +2 -2
- package/dist/components/lazy.js +1 -1
- package/dist/components/lite.cjs +115 -256
- package/dist/components/lite.cjs.map +1 -1
- package/dist/components/lite.js +116 -255
- package/dist/components/lite.js.map +1 -1
- package/dist/components/marketplace.cjs +82 -0
- package/dist/components/marketplace.cjs.map +1 -0
- package/dist/components/marketplace.d.cts +108 -0
- package/dist/components/marketplace.d.ts +108 -0
- package/dist/components/marketplace.js +77 -0
- package/dist/components/marketplace.js.map +1 -0
- package/dist/components/perf.cjs +1 -1
- package/dist/components/perf.d.cts +2 -2
- package/dist/components/perf.d.ts +2 -2
- package/dist/components/perf.js +1 -1
- package/dist/components/react.cjs +2 -2
- package/dist/components/react.cjs.map +1 -1
- package/dist/components/react.js +2 -2
- package/dist/components/react.js.map +1 -1
- package/dist/components/solid.cjs +2 -2
- package/dist/components/solid.cjs.map +1 -1
- package/dist/components/solid.d.cts +4 -35
- package/dist/components/solid.d.ts +4 -35
- package/dist/components/solid.js +2 -2
- package/dist/components/solid.js.map +1 -1
- package/dist/components/svelte.cjs +2 -2
- package/dist/components/svelte.cjs.map +1 -1
- package/dist/components/svelte.d.cts +5 -36
- package/dist/components/svelte.d.ts +5 -36
- package/dist/components/svelte.js +2 -2
- package/dist/components/svelte.js.map +1 -1
- package/dist/components/ui.cjs +16 -74
- package/dist/components/ui.cjs.map +1 -1
- package/dist/components/ui.css +0 -1
- package/dist/components/ui.d.cts +3 -18
- package/dist/components/ui.d.ts +3 -18
- package/dist/components/ui.js +17 -74
- package/dist/components/ui.js.map +1 -1
- package/dist/components/vue.cjs +2 -2
- package/dist/components/vue.cjs.map +1 -1
- package/dist/components/vue.d.cts +5 -36
- package/dist/components/vue.d.ts +5 -36
- package/dist/components/vue.js +2 -2
- package/dist/components/vue.js.map +1 -1
- package/dist/components/widgets.cjs +622 -53
- 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 +615 -54
- package/dist/components/widgets.js.map +1 -1
- package/dist/components.cjs +1 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.css +0 -2
- package/dist/components.d.cts +6 -39
- package/dist/components.d.ts +6 -39
- package/dist/components.js +3 -3
- package/dist/components.umd.js +2 -2
- package/dist/components.umd.js.map +1 -1
- package/dist/widgets.umd.js +1 -1
- package/dist/widgets.umd.js.map +1 -1
- package/docs/ROADMAP.md +12 -12
- package/docs/accessibility.md +2 -2
- package/docs/components.md +41 -2
- package/docs/deprecations.md +4 -0
- package/docs/frameworks-ssr.md +4 -4
- package/docs/hybrid-apps.md +2 -2
- package/docs/upgrading-7.md +43 -0
- package/docs/windows-apps.md +1 -1
- package/package.json +133 -2
- package/dist/chunks/gpu-BBRLgEzM.cjs.map +0 -1
- package/dist/chunks/gpu-CsP2ZB3x.js.map +0 -1
- package/dist/chunks/index-tags-DucKMQr_.js.map +0 -1
- package/dist/chunks/index-tags-wv0R_vkO.cjs.map +0 -1
|
@@ -227,10 +227,10 @@ const DEPTH3_FX = [
|
|
|
227
227
|
},
|
|
228
228
|
];
|
|
229
229
|
/** Register the 6.5 3D pack (idempotent). */
|
|
230
|
-
function
|
|
230
|
+
function register3dPack() {
|
|
231
231
|
registry.registerEffects(DEPTH3_FX);
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
exports.DEPTH3_FX = DEPTH3_FX;
|
|
235
|
-
exports.
|
|
235
|
+
exports.register3dPack = register3dPack;
|
|
236
236
|
//# sourceMappingURL=fx-3d.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx-3d.cjs","sources":["../../src/components/fx2/depth3.ts"],"sourcesContent":["/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dEffects(): void {\n registerEffects(DEPTH3_FX);\n}\n"],"names":["trackPointer","all","registerEffects"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fx-3d.cjs","sources":["../../src/components/fx2/depth3.ts"],"sourcesContent":["/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dPack(): void {\n registerEffects(DEPTH3_FX);\n}\n\n"],"names":["trackPointer","all","registerEffects"],"mappings":"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"}
|
|
@@ -62,6 +62,6 @@ interface EffectDefinition<O extends Record<string, unknown> = Record<string, an
|
|
|
62
62
|
|
|
63
63
|
declare const DEPTH3_FX: EffectDefinition[];
|
|
64
64
|
/** Register the 6.5 3D pack (idempotent). */
|
|
65
|
-
declare function
|
|
65
|
+
declare function register3dPack(): void;
|
|
66
66
|
|
|
67
|
-
export { DEPTH3_FX,
|
|
67
|
+
export { DEPTH3_FX, register3dPack };
|
|
@@ -62,6 +62,6 @@ interface EffectDefinition<O extends Record<string, unknown> = Record<string, an
|
|
|
62
62
|
|
|
63
63
|
declare const DEPTH3_FX: EffectDefinition[];
|
|
64
64
|
/** Register the 6.5 3D pack (idempotent). */
|
|
65
|
-
declare function
|
|
65
|
+
declare function register3dPack(): void;
|
|
66
66
|
|
|
67
|
-
export { DEPTH3_FX,
|
|
67
|
+
export { DEPTH3_FX, register3dPack };
|
package/dist/components/fx-3d.js
CHANGED
|
@@ -225,9 +225,9 @@ const DEPTH3_FX = [
|
|
|
225
225
|
},
|
|
226
226
|
];
|
|
227
227
|
/** Register the 6.5 3D pack (idempotent). */
|
|
228
|
-
function
|
|
228
|
+
function register3dPack() {
|
|
229
229
|
registerEffects(DEPTH3_FX);
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
export { DEPTH3_FX,
|
|
232
|
+
export { DEPTH3_FX, register3dPack };
|
|
233
233
|
//# sourceMappingURL=fx-3d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx-3d.js","sources":["../../src/components/fx2/depth3.ts"],"sourcesContent":["/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dEffects(): void {\n registerEffects(DEPTH3_FX);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fx-3d.js","sources":["../../src/components/fx2/depth3.ts"],"sourcesContent":["/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dPack(): void {\n registerEffects(DEPTH3_FX);\n}\n\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var registry = require('../chunks/registry-DehBVRDV.cjs');
|
|
4
|
+
require('../chunks/base-BaQV-2ha.cjs');
|
|
5
|
+
|
|
6
|
+
const NS = 'http://www.w3.org/2000/svg';
|
|
7
|
+
function overlay(el, z = 1) {
|
|
8
|
+
if (getComputedStyle(el).position === 'static')
|
|
9
|
+
el.style.position = 'relative';
|
|
10
|
+
const o = document.createElement('span');
|
|
11
|
+
o.setAttribute('aria-hidden', 'true');
|
|
12
|
+
o.setAttribute('data-usa-fx-layer', '');
|
|
13
|
+
o.style.cssText = `position:absolute;inset:0;pointer-events:none;z-index:${z};border-radius:inherit`;
|
|
14
|
+
el.appendChild(o);
|
|
15
|
+
return o;
|
|
16
|
+
}
|
|
17
|
+
function ring(el, pad, color, width, dash = '') {
|
|
18
|
+
const o = overlay(el, 2);
|
|
19
|
+
o.style.inset = `-${pad}px`;
|
|
20
|
+
const r = el.getBoundingClientRect();
|
|
21
|
+
const w = Math.max(1, r.width + pad * 2);
|
|
22
|
+
const h = Math.max(1, r.height + pad * 2);
|
|
23
|
+
const svg = document.createElementNS(NS, 'svg');
|
|
24
|
+
svg.setAttribute('width', '100%');
|
|
25
|
+
svg.setAttribute('height', '100%');
|
|
26
|
+
svg.setAttribute('viewBox', `0 0 ${w} ${h}`);
|
|
27
|
+
svg.style.overflow = 'visible';
|
|
28
|
+
const rect = document.createElementNS(NS, 'rect');
|
|
29
|
+
const rad = Math.min(16, h / 2);
|
|
30
|
+
for (const [k, v] of Object.entries({ x: width / 2, y: width / 2, width: w - width, height: h - width, rx: rad, fill: 'none', stroke: color, 'stroke-width': width, 'stroke-linecap': 'round' }))
|
|
31
|
+
rect.setAttribute(k, String(v));
|
|
32
|
+
if (dash)
|
|
33
|
+
rect.setAttribute('stroke-dasharray', dash);
|
|
34
|
+
svg.appendChild(rect);
|
|
35
|
+
o.appendChild(svg);
|
|
36
|
+
return { o, rect, len: 2 * (w + h) };
|
|
37
|
+
}
|
|
38
|
+
const after = (a, fn) => (a ? a.finished.then(fn, fn) : fn());
|
|
39
|
+
const FOCUS_FX = [
|
|
40
|
+
{
|
|
41
|
+
name: 'focus-draw',
|
|
42
|
+
kind: 'attention',
|
|
43
|
+
description: 'A rounded ring draws itself around the element, then fades (`color`, `width`, `pad`, `duration`).',
|
|
44
|
+
defaults: { color: '#7c5cff', width: 2.5, pad: 4, duration: 700 },
|
|
45
|
+
run: (el, o, ctx) => {
|
|
46
|
+
const { o: layer, rect, len } = ring(el, o.pad, o.color, o.width);
|
|
47
|
+
const done = () => layer.remove();
|
|
48
|
+
if (ctx.reduced) {
|
|
49
|
+
const a = ctx.animate(layer, [{ opacity: 1 }, { opacity: 0 }], { duration: 600 });
|
|
50
|
+
after(a, done);
|
|
51
|
+
return a;
|
|
52
|
+
}
|
|
53
|
+
rect.setAttribute('stroke-dasharray', String(len));
|
|
54
|
+
const a = ctx.animate(rect, [{ strokeDashoffset: len }, { strokeDashoffset: 0, offset: 0.6 }, { strokeDashoffset: 0 }], { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)' });
|
|
55
|
+
const f = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.7 }, { opacity: 0 }], { duration: o.duration + 500 });
|
|
56
|
+
after(f, done);
|
|
57
|
+
return a;
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'marching-ants',
|
|
62
|
+
kind: 'loop',
|
|
63
|
+
description: 'A dashed selection border that marches around the element (`color`, `width`, `pad`, `speed`).',
|
|
64
|
+
defaults: { color: '#7c5cff', width: 2, pad: 3, speed: 1 },
|
|
65
|
+
reduced: 'run',
|
|
66
|
+
run: (el, o, ctx) => {
|
|
67
|
+
const { o: layer, rect } = ring(el, o.pad, o.color, o.width, '7 5');
|
|
68
|
+
if (!ctx.reduced)
|
|
69
|
+
ctx.animate(rect, [{ strokeDashoffset: 0 }, { strokeDashoffset: -24 }], { duration: 700 / Math.max(0.1, o.speed), iterations: Infinity });
|
|
70
|
+
const stop = () => layer.remove();
|
|
71
|
+
ctx.onCleanup(stop);
|
|
72
|
+
return stop;
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'success-check',
|
|
77
|
+
kind: 'click',
|
|
78
|
+
description: 'A check mark draws over the element on a soft green disc, then fades away (`color`, `duration`).',
|
|
79
|
+
defaults: { color: '#22c55e', duration: 1100 },
|
|
80
|
+
run: (el, o, ctx) => {
|
|
81
|
+
const layer = overlay(el, 3);
|
|
82
|
+
layer.style.display = 'grid';
|
|
83
|
+
layer.style.placeItems = 'center';
|
|
84
|
+
layer.innerHTML = `<svg viewBox="0 0 52 52" width="52" height="52"><circle cx="26" cy="26" r="24" fill="${o.color}" opacity=".18"/><path d="M15 27l7 7 15-16" fill="none" stroke="${o.color}" stroke-width="4.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="36" stroke-dashoffset="36"/></svg>`;
|
|
85
|
+
const svg = layer.firstElementChild;
|
|
86
|
+
const path = layer.querySelector('path');
|
|
87
|
+
const done = () => layer.remove();
|
|
88
|
+
if (ctx.reduced) {
|
|
89
|
+
path.setAttribute('stroke-dashoffset', '0');
|
|
90
|
+
const a = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.7 }, { opacity: 0 }], { duration: o.duration });
|
|
91
|
+
after(a, done);
|
|
92
|
+
return a;
|
|
93
|
+
}
|
|
94
|
+
ctx.animate(svg, [{ transform: 'scale(.4)', opacity: 0 }, { transform: 'scale(1.1)', opacity: 1, offset: 0.35 }, { transform: 'scale(1)', opacity: 1 }], { duration: 420, easing: 'ease-out' });
|
|
95
|
+
ctx.animate(path, [{ strokeDashoffset: 36 }, { strokeDashoffset: 36, offset: 0.25 }, { strokeDashoffset: 0 }], { duration: 600, easing: 'ease-out', fill: 'forwards' });
|
|
96
|
+
const f = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.75 }, { opacity: 0 }], { duration: o.duration });
|
|
97
|
+
after(f, done);
|
|
98
|
+
return f;
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'highlight-sweep',
|
|
103
|
+
kind: 'attention',
|
|
104
|
+
description: "A highlighter stroke sweeps behind the element's text and stays (`color`, `duration`, `keep`).",
|
|
105
|
+
defaults: { color: 'rgba(250,204,21,.55)', duration: 700, keep: true },
|
|
106
|
+
run: (el, o, ctx) => {
|
|
107
|
+
const layer = overlay(el, -1);
|
|
108
|
+
el.style.isolation = 'isolate';
|
|
109
|
+
layer.style.cssText += `;inset:15% -4px 5% -4px;background:${o.color};border-radius:4px;transform-origin:0 50%`;
|
|
110
|
+
const a = ctx.reduced ? ctx.animate(layer, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 }) : ctx.animate(layer, [{ transform: 'scaleX(0) skewX(-12deg)' }, { transform: 'scaleX(1) skewX(-6deg)' }], { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)', fill: 'forwards' });
|
|
111
|
+
if (!o.keep)
|
|
112
|
+
after(a, () => layer.remove());
|
|
113
|
+
ctx.onCleanup(() => layer.remove());
|
|
114
|
+
return a;
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
/** Register the 6.9 focus & feedback pack (idempotent). */
|
|
119
|
+
function registerFocusPack() {
|
|
120
|
+
registry.registerEffects(FOCUS_FX);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
exports.FOCUS_FX = FOCUS_FX;
|
|
124
|
+
exports.registerFocusPack = registerFocusPack;
|
|
125
|
+
//# sourceMappingURL=fx-focus.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fx-focus.cjs","sources":["../../src/components/fx2/focus.ts"],"sourcesContent":["/**\n * 6.9 — Focus & feedback (`motionary/components/fx-focus`), registered\n * through `registerEffect()`:\n *\n * - `focus-draw` (kind `attention`) — a rounded ring draws itself around the\n * element, then fades (great on `focus`).\n * - `marching-ants` (kind `loop`) — a dashed selection border that marches\n * (drop targets, selections).\n * - `success-check` (kind `click`) — a check mark draws over the element on a\n * soft green disc, then fades away.\n * - `highlight-sweep` (kind `attention`) — a highlighter stroke sweeps\n * behind the element's text.\n *\n * Overlays are SVG / spans marked `aria-hidden` and removed when done.\n * Reduced motion: a plain fade of the final state (marching-ants is static).\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\n\nconst NS = 'http://www.w3.org/2000/svg';\n\nfunction overlay(el: HTMLElement, z = 1): HTMLSpanElement {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const o = document.createElement('span');\n o.setAttribute('aria-hidden', 'true');\n o.setAttribute('data-usa-fx-layer', '');\n o.style.cssText = `position:absolute;inset:0;pointer-events:none;z-index:${z};border-radius:inherit`;\n el.appendChild(o);\n return o;\n}\n\nfunction ring(el: HTMLElement, pad: number, color: string, width: number, dash = ''): { o: HTMLSpanElement; rect: SVGRectElement; len: number } {\n const o = overlay(el, 2);\n o.style.inset = `-${pad}px`;\n const r = el.getBoundingClientRect();\n const w = Math.max(1, r.width + pad * 2);\n const h = Math.max(1, r.height + pad * 2);\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n svg.setAttribute('viewBox', `0 0 ${w} ${h}`);\n svg.style.overflow = 'visible';\n const rect = document.createElementNS(NS, 'rect');\n const rad = Math.min(16, h / 2);\n for (const [k, v] of Object.entries({ x: width / 2, y: width / 2, width: w - width, height: h - width, rx: rad, fill: 'none', stroke: color, 'stroke-width': width, 'stroke-linecap': 'round' })) rect.setAttribute(k, String(v));\n if (dash) rect.setAttribute('stroke-dasharray', dash);\n svg.appendChild(rect);\n o.appendChild(svg);\n return { o, rect, len: 2 * (w + h) };\n}\n\nconst after = (a: Animation | null, fn: () => void) => (a ? a.finished.then(fn, fn) : fn());\n\nexport const FOCUS_FX: EffectDefinition[] = [\n {\n name: 'focus-draw',\n kind: 'attention',\n description: 'A rounded ring draws itself around the element, then fades (`color`, `width`, `pad`, `duration`).',\n defaults: { color: '#7c5cff', width: 2.5, pad: 4, duration: 700 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const { o: layer, rect, len } = ring(el, o.pad, o.color, o.width);\n const done = () => layer.remove();\n if (ctx.reduced) {\n const a = ctx.animate(layer, [{ opacity: 1 }, { opacity: 0 }], { duration: 600 });\n after(a, done);\n return a;\n }\n rect.setAttribute('stroke-dasharray', String(len));\n const a = ctx.animate(rect, [{ strokeDashoffset: len }, { strokeDashoffset: 0, offset: 0.6 }, { strokeDashoffset: 0 }], { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)' });\n const f = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.7 }, { opacity: 0 }], { duration: o.duration + 500 });\n after(f, done);\n return a;\n },\n },\n {\n name: 'marching-ants',\n kind: 'loop',\n description: 'A dashed selection border that marches around the element (`color`, `width`, `pad`, `speed`).',\n defaults: { color: '#7c5cff', width: 2, pad: 3, speed: 1 },\n reduced: 'run',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const { o: layer, rect } = ring(el, o.pad, o.color, o.width, '7 5');\n if (!ctx.reduced) ctx.animate(rect, [{ strokeDashoffset: 0 }, { strokeDashoffset: -24 }], { duration: 700 / Math.max(0.1, o.speed), iterations: Infinity });\n const stop = () => layer.remove();\n ctx.onCleanup(stop);\n return stop;\n },\n },\n {\n name: 'success-check',\n kind: 'click',\n description: 'A check mark draws over the element on a soft green disc, then fades away (`color`, `duration`).',\n defaults: { color: '#22c55e', duration: 1100 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const layer = overlay(el, 3);\n layer.style.display = 'grid';\n layer.style.placeItems = 'center';\n layer.innerHTML = `<svg viewBox=\"0 0 52 52\" width=\"52\" height=\"52\"><circle cx=\"26\" cy=\"26\" r=\"24\" fill=\"${o.color}\" opacity=\".18\"/><path d=\"M15 27l7 7 15-16\" fill=\"none\" stroke=\"${o.color}\" stroke-width=\"4.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"36\" stroke-dashoffset=\"36\"/></svg>`;\n const svg = layer.firstElementChild as SVGElement;\n const path = layer.querySelector('path')!;\n const done = () => layer.remove();\n if (ctx.reduced) {\n path.setAttribute('stroke-dashoffset', '0');\n const a = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.7 }, { opacity: 0 }], { duration: o.duration });\n after(a, done);\n return a;\n }\n ctx.animate(svg, [{ transform: 'scale(.4)', opacity: 0 }, { transform: 'scale(1.1)', opacity: 1, offset: 0.35 }, { transform: 'scale(1)', opacity: 1 }], { duration: 420, easing: 'ease-out' });\n ctx.animate(path, [{ strokeDashoffset: 36 }, { strokeDashoffset: 36, offset: 0.25 }, { strokeDashoffset: 0 }], { duration: 600, easing: 'ease-out', fill: 'forwards' });\n const f = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.75 }, { opacity: 0 }], { duration: o.duration });\n after(f, done);\n return f;\n },\n },\n {\n name: 'highlight-sweep',\n kind: 'attention',\n description: \"A highlighter stroke sweeps behind the element's text and stays (`color`, `duration`, `keep`).\",\n defaults: { color: 'rgba(250,204,21,.55)', duration: 700, keep: true },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const layer = overlay(el, -1);\n el.style.isolation = 'isolate';\n layer.style.cssText += `;inset:15% -4px 5% -4px;background:${o.color};border-radius:4px;transform-origin:0 50%`;\n const a = ctx.reduced ? ctx.animate(layer, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 }) : ctx.animate(layer, [{ transform: 'scaleX(0) skewX(-12deg)' }, { transform: 'scaleX(1) skewX(-6deg)' }], { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)', fill: 'forwards' });\n if (!o.keep) after(a, () => layer.remove());\n ctx.onCleanup(() => layer.remove());\n return a;\n },\n },\n];\n\n/** Register the 6.9 focus & feedback pack (idempotent). */\nexport function registerFocusPack(): void {\n registerEffects(FOCUS_FX);\n}\n"],"names":["registerEffects"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
* 6.9 — Focus & feedback (`motionary/components/fx-focus`), registered
|
|
46
|
+
* through `registerEffect()`:
|
|
47
|
+
*
|
|
48
|
+
* - `focus-draw` (kind `attention`) — a rounded ring draws itself around the
|
|
49
|
+
* element, then fades (great on `focus`).
|
|
50
|
+
* - `marching-ants` (kind `loop`) — a dashed selection border that marches
|
|
51
|
+
* (drop targets, selections).
|
|
52
|
+
* - `success-check` (kind `click`) — a check mark draws over the element on a
|
|
53
|
+
* soft green disc, then fades away.
|
|
54
|
+
* - `highlight-sweep` (kind `attention`) — a highlighter stroke sweeps
|
|
55
|
+
* behind the element's text.
|
|
56
|
+
*
|
|
57
|
+
* Overlays are SVG / spans marked `aria-hidden` and removed when done.
|
|
58
|
+
* Reduced motion: a plain fade of the final state (marching-ants is static).
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
declare const FOCUS_FX: EffectDefinition[];
|
|
62
|
+
/** Register the 6.9 focus & feedback pack (idempotent). */
|
|
63
|
+
declare function registerFocusPack(): void;
|
|
64
|
+
|
|
65
|
+
export { FOCUS_FX, registerFocusPack };
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
* 6.9 — Focus & feedback (`motionary/components/fx-focus`), registered
|
|
46
|
+
* through `registerEffect()`:
|
|
47
|
+
*
|
|
48
|
+
* - `focus-draw` (kind `attention`) — a rounded ring draws itself around the
|
|
49
|
+
* element, then fades (great on `focus`).
|
|
50
|
+
* - `marching-ants` (kind `loop`) — a dashed selection border that marches
|
|
51
|
+
* (drop targets, selections).
|
|
52
|
+
* - `success-check` (kind `click`) — a check mark draws over the element on a
|
|
53
|
+
* soft green disc, then fades away.
|
|
54
|
+
* - `highlight-sweep` (kind `attention`) — a highlighter stroke sweeps
|
|
55
|
+
* behind the element's text.
|
|
56
|
+
*
|
|
57
|
+
* Overlays are SVG / spans marked `aria-hidden` and removed when done.
|
|
58
|
+
* Reduced motion: a plain fade of the final state (marching-ants is static).
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
declare const FOCUS_FX: EffectDefinition[];
|
|
62
|
+
/** Register the 6.9 focus & feedback pack (idempotent). */
|
|
63
|
+
declare function registerFocusPack(): void;
|
|
64
|
+
|
|
65
|
+
export { FOCUS_FX, registerFocusPack };
|