analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
129 lines (127 loc) • 4.04 kB
JavaScript
import {
getColorBlindClass,
useAccessibilityStore
} from "./chunk-7CD5FIDV.mjs";
// src/hooks/useA11yPreferences.ts
import { useEffect } from "react";
var CONTRAST_CLASS = {
normal: null,
high: "a11y-contrast-high",
inverted: "a11y-contrast-inverted"
};
var SATURATION_CLASS = {
normal: null,
grayscale: "a11y-saturation-grayscale",
low: "a11y-saturation-low"
};
var LEVEL_PREFIX = {
fontSize: "a11y-font-",
letterSpacing: "a11y-letter-spacing-",
lineSpacing: "a11y-line-spacing-"
};
var ALL_A11Y_CLASSES = [
"a11y-contrast-high",
"a11y-contrast-inverted",
"a11y-saturation-grayscale",
"a11y-saturation-low",
"a11y-font-1",
"a11y-font-2",
"a11y-font-3",
"a11y-letter-spacing-1",
"a11y-letter-spacing-2",
"a11y-letter-spacing-3",
"a11y-line-spacing-1",
"a11y-line-spacing-2",
"a11y-line-spacing-3",
"a11y-highlight-links",
"a11y-no-animations",
"a11y-big-cursor",
"a11y-dyslexia-font",
"a11y-cb-protanopia",
"a11y-cb-deuteranopia",
"a11y-cb-tritanopia"
];
var buildLevelClass = (prefix, level) => {
if (level === 0) return null;
return `${prefix}${level}`;
};
var buildClassMap = (prefs) => ({
contrastMode: CONTRAST_CLASS[prefs.contrastMode] ?? void 0,
saturationMode: SATURATION_CLASS[prefs.saturationMode] ?? void 0,
fontSize: buildLevelClass(LEVEL_PREFIX.fontSize, prefs.fontSize) ?? void 0,
letterSpacing: buildLevelClass(LEVEL_PREFIX.letterSpacing, prefs.letterSpacing) ?? void 0,
lineSpacing: buildLevelClass(LEVEL_PREFIX.lineSpacing, prefs.lineSpacing) ?? void 0,
highlightLinks: prefs.highlightLinks ? "a11y-highlight-links" : void 0,
pauseAnimations: prefs.pauseAnimations ? "a11y-no-animations" : void 0,
bigCursor: prefs.bigCursor ? "a11y-big-cursor" : void 0,
dyslexiaFont: prefs.dyslexiaFont ? "a11y-dyslexia-font" : void 0,
colorBlindMode: getColorBlindClass(prefs.colorBlindMode) ?? void 0
});
var syncDom = (prefs) => {
if (typeof document === "undefined") return;
const root = document.documentElement;
ALL_A11Y_CLASSES.forEach((cls) => root.classList.remove(cls));
const classMap = buildClassMap(prefs);
Object.values(classMap).forEach((cls) => {
if (cls) root.classList.add(cls);
});
};
var useA11yPreferences = () => {
const contrastMode = useAccessibilityStore((s) => s.contrastMode);
const saturationMode = useAccessibilityStore((s) => s.saturationMode);
const fontSize = useAccessibilityStore((s) => s.fontSize);
const letterSpacing = useAccessibilityStore((s) => s.letterSpacing);
const lineSpacing = useAccessibilityStore((s) => s.lineSpacing);
const highlightLinks = useAccessibilityStore((s) => s.highlightLinks);
const pauseAnimations = useAccessibilityStore((s) => s.pauseAnimations);
const bigCursor = useAccessibilityStore((s) => s.bigCursor);
const dyslexiaFont = useAccessibilityStore((s) => s.dyslexiaFont);
const readingAid = useAccessibilityStore((s) => s.readingAid);
const keyboardShortcut = useAccessibilityStore((s) => s.keyboardShortcut);
const colorBlindMode = useAccessibilityStore((s) => s.colorBlindMode);
const ttsMode = useAccessibilityStore((s) => s.ttsMode);
const ttsRate = useAccessibilityStore((s) => s.ttsRate);
const ttsVoiceId = useAccessibilityStore((s) => s.ttsVoiceId);
const librasEnabled = useAccessibilityStore((s) => s.librasEnabled);
useEffect(() => {
syncDom({
contrastMode,
saturationMode,
fontSize,
letterSpacing,
lineSpacing,
highlightLinks,
pauseAnimations,
bigCursor,
dyslexiaFont,
readingAid,
keyboardShortcut,
colorBlindMode,
ttsMode,
ttsRate,
ttsVoiceId,
librasEnabled
});
}, [
contrastMode,
saturationMode,
fontSize,
letterSpacing,
lineSpacing,
highlightLinks,
pauseAnimations,
bigCursor,
dyslexiaFont,
colorBlindMode
]);
};
var __testing = {
buildClassMap,
syncDom,
ALL_A11Y_CLASSES
};
export {
useA11yPreferences,
__testing
};
//# sourceMappingURL=chunk-XNZR6CNJ.mjs.map