accessify-widget 0.2.7 → 0.2.9
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/dist/accessify.min.js +1 -1
- package/dist/accessify.min.js.map +1 -1
- package/dist/accessify.mjs +1 -1
- package/dist/{animation-stop-qzU8H8Dg.js → animation-stop-BDP0PVUZ.js} +110 -95
- package/dist/animation-stop-BDP0PVUZ.js.map +1 -0
- package/dist/{index-BMtzwb7-.js → index-DiDUF8l8.js} +4 -4
- package/dist/{index-BMtzwb7-.js.map → index-DiDUF8l8.js.map} +1 -1
- package/dist/{keyboard-nav-CvcwFy17.js → keyboard-nav--OdykeMg.js} +2 -2
- package/dist/{keyboard-nav-CvcwFy17.js.map → keyboard-nav--OdykeMg.js.map} +1 -1
- package/dist/{page-structure-JcBWoFgG.js → page-structure-BfHcMDYY.js} +2 -2
- package/dist/{page-structure-JcBWoFgG.js.map → page-structure-BfHcMDYY.js.map} +1 -1
- package/dist/widget.js +1 -1
- package/dist/widget.js.map +1 -1
- package/package.json +1 -1
- package/dist/animation-stop-qzU8H8Dg.js.map +0 -1
package/dist/accessify.mjs
CHANGED
|
@@ -13,31 +13,17 @@ function createAnimationStopModule() {
|
|
|
13
13
|
let gifOriginals = /* @__PURE__ */ new Map();
|
|
14
14
|
let styleObserver = null;
|
|
15
15
|
let delayedTimers = [];
|
|
16
|
-
let
|
|
16
|
+
let originalIntersectionObserver = null;
|
|
17
17
|
function getStyles() {
|
|
18
18
|
return `
|
|
19
|
-
/* accessify animation stop
|
|
19
|
+
/* accessify animation stop — NUCLEAR: kill ALL CSS motion */
|
|
20
20
|
*, *::before, *::after {
|
|
21
|
-
animation
|
|
22
|
-
|
|
23
|
-
animation-iteration-count: 1 !important;
|
|
24
|
-
animation-fill-mode: forwards !important;
|
|
25
|
-
transition-duration: 0.001s !important;
|
|
26
|
-
transition-delay: 0s !important;
|
|
21
|
+
animation: none !important;
|
|
22
|
+
transition: none !important;
|
|
27
23
|
scroll-behavior: auto !important;
|
|
28
24
|
}
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
[data-framer-appear-id] {
|
|
32
|
-
opacity: 1 !important;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
marquee { -moz-binding: none; }
|
|
36
|
-
|
|
37
|
-
/* Pause HTML5 video playback visually */
|
|
38
|
-
video {
|
|
39
|
-
animation-play-state: paused !important;
|
|
40
|
-
}
|
|
26
|
+
marquee { -moz-binding: none; display: block; }
|
|
41
27
|
`;
|
|
42
28
|
}
|
|
43
29
|
function injectStyles() {
|
|
@@ -176,11 +162,9 @@ function createAnimationStopModule() {
|
|
|
176
162
|
freezeGif(node);
|
|
177
163
|
}
|
|
178
164
|
node.querySelectorAll?.("img")?.forEach((img) => freezeGif(img));
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
node.querySelectorAll?.("[data-framer-appear-id]")?.forEach((el) => {
|
|
183
|
-
forceFramerAppearVisibleSingle(el);
|
|
165
|
+
forceElementVisibleSingle(node);
|
|
166
|
+
node.querySelectorAll?.("[style]")?.forEach((el) => {
|
|
167
|
+
forceElementVisibleSingle(el);
|
|
184
168
|
});
|
|
185
169
|
}
|
|
186
170
|
}
|
|
@@ -260,69 +244,125 @@ function createAnimationStopModule() {
|
|
|
260
244
|
}
|
|
261
245
|
gifOriginals.clear();
|
|
262
246
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
247
|
+
function overrideIntersectionObserver() {
|
|
248
|
+
if (originalIntersectionObserver) return;
|
|
249
|
+
originalIntersectionObserver = window.IntersectionObserver;
|
|
250
|
+
const OrigIO = originalIntersectionObserver;
|
|
251
|
+
window.IntersectionObserver = function(callback, options) {
|
|
252
|
+
const wrappedCallback = (entries, observer2) => {
|
|
253
|
+
if (!enabled) {
|
|
254
|
+
callback(entries, observer2);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const faked = entries.map((entry) => {
|
|
258
|
+
try {
|
|
259
|
+
return new Proxy(entry, {
|
|
260
|
+
get(target, prop) {
|
|
261
|
+
if (prop === "isIntersecting") return true;
|
|
262
|
+
if (prop === "intersectionRatio") return 1;
|
|
263
|
+
const val = target[prop];
|
|
264
|
+
return typeof val === "function" ? val.bind(target) : val;
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
} catch {
|
|
268
|
+
return entry;
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
callback(faked, observer2);
|
|
272
|
+
};
|
|
273
|
+
const observer = new OrigIO(wrappedCallback, options);
|
|
274
|
+
return observer;
|
|
275
|
+
};
|
|
276
|
+
window.IntersectionObserver.prototype = OrigIO.prototype;
|
|
277
|
+
Object.defineProperty(window.IntersectionObserver, "name", { value: "IntersectionObserver" });
|
|
278
|
+
}
|
|
279
|
+
function restoreIntersectionObserver() {
|
|
280
|
+
if (originalIntersectionObserver) {
|
|
281
|
+
window.IntersectionObserver = originalIntersectionObserver;
|
|
282
|
+
originalIntersectionObserver = null;
|
|
277
283
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
284
|
+
}
|
|
285
|
+
const FIXED_ATTR = "data-accessify-anim-fixed";
|
|
286
|
+
let fixedElements = [];
|
|
287
|
+
function forceAllPageElementsVisible() {
|
|
288
|
+
const allEls = document.querySelectorAll("[style]");
|
|
289
|
+
for (const el of allEls) {
|
|
290
|
+
if (el.hasAttribute(FIXED_ATTR)) continue;
|
|
281
291
|
if (el.closest("#accessify-root")) continue;
|
|
282
|
-
|
|
283
|
-
const
|
|
284
|
-
if (
|
|
285
|
-
|
|
292
|
+
if (el.style.display === "none") continue;
|
|
293
|
+
const inlineOpacity = el.style.opacity;
|
|
294
|
+
if (inlineOpacity === "" || inlineOpacity === "1") continue;
|
|
295
|
+
const val = parseFloat(inlineOpacity);
|
|
296
|
+
if (!isNaN(val) && val < 0.9) {
|
|
297
|
+
fixedElements.push({ el, origStyle: el.getAttribute("style") || "" });
|
|
286
298
|
el.style.setProperty("opacity", "1", "important");
|
|
287
|
-
el.setAttribute(
|
|
299
|
+
el.setAttribute(FIXED_ATTR, "true");
|
|
288
300
|
}
|
|
289
301
|
}
|
|
290
302
|
}
|
|
291
|
-
function
|
|
292
|
-
for (const { el, origStyle } of
|
|
303
|
+
function restoreFixedElements() {
|
|
304
|
+
for (const { el, origStyle } of fixedElements) {
|
|
293
305
|
try {
|
|
294
306
|
el.setAttribute("style", origStyle);
|
|
295
|
-
el.removeAttribute(
|
|
307
|
+
el.removeAttribute(FIXED_ATTR);
|
|
296
308
|
} catch {
|
|
297
309
|
}
|
|
298
310
|
}
|
|
299
|
-
|
|
311
|
+
fixedElements = [];
|
|
300
312
|
}
|
|
301
|
-
function
|
|
302
|
-
if (el.hasAttribute(
|
|
313
|
+
function forceElementVisibleSingle(el) {
|
|
314
|
+
if (el.hasAttribute(FIXED_ATTR)) return;
|
|
303
315
|
if (el.closest("#accessify-root")) return;
|
|
304
|
-
const
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
316
|
+
const inlineOpacity = el.style.opacity;
|
|
317
|
+
if (inlineOpacity === "" || inlineOpacity === "1") return;
|
|
318
|
+
const val = parseFloat(inlineOpacity);
|
|
319
|
+
if (!isNaN(val) && val < 0.9) {
|
|
320
|
+
fixedElements.push({ el, origStyle: el.getAttribute("style") || "" });
|
|
308
321
|
el.style.setProperty("opacity", "1", "important");
|
|
309
|
-
el.setAttribute(
|
|
322
|
+
el.setAttribute(FIXED_ATTR, "true");
|
|
310
323
|
}
|
|
311
324
|
}
|
|
325
|
+
const styleChangeTracker = /* @__PURE__ */ new Map();
|
|
312
326
|
function setupStyleObserver() {
|
|
313
327
|
if (styleObserver) return;
|
|
314
328
|
let isOurChange = false;
|
|
315
329
|
styleObserver = new MutationObserver((mutations) => {
|
|
316
330
|
if (!enabled || isOurChange) return;
|
|
317
331
|
isOurChange = true;
|
|
332
|
+
const now = performance.now();
|
|
318
333
|
for (const m of mutations) {
|
|
319
334
|
if (m.type !== "attributes" || m.attributeName !== "style") continue;
|
|
320
335
|
const el = m.target;
|
|
321
336
|
if (el.closest("#accessify-root")) continue;
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
337
|
+
const inlineOpacity = el.style.opacity;
|
|
338
|
+
if (inlineOpacity !== "" && inlineOpacity !== "1") {
|
|
339
|
+
const val = parseFloat(inlineOpacity);
|
|
340
|
+
if (!isNaN(val) && val < 0.9) {
|
|
341
|
+
if (!el.hasAttribute(FIXED_ATTR)) {
|
|
342
|
+
fixedElements.push({ el, origStyle: m.oldValue || "" });
|
|
343
|
+
}
|
|
344
|
+
el.style.setProperty("opacity", "1", "important");
|
|
345
|
+
el.setAttribute(FIXED_ATTR, "true");
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
const tracker = styleChangeTracker.get(el);
|
|
349
|
+
if (tracker) {
|
|
350
|
+
const dt = now - tracker.lastTime;
|
|
351
|
+
tracker.lastTime = now;
|
|
352
|
+
if (dt < 50) {
|
|
353
|
+
tracker.count++;
|
|
354
|
+
if (tracker.count >= 3) {
|
|
355
|
+
if (!tracker.frozenTransform) {
|
|
356
|
+
tracker.frozenTransform = el.style.transform || "";
|
|
357
|
+
}
|
|
358
|
+
el.style.setProperty("transform", tracker.frozenTransform, "important");
|
|
359
|
+
}
|
|
360
|
+
} else {
|
|
361
|
+
tracker.count = 1;
|
|
362
|
+
tracker.frozenTransform = null;
|
|
363
|
+
}
|
|
364
|
+
} else {
|
|
365
|
+
styleChangeTracker.set(el, { count: 1, lastTime: now, frozenTransform: null });
|
|
326
366
|
}
|
|
327
367
|
}
|
|
328
368
|
isOurChange = false;
|
|
@@ -330,20 +370,22 @@ function createAnimationStopModule() {
|
|
|
330
370
|
styleObserver.observe(document.body, {
|
|
331
371
|
attributes: true,
|
|
332
372
|
attributeFilter: ["style"],
|
|
373
|
+
attributeOldValue: true,
|
|
333
374
|
subtree: true
|
|
334
375
|
});
|
|
335
376
|
}
|
|
336
377
|
function disconnectStyleObserver() {
|
|
337
378
|
styleObserver?.disconnect();
|
|
338
379
|
styleObserver = null;
|
|
380
|
+
styleChangeTracker.clear();
|
|
339
381
|
}
|
|
340
382
|
function scheduleDelayedScans() {
|
|
341
|
-
const delays = [
|
|
383
|
+
const delays = [300, 800, 1500, 3e3, 5e3];
|
|
342
384
|
for (const delay of delays) {
|
|
343
385
|
const timer = setTimeout(() => {
|
|
344
386
|
if (!enabled) return;
|
|
345
387
|
finishAllWebAnimations();
|
|
346
|
-
|
|
388
|
+
forceAllPageElementsVisible();
|
|
347
389
|
pauseAutoplayVideos();
|
|
348
390
|
freezeAllGifs();
|
|
349
391
|
pauseSVGAnimations();
|
|
@@ -356,33 +398,6 @@ function createAnimationStopModule() {
|
|
|
356
398
|
for (const timer of delayedTimers) clearTimeout(timer);
|
|
357
399
|
delayedTimers = [];
|
|
358
400
|
}
|
|
359
|
-
function forceAllHiddenVisible() {
|
|
360
|
-
forceFramerAppearVisible();
|
|
361
|
-
const candidates = document.querySelectorAll(
|
|
362
|
-
'[data-framer-appear-id], [style*="opacity:0.0"], [style*="opacity: 0.0"]'
|
|
363
|
-
);
|
|
364
|
-
for (const el of candidates) {
|
|
365
|
-
if (el.hasAttribute(FRAMER_FIXED_ATTR)) continue;
|
|
366
|
-
if (el.closest("#accessify-root")) continue;
|
|
367
|
-
const computed = getComputedStyle(el);
|
|
368
|
-
const opacity = parseFloat(computed.opacity);
|
|
369
|
-
if (opacity < 0.05) {
|
|
370
|
-
frozenInlineElements.set(el, el.getAttribute("style") || "");
|
|
371
|
-
el.style.setProperty("opacity", "1", "important");
|
|
372
|
-
el.setAttribute(FRAMER_FIXED_ATTR, "true");
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
function restoreFrozenInlineElements() {
|
|
377
|
-
for (const [el, origStyle] of frozenInlineElements) {
|
|
378
|
-
try {
|
|
379
|
-
el.setAttribute("style", origStyle);
|
|
380
|
-
el.removeAttribute(FRAMER_FIXED_ATTR);
|
|
381
|
-
} catch {
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
frozenInlineElements.clear();
|
|
385
|
-
}
|
|
386
401
|
function stopMarquees() {
|
|
387
402
|
document.querySelectorAll("marquee").forEach((el) => {
|
|
388
403
|
try {
|
|
@@ -472,24 +487,24 @@ function createAnimationStopModule() {
|
|
|
472
487
|
setupMutationObserver();
|
|
473
488
|
emulateReducedMotion();
|
|
474
489
|
freezeAllGifs();
|
|
475
|
-
|
|
490
|
+
overrideIntersectionObserver();
|
|
491
|
+
forceAllPageElementsVisible();
|
|
476
492
|
stopMarquees();
|
|
477
493
|
pauseSVGAnimations();
|
|
478
494
|
setupStyleObserver();
|
|
479
495
|
scheduleDelayedScans();
|
|
480
496
|
pauseAutoplayVideos();
|
|
481
|
-
forceAllHiddenVisible();
|
|
482
497
|
localStorage.setItem(STORAGE_KEY, "true");
|
|
483
498
|
}
|
|
484
499
|
function deactivate() {
|
|
485
500
|
enabled = false;
|
|
486
501
|
clearDelayedScans();
|
|
487
502
|
disconnectStyleObserver();
|
|
488
|
-
|
|
503
|
+
restoreFixedElements();
|
|
489
504
|
resumePausedVideos();
|
|
490
505
|
resumeSVGAnimations();
|
|
491
506
|
startMarquees();
|
|
492
|
-
|
|
507
|
+
restoreIntersectionObserver();
|
|
493
508
|
restoreGifs();
|
|
494
509
|
restoreMatchMedia();
|
|
495
510
|
disconnectMutationObserver();
|
|
@@ -523,4 +538,4 @@ function createAnimationStopModule() {
|
|
|
523
538
|
export {
|
|
524
539
|
createAnimationStopModule as default
|
|
525
540
|
};
|
|
526
|
-
//# sourceMappingURL=animation-stop-
|
|
541
|
+
//# sourceMappingURL=animation-stop-BDP0PVUZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-stop-BDP0PVUZ.js","sources":["../src/features/animation-stop.ts"],"sourcesContent":["import type { FeatureModule, FeatureState } from '../types';\n\nexport default function createAnimationStopModule(): FeatureModule {\n let enabled = false;\n const STYLE_ID = 'accessify-animation-stop';\n const STORAGE_KEY = 'accessify-animation-stop';\n\n // --- State for clean restore ---\n let pausedVideos: HTMLVideoElement[] = [];\n let pausedAnimations: Animation[] = [];\n let originalAnimate: typeof Element.prototype.animate | null = null;\n let originalRAF: typeof window.requestAnimationFrame | null = null;\n let originalMatchMedia: typeof window.matchMedia | null = null;\n let mutationObserver: MutationObserver | null = null;\n let rafLoopTracker = new Map<string, { count: number; lastTime: number }>();\n let blockedRAFs = new Set<number>();\n let gifOriginals = new Map<HTMLImageElement, string>();\n let reducedMotionListeners: Array<{ mql: MediaQueryList; handler: () => void }> = [];\n let styleObserver: MutationObserver | null = null;\n let delayedTimers: ReturnType<typeof setTimeout>[] = [];\n // frozenInlineElements removed — replaced by fixedElements array in Layer 7\n let originalIntersectionObserver: typeof IntersectionObserver | null = null;\n\n // -------------------------------------------------------------------------\n // Layer 0: CSS overrides (existing — catches pure CSS animations)\n // -------------------------------------------------------------------------\n\n function getStyles(): string {\n return `\n /* accessify animation stop — NUCLEAR: kill ALL CSS motion */\n *, *::before, *::after {\n animation: none !important;\n transition: none !important;\n scroll-behavior: auto !important;\n }\n\n marquee { -moz-binding: none; display: block; }\n `;\n }\n\n function injectStyles() {\n let styleEl = document.getElementById(STYLE_ID);\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = STYLE_ID;\n document.head.appendChild(styleEl);\n }\n styleEl.textContent = getStyles();\n }\n\n function removeStyles() {\n document.getElementById(STYLE_ID)?.remove();\n }\n\n // -------------------------------------------------------------------------\n // Layer 1: Web Animations API — FINISH all running animations instantly\n // Key insight: pause() freezes elements at START state (invisible).\n // finish() jumps to END state (visible). This is what we need.\n // -------------------------------------------------------------------------\n\n function finishAllWebAnimations() {\n try {\n const animations = document.getAnimations();\n for (const anim of animations) {\n if (anim.playState === 'running' || anim.playState === 'pending') {\n pausedAnimations.push(anim);\n try {\n // finish() jumps to end state — element becomes fully visible\n anim.finish();\n } catch {\n // finish() fails on infinite animations — cancel them instead\n // and the CSS !important rules will handle visibility\n try { anim.cancel(); } catch { /* ignore */ }\n }\n }\n }\n } catch { /* getAnimations not supported */ }\n }\n\n function overrideElementAnimate() {\n if (originalAnimate) return;\n originalAnimate = Element.prototype.animate;\n\n Element.prototype.animate = function (\n this: Element,\n keyframes: Keyframe[] | PropertyIndexedKeyframes | null,\n options?: number | KeyframeAnimationOptions,\n ): Animation {\n const anim = originalAnimate!.call(this, keyframes, options);\n if (enabled) {\n pausedAnimations.push(anim);\n try {\n anim.finish();\n } catch {\n try { anim.cancel(); } catch { /* ignore */ }\n }\n }\n return anim;\n };\n }\n\n function restoreElementAnimate() {\n if (originalAnimate) {\n Element.prototype.animate = originalAnimate;\n originalAnimate = null;\n }\n }\n\n function resumePausedAnimations() {\n // We finished/cancelled animations — nothing to resume.\n // Just clear the list.\n pausedAnimations = [];\n }\n\n // -------------------------------------------------------------------------\n // Layer 2: requestAnimationFrame loop detection\n // -------------------------------------------------------------------------\n\n function overrideRAF() {\n if (originalRAF) return;\n originalRAF = window.requestAnimationFrame;\n const origCancel = window.cancelAnimationFrame;\n\n window.requestAnimationFrame = function (callback: FrameRequestCallback): number {\n if (!enabled) return originalRAF!.call(window, callback);\n\n // Fingerprint callback to detect animation loops\n const key = callback.toString().slice(0, 200);\n const now = performance.now();\n const entry = rafLoopTracker.get(key);\n\n if (entry) {\n entry.count++;\n if (now - entry.lastTime < 100 && entry.count > 3) {\n // This callback is re-registering rapidly — animation loop detected\n const id = originalRAF!.call(window, () => {}); // no-op\n blockedRAFs.add(id);\n return id;\n }\n entry.lastTime = now;\n } else {\n rafLoopTracker.set(key, { count: 1, lastTime: now });\n }\n\n // Allow through but wrap to track re-registration\n return originalRAF!.call(window, callback);\n };\n\n window.cancelAnimationFrame = function (id: number) {\n blockedRAFs.delete(id);\n return origCancel.call(window, id);\n };\n }\n\n function restoreRAF() {\n if (originalRAF) {\n window.requestAnimationFrame = originalRAF;\n originalRAF = null;\n }\n rafLoopTracker.clear();\n blockedRAFs.clear();\n }\n\n // -------------------------------------------------------------------------\n // Layer 3: MutationObserver — catch dynamically added animated elements\n // -------------------------------------------------------------------------\n\n function setupMutationObserver() {\n if (mutationObserver) return;\n\n mutationObserver = new MutationObserver((mutations) => {\n if (!enabled) return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (!(node instanceof HTMLElement)) continue;\n // Finish animations on newly added elements (jump to end state)\n try {\n const anims = node.getAnimations({ subtree: true });\n for (const anim of anims) {\n if (anim.playState === 'running' || anim.playState === 'pending') {\n pausedAnimations.push(anim);\n try { anim.finish(); } catch { try { anim.cancel(); } catch { /* ignore */ } }\n }\n }\n } catch { /* not supported */ }\n\n // Pause new videos\n if (node.tagName === 'VIDEO') {\n const video = node as HTMLVideoElement;\n if (!video.paused) {\n video.pause();\n pausedVideos.push(video);\n }\n }\n node.querySelectorAll?.('video')?.forEach((video) => {\n if (!video.paused) {\n video.pause();\n pausedVideos.push(video);\n }\n });\n\n // Freeze new GIFs\n if (node.tagName === 'IMG') {\n freezeGif(node as HTMLImageElement);\n }\n node.querySelectorAll?.('img')?.forEach((img) => freezeGif(img));\n\n // Force new elements visible (scroll-reveal, Framer appear, etc.)\n forceElementVisibleSingle(node);\n node.querySelectorAll?.('[style]')?.forEach((el) => {\n forceElementVisibleSingle(el as HTMLElement);\n });\n }\n }\n });\n\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n function disconnectMutationObserver() {\n mutationObserver?.disconnect();\n mutationObserver = null;\n }\n\n // -------------------------------------------------------------------------\n // Layer 4: prefers-reduced-motion emulation\n // -------------------------------------------------------------------------\n\n function emulateReducedMotion() {\n if (originalMatchMedia) return;\n originalMatchMedia = window.matchMedia;\n\n window.matchMedia = function (query: string): MediaQueryList {\n const mql = originalMatchMedia!.call(window, query);\n\n if (query.includes('prefers-reduced-motion')) {\n // Return a proxy that always reports matches: true\n const proxy = Object.create(mql);\n Object.defineProperty(proxy, 'matches', { get: () => enabled, configurable: true });\n Object.defineProperty(proxy, 'media', { get: () => query, configurable: true });\n return proxy;\n }\n return mql;\n };\n\n // Trigger change event on existing reduced-motion media queries\n // so frameworks (Framer Motion, GSAP) react immediately\n try {\n const mql = originalMatchMedia.call(window, '(prefers-reduced-motion: reduce)');\n mql.dispatchEvent(new MediaQueryListEvent('change', { matches: true, media: mql.media }));\n } catch { /* older browsers */ }\n }\n\n function restoreMatchMedia() {\n if (originalMatchMedia) {\n window.matchMedia = originalMatchMedia;\n originalMatchMedia = null;\n\n // Dispatch change event to signal motion is allowed again\n try {\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n mql.dispatchEvent(new MediaQueryListEvent('change', { matches: mql.matches, media: mql.media }));\n } catch { /* older browsers */ }\n }\n }\n\n // -------------------------------------------------------------------------\n // Layer 5: GIF freeze — replace with static first frame\n // -------------------------------------------------------------------------\n\n function freezeGif(img: HTMLImageElement) {\n const src = img.src || img.getAttribute('src') || '';\n if (!src.toLowerCase().includes('.gif')) return;\n if (gifOriginals.has(img)) return;\n\n const freeze = () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = img.naturalWidth || img.width;\n canvas.height = img.naturalHeight || img.height;\n if (canvas.width === 0 || canvas.height === 0) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n ctx.drawImage(img, 0, 0);\n gifOriginals.set(img, src);\n img.src = canvas.toDataURL('image/png');\n } catch { /* cross-origin, skip */ }\n };\n\n if (img.complete && img.naturalWidth > 0) {\n freeze();\n } else {\n img.addEventListener('load', freeze, { once: true });\n }\n }\n\n function freezeAllGifs() {\n document.querySelectorAll<HTMLImageElement>('img').forEach(freezeGif);\n }\n\n function restoreGifs() {\n for (const [img, originalSrc] of gifOriginals) {\n try { img.src = originalSrc; } catch { /* element may be gone */ }\n }\n gifOriginals.clear();\n }\n\n // -------------------------------------------------------------------------\n // Layer 6: IntersectionObserver override\n // Scroll-triggered animations use IntersectionObserver to start only when\n // elements scroll into view. Override it so ALL elements are reported as\n // already visible — animations fire immediately and our finish() catches them.\n // -------------------------------------------------------------------------\n\n function overrideIntersectionObserver() {\n if (originalIntersectionObserver) return;\n originalIntersectionObserver = window.IntersectionObserver;\n const OrigIO = originalIntersectionObserver;\n\n window.IntersectionObserver = function (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n ) {\n // Wrap callback: when enabled, force all entries to isIntersecting = true\n const wrappedCallback: IntersectionObserverCallback = (entries, observer) => {\n if (!enabled) {\n callback(entries, observer);\n return;\n }\n // Create proxied entries that always report as intersecting\n const faked = entries.map((entry) => {\n try {\n return new Proxy(entry, {\n get(target, prop) {\n if (prop === 'isIntersecting') return true;\n if (prop === 'intersectionRatio') return 1;\n const val = (target as any)[prop];\n return typeof val === 'function' ? val.bind(target) : val;\n },\n });\n } catch {\n return entry;\n }\n });\n callback(faked, observer);\n };\n\n const observer = new OrigIO(wrappedCallback, options);\n return observer;\n } as any;\n\n // Preserve prototype and static properties\n window.IntersectionObserver.prototype = OrigIO.prototype;\n Object.defineProperty(window.IntersectionObserver, 'name', { value: 'IntersectionObserver' });\n }\n\n function restoreIntersectionObserver() {\n if (originalIntersectionObserver) {\n window.IntersectionObserver = originalIntersectionObserver;\n originalIntersectionObserver = null;\n }\n }\n\n // -------------------------------------------------------------------------\n // Layer 7: Force ALL hidden elements on the page visible\n // Aggressive full-page sweep: any element with inline opacity < 1\n // that isn't our widget gets forced to opacity: 1.\n // This catches scroll-reveal, appear, and any other animation pattern.\n // -------------------------------------------------------------------------\n\n const FIXED_ATTR = 'data-accessify-anim-fixed';\n let fixedElements: Array<{ el: HTMLElement; origStyle: string }> = [];\n\n function forceAllPageElementsVisible() {\n // Walk ALL elements that have opacity in their inline style\n const allEls = document.querySelectorAll<HTMLElement>('[style]');\n for (const el of allEls) {\n if (el.hasAttribute(FIXED_ATTR)) continue;\n if (el.closest('#accessify-root')) continue;\n // Skip elements that are display:none — those are hidden for structural reasons\n if (el.style.display === 'none') continue;\n\n const inlineOpacity = el.style.opacity;\n if (inlineOpacity === '' || inlineOpacity === '1') continue;\n\n const val = parseFloat(inlineOpacity);\n if (!isNaN(val) && val < 0.9) {\n fixedElements.push({ el, origStyle: el.getAttribute('style') || '' });\n el.style.setProperty('opacity', '1', 'important');\n el.setAttribute(FIXED_ATTR, 'true');\n }\n }\n }\n\n function restoreFixedElements() {\n for (const { el, origStyle } of fixedElements) {\n try {\n el.setAttribute('style', origStyle);\n el.removeAttribute(FIXED_ATTR);\n } catch { /* element may be gone */ }\n }\n fixedElements = [];\n }\n\n // Also handle dynamically added or changed elements\n function forceElementVisibleSingle(el: HTMLElement) {\n if (el.hasAttribute(FIXED_ATTR)) return;\n if (el.closest('#accessify-root')) return;\n const inlineOpacity = el.style.opacity;\n if (inlineOpacity === '' || inlineOpacity === '1') return;\n const val = parseFloat(inlineOpacity);\n if (!isNaN(val) && val < 0.9) {\n fixedElements.push({ el, origStyle: el.getAttribute('style') || '' });\n el.style.setProperty('opacity', '1', 'important');\n el.setAttribute(FIXED_ATTR, 'true');\n }\n }\n\n // -------------------------------------------------------------------------\n // Layer 8: Style attribute mutation observer — counter inline style animations\n // -------------------------------------------------------------------------\n\n // Track rapid style changes per element to detect JS animation loops\n const styleChangeTracker = new Map<HTMLElement, { count: number; lastTime: number; frozenTransform: string | null }>();\n\n function setupStyleObserver() {\n if (styleObserver) return;\n let isOurChange = false;\n\n styleObserver = new MutationObserver((mutations) => {\n if (!enabled || isOurChange) return;\n isOurChange = true;\n\n const now = performance.now();\n\n for (const m of mutations) {\n if (m.type !== 'attributes' || m.attributeName !== 'style') continue;\n const el = m.target as HTMLElement;\n if (el.closest('#accessify-root')) continue;\n\n // --- Opacity: force back to 1 if set low ---\n const inlineOpacity = el.style.opacity;\n if (inlineOpacity !== '' && inlineOpacity !== '1') {\n const val = parseFloat(inlineOpacity);\n if (!isNaN(val) && val < 0.9) {\n if (!el.hasAttribute(FIXED_ATTR)) {\n fixedElements.push({ el, origStyle: m.oldValue || '' });\n }\n el.style.setProperty('opacity', '1', 'important');\n el.setAttribute(FIXED_ATTR, 'true');\n }\n }\n\n // --- Transform: detect animation loops (rapid changes) and freeze ---\n const tracker = styleChangeTracker.get(el);\n if (tracker) {\n const dt = now - tracker.lastTime;\n tracker.lastTime = now;\n if (dt < 50) { // style changed twice within 50ms = animation\n tracker.count++;\n if (tracker.count >= 3) {\n // This element is being animated via JS — freeze its transform\n if (!tracker.frozenTransform) {\n tracker.frozenTransform = el.style.transform || '';\n }\n el.style.setProperty('transform', tracker.frozenTransform, 'important');\n }\n } else {\n // Slow change — not animation, allow it\n tracker.count = 1;\n tracker.frozenTransform = null;\n }\n } else {\n styleChangeTracker.set(el, { count: 1, lastTime: now, frozenTransform: null });\n }\n }\n\n isOurChange = false;\n });\n\n styleObserver.observe(document.body, {\n attributes: true,\n attributeFilter: ['style'],\n attributeOldValue: true,\n subtree: true,\n });\n }\n\n function disconnectStyleObserver() {\n styleObserver?.disconnect();\n styleObserver = null;\n styleChangeTracker.clear();\n }\n\n // -------------------------------------------------------------------------\n // Layer 9: Delayed re-scans — Framer loads async, elements appear late\n // -------------------------------------------------------------------------\n\n function scheduleDelayedScans() {\n const delays = [300, 800, 1500, 3000, 5000];\n for (const delay of delays) {\n const timer = setTimeout(() => {\n if (!enabled) return;\n finishAllWebAnimations();\n forceAllPageElementsVisible();\n pauseAutoplayVideos();\n freezeAllGifs();\n pauseSVGAnimations();\n stopMarquees();\n }, delay);\n delayedTimers.push(timer);\n }\n }\n\n function clearDelayedScans() {\n for (const timer of delayedTimers) clearTimeout(timer);\n delayedTimers = [];\n }\n\n // -------------------------------------------------------------------------\n // Layer 7: Marquee & SVG SMIL animations\n // -------------------------------------------------------------------------\n\n function stopMarquees() {\n document.querySelectorAll('marquee').forEach((el) => {\n try { (el as any).stop(); } catch { /* not supported */ }\n });\n }\n\n function startMarquees() {\n document.querySelectorAll('marquee').forEach((el) => {\n try { (el as any).start(); } catch { /* not supported */ }\n });\n }\n\n function pauseSVGAnimations() {\n document.querySelectorAll('svg').forEach((svg) => {\n try {\n if (typeof (svg as any).pauseAnimations === 'function') {\n (svg as any).pauseAnimations();\n }\n } catch { /* not supported */ }\n });\n }\n\n function resumeSVGAnimations() {\n document.querySelectorAll('svg').forEach((svg) => {\n try {\n if (typeof (svg as any).unpauseAnimations === 'function') {\n (svg as any).unpauseAnimations();\n }\n } catch { /* not supported */ }\n });\n }\n\n // -------------------------------------------------------------------------\n // Video control — pause all videos + intercept play()\n // -------------------------------------------------------------------------\n\n let originalVideoPlay: typeof HTMLVideoElement.prototype.play | null = null;\n\n function pauseAutoplayVideos() {\n const videos = document.querySelectorAll<HTMLVideoElement>('video');\n pausedVideos = [];\n videos.forEach((video) => {\n if (!video.paused) {\n video.pause();\n pausedVideos.push(video);\n }\n });\n\n // Also remove autoplay attribute to prevent re-play\n videos.forEach((video) => {\n if (video.hasAttribute('autoplay')) {\n video.dataset.accessifyAutoplay = 'true';\n video.removeAttribute('autoplay');\n }\n });\n\n // Override play() to prevent JS from starting videos\n if (!originalVideoPlay) {\n originalVideoPlay = HTMLVideoElement.prototype.play;\n HTMLVideoElement.prototype.play = function () {\n if (enabled) {\n // Block autoplay, return resolved promise to avoid errors\n return Promise.resolve();\n }\n return originalVideoPlay!.call(this);\n };\n }\n }\n\n function resumePausedVideos() {\n // Restore play()\n if (originalVideoPlay) {\n HTMLVideoElement.prototype.play = originalVideoPlay;\n originalVideoPlay = null;\n }\n\n // Restore autoplay attributes\n document.querySelectorAll<HTMLVideoElement>('video[data-accessify-autoplay]').forEach((video) => {\n video.setAttribute('autoplay', '');\n delete video.dataset.accessifyAutoplay;\n });\n\n // Resume previously paused videos\n pausedVideos.forEach((video) => {\n try { video.play(); } catch { /* removed from DOM */ }\n });\n pausedVideos = [];\n }\n\n // -------------------------------------------------------------------------\n // Lifecycle\n // -------------------------------------------------------------------------\n\n function activate() {\n if (enabled) return;\n enabled = true;\n\n // Layer 0: CSS overrides (includes Framer-specific !important rules)\n injectStyles();\n\n // Layer 1: Web Animations API — finish all (jump to end state)\n finishAllWebAnimations();\n overrideElementAnimate();\n\n // Layer 2: RAF loop detection\n overrideRAF();\n\n // Layer 3: MutationObserver for dynamic content\n setupMutationObserver();\n\n // Layer 4: prefers-reduced-motion emulation\n emulateReducedMotion();\n\n // Layer 5: GIF freeze\n freezeAllGifs();\n\n // Layer 6: IntersectionObserver override — scroll-triggered anims fire immediately\n overrideIntersectionObserver();\n\n // Layer 7: Force ALL hidden elements visible (full-page sweep)\n forceAllPageElementsVisible();\n\n // Marquee & SVG SMIL\n stopMarquees();\n pauseSVGAnimations();\n\n // Layer 8: Style mutation observer (counters JS setting opacity back to low values)\n setupStyleObserver();\n\n // Layer 9: Delayed re-scans (async-loaded elements)\n scheduleDelayedScans();\n\n // Videos\n pauseAutoplayVideos();\n\n localStorage.setItem(STORAGE_KEY, 'true');\n }\n\n function deactivate() {\n enabled = false;\n\n // Reverse order for clean teardown\n clearDelayedScans();\n disconnectStyleObserver();\n restoreFixedElements();\n resumePausedVideos();\n resumeSVGAnimations();\n startMarquees();\n restoreIntersectionObserver();\n restoreGifs();\n restoreMatchMedia();\n disconnectMutationObserver();\n restoreRAF();\n restoreElementAnimate();\n resumePausedAnimations();\n removeStyles();\n\n localStorage.removeItem(STORAGE_KEY);\n }\n\n return {\n id: 'animation-stop',\n name: () => 'Stop Animations',\n description: 'Pause all animations, transitions, and auto-playing videos (WCAG 2.3.1)',\n icon: 'animation-stop',\n category: 'visual',\n activate,\n deactivate,\n getState: (): FeatureState => ({\n id: 'animation-stop',\n enabled,\n }),\n setState: (state: { enabled: boolean }) => {\n if (state.enabled) {\n activate();\n } else {\n deactivate();\n }\n },\n };\n}\n"],"names":["observer"],"mappings":"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"}
|
|
@@ -6310,14 +6310,14 @@ function FeatureGrid($$anchor, $$props) {
|
|
|
6310
6310
|
const FEATURE_LOADERS = {
|
|
6311
6311
|
contrast: () => import("./contrast-CqsICAkU.js"),
|
|
6312
6312
|
"text-size": () => import("./text-size-C6OFhCGi.js"),
|
|
6313
|
-
"keyboard-nav": () => import("./keyboard-nav
|
|
6313
|
+
"keyboard-nav": () => import("./keyboard-nav--OdykeMg.js"),
|
|
6314
6314
|
"link-highlight": () => import("./link-highlight-DBGm067Y.js"),
|
|
6315
6315
|
"reading-guide": () => import("./reading-guide-VT8NciIL.js"),
|
|
6316
6316
|
"reading-mask": () => import("./reading-mask-BABChuCz.js"),
|
|
6317
|
-
"animation-stop": () => import("./animation-stop-
|
|
6317
|
+
"animation-stop": () => import("./animation-stop-BDP0PVUZ.js"),
|
|
6318
6318
|
"hide-images": () => import("./hide-images-B_LeCBcd.js"),
|
|
6319
6319
|
"big-cursor": () => import("./big-cursor-B2UKu9dQ.js"),
|
|
6320
|
-
"page-structure": () => import("./page-structure-
|
|
6320
|
+
"page-structure": () => import("./page-structure-BfHcMDYY.js"),
|
|
6321
6321
|
tts: () => import("./tts-CjszLRnb.js"),
|
|
6322
6322
|
"text-simplify": () => import("./text-simplify-B1v6Muvn.js"),
|
|
6323
6323
|
"alt-text": () => Promise.resolve().then(() => altText)
|
|
@@ -8400,4 +8400,4 @@ export {
|
|
|
8400
8400
|
init as i,
|
|
8401
8401
|
t
|
|
8402
8402
|
};
|
|
8403
|
-
//# sourceMappingURL=index-
|
|
8403
|
+
//# sourceMappingURL=index-DiDUF8l8.js.map
|