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
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var registry = require('./registry-DehBVRDV.cjs');
|
|
4
|
+
var base = require('./base-BaQV-2ha.cjs');
|
|
5
|
+
var core = require('./core-BGAyaY6L.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 5.4 — `<usa-story template="…">` scroll-storytelling templates.
|
|
9
|
+
*
|
|
10
|
+
* - `pin` — a sticky `[data-stage]` while `[data-step]` sections scroll past; the
|
|
11
|
+
* step in view gets `data-active`, the stage gets `data-active-step="<index>"`.
|
|
12
|
+
* - `gallery` — a horizontal `[data-track]` slides sideways as you scroll down.
|
|
13
|
+
* - `zoom` — the `[data-stage]` zooms toward the viewer (`zoom="6"`) and fades.
|
|
14
|
+
* - `compare` — before / after (`[data-before]`, `[data-after]`) wipe driven by
|
|
15
|
+
* scroll, plus a draggable, keyboard-accessible handle (`role="slider"`).
|
|
16
|
+
* - `counter` — `[data-count="1234"]` numbers count up when they enter view.
|
|
17
|
+
* - `highlight` — paragraphs dim except the one crossing the viewport center.
|
|
18
|
+
*
|
|
19
|
+
* Every template sets `--usa-story-progress` (0–1) on the host and dispatches
|
|
20
|
+
* `usa-story-step` (`detail: { index }`). Reduced motion: no sliding / zooming
|
|
21
|
+
* (the gallery stacks vertically), counters show final values, the rest is
|
|
22
|
+
* class changes only.
|
|
23
|
+
*/
|
|
24
|
+
const STORY_TEMPLATES = ['pin', 'gallery', 'zoom', 'compare', 'counter', 'highlight'];
|
|
25
|
+
const CSS = `usa-story{display:block;position:relative}
|
|
26
|
+
usa-story[template=pin] [data-stage],usa-story[template=gallery] [data-sticky],usa-story[template=zoom] [data-stage],usa-story[template=compare] [data-sticky]{position:sticky;top:0}
|
|
27
|
+
usa-story[template=pin] [data-stage]{align-self:start}
|
|
28
|
+
usa-story[template=pin] [data-step]{min-height:80vh;opacity:.35;transition:opacity .3s}
|
|
29
|
+
usa-story[template=pin] [data-step][data-active]{opacity:1}
|
|
30
|
+
usa-story[template=gallery] [data-sticky]{height:100vh;overflow:hidden;display:flex;align-items:center}
|
|
31
|
+
usa-story[template=gallery] [data-track]{display:flex;gap:24px;will-change:transform}
|
|
32
|
+
usa-story[template=gallery][data-static] [data-sticky]{position:static;height:auto;overflow:visible}
|
|
33
|
+
usa-story[template=gallery][data-static] [data-track]{flex-direction:column;transform:none!important}
|
|
34
|
+
usa-story[template=zoom] [data-stage]{height:100vh;overflow:hidden;display:grid;place-items:center}
|
|
35
|
+
usa-story[template=compare] [data-sticky]{height:var(--usa-story-h,70vh);overflow:hidden}
|
|
36
|
+
usa-story[template=compare] [data-before],usa-story[template=compare] [data-after]{position:absolute;inset:0}
|
|
37
|
+
usa-story[template=compare] [data-after]{clip-path:inset(0 0 0 var(--usa-split,50%))}
|
|
38
|
+
usa-story [data-handle]{position:absolute;top:0;bottom:0;left:var(--usa-split,50%);width:4px;margin-left:-2px;background:#fff;box-shadow:0 0 0 1px #0003;cursor:ew-resize;touch-action:none}
|
|
39
|
+
usa-story [data-handle]:focus-visible{outline:3px solid #7c5cff;outline-offset:2px}
|
|
40
|
+
usa-story[template=highlight] p,usa-story[template=highlight] [data-step]{opacity:.3;transition:opacity .25s}
|
|
41
|
+
usa-story[template=highlight] [data-active]{opacity:1}`;
|
|
42
|
+
const clamp = (v, a = 0, b = 1) => Math.min(b, Math.max(a, v));
|
|
43
|
+
/** Progress of `el` through the viewport: 0 when its top hits the viewport top, 1 when its bottom hits the viewport bottom. */
|
|
44
|
+
function storyProgress(el, vh = typeof innerHeight === 'number' ? innerHeight : 800) {
|
|
45
|
+
const r = el.getBoundingClientRect();
|
|
46
|
+
const span = r.height - vh;
|
|
47
|
+
return span > 0 ? clamp(-r.top / span) : clamp((vh - r.top) / (vh + r.height));
|
|
48
|
+
}
|
|
49
|
+
/** Format a counted value like the target (`1,234`, `12.5`, prefix / suffix kept). */
|
|
50
|
+
function formatCount(target, t) {
|
|
51
|
+
const m = target.match(/^(\D*)([\d,]*\.?\d+)(.*)$/);
|
|
52
|
+
if (!m)
|
|
53
|
+
return target;
|
|
54
|
+
const [, pre, num, post] = m;
|
|
55
|
+
const n = parseFloat(num.replace(/,/g, ''));
|
|
56
|
+
const dec = (num.split('.')[1] || '').length;
|
|
57
|
+
let s = (n * t).toFixed(dec);
|
|
58
|
+
if (num.includes(','))
|
|
59
|
+
s = Number(s).toLocaleString('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec });
|
|
60
|
+
return pre + s + post;
|
|
61
|
+
}
|
|
62
|
+
function defineStory(tag = 'usa-story') {
|
|
63
|
+
return base.defineElement(tag, (Base) => class UsaStory extends Base {
|
|
64
|
+
constructor() {
|
|
65
|
+
super(...arguments);
|
|
66
|
+
this.progress = 0;
|
|
67
|
+
this.step = -1;
|
|
68
|
+
this.frame = 0;
|
|
69
|
+
}
|
|
70
|
+
static get observedAttributes() {
|
|
71
|
+
return ['template', 'zoom'];
|
|
72
|
+
}
|
|
73
|
+
get template() {
|
|
74
|
+
const t = this.str('template', 'pin');
|
|
75
|
+
return STORY_TEMPLATES.includes(t) ? t : 'pin';
|
|
76
|
+
}
|
|
77
|
+
steps() {
|
|
78
|
+
const own = Array.from(this.querySelectorAll('[data-step]:not([data-stage])'));
|
|
79
|
+
return own.length || this.template !== 'highlight' ? own : Array.from(this.querySelectorAll('p'));
|
|
80
|
+
}
|
|
81
|
+
setStep(i) {
|
|
82
|
+
if (i === this.step)
|
|
83
|
+
return;
|
|
84
|
+
this.step = i;
|
|
85
|
+
this.steps().forEach((s, k) => s.toggleAttribute('data-active', k === i));
|
|
86
|
+
const stage = this.querySelector('[data-stage]');
|
|
87
|
+
if (stage)
|
|
88
|
+
stage.dataset.activeStep = String(i);
|
|
89
|
+
this.dispatchEvent(new CustomEvent('usa-story-step', { detail: { index: i }, bubbles: true }));
|
|
90
|
+
}
|
|
91
|
+
/** Recompute from the current scroll position (called on scroll / resize). */
|
|
92
|
+
update() {
|
|
93
|
+
this.frame = 0;
|
|
94
|
+
const p = (this.progress = storyProgress(this));
|
|
95
|
+
this.style.setProperty('--usa-story-progress', p.toFixed(4));
|
|
96
|
+
const t = this.template;
|
|
97
|
+
const vh = innerHeight || 800;
|
|
98
|
+
if (t === 'pin' || t === 'highlight') {
|
|
99
|
+
const mid = vh / 2;
|
|
100
|
+
let best = -1;
|
|
101
|
+
let bestD = Infinity;
|
|
102
|
+
this.steps().forEach((s, i) => {
|
|
103
|
+
const r = s.getBoundingClientRect();
|
|
104
|
+
const d = r.top <= mid && r.bottom >= mid ? 0 : Math.min(Math.abs(r.top - mid), Math.abs(r.bottom - mid));
|
|
105
|
+
if (d < bestD)
|
|
106
|
+
(bestD = d), (best = i);
|
|
107
|
+
});
|
|
108
|
+
this.setStep(best);
|
|
109
|
+
}
|
|
110
|
+
else if (t === 'gallery' && !this.reduced) {
|
|
111
|
+
const track = this.querySelector('[data-track]');
|
|
112
|
+
const box = this.querySelector('[data-sticky]');
|
|
113
|
+
if (track && box)
|
|
114
|
+
track.style.transform = `translateX(${(-p * Math.max(0, track.scrollWidth - box.clientWidth)).toFixed(1)}px)`;
|
|
115
|
+
}
|
|
116
|
+
else if (t === 'zoom' && !this.reduced) {
|
|
117
|
+
const inner = this.querySelector('[data-stage] > *');
|
|
118
|
+
if (inner) {
|
|
119
|
+
inner.style.transform = `scale(${(1 + p * (this.num('zoom', 6) - 1)).toFixed(3)})`;
|
|
120
|
+
inner.style.opacity = String(clamp(1.4 - p * 1.4).toFixed(3));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (t === 'compare' && !this.hasAttribute('data-dragged')) {
|
|
124
|
+
this.setSplit(p * 100);
|
|
125
|
+
}
|
|
126
|
+
else if (t === 'counter') {
|
|
127
|
+
this.querySelectorAll('[data-count]:not([data-counted])').forEach((el) => {
|
|
128
|
+
const r = el.getBoundingClientRect();
|
|
129
|
+
if (r.top < vh * 0.9 && r.bottom > 0)
|
|
130
|
+
this.count(el);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
setSplit(pct) {
|
|
135
|
+
const v = clamp(pct, 0, 100);
|
|
136
|
+
this.style.setProperty('--usa-split', `${v.toFixed(2)}%`);
|
|
137
|
+
const h = this.querySelector('[data-handle]');
|
|
138
|
+
if (h)
|
|
139
|
+
h.setAttribute('aria-valuenow', String(Math.round(v)));
|
|
140
|
+
}
|
|
141
|
+
count(el) {
|
|
142
|
+
el.dataset.counted = '';
|
|
143
|
+
const target = el.dataset.count || el.textContent || '0';
|
|
144
|
+
el.setAttribute('aria-label', target);
|
|
145
|
+
if (this.reduced) {
|
|
146
|
+
el.textContent = target;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const dur = Number(el.dataset.duration) || 1600;
|
|
150
|
+
const t0 = performance.now();
|
|
151
|
+
const tick = (now) => {
|
|
152
|
+
const k = clamp((now - t0) / dur);
|
|
153
|
+
el.textContent = formatCount(target, 1 - (1 - k) ** 3);
|
|
154
|
+
if (k < 1)
|
|
155
|
+
requestAnimationFrame(tick);
|
|
156
|
+
};
|
|
157
|
+
requestAnimationFrame(tick);
|
|
158
|
+
}
|
|
159
|
+
mount() {
|
|
160
|
+
this.toggleAttribute('data-static', this.reduced);
|
|
161
|
+
if (this.template === 'compare')
|
|
162
|
+
this.mountCompare();
|
|
163
|
+
const kick = () => {
|
|
164
|
+
if (!this.frame)
|
|
165
|
+
this.frame = requestAnimationFrame(() => this.update());
|
|
166
|
+
};
|
|
167
|
+
this.listen(window, 'scroll', kick, { passive: true });
|
|
168
|
+
this.listen(window, 'resize', kick);
|
|
169
|
+
this.onCleanup(() => cancelAnimationFrame(this.frame));
|
|
170
|
+
this.update();
|
|
171
|
+
}
|
|
172
|
+
mountCompare() {
|
|
173
|
+
const box = this.querySelector('[data-sticky]') || this;
|
|
174
|
+
let h = this.querySelector('[data-handle]');
|
|
175
|
+
if (!h) {
|
|
176
|
+
h = document.createElement('div');
|
|
177
|
+
h.setAttribute('data-handle', '');
|
|
178
|
+
box.appendChild(h);
|
|
179
|
+
this.onCleanup(() => h.remove());
|
|
180
|
+
}
|
|
181
|
+
h.tabIndex = 0;
|
|
182
|
+
h.setAttribute('role', 'slider');
|
|
183
|
+
h.setAttribute('aria-label', this.str('label', 'Before / after'));
|
|
184
|
+
h.setAttribute('aria-valuemin', '0');
|
|
185
|
+
h.setAttribute('aria-valuemax', '100');
|
|
186
|
+
const at = (e) => {
|
|
187
|
+
const r = box.getBoundingClientRect();
|
|
188
|
+
this.dataset.dragged = '';
|
|
189
|
+
this.setSplit(((e.clientX - r.left) / (r.width || 1)) * 100);
|
|
190
|
+
};
|
|
191
|
+
let drag = false;
|
|
192
|
+
this.listen(h, 'pointerdown', (e) => {
|
|
193
|
+
drag = true;
|
|
194
|
+
h.setPointerCapture?.(e.pointerId);
|
|
195
|
+
});
|
|
196
|
+
this.listen(h, 'pointermove', (e) => drag && at(e));
|
|
197
|
+
this.listen(h, 'pointerup', () => (drag = false));
|
|
198
|
+
this.listen(h, 'keydown', (e) => {
|
|
199
|
+
const cur = parseFloat(h.getAttribute('aria-valuenow') || '50');
|
|
200
|
+
const step = e.shiftKey ? 10 : 2;
|
|
201
|
+
const next = e.key === 'ArrowLeft' || e.key === 'ArrowDown' ? cur - step : e.key === 'ArrowRight' || e.key === 'ArrowUp' ? cur + step : e.key === 'Home' ? 0 : e.key === 'End' ? 100 : null;
|
|
202
|
+
if (next == null)
|
|
203
|
+
return;
|
|
204
|
+
e.preventDefault();
|
|
205
|
+
this.dataset.dragged = '';
|
|
206
|
+
this.setSplit(next);
|
|
207
|
+
});
|
|
208
|
+
this.setSplit(50);
|
|
209
|
+
}
|
|
210
|
+
unmount() {
|
|
211
|
+
this.step = -1;
|
|
212
|
+
delete this.dataset.dragged;
|
|
213
|
+
}
|
|
214
|
+
}, { id: 'usa-story', text: CSS });
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* 5.9 — `<usa-player>`: plays JSON animations.
|
|
219
|
+
*
|
|
220
|
+
* Format `use-scroll-animate/animation` v1:
|
|
221
|
+
*
|
|
222
|
+
* ```json
|
|
223
|
+
* { "format": "use-scroll-animate/animation", "version": 1, "name": "Hero",
|
|
224
|
+
* "loop": false,
|
|
225
|
+
* "tracks": [
|
|
226
|
+
* { "target": "h1", "start": 0, "duration": 600, "preset": "fade-up" },
|
|
227
|
+
* { "target": ".cta", "start": 500, "duration": 500, "keyframes": [{ "opacity": 0 }, { "opacity": 1 }], "easing": "ease-out" },
|
|
228
|
+
* { "target": ".cta", "start": 1100, "effect": "jelly", "options": {} }
|
|
229
|
+
* ] }
|
|
230
|
+
* ```
|
|
231
|
+
*
|
|
232
|
+
* A track animates `target` (a selector inside the player; `:scope` for the
|
|
233
|
+
* player itself) with a timeline preset, its own keyframes, or fires any
|
|
234
|
+
* registered effect at `start`. Playground presets (format
|
|
235
|
+
* `use-scroll-animate/playground`) are accepted too — their tracks map to the
|
|
236
|
+
* player's children in order.
|
|
237
|
+
*
|
|
238
|
+
* Keyframe tracks are WAAPI animations driven by one clock, so the player can
|
|
239
|
+
* play, pause, seek, change rate and be scrubbed by scroll
|
|
240
|
+
* (`trigger="scroll"`). Reduced motion: jumps to the end state, effects skipped.
|
|
241
|
+
*/
|
|
242
|
+
const ANIMATION_FORMAT = 'use-scroll-animate/animation';
|
|
243
|
+
function decodePlayground(state) {
|
|
244
|
+
try {
|
|
245
|
+
const b64 = state.replace(/-/g, '+').replace(/_/g, '/');
|
|
246
|
+
const json = decodeURIComponent(escape(atob(b64)));
|
|
247
|
+
const t = (JSON.parse(json).t || []);
|
|
248
|
+
return t.map(([preset, start, duration, label], i) => ({ target: `:scope > :nth-child(${i + 1})`, preset, start, duration, label }));
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/** Validate / normalise an animation (object or JSON text). Throws on anything unusable. */
|
|
255
|
+
function normalizeAnimation(input) {
|
|
256
|
+
const d = typeof input === 'string' ? JSON.parse(input) : input;
|
|
257
|
+
if (!d || typeof d !== 'object')
|
|
258
|
+
throw new Error('[motionary] animation: expected an object');
|
|
259
|
+
let tracks;
|
|
260
|
+
if (d.format === 'use-scroll-animate/playground')
|
|
261
|
+
tracks = decodePlayground(String(d.state || ''));
|
|
262
|
+
else if (Array.isArray(d.tracks))
|
|
263
|
+
tracks = d.tracks;
|
|
264
|
+
else
|
|
265
|
+
throw new Error('[motionary] animation: missing "tracks"');
|
|
266
|
+
if (d.format && d.format !== ANIMATION_FORMAT && d.format !== 'use-scroll-animate/playground')
|
|
267
|
+
throw new Error(`[motionary] animation: unknown format "${d.format}"`);
|
|
268
|
+
if (d.version && d.version > 1 && d.format === ANIMATION_FORMAT)
|
|
269
|
+
throw new Error(`[motionary] animation: version ${d.version} needs a newer motionary`);
|
|
270
|
+
const out = tracks
|
|
271
|
+
.filter((t) => t && (t.effect || t.preset || Array.isArray(t.keyframes)))
|
|
272
|
+
.map((t) => ({ ...t, target: t.target || ':scope', start: Math.max(0, Number(t.start) || 0), duration: t.effect ? 0 : Math.max(1, Number(t.duration) || 600) }));
|
|
273
|
+
const end = out.reduce((m, t) => Math.max(m, t.start + t.duration), 0);
|
|
274
|
+
return { tracks: out, duration: Math.max(end, Number(d.duration) || 0), loop: !!d.loop, name: String(d.name || 'animation') };
|
|
275
|
+
}
|
|
276
|
+
const pick = (root, sel) => {
|
|
277
|
+
if (sel === ':scope')
|
|
278
|
+
return [root];
|
|
279
|
+
try {
|
|
280
|
+
return Array.from(root.querySelectorAll(sel));
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return [];
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
/** Bind an animation to `root` and return its controller (paused at 0 unless `autoplay`). */
|
|
287
|
+
function createPlayer(root, animation, o = {}) {
|
|
288
|
+
const a = normalizeAnimation(animation);
|
|
289
|
+
const loop = o.loop ?? a.loop;
|
|
290
|
+
const anims = [];
|
|
291
|
+
const effects = [];
|
|
292
|
+
for (const t of a.tracks) {
|
|
293
|
+
const els = pick(root, t.target);
|
|
294
|
+
if (t.effect)
|
|
295
|
+
effects.push({ els, t, fired: false });
|
|
296
|
+
else {
|
|
297
|
+
const kf = t.keyframes || core.TIMELINE_PRESETS[t.preset] || core.TIMELINE_PRESETS.fade;
|
|
298
|
+
for (const el of els) {
|
|
299
|
+
if (typeof el.animate !== 'function')
|
|
300
|
+
continue;
|
|
301
|
+
const an = el.animate(kf, { duration: t.duration, delay: t.start, easing: t.easing || 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'both' });
|
|
302
|
+
an.pause();
|
|
303
|
+
an.currentTime = 0;
|
|
304
|
+
anims.push(an);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
let time = 0;
|
|
309
|
+
let playing = false;
|
|
310
|
+
let raf = 0;
|
|
311
|
+
let last = 0;
|
|
312
|
+
let resolve;
|
|
313
|
+
let finished = new Promise((r) => (resolve = r));
|
|
314
|
+
const set = (ms) => {
|
|
315
|
+
time = Math.min(a.duration, Math.max(0, ms));
|
|
316
|
+
for (const an of anims)
|
|
317
|
+
an.currentTime = time;
|
|
318
|
+
};
|
|
319
|
+
const fireDue = () => {
|
|
320
|
+
if (base.prefersReducedMotion())
|
|
321
|
+
return;
|
|
322
|
+
for (const e of effects)
|
|
323
|
+
if (!e.fired && time >= e.t.start) {
|
|
324
|
+
e.fired = true;
|
|
325
|
+
for (const el of e.els)
|
|
326
|
+
registry.playEffect(el, e.t.effect, e.t.options || {}).catch(() => undefined);
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const done = () => {
|
|
330
|
+
resolve();
|
|
331
|
+
o.onFinish?.();
|
|
332
|
+
finished = new Promise((r) => (resolve = r));
|
|
333
|
+
};
|
|
334
|
+
const frame = (now) => {
|
|
335
|
+
raf = 0;
|
|
336
|
+
if (!playing)
|
|
337
|
+
return;
|
|
338
|
+
set(time + (now - last) * player.rate);
|
|
339
|
+
last = now;
|
|
340
|
+
fireDue();
|
|
341
|
+
if (time >= a.duration) {
|
|
342
|
+
if (loop) {
|
|
343
|
+
effects.forEach((e) => (e.fired = false));
|
|
344
|
+
set(0);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
playing = false;
|
|
348
|
+
done();
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
raf = requestAnimationFrame(frame);
|
|
353
|
+
};
|
|
354
|
+
const player = {
|
|
355
|
+
get duration() {
|
|
356
|
+
return a.duration;
|
|
357
|
+
},
|
|
358
|
+
get currentTime() {
|
|
359
|
+
return time;
|
|
360
|
+
},
|
|
361
|
+
get playing() {
|
|
362
|
+
return playing;
|
|
363
|
+
},
|
|
364
|
+
rate: o.rate ?? 1,
|
|
365
|
+
get finished() {
|
|
366
|
+
return finished;
|
|
367
|
+
},
|
|
368
|
+
play() {
|
|
369
|
+
if (base.prefersReducedMotion()) {
|
|
370
|
+
set(a.duration);
|
|
371
|
+
effects.forEach((e) => (e.fired = true));
|
|
372
|
+
done();
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (playing)
|
|
376
|
+
return;
|
|
377
|
+
if (time >= a.duration) {
|
|
378
|
+
effects.forEach((e) => (e.fired = false));
|
|
379
|
+
set(0);
|
|
380
|
+
}
|
|
381
|
+
playing = true;
|
|
382
|
+
last = performance.now();
|
|
383
|
+
fireDue();
|
|
384
|
+
raf = requestAnimationFrame(frame);
|
|
385
|
+
},
|
|
386
|
+
pause() {
|
|
387
|
+
playing = false;
|
|
388
|
+
cancelAnimationFrame(raf);
|
|
389
|
+
raf = 0;
|
|
390
|
+
},
|
|
391
|
+
seek(ms) {
|
|
392
|
+
set(ms);
|
|
393
|
+
effects.forEach((e) => (e.fired = e.t.start < time));
|
|
394
|
+
},
|
|
395
|
+
destroy() {
|
|
396
|
+
player.pause();
|
|
397
|
+
anims.forEach((an) => an.cancel());
|
|
398
|
+
},
|
|
399
|
+
};
|
|
400
|
+
if (o.autoplay)
|
|
401
|
+
player.play();
|
|
402
|
+
return player;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* `<usa-player src="hero.json" | <script type="application/json"> child
|
|
406
|
+
* trigger="load | view | scroll | click | manual" loop rate controls>`.
|
|
407
|
+
* Emits `usa-player-ready` and `usa-player-finish`; sets `data-error` when the
|
|
408
|
+
* animation cannot be loaded.
|
|
409
|
+
*/
|
|
410
|
+
function definePlayer(tag = 'usa-player') {
|
|
411
|
+
return base.defineElement(tag, (Base) => class UsaPlayer extends Base {
|
|
412
|
+
constructor() {
|
|
413
|
+
super(...arguments);
|
|
414
|
+
this.player = null;
|
|
415
|
+
this.json = null;
|
|
416
|
+
}
|
|
417
|
+
static get observedAttributes() {
|
|
418
|
+
return ['src', 'trigger', 'loop', 'rate'];
|
|
419
|
+
}
|
|
420
|
+
load(animation) {
|
|
421
|
+
this.json = animation;
|
|
422
|
+
this.start();
|
|
423
|
+
}
|
|
424
|
+
play() {
|
|
425
|
+
this.player?.play();
|
|
426
|
+
}
|
|
427
|
+
pause() {
|
|
428
|
+
this.player?.pause();
|
|
429
|
+
}
|
|
430
|
+
seek(ms) {
|
|
431
|
+
this.player?.seek(ms);
|
|
432
|
+
}
|
|
433
|
+
start() {
|
|
434
|
+
this.player?.destroy();
|
|
435
|
+
this.player = null;
|
|
436
|
+
if (!this.json)
|
|
437
|
+
return;
|
|
438
|
+
try {
|
|
439
|
+
this.player = createPlayer(this, this.json, {
|
|
440
|
+
loop: this.hasAttribute('loop') ? true : undefined,
|
|
441
|
+
rate: this.num('rate', 1),
|
|
442
|
+
onFinish: () => this.dispatchEvent(new CustomEvent('usa-player-finish', { bubbles: true })),
|
|
443
|
+
});
|
|
444
|
+
this.removeAttribute('data-error');
|
|
445
|
+
}
|
|
446
|
+
catch (err) {
|
|
447
|
+
this.setAttribute('data-error', String(err.message || err));
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
const p = this.player;
|
|
451
|
+
this.dispatchEvent(new CustomEvent('usa-player-ready', { detail: { duration: p.duration }, bubbles: true }));
|
|
452
|
+
const trig = this.str('trigger', 'view');
|
|
453
|
+
if (trig === 'load')
|
|
454
|
+
p.play();
|
|
455
|
+
else if (trig === 'view')
|
|
456
|
+
this.inView((v) => v && p.play(), { threshold: 0.25 });
|
|
457
|
+
else if (trig === 'click')
|
|
458
|
+
this.listen(this, 'click', () => (p.playing ? p.pause() : p.play()));
|
|
459
|
+
else if (trig === 'scroll') {
|
|
460
|
+
let f = 0;
|
|
461
|
+
const upd = () => {
|
|
462
|
+
f = 0;
|
|
463
|
+
p.seek(storyProgress(this) * p.duration);
|
|
464
|
+
};
|
|
465
|
+
const kick = () => void (f || (f = requestAnimationFrame(upd)));
|
|
466
|
+
this.listen(window, 'scroll', kick, { passive: true });
|
|
467
|
+
this.listen(window, 'resize', kick);
|
|
468
|
+
this.onCleanup(() => cancelAnimationFrame(f));
|
|
469
|
+
upd();
|
|
470
|
+
}
|
|
471
|
+
if (this.flag('controls'))
|
|
472
|
+
this.mountControls(p);
|
|
473
|
+
}
|
|
474
|
+
mountControls(p) {
|
|
475
|
+
const b = document.createElement('button');
|
|
476
|
+
b.type = 'button';
|
|
477
|
+
b.setAttribute('data-player-toggle', '');
|
|
478
|
+
b.textContent = '▶︎ / ❚❚';
|
|
479
|
+
b.setAttribute('aria-label', 'Play / pause animation');
|
|
480
|
+
this.listen(b, 'click', (e) => {
|
|
481
|
+
e.stopPropagation();
|
|
482
|
+
if (p.playing)
|
|
483
|
+
p.pause();
|
|
484
|
+
else
|
|
485
|
+
p.play();
|
|
486
|
+
b.setAttribute('aria-pressed', String(p.playing));
|
|
487
|
+
});
|
|
488
|
+
this.append(b);
|
|
489
|
+
this.onCleanup(() => b.remove());
|
|
490
|
+
}
|
|
491
|
+
changed(name) {
|
|
492
|
+
if (name === 'src')
|
|
493
|
+
this.json = null;
|
|
494
|
+
super.changed(name);
|
|
495
|
+
}
|
|
496
|
+
mount() {
|
|
497
|
+
this.onCleanup(() => {
|
|
498
|
+
this.player?.destroy();
|
|
499
|
+
this.player = null;
|
|
500
|
+
});
|
|
501
|
+
const inline = this.querySelector('script[type="application/json"]');
|
|
502
|
+
const src = this.str('src');
|
|
503
|
+
if (inline && !this.json)
|
|
504
|
+
this.json = inline.textContent || '';
|
|
505
|
+
if (src && !this.json) {
|
|
506
|
+
fetch(src)
|
|
507
|
+
.then((r) => (r.ok ? r.text() : Promise.reject(new Error(`HTTP ${r.status}`))))
|
|
508
|
+
.then((t) => this.isConnected && this.load(t))
|
|
509
|
+
.catch((err) => this.setAttribute('data-error', String(err.message || err)));
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
this.start();
|
|
513
|
+
}
|
|
514
|
+
}, { id: 'usa-player', text: 'usa-player{display:block;position:relative}usa-player>script{display:none}usa-player [data-player-toggle]{position:absolute;right:8px;bottom:8px}' });
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
exports.ANIMATION_FORMAT = ANIMATION_FORMAT;
|
|
518
|
+
exports.STORY_TEMPLATES = STORY_TEMPLATES;
|
|
519
|
+
exports.createPlayer = createPlayer;
|
|
520
|
+
exports.definePlayer = definePlayer;
|
|
521
|
+
exports.defineStory = defineStory;
|
|
522
|
+
exports.formatCount = formatCount;
|
|
523
|
+
exports.normalizeAnimation = normalizeAnimation;
|
|
524
|
+
exports.storyProgress = storyProgress;
|
|
525
|
+
//# sourceMappingURL=player-PS6_FzNw.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-PS6_FzNw.cjs","sources":["../../src/components/effects/story.ts","../../src/components/effects/player.ts"],"sourcesContent":["/**\n * 5.4 — `<usa-story template=\"…\">` scroll-storytelling templates.\n *\n * - `pin` — a sticky `[data-stage]` while `[data-step]` sections scroll past; the\n * step in view gets `data-active`, the stage gets `data-active-step=\"<index>\"`.\n * - `gallery` — a horizontal `[data-track]` slides sideways as you scroll down.\n * - `zoom` — the `[data-stage]` zooms toward the viewer (`zoom=\"6\"`) and fades.\n * - `compare` — before / after (`[data-before]`, `[data-after]`) wipe driven by\n * scroll, plus a draggable, keyboard-accessible handle (`role=\"slider\"`).\n * - `counter` — `[data-count=\"1234\"]` numbers count up when they enter view.\n * - `highlight` — paragraphs dim except the one crossing the viewport center.\n *\n * Every template sets `--usa-story-progress` (0–1) on the host and dispatches\n * `usa-story-step` (`detail: { index }`). Reduced motion: no sliding / zooming\n * (the gallery stacks vertically), counters show final values, the rest is\n * class changes only.\n */\nimport { defineElement, type UsaElement } from '../base';\n\nexport const STORY_TEMPLATES = ['pin', 'gallery', 'zoom', 'compare', 'counter', 'highlight'] as const;\nexport type StoryTemplate = (typeof STORY_TEMPLATES)[number];\n\nexport interface UsaStoryElement extends UsaElement {\n /** Scroll progress through the story, 0–1. */\n readonly progress: number;\n /** Index of the active step (pin / highlight), or -1. */\n readonly step: number;\n}\n\nconst CSS = `usa-story{display:block;position:relative}\nusa-story[template=pin] [data-stage],usa-story[template=gallery] [data-sticky],usa-story[template=zoom] [data-stage],usa-story[template=compare] [data-sticky]{position:sticky;top:0}\nusa-story[template=pin] [data-stage]{align-self:start}\nusa-story[template=pin] [data-step]{min-height:80vh;opacity:.35;transition:opacity .3s}\nusa-story[template=pin] [data-step][data-active]{opacity:1}\nusa-story[template=gallery] [data-sticky]{height:100vh;overflow:hidden;display:flex;align-items:center}\nusa-story[template=gallery] [data-track]{display:flex;gap:24px;will-change:transform}\nusa-story[template=gallery][data-static] [data-sticky]{position:static;height:auto;overflow:visible}\nusa-story[template=gallery][data-static] [data-track]{flex-direction:column;transform:none!important}\nusa-story[template=zoom] [data-stage]{height:100vh;overflow:hidden;display:grid;place-items:center}\nusa-story[template=compare] [data-sticky]{height:var(--usa-story-h,70vh);overflow:hidden}\nusa-story[template=compare] [data-before],usa-story[template=compare] [data-after]{position:absolute;inset:0}\nusa-story[template=compare] [data-after]{clip-path:inset(0 0 0 var(--usa-split,50%))}\nusa-story [data-handle]{position:absolute;top:0;bottom:0;left:var(--usa-split,50%);width:4px;margin-left:-2px;background:#fff;box-shadow:0 0 0 1px #0003;cursor:ew-resize;touch-action:none}\nusa-story [data-handle]:focus-visible{outline:3px solid #7c5cff;outline-offset:2px}\nusa-story[template=highlight] p,usa-story[template=highlight] [data-step]{opacity:.3;transition:opacity .25s}\nusa-story[template=highlight] [data-active]{opacity:1}`;\n\nconst clamp = (v: number, a = 0, b = 1) => Math.min(b, Math.max(a, v));\n\n/** Progress of `el` through the viewport: 0 when its top hits the viewport top, 1 when its bottom hits the viewport bottom. */\nexport function storyProgress(el: Element, vh = typeof innerHeight === 'number' ? innerHeight : 800): number {\n const r = el.getBoundingClientRect();\n const span = r.height - vh;\n return span > 0 ? clamp(-r.top / span) : clamp((vh - r.top) / (vh + r.height));\n}\n\n/** Format a counted value like the target (`1,234`, `12.5`, prefix / suffix kept). */\nexport function formatCount(target: string, t: number): string {\n const m = target.match(/^(\\D*)([\\d,]*\\.?\\d+)(.*)$/);\n if (!m) return target;\n const [, pre, num, post] = m;\n const n = parseFloat(num.replace(/,/g, ''));\n const dec = (num.split('.')[1] || '').length;\n let s = (n * t).toFixed(dec);\n if (num.includes(',')) s = Number(s).toLocaleString('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec });\n return pre + s + post;\n}\n\nexport function defineStory(tag = 'usa-story'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaStory extends Base {\n static get observedAttributes(): string[] {\n return ['template', 'zoom'];\n }\n progress = 0;\n step = -1;\n private frame = 0;\n get template(): StoryTemplate {\n const t = this.str('template', 'pin') as StoryTemplate;\n return STORY_TEMPLATES.includes(t) ? t : 'pin';\n }\n private steps(): HTMLElement[] {\n const own = Array.from(this.querySelectorAll<HTMLElement>('[data-step]:not([data-stage])'));\n return own.length || this.template !== 'highlight' ? own : Array.from(this.querySelectorAll<HTMLElement>('p'));\n }\n private setStep(i: number): void {\n if (i === this.step) return;\n this.step = i;\n this.steps().forEach((s, k) => s.toggleAttribute('data-active', k === i));\n const stage = this.querySelector<HTMLElement>('[data-stage]');\n if (stage) stage.dataset.activeStep = String(i);\n this.dispatchEvent(new CustomEvent('usa-story-step', { detail: { index: i }, bubbles: true }));\n }\n /** Recompute from the current scroll position (called on scroll / resize). */\n update(): void {\n this.frame = 0;\n const p = (this.progress = storyProgress(this));\n this.style.setProperty('--usa-story-progress', p.toFixed(4));\n const t = this.template;\n const vh = innerHeight || 800;\n if (t === 'pin' || t === 'highlight') {\n const mid = vh / 2;\n let best = -1;\n let bestD = Infinity;\n this.steps().forEach((s, i) => {\n const r = s.getBoundingClientRect();\n const d = r.top <= mid && r.bottom >= mid ? 0 : Math.min(Math.abs(r.top - mid), Math.abs(r.bottom - mid));\n if (d < bestD) (bestD = d), (best = i);\n });\n this.setStep(best);\n } else if (t === 'gallery' && !this.reduced) {\n const track = this.querySelector<HTMLElement>('[data-track]');\n const box = this.querySelector<HTMLElement>('[data-sticky]');\n if (track && box) track.style.transform = `translateX(${(-p * Math.max(0, track.scrollWidth - box.clientWidth)).toFixed(1)}px)`;\n } else if (t === 'zoom' && !this.reduced) {\n const inner = this.querySelector<HTMLElement>('[data-stage] > *');\n if (inner) {\n inner.style.transform = `scale(${(1 + p * (this.num('zoom', 6) - 1)).toFixed(3)})`;\n inner.style.opacity = String(clamp(1.4 - p * 1.4).toFixed(3));\n }\n } else if (t === 'compare' && !this.hasAttribute('data-dragged')) {\n this.setSplit(p * 100);\n } else if (t === 'counter') {\n this.querySelectorAll<HTMLElement>('[data-count]:not([data-counted])').forEach((el) => {\n const r = el.getBoundingClientRect();\n if (r.top < vh * 0.9 && r.bottom > 0) this.count(el);\n });\n }\n }\n private setSplit(pct: number): void {\n const v = clamp(pct, 0, 100);\n this.style.setProperty('--usa-split', `${v.toFixed(2)}%`);\n const h = this.querySelector<HTMLElement>('[data-handle]');\n if (h) h.setAttribute('aria-valuenow', String(Math.round(v)));\n }\n private count(el: HTMLElement): void {\n el.dataset.counted = '';\n const target = el.dataset.count || el.textContent || '0';\n el.setAttribute('aria-label', target);\n if (this.reduced) {\n el.textContent = target;\n return;\n }\n const dur = Number(el.dataset.duration) || 1600;\n const t0 = performance.now();\n const tick = (now: number) => {\n const k = clamp((now - t0) / dur);\n el.textContent = formatCount(target, 1 - (1 - k) ** 3);\n if (k < 1) requestAnimationFrame(tick);\n };\n requestAnimationFrame(tick);\n }\n mount(): void {\n this.toggleAttribute('data-static', this.reduced);\n if (this.template === 'compare') this.mountCompare();\n const kick = () => {\n if (!this.frame) this.frame = requestAnimationFrame(() => this.update());\n };\n this.listen(window, 'scroll', kick, { passive: true });\n this.listen(window, 'resize', kick);\n this.onCleanup(() => cancelAnimationFrame(this.frame));\n this.update();\n }\n private mountCompare(): void {\n const box = this.querySelector<HTMLElement>('[data-sticky]') || this;\n let h = this.querySelector<HTMLElement>('[data-handle]');\n if (!h) {\n h = document.createElement('div');\n h.setAttribute('data-handle', '');\n box.appendChild(h);\n this.onCleanup(() => h!.remove());\n }\n h.tabIndex = 0;\n h.setAttribute('role', 'slider');\n h.setAttribute('aria-label', this.str('label', 'Before / after'));\n h.setAttribute('aria-valuemin', '0');\n h.setAttribute('aria-valuemax', '100');\n const at = (e: PointerEvent) => {\n const r = box.getBoundingClientRect();\n this.dataset.dragged = '';\n this.setSplit(((e.clientX - r.left) / (r.width || 1)) * 100);\n };\n let drag = false;\n this.listen(h, 'pointerdown', (e: PointerEvent) => {\n drag = true;\n h!.setPointerCapture?.(e.pointerId);\n });\n this.listen(h, 'pointermove', (e: PointerEvent) => drag && at(e));\n this.listen(h, 'pointerup', () => (drag = false));\n this.listen(h, 'keydown', (e: KeyboardEvent) => {\n const cur = parseFloat(h!.getAttribute('aria-valuenow') || '50');\n const step = e.shiftKey ? 10 : 2;\n const next = e.key === 'ArrowLeft' || e.key === 'ArrowDown' ? cur - step : e.key === 'ArrowRight' || e.key === 'ArrowUp' ? cur + step : e.key === 'Home' ? 0 : e.key === 'End' ? 100 : null;\n if (next == null) return;\n e.preventDefault();\n this.dataset.dragged = '';\n this.setSplit(next);\n });\n this.setSplit(50);\n }\n unmount(): void {\n this.step = -1;\n delete this.dataset.dragged;\n }\n },\n { id: 'usa-story', text: CSS }\n );\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-story': UsaStoryElement;\n }\n}\n","/**\n * 5.9 — `<usa-player>`: plays JSON animations.\n *\n * Format `use-scroll-animate/animation` v1:\n *\n * ```json\n * { \"format\": \"use-scroll-animate/animation\", \"version\": 1, \"name\": \"Hero\",\n * \"loop\": false,\n * \"tracks\": [\n * { \"target\": \"h1\", \"start\": 0, \"duration\": 600, \"preset\": \"fade-up\" },\n * { \"target\": \".cta\", \"start\": 500, \"duration\": 500, \"keyframes\": [{ \"opacity\": 0 }, { \"opacity\": 1 }], \"easing\": \"ease-out\" },\n * { \"target\": \".cta\", \"start\": 1100, \"effect\": \"jelly\", \"options\": {} }\n * ] }\n * ```\n *\n * A track animates `target` (a selector inside the player; `:scope` for the\n * player itself) with a timeline preset, its own keyframes, or fires any\n * registered effect at `start`. Playground presets (format\n * `use-scroll-animate/playground`) are accepted too — their tracks map to the\n * player's children in order.\n *\n * Keyframe tracks are WAAPI animations driven by one clock, so the player can\n * play, pause, seek, change rate and be scrubbed by scroll\n * (`trigger=\"scroll\"`). Reduced motion: jumps to the end state, effects skipped.\n */\nimport { playEffect } from '../fx/registry';\nimport { defineElement, prefersReducedMotion, type UsaElement } from '../base';\nimport { TIMELINE_PRESETS } from '../timeline/core';\nimport { storyProgress } from './story';\n\nexport interface AnimationTrack {\n /** Selector inside the player (`:scope` = the player). */\n target?: string;\n /** Start time in ms. */\n start?: number;\n duration?: number;\n /** A timeline preset (`fade-up`, `scale`, `blur`…). */\n preset?: string;\n keyframes?: Keyframe[];\n easing?: string;\n /** A registered effect fired at `start` (instead of keyframes). */\n effect?: string;\n options?: Record<string, unknown>;\n label?: string;\n}\n\nexport interface AnimationJSON {\n format?: string;\n version?: number;\n name?: string;\n loop?: boolean;\n /** Total length; defaults to the end of the last track. */\n duration?: number;\n tracks: AnimationTrack[];\n}\n\nexport const ANIMATION_FORMAT = 'use-scroll-animate/animation';\n\nfunction decodePlayground(state: string): AnimationTrack[] {\n try {\n const b64 = state.replace(/-/g, '+').replace(/_/g, '/');\n const json = decodeURIComponent(escape(atob(b64)));\n const t = (JSON.parse(json).t || []) as [string, number, number, string][];\n return t.map(([preset, start, duration, label], i) => ({ target: `:scope > :nth-child(${i + 1})`, preset, start, duration, label }));\n } catch {\n return [];\n }\n}\n\n/** Validate / normalise an animation (object or JSON text). Throws on anything unusable. */\nexport function normalizeAnimation(input: string | AnimationJSON | Record<string, any>): Required<Pick<AnimationJSON, 'tracks' | 'duration' | 'loop' | 'name'>> {\n const d: any = typeof input === 'string' ? JSON.parse(input) : input;\n if (!d || typeof d !== 'object') throw new Error('[motionary] animation: expected an object');\n let tracks: AnimationTrack[];\n if (d.format === 'use-scroll-animate/playground') tracks = decodePlayground(String(d.state || ''));\n else if (Array.isArray(d.tracks)) tracks = d.tracks;\n else throw new Error('[motionary] animation: missing \"tracks\"');\n if (d.format && d.format !== ANIMATION_FORMAT && d.format !== 'use-scroll-animate/playground') throw new Error(`[motionary] animation: unknown format \"${d.format}\"`);\n if (d.version && d.version > 1 && d.format === ANIMATION_FORMAT) throw new Error(`[motionary] animation: version ${d.version} needs a newer motionary`);\n const out = tracks\n .filter((t) => t && (t.effect || t.preset || Array.isArray(t.keyframes)))\n .map((t) => ({ ...t, target: t.target || ':scope', start: Math.max(0, Number(t.start) || 0), duration: t.effect ? 0 : Math.max(1, Number(t.duration) || 600) }));\n const end = out.reduce((m, t) => Math.max(m, t.start + t.duration), 0);\n return { tracks: out, duration: Math.max(end, Number(d.duration) || 0), loop: !!d.loop, name: String(d.name || 'animation') };\n}\n\nexport interface Player {\n readonly duration: number;\n readonly currentTime: number;\n readonly playing: boolean;\n play(): void;\n pause(): void;\n /** Jump to `ms` (effects between are not replayed). */\n seek(ms: number): void;\n /** Playback rate (default 1). */\n rate: number;\n /** Resolves each time the animation reaches its end (not when looping). */\n readonly finished: Promise<void>;\n destroy(): void;\n}\n\nconst pick = (root: HTMLElement, sel: string): HTMLElement[] => {\n if (sel === ':scope') return [root];\n try {\n return Array.from(root.querySelectorAll<HTMLElement>(sel));\n } catch {\n return [];\n }\n};\n\n/** Bind an animation to `root` and return its controller (paused at 0 unless `autoplay`). */\nexport function createPlayer(root: HTMLElement, animation: string | AnimationJSON, o: { autoplay?: boolean; loop?: boolean; rate?: number; onFinish?: () => void } = {}): Player {\n const a = normalizeAnimation(animation);\n const loop = o.loop ?? a.loop;\n const anims: Animation[] = [];\n const effects: { els: HTMLElement[]; t: AnimationTrack; fired: boolean }[] = [];\n for (const t of a.tracks) {\n const els = pick(root, t.target!);\n if (t.effect) effects.push({ els, t, fired: false });\n else {\n const kf = t.keyframes || TIMELINE_PRESETS[t.preset!] || TIMELINE_PRESETS.fade;\n for (const el of els) {\n if (typeof el.animate !== 'function') continue;\n const an = el.animate(kf, { duration: t.duration, delay: t.start, easing: t.easing || 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'both' });\n an.pause();\n an.currentTime = 0;\n anims.push(an);\n }\n }\n }\n let time = 0;\n let playing = false;\n let raf = 0;\n let last = 0;\n let resolve!: () => void;\n let finished = new Promise<void>((r) => (resolve = r));\n const set = (ms: number) => {\n time = Math.min(a.duration, Math.max(0, ms));\n for (const an of anims) an.currentTime = time;\n };\n const fireDue = () => {\n if (prefersReducedMotion()) return;\n for (const e of effects)\n if (!e.fired && time >= e.t.start!) {\n e.fired = true;\n for (const el of e.els) playEffect(el, e.t.effect!, e.t.options || {}).catch(() => undefined);\n }\n };\n const done = () => {\n resolve();\n o.onFinish?.();\n finished = new Promise<void>((r) => (resolve = r));\n };\n const frame = (now: number) => {\n raf = 0;\n if (!playing) return;\n set(time + (now - last) * player.rate);\n last = now;\n fireDue();\n if (time >= a.duration) {\n if (loop) {\n effects.forEach((e) => (e.fired = false));\n set(0);\n } else {\n playing = false;\n done();\n return;\n }\n }\n raf = requestAnimationFrame(frame);\n };\n const player: Player = {\n get duration() {\n return a.duration;\n },\n get currentTime() {\n return time;\n },\n get playing() {\n return playing;\n },\n rate: o.rate ?? 1,\n get finished() {\n return finished;\n },\n play() {\n if (prefersReducedMotion()) {\n set(a.duration);\n effects.forEach((e) => (e.fired = true));\n done();\n return;\n }\n if (playing) return;\n if (time >= a.duration) {\n effects.forEach((e) => (e.fired = false));\n set(0);\n }\n playing = true;\n last = performance.now();\n fireDue();\n raf = requestAnimationFrame(frame);\n },\n pause() {\n playing = false;\n cancelAnimationFrame(raf);\n raf = 0;\n },\n seek(ms: number) {\n set(ms);\n effects.forEach((e) => (e.fired = e.t.start! < time));\n },\n destroy() {\n player.pause();\n anims.forEach((an) => an.cancel());\n },\n };\n if (o.autoplay) player.play();\n return player;\n}\n\nexport interface UsaPlayerElement extends UsaElement {\n readonly player: Player | null;\n /** Load an animation (object or JSON text) and restart. */\n load(animation: string | AnimationJSON): void;\n play(): void;\n pause(): void;\n seek(ms: number): void;\n}\n\n/**\n * `<usa-player src=\"hero.json\" | <script type=\"application/json\"> child\n * trigger=\"load | view | scroll | click | manual\" loop rate controls>`.\n * Emits `usa-player-ready` and `usa-player-finish`; sets `data-error` when the\n * animation cannot be loaded.\n */\nexport function definePlayer(tag = 'usa-player'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaPlayer extends Base {\n static get observedAttributes(): string[] {\n return ['src', 'trigger', 'loop', 'rate'];\n }\n player: Player | null = null;\n private json: string | AnimationJSON | null = null;\n load(animation: string | AnimationJSON): void {\n this.json = animation;\n this.start();\n }\n play(): void {\n this.player?.play();\n }\n pause(): void {\n this.player?.pause();\n }\n seek(ms: number): void {\n this.player?.seek(ms);\n }\n private start(): void {\n this.player?.destroy();\n this.player = null;\n if (!this.json) return;\n try {\n this.player = createPlayer(this, this.json, {\n loop: this.hasAttribute('loop') ? true : undefined,\n rate: this.num('rate', 1),\n onFinish: () => this.dispatchEvent(new CustomEvent('usa-player-finish', { bubbles: true })),\n });\n this.removeAttribute('data-error');\n } catch (err) {\n this.setAttribute('data-error', String((err as Error).message || err));\n return;\n }\n const p = this.player;\n this.dispatchEvent(new CustomEvent('usa-player-ready', { detail: { duration: p.duration }, bubbles: true }));\n const trig = this.str('trigger', 'view');\n if (trig === 'load') p.play();\n else if (trig === 'view') this.inView((v) => v && p.play(), { threshold: 0.25 });\n else if (trig === 'click') this.listen(this, 'click', () => (p.playing ? p.pause() : p.play()));\n else if (trig === 'scroll') {\n let f = 0;\n const upd = () => {\n f = 0;\n p.seek(storyProgress(this) * p.duration);\n };\n const kick = () => void (f ||= requestAnimationFrame(upd));\n this.listen(window, 'scroll', kick, { passive: true });\n this.listen(window, 'resize', kick);\n this.onCleanup(() => cancelAnimationFrame(f));\n upd();\n }\n if (this.flag('controls')) this.mountControls(p);\n }\n private mountControls(p: Player): void {\n const b = document.createElement('button');\n b.type = 'button';\n b.setAttribute('data-player-toggle', '');\n b.textContent = '▶︎ / ❚❚';\n b.setAttribute('aria-label', 'Play / pause animation');\n this.listen(b, 'click', (e: Event) => {\n e.stopPropagation();\n if (p.playing) p.pause();\n else p.play();\n b.setAttribute('aria-pressed', String(p.playing));\n });\n this.append(b);\n this.onCleanup(() => b.remove());\n }\n changed(name: string): void {\n if (name === 'src') this.json = null;\n super.changed(name);\n }\n mount(): void {\n this.onCleanup(() => {\n this.player?.destroy();\n this.player = null;\n });\n const inline = this.querySelector<HTMLScriptElement>('script[type=\"application/json\"]');\n const src = this.str('src');\n if (inline && !this.json) this.json = inline.textContent || '';\n if (src && !this.json) {\n fetch(src)\n .then((r) => (r.ok ? r.text() : Promise.reject(new Error(`HTTP ${r.status}`))))\n .then((t) => this.isConnected && this.load(t))\n .catch((err) => this.setAttribute('data-error', String(err.message || err)));\n return;\n }\n this.start();\n }\n },\n { id: 'usa-player', text: 'usa-player{display:block;position:relative}usa-player>script{display:none}usa-player [data-player-toggle]{position:absolute;right:8px;bottom:8px}' }\n );\n}\n"],"names":["defineElement","TIMELINE_PRESETS","prefersReducedMotion","playEffect"],"mappings":"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"}
|
package/dist/components/a11y.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var base = require('../chunks/base-BaQV-2ha.cjs');
|
|
4
|
-
var indexTags = require('../chunks/index-tags-
|
|
4
|
+
var indexTags = require('../chunks/index-tags-BTMwrfgV.cjs');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* 4.9 — the 5.0 modern-browser baseline. `baselineReport()` lists which
|
|
@@ -13,14 +13,14 @@ declare function adaptKeyframes(frames: Keyframe[], level?: MotionSensitivity):
|
|
|
13
13
|
declare const COMPONENT_CATEGORIES: {
|
|
14
14
|
readonly reveal: readonly ["usa-reveal", "usa-stagger", "usa-scroll-progress", "usa-scrolly"];
|
|
15
15
|
readonly text: readonly ["usa-typewriter", "usa-split-text", "usa-scramble", "usa-counter", "usa-shimmer-text", "usa-text-rotate", "usa-wave-text", "usa-glitch", "usa-gradient-text", "usa-handwriting", "usa-scroll-highlight"];
|
|
16
|
-
readonly interaction: readonly ["usa-ripple", "usa-magnetic", "usa-tilt", "usa-spotlight", "usa-press"
|
|
16
|
+
readonly interaction: readonly ["usa-ripple", "usa-magnetic", "usa-tilt", "usa-spotlight", "usa-press"];
|
|
17
17
|
readonly feedback: readonly ["usa-spinner", "usa-skeleton", "usa-progress", "usa-toaster", "usa-check"];
|
|
18
18
|
readonly background: readonly ["usa-aurora", "usa-particles", "usa-grain", "usa-marquee", "usa-acrylic", "usa-grid-glow", "usa-blobs", "usa-water-ripple", "usa-dot-network"];
|
|
19
19
|
readonly transitions: readonly ["usa-dialog", "usa-accordion", "usa-view-switch"];
|
|
20
20
|
readonly physics: readonly ["usa-spring", "usa-draggable", "usa-overscroll"];
|
|
21
21
|
readonly cards: readonly ["usa-card", "usa-card-stack", "usa-sticky-stack", "usa-carousel-3d"];
|
|
22
22
|
readonly click: readonly ["usa-click", "usa-button", "usa-icon-morph", "usa-like", "usa-hold", "usa-double-tap", "usa-checkbox"];
|
|
23
|
-
readonly ui: readonly ["usa-tabs", "usa-drawer", "usa-bottom-sheet", "usa-pull-refresh", "usa-fab", "usa-navbar", "usa-slider", "usa-rating", "usa-
|
|
23
|
+
readonly ui: readonly ["usa-tabs", "usa-drawer", "usa-bottom-sheet", "usa-pull-refresh", "usa-fab", "usa-navbar", "usa-slider", "usa-rating", "usa-popover", "usa-badge", "usa-avatar-stack"];
|
|
24
24
|
readonly page: readonly ["usa-cursor", "usa-fullpage", "usa-loading-bar", "usa-back-to-top", "usa-ambient", "usa-splash", "usa-auto-skeleton", "usa-motion-switch"];
|
|
25
25
|
readonly timeline: readonly ["usa-timeline"];
|
|
26
26
|
readonly gesture: readonly ["usa-swipeable", "usa-pinch-zoom"];
|