analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
160 lines • 7 kB
TypeScript
/**
* Modos de contraste suportados pelo widget de acessibilidade
*/
export type ContrastMode = 'normal' | 'high' | 'inverted';
/**
* Modos de saturação para usuários com sensibilidade visual
*/
export type SaturationMode = 'normal' | 'grayscale' | 'low';
/**
* Auxiliares de leitura mutuamente exclusivos:
* - `none`: nenhum auxiliar
* - `ruler`: linha horizontal acompanha o cursor
* - `mask`: escurece a tela exceto uma faixa central na altura do cursor
*/
export type ReadingAid = 'none' | 'ruler' | 'mask';
/**
* Modo do leitor de texto (TTS):
* - `off`: leitor desligado
* - `click-to-read`: usuário clica em um elemento e o widget lê o texto dele
* - `read-selection`: usuário pressiona "Ler seleção" para falar o texto selecionado
*/
export type TTSMode = 'off' | 'click-to-read' | 'read-selection';
/** Status runtime da síntese de voz — não persistido. */
export type TTSStatus = 'idle' | 'speaking' | 'paused';
/**
* Modos de daltonismo. Aplicam matrizes `<feColorMatrix>` (SVG) que
* remapeiam cores para ajudar usuários com cada tipo de discromatopsia.
*
* Enum (e não union de strings como os outros modos) porque cada valor
* é também usado como identificador estável em três outros lugares —
* classes CSS, IDs de filter SVG e seletores no CSS — então centralizar
* em um enum + helpers evita strings duplicadas e typos silenciosos.
*/
export declare enum ColorBlindMode {
None = "none",
Protanopia = "protanopia",
Deuteranopia = "deuteranopia",
Tritanopia = "tritanopia"
}
/**
* Retorna a classe CSS aplicada no `<html>` para o modo informado, ou
* `null` quando nenhum modo está ativo.
*/
export declare const getColorBlindClass: (mode: ColorBlindMode) => string | null;
/** Retorna o id do `<filter>` SVG correspondente ao modo. */
export declare const getColorBlindFilterId: (mode: Exclude<ColorBlindMode, ColorBlindMode.None>) => string;
/**
* Níveis discretos para tamanho de fonte (0 = padrão da página)
*/
export type FontSizeLevel = 0 | 1 | 2 | 3;
/**
* Níveis discretos para espaçamento entre letras e linhas
*/
export type SpacingLevel = 0 | 1 | 2 | 3;
/**
* Conjunto completo de preferências persistidas
*/
export interface AccessibilityPreferences {
contrastMode: ContrastMode;
saturationMode: SaturationMode;
fontSize: FontSizeLevel;
letterSpacing: SpacingLevel;
lineSpacing: SpacingLevel;
highlightLinks: boolean;
pauseAnimations: boolean;
bigCursor: boolean;
/** Fonte amigável para dislexia (OpenDyslexic com fallback Comic Sans MS) */
dyslexiaFont: boolean;
/** Auxiliar visual de leitura (régua, máscara ou nenhum) */
readingAid: ReadingAid;
/** Habilita atalho Alt+A para abrir/fechar o painel */
keyboardShortcut: boolean;
/** Modo de daltonismo aplicado (filtro SVG na página inteira) */
colorBlindMode: ColorBlindMode;
/** Modo do leitor de texto (TTS) */
ttsMode: TTSMode;
/** Velocidade da fala (0.5 a 2.0) */
ttsRate: number;
/** Voz selecionada pelo usuário (id retornado pelo provider) ou null para padrão */
ttsVoiceId: string | null;
/** Habilita o widget VLibras (gov.br) — carregado lazy ao ativar */
librasEnabled: boolean;
}
export interface AccessibilityState extends AccessibilityPreferences {
/** Indica se o painel de acessibilidade está aberto */
isPanelOpen: boolean;
/** Status runtime da síntese de voz — não persistido */
ttsStatus: TTSStatus;
}
export interface AccessibilityActions {
setContrastMode: (mode: ContrastMode) => void;
setSaturationMode: (mode: SaturationMode) => void;
setFontSize: (level: FontSizeLevel) => void;
setLetterSpacing: (level: SpacingLevel) => void;
setLineSpacing: (level: SpacingLevel) => void;
setHighlightLinks: (value: boolean) => void;
setPauseAnimations: (value: boolean) => void;
setBigCursor: (value: boolean) => void;
setDyslexiaFont: (value: boolean) => void;
setReadingAid: (mode: ReadingAid) => void;
setKeyboardShortcut: (value: boolean) => void;
setColorBlindMode: (mode: ColorBlindMode) => void;
setTTSMode: (mode: TTSMode) => void;
setTTSRate: (rate: number) => void;
setTTSVoiceId: (id: string | null) => void;
setTTSStatus: (status: TTSStatus) => void;
setLibrasEnabled: (value: boolean) => void;
/** Restaura todas as preferências para o estado padrão */
resetPreferences: () => void;
openPanel: () => void;
closePanel: () => void;
togglePanel: () => void;
}
export type AccessibilityStore = AccessibilityState & AccessibilityActions;
export declare const DEFAULT_ACCESSIBILITY_PREFERENCES: AccessibilityPreferences;
/**
* Store Zustand com persistência em localStorage para preferências
* de acessibilidade. As preferências são aplicadas ao DOM pelo hook
* `useA11yPreferences` — este store apenas guarda o estado.
*/
export declare const useAccessibilityStore: import("zustand").UseBoundStore<Omit<Omit<import("zustand").StoreApi<AccessibilityStore>, "setState" | "devtools"> & {
setState(partial: AccessibilityStore | Partial<AccessibilityStore> | ((state: AccessibilityStore) => AccessibilityStore | Partial<AccessibilityStore>), replace?: false | undefined, action?: (string | {
[x: string]: unknown;
[x: number]: unknown;
[x: symbol]: unknown;
type: string;
}) | undefined): void;
setState(state: AccessibilityStore | ((state: AccessibilityStore) => AccessibilityStore), replace: true, action?: (string | {
[x: string]: unknown;
[x: number]: unknown;
[x: symbol]: unknown;
type: string;
}) | undefined): void;
devtools: {
cleanup: () => void;
};
}, "setState" | "persist"> & {
setState(partial: AccessibilityStore | Partial<AccessibilityStore> | ((state: AccessibilityStore) => AccessibilityStore | Partial<AccessibilityStore>), replace?: false | undefined, action?: (string | {
[x: string]: unknown;
[x: number]: unknown;
[x: symbol]: unknown;
type: string;
}) | undefined): unknown;
setState(state: AccessibilityStore | ((state: AccessibilityStore) => AccessibilityStore), replace: true, action?: (string | {
[x: string]: unknown;
[x: number]: unknown;
[x: symbol]: unknown;
type: string;
}) | undefined): unknown;
persist: {
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<AccessibilityStore, any, unknown>>) => void;
clearStorage: () => void;
rehydrate: () => Promise<void> | void;
hasHydrated: () => boolean;
onHydrate: (fn: (state: AccessibilityStore) => void) => () => void;
onFinishHydration: (fn: (state: AccessibilityStore) => void) => () => void;
getOptions: () => Partial<import("zustand/middleware").PersistOptions<AccessibilityStore, any, unknown>>;
};
}>;
//# sourceMappingURL=accessibilityStore.d.ts.map