@william-xu-web/c-a11y 1.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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/c-a11y.js", "../src/styles.js", "../src/i18n.js", "../src/storage.js", "../src/utils.js", "../src/modules/font-size.js", "../src/modules/contrast.js", "../src/modules/dark-mode.js", "../src/modules/monochrome.js", "../src/modules/saturation.js", "../src/modules/spacing.js", "../src/modules/dyslexia-font.js", "../src/modules/hide-images.js", "../src/modules/color-blind.js", "../src/modules/keyboard-nav.js", "../src/modules/focus.js", "../src/modules/headings.js", "../src/modules/page-structure.js", "../src/modules/reading-guide.js", "../src/modules/line-mask.js", "../src/modules/cursor.js", "../src/modules/screen-reader.js", "../src/modules/links.js", "../src/modules/images.js", "../src/modules/animations.js", "../src/modules/mute-sounds.js", "../src/modules/statement.js", "../src/modules/badge.js", "../src/modules/tts.js"],
4
+ "sourcesContent": ["import { getWidgetStyles } from './styles.js';\nimport { t, setLanguage, getLanguage, getDir, getAvailableLanguages, resolveLanguage } from './i18n.js';\nimport * as storage from './storage.js';\nimport { createElement, announceToScreenReader } from './utils.js';\n\nimport { FontSizeModule } from './modules/font-size.js';\nimport { ContrastModule } from './modules/contrast.js';\nimport { DarkModeModule } from './modules/dark-mode.js';\nimport { MonochromeModule } from './modules/monochrome.js';\nimport { SaturationModule } from './modules/saturation.js';\nimport { SpacingModule } from './modules/spacing.js';\nimport { DyslexiaFontModule } from './modules/dyslexia-font.js';\nimport { HideImagesModule } from './modules/hide-images.js';\nimport { ColorBlindModule } from './modules/color-blind.js';\nimport { KeyboardNavModule } from './modules/keyboard-nav.js';\nimport { FocusModule } from './modules/focus.js';\nimport { HeadingsModule } from './modules/headings.js';\nimport { PageStructureModule } from './modules/page-structure.js';\nimport { ReadingGuideModule } from './modules/reading-guide.js';\nimport { LineMaskModule } from './modules/line-mask.js';\nimport { CursorModule } from './modules/cursor.js';\nimport { ScreenReaderModule } from './modules/screen-reader.js';\nimport { LinksModule } from './modules/links.js';\nimport { ImagesModule } from './modules/images.js';\nimport { AnimationsModule } from './modules/animations.js';\nimport { MuteSoundsModule } from './modules/mute-sounds.js';\nimport { StatementModule } from './modules/statement.js';\nimport { BadgeModule } from './modules/badge.js';\nimport { TTSModule } from './modules/tts.js';\n\nconst ICON_SVG = `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4zm9 7h-6l-1.41-1.41A2 2 0 0 0 12.17 7H12a2 2 0 0 0-1.42.59L9 9H3a1 1 0 0 0 0 2h5l1 1v3l-2 5a1 1 0 0 0 1.8.8L11 16h2l2.2 4.8a1 1 0 0 0 1.8-.8l-2-5v-3l1-1h5a1 1 0 0 0 0-2z\"/></svg>`;\n\nconst TOGGLE_MAP = {\n darkMode: 'darkMode',\n monochrome: 'monochrome',\n textSpacing: 'spacing',\n dyslexiaFont: 'dyslexiaFont',\n hideImages: 'hideImages',\n colorBlindSim: 'colorBlind',\n keyboardNav: 'keyboardNav',\n focusIndicators: 'focus',\n readingGuide: 'readingGuide',\n lineMask: 'lineMask',\n bigCursor: 'cursor',\n linkHighlight: 'links',\n imageAltText: 'images',\n stopAnimations: 'animations',\n muteSounds: 'muteSounds',\n};\n\nconst VALID_POSITIONS = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];\n\nlet activeInstance = null;\n\nclass OpenA11yWidget {\n constructor() {\n this.isOpen = false;\n this.modules = {};\n this.shadowHost = null;\n this.shadowRoot = null;\n this.panel = null;\n this.trigger = null;\n this.config = window.OpenA11yConfig || {};\n this._keydownHandler = null;\n this._resizeHandler = null;\n this._destroyed = false;\n }\n\n init() {\n const initialLang = storage.get('lang') || resolveLanguage(this.config.lang);\n setLanguage(initialLang);\n\n this.shadowHost = document.createElement('div');\n this.shadowHost.id = 'opennagish-widget';\n this.shadowHost.style.cssText = 'all:initial;';\n document.body.appendChild(this.shadowHost);\n this.shadowRoot = this.shadowHost.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = getWidgetStyles();\n this.shadowRoot.appendChild(style);\n\n const liveRegion = createElement('div', {\n className: 'anid-live-region',\n role: 'status',\n 'aria-live': 'polite',\n 'aria-atomic': 'true',\n });\n this.shadowRoot.appendChild(liveRegion);\n\n this.createTrigger();\n this.createPanel();\n this.initModules();\n this.restoreState();\n this.bindGlobalKeys();\n this.bindViewportListeners();\n }\n\n createTrigger() {\n const pos = this._getPosition();\n this.trigger = createElement('button', {\n className: 'anid-trigger',\n 'aria-label': t('openPanel'),\n 'aria-expanded': 'false',\n 'aria-controls': 'anid-panel',\n innerHTML: ICON_SVG,\n });\n\n this.positionElement(this.trigger, pos);\n this.makeDraggable(this.trigger);\n this.shadowRoot.appendChild(this.trigger);\n }\n\n createPanel() {\n const pos = this._getPosition();\n this.panel = createElement('div', {\n className: 'anid-panel',\n id: 'anid-panel',\n role: 'dialog',\n 'aria-label': t('panelTitle'),\n 'aria-modal': 'false',\n });\n\n this.panel.setAttribute('dir', getDir());\n this.positionPanel(pos);\n\n this.panel.innerHTML = this.buildPanelHTML();\n this.shadowRoot.appendChild(this.panel);\n\n this.bindPanelEvents();\n }\n\n _getPosition() {\n const pos = this.config.position || 'bottom-left';\n return VALID_POSITIONS.includes(pos) ? pos : 'bottom-left';\n }\n\n buildPanelHTML() {\n const langs = getAvailableLanguages();\n const langOptions = langs.map(l => {\n const names = { en: 'English', zh: '\u4E2D\u6587' };\n return `<option value=\"${l}\" ${l === getLanguage() ? 'selected' : ''}>${names[l] || l}</option>`;\n }).join('');\n\n return `\n <div class=\"anid-panel-header\">\n <span class=\"anid-panel-title\">${t('panelTitle')}</span>\n <select class=\"anid-lang-select\" aria-label=\"${t('language')}\">${langOptions}</select>\n <button class=\"anid-close-btn\" aria-label=\"${t('closePanel')}\">&#x2715;</button>\n </div>\n <div class=\"anid-panel-body\">\n ${this.buildCategory('vision', t('categoryVision'), '\uD83D\uDC41', [\n { id: 'fontSize', type: 'buttons', shortcut: 'Alt+F' },\n { id: 'highContrast', type: 'contrast', shortcut: 'Alt+C' },\n { id: 'darkMode', type: 'toggle', shortcut: 'Alt+D' },\n { id: 'monochrome', type: 'toggle' },\n { id: 'saturation', type: 'slider' },\n { id: 'textSpacing', type: 'toggle' },\n { id: 'dyslexiaFont', type: 'toggle' },\n { id: 'hideImages', type: 'toggle' },\n { id: 'colorBlindSim', type: 'colorblind' },\n ])}\n ${this.buildCategory('navigation', t('categoryNavigation'), '\uD83E\uDDED', [\n { id: 'keyboardNav', type: 'toggle', shortcut: 'Alt+K' },\n { id: 'focusIndicators', type: 'toggle' },\n { id: 'headingStructure', type: 'headings' },\n { id: 'pageStructure', type: 'landmarks' },\n { id: 'readingGuide', type: 'toggle', shortcut: 'Alt+G' },\n { id: 'lineMask', type: 'toggle' },\n { id: 'bigCursor', type: 'toggle' },\n { id: 'screenReaderPreview', type: 'action' },\n ])}\n ${this.buildCategory('media', t('categoryMedia'), '\uD83D\uDD0A', [\n { id: 'ttsHover', type: 'toggle' },\n { id: 'ttsSelection', type: 'toggle' },\n { id: 'ttsReadPage', type: 'action', shortcut: 'Alt+T' },\n { id: 'linkHighlight', type: 'toggle', shortcut: 'Alt+L' },\n { id: 'imageAltText', type: 'toggle' },\n { id: 'stopAnimations', type: 'toggle' },\n { id: 'muteSounds', type: 'toggle', shortcut: 'Alt+M' },\n ])}\n ${this.buildCategory('compliance', t('categoryCompliance'), '\u2705', [\n { id: 'accessibilityStatement', type: 'action' },\n { id: 'complianceBadge', type: 'action' },\n ])}\n </div>\n <div class=\"anid-panel-footer\">\n <button class=\"anid-reset-btn\">${t('resetAll')}</button>\n </div>\n `;\n }\n\n buildCategory(id, title, icon, features) {\n const expanded = id === 'vision' ? 'true' : 'false';\n let content = '';\n for (const f of features) {\n content += this.buildFeature(f);\n }\n return `\n <div class=\"anid-category\" data-category=\"${id}\" data-expanded=\"${expanded}\">\n <button class=\"anid-category-header\" aria-expanded=\"${expanded}\">\n <span class=\"anid-category-icon\">${icon}</span>\n <span>${title}</span>\n <span class=\"anid-category-chevron\">&#x25BC;</span>\n </button>\n <div class=\"anid-category-content\" role=\"region\">\n ${content}\n </div>\n </div>\n `;\n }\n\n buildFeature(f) {\n const label = t(f.id);\n const shortcutBadge = f.shortcut ? ` <kbd class=\"anid-shortcut\">${f.shortcut}</kbd>` : '';\n const labelHtml = `${label}${shortcutBadge}`;\n switch (f.type) {\n case 'toggle':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <label class=\"anid-toggle\">\n <input type=\"checkbox\" data-toggle=\"${f.id}\" aria-label=\"${label}\">\n <span class=\"anid-toggle-slider\"></span>\n </label>\n </div>`;\n case 'buttons':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <div class=\"anid-btn-group\">\n <button class=\"anid-btn\" data-action=\"fontDecrease\" aria-label=\"${t('fontSizeDecrease')}\">A-</button>\n <button class=\"anid-btn\" data-action=\"fontReset\" aria-label=\"${t('fontSizeReset')}\">A</button>\n <button class=\"anid-btn\" data-action=\"fontIncrease\" aria-label=\"${t('fontSizeIncrease')}\">A+</button>\n </div>\n </div>`;\n case 'contrast':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <div class=\"anid-btn-group\">\n <button class=\"anid-btn\" data-action=\"contrastDark\" aria-label=\"${t('contrastDark')}\">${t('contrastDark')}</button>\n <button class=\"anid-btn\" data-action=\"contrastLight\" aria-label=\"${t('contrastLight')}\">${t('contrastLight')}</button>\n <button class=\"anid-btn\" data-action=\"contrastInvert\" aria-label=\"${t('contrastInvert')}\">${t('contrastInvert')}</button>\n </div>\n </div>`;\n case 'slider':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <div class=\"anid-slider-wrap\">\n <input type=\"range\" class=\"anid-slider\" data-slider=\"${f.id}\" min=\"0\" max=\"200\" value=\"100\" aria-label=\"${label}\">\n </div>\n </div>`;\n case 'colorblind':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <label class=\"anid-toggle\">\n <input type=\"checkbox\" data-toggle=\"${f.id}\" aria-label=\"${label}\">\n <span class=\"anid-toggle-slider\"></span>\n </label>\n </div>\n <div class=\"anid-sub-options\" data-sub=\"${f.id}\" style=\"display:none\">\n <div class=\"anid-btn-group\">\n <button class=\"anid-btn\" data-action=\"cbProtanopia\">${t('protanopia')}</button>\n <button class=\"anid-btn\" data-action=\"cbDeuteranopia\">${t('deuteranopia')}</button>\n <button class=\"anid-btn\" data-action=\"cbTritanopia\">${t('tritanopia')}</button>\n </div>\n </div>`;\n case 'headings':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <button class=\"anid-btn\" data-action=\"toggleHeadings\">${t('jumpTo')}</button>\n </div>\n <ul class=\"anid-heading-list\" data-list=\"headings\" style=\"display:none\"></ul>`;\n case 'landmarks':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <button class=\"anid-btn\" data-action=\"toggleLandmarks\">${t('jumpTo')}</button>\n </div>\n <ul class=\"anid-landmark-list\" data-list=\"landmarks\" style=\"display:none\"></ul>`;\n case 'action':\n return `\n <div class=\"anid-feature\" data-feature=\"${f.id}\">\n <span class=\"anid-feature-label\">${labelHtml}</span>\n <button class=\"anid-btn\" data-action=\"${f.id}\">${label}</button>\n </div>`;\n default:\n return '';\n }\n }\n\n bindPanelEvents() {\n const root = this.shadowRoot;\n\n root.querySelector('.anid-close-btn').addEventListener('click', () => this.close());\n\n root.querySelector('.anid-lang-select').addEventListener('change', (e) => {\n const lang = e.target.value;\n setLanguage(lang);\n storage.set('lang', lang);\n this.rebuildPanel();\n announceToScreenReader(t('panelTitle'), root);\n });\n\n root.querySelector('.anid-reset-btn').addEventListener('click', () => {\n this.resetAll();\n announceToScreenReader(t('resetAll'), root);\n });\n\n root.querySelectorAll('.anid-category-header').forEach(btn => {\n btn.addEventListener('click', () => {\n const cat = btn.closest('.anid-category');\n const expanded = cat.dataset.expanded === 'true';\n cat.dataset.expanded = expanded ? 'false' : 'true';\n btn.setAttribute('aria-expanded', String(!expanded));\n });\n });\n\n root.querySelectorAll('[data-toggle]').forEach(input => {\n input.addEventListener('change', () => {\n this.handleToggle(input.dataset.toggle, input.checked);\n });\n });\n\n root.querySelectorAll('[data-action]').forEach(btn => {\n btn.addEventListener('click', () => {\n this.handleAction(btn.dataset.action);\n });\n });\n\n root.querySelectorAll('[data-slider]').forEach(slider => {\n slider.addEventListener('input', () => {\n this.handleSlider(slider.dataset.slider, parseInt(slider.value, 10));\n });\n });\n }\n\n handleToggle(id, checked) {\n if (id === 'ttsHover') {\n if (checked) this.modules.tts?.enableHover();\n else this.modules.tts?.disableHover();\n storage.set(id, checked);\n announceToScreenReader(`${t(id)} ${checked ? t('on') : t('off')}`, this.shadowRoot);\n return;\n }\n if (id === 'ttsSelection') {\n if (checked) this.modules.tts?.enableSelection();\n else this.modules.tts?.disableSelection();\n storage.set(id, checked);\n announceToScreenReader(`${t(id)} ${checked ? t('on') : t('off')}`, this.shadowRoot);\n return;\n }\n\n const modKey = TOGGLE_MAP[id];\n const mod = modKey ? this.modules[modKey] : null;\n if (mod) {\n if (checked) mod.enable();\n else mod.disable();\n storage.set(id, checked);\n }\n\n if (id === 'colorBlindSim') {\n const sub = this.shadowRoot.querySelector('[data-sub=\"colorBlindSim\"]');\n if (sub) sub.style.display = checked ? '' : 'none';\n if (!checked) this.modules.colorBlind?.disable();\n }\n\n announceToScreenReader(`${t(id)} ${checked ? t('on') : t('off')}`, this.shadowRoot);\n }\n\n handleAction(action) {\n switch (action) {\n case 'fontIncrease': this.modules.fontSize?.increase(); break;\n case 'fontDecrease': this.modules.fontSize?.decrease(); break;\n case 'fontReset': this.modules.fontSize?.reset(); break;\n case 'contrastDark': this.toggleContrast('dark'); break;\n case 'contrastLight': this.toggleContrast('light'); break;\n case 'contrastInvert': this.toggleContrast('invert'); break;\n case 'cbProtanopia': this.modules.colorBlind?.setMode('protanopia'); break;\n case 'cbDeuteranopia': this.modules.colorBlind?.setMode('deuteranopia'); break;\n case 'cbTritanopia': this.modules.colorBlind?.setMode('tritanopia'); break;\n case 'toggleHeadings': this.toggleList('headings'); break;\n case 'toggleLandmarks': this.toggleList('landmarks'); break;\n case 'screenReaderPreview': this.modules.screenReader?.toggle(); break;\n case 'ttsReadPage': this.modules.tts?.readPage(); break;\n case 'accessibilityStatement': this.modules.statement?.show(); break;\n case 'complianceBadge': this.modules.badge?.show(); break;\n }\n }\n\n handleSlider(id, value) {\n if (id === 'saturation') {\n this.modules.saturation?.setValue(value);\n storage.set('saturation', value);\n }\n }\n\n toggleContrast(mode) {\n const current = storage.get('contrast', 'none');\n const next = current === mode ? 'none' : mode;\n this.modules.contrast?.setMode(next);\n storage.set('contrast', next);\n this.updateContrastButtons(next);\n\n const label = next === 'none'\n ? `${t('highContrast')} ${t('off')}`\n : `${t('highContrast')} ${t(next === 'dark' ? 'contrastDark' : next === 'light' ? 'contrastLight' : 'contrastInvert')}`;\n announceToScreenReader(label, this.shadowRoot);\n }\n\n updateContrastButtons(mode) {\n this.shadowRoot.querySelectorAll('[data-action^=\"contrast\"]').forEach(btn => {\n const btnMode = btn.dataset.action.replace('contrast', '').toLowerCase();\n btn.classList.toggle('anid-active', btnMode === mode);\n });\n }\n\n toggleList(type) {\n const list = this.shadowRoot.querySelector(`[data-list=\"${type}\"]`);\n if (!list) return;\n const visible = list.style.display !== 'none';\n list.style.display = visible ? 'none' : '';\n if (!visible) {\n if (type === 'headings') this.modules.headings?.populateList(list);\n else this.modules.pageStructure?.populateList(list);\n }\n }\n\n initModules() {\n const ctx = {\n shadowRoot: this.shadowRoot,\n config: this.config,\n announce: (msg) => announceToScreenReader(msg, this.shadowRoot),\n };\n this.modules = {\n fontSize: new FontSizeModule(ctx),\n contrast: new ContrastModule(ctx),\n darkMode: new DarkModeModule(ctx),\n monochrome: new MonochromeModule(ctx),\n saturation: new SaturationModule(ctx),\n spacing: new SpacingModule(ctx),\n dyslexiaFont: new DyslexiaFontModule(ctx),\n hideImages: new HideImagesModule(ctx),\n colorBlind: new ColorBlindModule(ctx),\n keyboardNav: new KeyboardNavModule(ctx),\n focus: new FocusModule(ctx),\n headings: new HeadingsModule(ctx),\n pageStructure: new PageStructureModule(ctx),\n readingGuide: new ReadingGuideModule(ctx),\n lineMask: new LineMaskModule(ctx),\n cursor: new CursorModule(ctx),\n screenReader: new ScreenReaderModule(ctx),\n links: new LinksModule(ctx),\n images: new ImagesModule(ctx),\n animations: new AnimationsModule(ctx),\n muteSounds: new MuteSoundsModule(ctx),\n tts: new TTSModule(ctx),\n statement: new StatementModule(ctx),\n badge: new BadgeModule(ctx),\n };\n }\n\n restoreState() {\n const prefs = storage.getAll();\n\n for (const [prefKey, modKey] of Object.entries(TOGGLE_MAP)) {\n if (prefKey === 'colorBlindSim') continue;\n if (prefs[prefKey]) {\n this.modules[modKey]?.enable();\n const input = this.shadowRoot.querySelector(`[data-toggle=\"${prefKey}\"]`);\n if (input) input.checked = true;\n }\n }\n\n if (prefs.ttsHover) {\n this.modules.tts?.enableHover();\n const input = this.shadowRoot.querySelector('[data-toggle=\"ttsHover\"]');\n if (input) input.checked = true;\n }\n if (prefs.ttsSelection) {\n this.modules.tts?.enableSelection();\n const input = this.shadowRoot.querySelector('[data-toggle=\"ttsSelection\"]');\n if (input) input.checked = true;\n }\n\n if (prefs.fontSize) this.modules.fontSize?.setLevel(prefs.fontSize);\n if (prefs.contrast && prefs.contrast !== 'none') {\n this.modules.contrast?.setMode(prefs.contrast);\n this.updateContrastButtons(prefs.contrast);\n }\n if (prefs.saturation !== undefined && prefs.saturation !== 100) {\n this.modules.saturation?.setValue(prefs.saturation);\n const slider = this.shadowRoot.querySelector('[data-slider=\"saturation\"]');\n if (slider) slider.value = prefs.saturation;\n }\n if (prefs.colorBlindMode) {\n this.modules.colorBlind?.setMode(prefs.colorBlindMode);\n const toggle = this.shadowRoot.querySelector('[data-toggle=\"colorBlindSim\"]');\n if (toggle) toggle.checked = true;\n const sub = this.shadowRoot.querySelector('[data-sub=\"colorBlindSim\"]');\n if (sub) sub.style.display = '';\n }\n }\n\n resetAll() {\n for (const mod of Object.values(this.modules)) {\n mod.disable?.();\n }\n storage.clearAll();\n storage.set('lang', getLanguage());\n this.rebuildPanel();\n }\n\n rebuildPanel() {\n this.panel.setAttribute('dir', getDir());\n this.panel.innerHTML = this.buildPanelHTML();\n this.bindPanelEvents();\n this.restoreState();\n if (this.isOpen) {\n this.updatePanelPosition();\n this.panel.classList.add('anid-open');\n }\n this.trigger.setAttribute('aria-expanded', String(this.isOpen));\n this.trigger.setAttribute('aria-label', this.isOpen ? t('closePanel') : t('openPanel'));\n }\n\n toggle() {\n this.isOpen ? this.close() : this.open();\n }\n\n open() {\n this.isOpen = true;\n this.updatePanelPosition();\n this.panel.classList.add('anid-open');\n this.trigger.setAttribute('aria-expanded', 'true');\n this.trigger.setAttribute('aria-label', t('closePanel'));\n this.panel.querySelector('.anid-close-btn')?.focus();\n }\n\n close() {\n this.isOpen = false;\n this.panel.classList.remove('anid-open');\n this.trigger.setAttribute('aria-expanded', 'false');\n this.trigger.setAttribute('aria-label', t('openPanel'));\n this.trigger.focus();\n }\n\n bindGlobalKeys() {\n const shortcuts = {\n 'KeyD': () => this._flipToggle('darkMode'),\n 'KeyF': (e) => {\n if (e.shiftKey) this.modules.fontSize?.decrease();\n else this.modules.fontSize?.increase();\n },\n 'KeyK': () => this._flipToggle('keyboardNav'),\n 'KeyG': () => this._flipToggle('readingGuide'),\n 'KeyL': () => this._flipToggle('linkHighlight'),\n 'KeyC': () => this.toggleContrast('dark'),\n 'KeyM': () => this._flipToggle('muteSounds'),\n 'KeyT': () => this.modules.tts?.readPage(),\n 'KeyR': () => this.resetAll(),\n };\n\n this._keydownHandler = (e) => {\n if (e.key === 'Escape' && this.isOpen) {\n this.close();\n return;\n }\n if (e.altKey && e.code === 'KeyA') {\n e.preventDefault();\n this.toggle();\n return;\n }\n if (e.altKey && this.isOpen) {\n const handler = shortcuts[e.code];\n if (handler) {\n e.preventDefault();\n handler(e);\n }\n }\n };\n document.addEventListener('keydown', this._keydownHandler);\n }\n\n _flipToggle(id) {\n const input = this.shadowRoot.querySelector(`[data-toggle=\"${id}\"]`);\n if (input) {\n input.checked = !input.checked;\n this.handleToggle(id, input.checked);\n }\n }\n\n _getBottomOffset() {\n const isMobile = window.innerWidth <= 768;\n const raw = isMobile ? this.config.mobileBottomOffset : this.config.bottomOffset;\n const offset = parseInt(raw, 10);\n return offset > 0 ? offset : 0;\n }\n\n positionElement(el, pos) {\n const extra = this._getBottomOffset();\n const positions = {\n 'bottom-left': { bottom: `${20 + extra}px`, left: '20px' },\n 'bottom-right': { bottom: `${20 + extra}px`, right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n 'top-right': { top: '20px', right: '20px' },\n };\n Object.assign(el.style, positions[pos] || positions['bottom-left']);\n }\n\n positionPanel(pos) {\n const extra = this._getBottomOffset();\n const panelPos = {\n 'bottom-left': { bottom: `${88 + extra}px`, left: '20px' },\n 'bottom-right': { bottom: `${88 + extra}px`, right: '20px' },\n 'top-left': { top: '88px', left: '20px' },\n 'top-right': { top: '88px', right: '20px' },\n };\n Object.assign(this.panel.style, panelPos[pos] || panelPos['bottom-left']);\n }\n\n updatePanelPosition() {\n if (window.innerWidth <= 768) return;\n\n const triggerRect = this.trigger.getBoundingClientRect();\n const vh = window.innerHeight;\n const vw = window.innerWidth;\n const margin = 12;\n const panelWidth = Math.min(380, vw - 2 * margin);\n\n const spaceAbove = triggerRect.top;\n const spaceBelow = vh - triggerRect.bottom;\n\n let left = triggerRect.left;\n if (left + panelWidth > vw - margin) {\n left = vw - panelWidth - margin;\n }\n if (left < margin) {\n left = margin;\n }\n\n this.panel.style.left = `${left}px`;\n this.panel.style.right = 'auto';\n\n if (spaceAbove > spaceBelow) {\n const bottom = vh - triggerRect.top + margin;\n this.panel.style.bottom = `${bottom}px`;\n this.panel.style.top = 'auto';\n this.panel.style.maxHeight = `${Math.max(200, spaceAbove - 2 * margin)}px`;\n } else {\n const top = triggerRect.bottom + margin;\n this.panel.style.top = `${top}px`;\n this.panel.style.bottom = 'auto';\n this.panel.style.maxHeight = `${Math.max(200, vh - top - margin)}px`;\n }\n }\n\n clampTrigger() {\n const rect = this.trigger.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const w = this.trigger.offsetWidth;\n const h = this.trigger.offsetHeight;\n\n const usesTop = this.trigger.style.top !== '' && this.trigger.style.top !== 'auto';\n const usesLeft = this.trigger.style.left !== '' && this.trigger.style.left !== 'auto';\n\n if (usesTop && usesLeft) {\n const curLeft = rect.left;\n const curTop = rect.top;\n const clampedLeft = Math.max(0, Math.min(curLeft, vw - w));\n const clampedTop = Math.max(0, Math.min(curTop, vh - h));\n if (curLeft !== clampedLeft) this.trigger.style.left = `${clampedLeft}px`;\n if (curTop !== clampedTop) this.trigger.style.top = `${clampedTop}px`;\n } else {\n if (rect.right > vw || rect.left < 0 || rect.bottom > vh || rect.top < 0) {\n this.trigger.style.left = `${Math.max(0, Math.min(rect.left, vw - w))}px`;\n this.trigger.style.top = `${Math.max(0, Math.min(rect.top, vh - h))}px`;\n this.trigger.style.right = 'auto';\n this.trigger.style.bottom = 'auto';\n }\n }\n }\n\n bindViewportListeners() {\n let resizeTimer;\n this._resizeHandler = () => {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(() => {\n this.clampTrigger();\n if (this.isOpen) this.updatePanelPosition();\n }, 100);\n };\n window.addEventListener('resize', this._resizeHandler);\n window.addEventListener('orientationchange', this._resizeHandler);\n }\n\n makeDraggable(el) {\n let isDragging = false;\n let startX, startY, origX, origY;\n\n const onStart = (e) => {\n const point = e.touches ? e.touches[0] : e;\n startX = point.clientX;\n startY = point.clientY;\n const rect = el.getBoundingClientRect();\n origX = rect.left;\n origY = rect.top;\n isDragging = false;\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onEnd);\n document.addEventListener('touchmove', onMove, { passive: false });\n document.addEventListener('touchend', onEnd);\n };\n\n const onMove = (e) => {\n const point = e.touches ? e.touches[0] : e;\n const dx = point.clientX - startX;\n const dy = point.clientY - startY;\n if (Math.abs(dx) > 5 || Math.abs(dy) > 5) isDragging = true;\n if (isDragging) {\n e.preventDefault();\n const maxX = window.innerWidth - el.offsetWidth;\n const maxY = window.innerHeight - el.offsetHeight;\n el.style.left = `${Math.max(0, Math.min(origX + dx, maxX))}px`;\n el.style.top = `${Math.max(0, Math.min(origY + dy, maxY))}px`;\n el.style.right = 'auto';\n el.style.bottom = 'auto';\n }\n };\n\n const onEnd = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onEnd);\n document.removeEventListener('touchmove', onMove);\n document.removeEventListener('touchend', onEnd);\n if (isDragging) {\n this.updatePanelPosition();\n }\n };\n\n el.addEventListener('mousedown', onStart);\n el.addEventListener('touchstart', onStart, { passive: true });\n\n el.addEventListener('click', (e) => {\n if (isDragging) {\n isDragging = false;\n e.stopPropagation();\n return;\n }\n this.toggle();\n });\n }\n\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n\n for (const mod of Object.values(this.modules)) {\n mod.disable?.();\n }\n\n if (this._keydownHandler) {\n document.removeEventListener('keydown', this._keydownHandler);\n }\n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n window.removeEventListener('orientationchange', this._resizeHandler);\n }\n\n if (this.shadowHost?.parentNode) {\n this.shadowHost.parentNode.removeChild(this.shadowHost);\n }\n\n this.modules = {};\n this.shadowRoot = null;\n this.shadowHost = null;\n this.panel = null;\n this.trigger = null;\n\n if (activeInstance === this) activeInstance = null;\n }\n}\n\nexport function init(config) {\n if (activeInstance) {\n activeInstance.destroy();\n }\n if (config) window.OpenA11yConfig = { ...window.OpenA11yConfig, ...config };\n const widget = new OpenA11yWidget();\n widget.init();\n activeInstance = widget;\n return widget;\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => init());\n } else {\n init();\n }\n}\n", "// \"anid-\" prefix = Accessibility Nagish Interface Design.\n// Namespaces all widget CSS classes to prevent collisions with host-page styles.\nexport function getWidgetStyles() {\n return `\n :host {\n all: initial;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n font-size: 16px;\n line-height: 1.5;\n color: #1a1a2e;\n }\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n .anid-trigger {\n position: fixed;\n z-index: 2147483647;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #1565c0;\n border: 3px solid #fff;\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s, box-shadow 0.2s;\n touch-action: none;\n }\n .anid-trigger:hover, .anid-trigger:focus-visible {\n transform: scale(1.1);\n box-shadow: 0 6px 24px rgba(0,0,0,0.4);\n }\n .anid-trigger:focus-visible {\n outline: 3px solid #ffab00;\n outline-offset: 2px;\n }\n .anid-trigger svg {\n width: 28px;\n height: 28px;\n fill: #fff;\n }\n .anid-trigger[aria-expanded=\"true\"] {\n background: #c62828;\n }\n .anid-trigger[aria-expanded=\"true\"] svg {\n display: none;\n }\n .anid-trigger[aria-expanded=\"true\"]::after {\n content: '\u2715';\n color: #fff;\n font-size: 22px;\n font-weight: bold;\n }\n\n .anid-panel {\n position: fixed;\n z-index: 2147483646;\n width: 380px;\n max-width: calc(100vw - 24px);\n max-height: calc(100vh - 100px);\n background: #ffffff;\n border-radius: 16px;\n box-shadow: 0 8px 40px rgba(0,0,0,0.25);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n opacity: 0;\n visibility: hidden;\n transform: translateY(20px) scale(0.95);\n transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s;\n }\n .anid-panel.anid-open {\n opacity: 1;\n visibility: visible;\n transform: translateY(0) scale(1);\n }\n\n .anid-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: #1565c0;\n color: #fff;\n gap: 8px;\n flex-shrink: 0;\n }\n .anid-panel-title {\n font-size: 18px;\n font-weight: 700;\n flex: 1;\n }\n .anid-lang-select {\n background: rgba(255,255,255,0.2);\n border: 1px solid rgba(255,255,255,0.4);\n color: #fff;\n padding: 4px 8px;\n border-radius: 6px;\n font-size: 13px;\n cursor: pointer;\n }\n .anid-lang-select option {\n color: #1a1a2e;\n background: #fff;\n }\n .anid-close-btn {\n background: none;\n border: none;\n color: #fff;\n font-size: 22px;\n cursor: pointer;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n }\n .anid-close-btn:hover, .anid-close-btn:focus-visible {\n background: rgba(255,255,255,0.2);\n }\n .anid-close-btn:focus-visible {\n outline: 2px solid #ffab00;\n }\n\n .anid-panel-body {\n overflow-y: auto;\n flex: 1;\n padding: 8px 0;\n scrollbar-width: thin;\n scrollbar-color: #ccc transparent;\n }\n .anid-panel-body::-webkit-scrollbar {\n width: 6px;\n }\n .anid-panel-body::-webkit-scrollbar-track {\n background: transparent;\n }\n .anid-panel-body::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 3px;\n }\n\n .anid-category {\n border-bottom: 1px solid #eee;\n }\n .anid-category:last-child {\n border-bottom: none;\n }\n .anid-category-header {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 20px;\n background: none;\n border: none;\n width: 100%;\n cursor: pointer;\n font-size: 15px;\n font-weight: 600;\n color: #1a1a2e;\n text-align: inherit;\n transition: background 0.15s;\n }\n .anid-category-header:hover {\n background: #f5f5f5;\n }\n .anid-category-header:focus-visible {\n outline: 2px solid #1565c0;\n outline-offset: -2px;\n }\n .anid-category-icon {\n font-size: 20px;\n width: 28px;\n text-align: center;\n flex-shrink: 0;\n }\n .anid-category-chevron {\n margin-inline-start: auto;\n transition: transform 0.2s;\n font-size: 12px;\n }\n .anid-category[data-expanded=\"true\"] .anid-category-chevron {\n transform: rotate(180deg);\n }\n .anid-category-content {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s ease;\n }\n .anid-category[data-expanded=\"true\"] .anid-category-content {\n max-height: 2000px;\n }\n\n .anid-feature {\n display: flex;\n align-items: center;\n padding: 10px 20px 10px 48px;\n gap: 12px;\n min-height: 44px;\n }\n [dir=\"rtl\"] .anid-feature {\n padding: 10px 48px 10px 20px;\n }\n .anid-feature-label {\n flex: 1;\n font-size: 14px;\n color: #333;\n }\n\n .anid-toggle {\n position: relative;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n }\n .anid-toggle input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n }\n .anid-toggle-slider {\n position: absolute;\n inset: 0;\n background: #ccc;\n border-radius: 12px;\n cursor: pointer;\n transition: background 0.2s;\n }\n .anid-toggle-slider::before {\n content: '';\n position: absolute;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: #fff;\n top: 2px;\n left: 2px;\n transition: transform 0.2s;\n }\n [dir=\"rtl\"] .anid-toggle-slider::before {\n left: auto;\n right: 2px;\n }\n .anid-toggle input:checked + .anid-toggle-slider {\n background: #1565c0;\n }\n .anid-toggle input:checked + .anid-toggle-slider::before {\n transform: translateX(20px);\n }\n [dir=\"rtl\"] .anid-toggle input:checked + .anid-toggle-slider::before {\n transform: translateX(-20px);\n }\n .anid-toggle input:focus-visible + .anid-toggle-slider {\n outline: 2px solid #ffab00;\n outline-offset: 2px;\n }\n\n .anid-btn-group {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n .anid-btn {\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-radius: 6px;\n background: #f5f5f5;\n color: #333;\n cursor: pointer;\n font-size: 13px;\n min-width: 44px;\n min-height: 32px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition: background 0.15s, border-color 0.15s;\n }\n .anid-btn:hover {\n background: #e0e0e0;\n }\n .anid-btn:focus-visible {\n outline: 2px solid #1565c0;\n outline-offset: 1px;\n }\n .anid-btn.anid-active {\n background: #1565c0;\n color: #fff;\n border-color: #1565c0;\n }\n\n .anid-slider-wrap {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 120px;\n }\n .anid-slider {\n width: 100%;\n height: 4px;\n -webkit-appearance: none;\n appearance: none;\n background: #ddd;\n border-radius: 2px;\n outline: none;\n }\n .anid-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: #1565c0;\n cursor: pointer;\n }\n .anid-slider::-moz-range-thumb {\n width: 18px;\n height: 18px;\n border: none;\n border-radius: 50%;\n background: #1565c0;\n cursor: pointer;\n }\n .anid-slider:focus-visible {\n outline: 2px solid #ffab00;\n outline-offset: 2px;\n }\n\n .anid-panel-footer {\n padding: 12px 20px;\n border-top: 1px solid #eee;\n display: flex;\n justify-content: center;\n flex-shrink: 0;\n }\n .anid-reset-btn {\n padding: 8px 24px;\n border: 2px solid #c62828;\n border-radius: 8px;\n background: transparent;\n color: #c62828;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n min-height: 44px;\n transition: background 0.15s, color 0.15s;\n }\n .anid-reset-btn:hover {\n background: #c62828;\n color: #fff;\n }\n .anid-reset-btn:focus-visible {\n outline: 2px solid #ffab00;\n outline-offset: 2px;\n }\n\n .anid-sub-options {\n padding: 4px 20px 8px 64px;\n }\n [dir=\"rtl\"] .anid-sub-options {\n padding: 4px 64px 8px 20px;\n }\n\n .anid-heading-list, .anid-landmark-list {\n list-style: none;\n padding: 4px 20px 8px 48px;\n max-height: 200px;\n overflow-y: auto;\n }\n [dir=\"rtl\"] .anid-heading-list, [dir=\"rtl\"] .anid-landmark-list {\n padding: 4px 48px 8px 20px;\n }\n .anid-heading-list li, .anid-landmark-list li {\n margin: 2px 0;\n }\n .anid-heading-list button, .anid-landmark-list button {\n background: none;\n border: none;\n color: #1565c0;\n cursor: pointer;\n font-size: 13px;\n padding: 4px 8px;\n border-radius: 4px;\n text-align: inherit;\n width: 100%;\n min-height: 32px;\n transition: background 0.15s;\n }\n .anid-heading-list button:hover, .anid-landmark-list button:hover {\n background: #e3f2fd;\n }\n .anid-heading-list button:focus-visible, .anid-landmark-list button:focus-visible {\n outline: 2px solid #1565c0;\n }\n\n .anid-overlay {\n position: fixed;\n z-index: 2147483645;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(0,0,0,0.85);\n color: #eee;\n overflow-y: auto;\n padding: 40px 20px;\n font-family: monospace;\n font-size: 14px;\n line-height: 1.8;\n white-space: pre-wrap;\n }\n .anid-overlay-close {\n position: fixed;\n top: 16px;\n right: 16px;\n z-index: 2147483646;\n background: #c62828;\n color: #fff;\n border: none;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n font-size: 20px;\n cursor: pointer;\n }\n\n .anid-statement-modal {\n position: fixed;\n z-index: 2147483645;\n top: 50%; left: 50%;\n transform: translate(-50%, -50%);\n width: 600px;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 80px);\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 16px 48px rgba(0,0,0,0.3);\n overflow-y: auto;\n padding: 32px;\n }\n .anid-statement-modal h2 {\n font-size: 22px;\n margin-bottom: 16px;\n color: #1a1a2e;\n }\n .anid-statement-modal p {\n margin-bottom: 12px;\n color: #333;\n line-height: 1.7;\n }\n .anid-statement-backdrop {\n position: fixed;\n z-index: 2147483644;\n inset: 0;\n background: rgba(0,0,0,0.5);\n }\n\n .anid-shortcut {\n display: inline-block;\n font-size: 10px;\n font-family: inherit;\n padding: 1px 5px;\n margin-inline-start: 6px;\n background: #eee;\n color: #666;\n border: 1px solid #ddd;\n border-radius: 3px;\n vertical-align: middle;\n line-height: 1.4;\n }\n\n .anid-live-region {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n }\n\n @media (max-width: 768px) {\n .anid-panel {\n width: 100vw !important;\n max-width: 100vw !important;\n height: 100vh !important;\n max-height: 100vh !important;\n border-radius: 0 !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n }\n }\n `;\n}\n", "const translations = {\n en: {\n dir: 'ltr',\n panelTitle: 'Accessibility',\n close: 'Close',\n resetAll: 'Reset All',\n categoryVision: 'Vision & Display',\n categoryNavigation: 'Navigation & Reading',\n categoryMedia: 'Media & Content',\n categoryCompliance: 'Compliance & Info',\n fontSize: 'Font Size',\n fontSizeIncrease: 'Increase',\n fontSizeDecrease: 'Decrease',\n fontSizeReset: 'Reset',\n highContrast: 'High Contrast',\n contrastDark: 'Dark',\n contrastLight: 'Light',\n contrastInvert: 'Invert',\n darkMode: 'Dark Mode',\n monochrome: 'Grayscale',\n saturation: 'Color Saturation',\n textSpacing: 'Text Spacing',\n dyslexiaFont: 'Dyslexia Font',\n hideImages: 'Hide Images',\n colorBlindSim: 'Color Blind Simulation',\n protanopia: 'Protanopia (Red)',\n deuteranopia: 'Deuteranopia (Green)',\n tritanopia: 'Tritanopia (Blue)',\n keyboardNav: 'Keyboard Navigation',\n focusIndicators: 'Focus Indicators',\n headingStructure: 'Heading Map',\n pageStructure: 'Page Structure',\n readingGuide: 'Reading Guide',\n lineMask: 'Line Focus',\n bigCursor: 'Big Cursor',\n screenReaderPreview: 'Screen Reader Preview',\n linkHighlight: 'Highlight Links',\n imageAltText: 'Image Alt Text',\n stopAnimations: 'Stop Animations',\n muteSounds: 'Mute Sounds',\n accessibilityStatement: 'Accessibility Statement',\n complianceBadge: 'Compliance Badge',\n generateStatement: 'Generate Statement',\n generateBadge: 'Generate Badge',\n language: 'Language',\n on: 'On',\n off: 'Off',\n openPanel: 'Open accessibility menu',\n closePanel: 'Close accessibility menu',\n jumpTo: 'Jump to',\n level: 'Level',\n noHeadings: 'No headings found',\n noLandmarks: 'No landmarks found',\n main: 'Main',\n header: 'Header',\n footer: 'Footer',\n nav: 'Navigation',\n aside: 'Aside',\n form: 'Form',\n search: 'Search',\n statementTitle: 'Accessibility Statement',\n statementIntro: 'We strive to make this website accessible to all users, including people with disabilities, in accordance with WCAG 2.1 Level AA guidelines.',\n statementCoordinator: 'Accessibility Coordinator',\n statementPhone: 'Phone',\n statementEmail: 'Email',\n statementLastAudit: 'Last accessibility audit date',\n statementAccommodations: 'Accessibility accommodations performed',\n copied: 'Copied to clipboard',\n embedCode: 'Embed code',\n copyCode: 'Copy',\n badgeCompliant: 'Compliant',\n poweredBy: 'Powered by',\n contrastAndColors: 'Contrast and color adjustments',\n fontSizeAdjustment: 'Font size adjustment',\n keyboardNavigation: 'Keyboard navigation',\n screenReaderCompat: 'Screen reader compatibility',\n linkHighlighting: 'Link highlighting',\n animationControl: 'Animation control',\n noAltText: '(no alt text)',\n ttsHover: 'Read on Hover',\n ttsSelection: 'Read Selection',\n ttsReadPage: 'Read Page Aloud',\n ttsStop: 'Stop Reading',\n ttsReading: 'Reading...',\n shortcutPanelToggle: 'Toggle accessibility menu',\n keyboardShortcuts: 'Keyboard Shortcuts',\n },\n zh: {\n dir: 'ltr',\n panelTitle: '\u65E0\u969C\u788D',\n close: '\u5173\u95ED',\n resetAll: '\u91CD\u7F6E\u5168\u90E8',\n categoryVision: '\u89C6\u89C9\u4E0E\u663E\u793A',\n categoryNavigation: '\u5BFC\u822A\u4E0E\u9605\u8BFB',\n categoryMedia: '\u5A92\u4F53\u4E0E\u5185\u5BB9',\n categoryCompliance: '\u5408\u89C4\u4E0E\u4FE1\u606F',\n fontSize: '\u5B57\u4F53\u5927\u5C0F',\n fontSizeIncrease: '\u589E\u5927',\n fontSizeDecrease: '\u51CF\u5C0F',\n fontSizeReset: '\u91CD\u7F6E',\n highContrast: '\u9AD8\u5BF9\u6BD4\u5EA6',\n contrastDark: '\u6DF1\u8272',\n contrastLight: '\u6D45\u8272',\n contrastInvert: '\u53CD\u8F6C',\n darkMode: '\u6DF1\u8272\u6A21\u5F0F',\n monochrome: '\u7070\u5EA6',\n saturation: '\u8272\u5F69\u9971\u548C\u5EA6',\n textSpacing: '\u6587\u672C\u95F4\u8DDD',\n dyslexiaFont: '\u9605\u8BFB\u969C\u788D\u5B57\u4F53',\n hideImages: '\u9690\u85CF\u56FE\u7247',\n colorBlindSim: '\u8272\u76F2\u6A21\u62DF',\n protanopia: '\u7EA2\u8272\u76F2',\n deuteranopia: '\u7EFF\u8272\u76F2',\n tritanopia: '\u84DD\u8272\u76F2',\n keyboardNav: '\u952E\u76D8\u5BFC\u822A',\n focusIndicators: '\u7126\u70B9\u6307\u793A\u5668',\n headingStructure: '\u6807\u9898\u5730\u56FE',\n pageStructure: '\u9875\u9762\u7ED3\u6784',\n readingGuide: '\u9605\u8BFB\u5F15\u5BFC\u7EBF',\n lineMask: '\u884C\u805A\u7126',\n bigCursor: '\u5927\u5149\u6807',\n screenReaderPreview: '\u5C4F\u5E55\u9605\u8BFB\u5668\u9884\u89C8',\n linkHighlight: '\u9AD8\u4EAE\u94FE\u63A5',\n imageAltText: '\u56FE\u7247\u66FF\u4EE3\u6587\u672C',\n stopAnimations: '\u505C\u6B62\u52A8\u753B',\n muteSounds: '\u9759\u97F3',\n accessibilityStatement: '\u65E0\u969C\u788D\u58F0\u660E',\n complianceBadge: '\u5408\u89C4\u5FBD\u7AE0',\n generateStatement: '\u751F\u6210\u58F0\u660E',\n generateBadge: '\u751F\u6210\u5FBD\u7AE0',\n language: '\u8BED\u8A00',\n on: '\u5F00\u542F',\n off: '\u5173\u95ED',\n openPanel: '\u6253\u5F00\u65E0\u969C\u788D\u83DC\u5355',\n closePanel: '\u5173\u95ED\u65E0\u969C\u788D\u83DC\u5355',\n jumpTo: '\u8DF3\u8F6C\u5230',\n level: '\u7EA7\u522B',\n noHeadings: '\u672A\u627E\u5230\u6807\u9898',\n noLandmarks: '\u672A\u627E\u5230\u5730\u6807',\n main: '\u4E3B\u8981\u5185\u5BB9',\n header: '\u9875\u7709',\n footer: '\u9875\u811A',\n nav: '\u5BFC\u822A',\n aside: '\u4FA7\u8FB9\u680F',\n form: '\u8868\u5355',\n search: '\u641C\u7D22',\n statementTitle: '\u65E0\u969C\u788D\u58F0\u660E',\n statementIntro: '\u6211\u4EEC\u81F4\u529B\u4E8E\u4F7F\u672C\u7F51\u7AD9\u5BF9\u6240\u6709\u7528\u6237\uFF08\u5305\u62EC\u6B8B\u969C\u4EBA\u58EB\uFF09\u65E0\u969C\u788D\uFF0C\u7B26\u5408WCAG 2.1 AA \u7EA7\u6307\u5357\u3002',\n statementCoordinator: '\u65E0\u969C\u788D\u534F\u8C03\u5458',\n statementPhone: '\u7535\u8BDD',\n statementEmail: '\u7535\u5B50\u90AE\u4EF6',\n statementLastAudit: '\u4E0A\u6B21\u65E0\u969C\u788D\u5BA1\u6838\u65E5\u671F',\n statementAccommodations: '\u5DF2\u6267\u884C\u7684\u65E0\u969C\u788D\u8C03\u6574',\n copied: '\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F',\n embedCode: '\u5D4C\u5165\u4EE3\u7801',\n copyCode: '\u590D\u5236',\n badgeCompliant: '\u5408\u89C4',\n poweredBy: '\u6280\u672F\u652F\u6301',\n contrastAndColors: '\u5BF9\u6BD4\u5EA6\u548C\u989C\u8272\u8C03\u6574',\n fontSizeAdjustment: '\u5B57\u4F53\u5927\u5C0F\u8C03\u6574',\n keyboardNavigation: '\u952E\u76D8\u5BFC\u822A',\n screenReaderCompat: '\u5C4F\u5E55\u9605\u8BFB\u5668\u517C\u5BB9\u6027',\n linkHighlighting: '\u94FE\u63A5\u9AD8\u4EAE',\n animationControl: '\u52A8\u753B\u63A7\u5236',\n noAltText: '(\u65E0\u66FF\u4EE3\u6587\u672C)',\n ttsHover: '\u60AC\u505C\u6717\u8BFB',\n ttsSelection: '\u6717\u8BFB\u9009\u4E2D\u5185\u5BB9',\n ttsReadPage: '\u6717\u8BFB\u9875\u9762',\n ttsStop: '\u505C\u6B62\u6717\u8BFB',\n ttsReading: '\u6B63\u5728\u6717\u8BFB...',\n shortcutPanelToggle: '\u5207\u6362\u65E0\u969C\u788D\u83DC\u5355',\n keyboardShortcuts: '\u952E\u76D8\u5FEB\u6377\u952E',\n },\n};\n\nlet currentLang = 'zh';\n\nexport function resolveLanguage(configLang) {\n if (configLang && configLang !== 'auto' && translations[configLang]) {\n return configLang;\n }\n const htmlLang = document.documentElement.lang?.split('-')[0].toLowerCase();\n if (htmlLang && translations[htmlLang]) {\n return htmlLang;\n }\n return 'zh';\n}\n\nexport function setLanguage(lang) {\n if (translations[lang]) currentLang = lang;\n}\n\nexport function getLanguage() {\n return currentLang;\n}\n\nexport function t(key) {\n return translations[currentLang]?.[key] || translations.en[key] || key;\n}\n\nexport function getDir() {\n return translations[currentLang]?.dir || 'ltr';\n}\n\nexport function getAvailableLanguages() {\n return Object.keys(translations);\n}", "const STORAGE_KEY = 'opennagish_prefs';\n\nlet cache = null;\n\nfunction load() {\n if (cache) return cache;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n cache = raw ? JSON.parse(raw) : {};\n } catch {\n cache = {};\n }\n return cache;\n}\n\nfunction save() {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(cache));\n } catch { /* quota exceeded or private mode */ }\n}\n\nexport function get(key, defaultValue) {\n const prefs = load();\n return prefs[key] !== undefined ? prefs[key] : defaultValue;\n}\n\nexport function set(key, value) {\n load();\n cache[key] = value;\n save();\n}\n\nexport function remove(key) {\n load();\n delete cache[key];\n save();\n}\n\nexport function clearAll() {\n cache = {};\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch { /* ignore */ }\n}\n\nexport function getAll() {\n return { ...load() };\n}\n", "const HTML_ESCAPE_MAP = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' };\n\nexport function escapeHtml(str) {\n if (typeof str !== 'string') return '';\n return str.replace(/[&<>\"']/g, ch => HTML_ESCAPE_MAP[ch]);\n}\n\nexport function createElement(tag, attrs = {}, children = []) {\n const el = document.createElement(tag);\n for (const [key, val] of Object.entries(attrs)) {\n if (key === 'className') el.className = val;\n else if (key === 'textContent') el.textContent = val;\n else if (key === 'innerHTML') el.innerHTML = val;\n else if (key.startsWith('on') && typeof val === 'function') {\n el.addEventListener(key.slice(2).toLowerCase(), val);\n } else {\n el.setAttribute(key, val);\n }\n }\n for (const child of children) {\n if (typeof child === 'string') el.appendChild(document.createTextNode(child));\n else if (child) el.appendChild(child);\n }\n return el;\n}\n\nexport function injectStyleToPage(id, css) {\n let existing = document.getElementById(id);\n if (existing) {\n existing.textContent = css;\n return existing;\n }\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n return style;\n}\n\nexport function removePageStyle(id) {\n const el = document.getElementById(id);\n if (el) el.remove();\n}\n\nexport function announceToScreenReader(message, root) {\n const liveRegion = root.querySelector('.anid-live-region');\n if (liveRegion) {\n liveRegion.textContent = '';\n requestAnimationFrame(() => {\n liveRegion.textContent = message;\n });\n }\n}\n\nexport function querySelectorAllDeep(selector) {\n return Array.from(document.querySelectorAll(selector));\n}\n\nexport function debounce(fn, ms) {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), ms);\n };\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\nimport * as storage from '../storage.js';\n\nconst STYLE_ID = 'anid-font-size';\nconst MIN = -3;\nconst MAX = 5;\nconst STEP_PX = 2;\n\nexport class FontSizeModule {\n constructor(ctx) {\n this.ctx = ctx;\n this.level = 0;\n }\n\n setLevel(level) {\n this.level = Math.max(MIN, Math.min(MAX, level));\n this.apply();\n storage.set('fontSize', this.level);\n }\n\n increase() { this.setLevel(this.level + 1); }\n decrease() { this.setLevel(this.level - 1); }\n reset() { this.setLevel(0); }\n\n apply() {\n if (this.level === 0) {\n removePageStyle(STYLE_ID);\n return;\n }\n const pxChange = this.level * STEP_PX;\n const css = `\n html { font-size: calc(1em + ${pxChange}px) !important; }\n body, body *:not(#opennagish-widget) {\n font-size: inherit !important;\n }\n `;\n injectStyleToPage(STYLE_ID, css);\n }\n\n enable() { this.apply(); }\n disable() {\n this.level = 0;\n removePageStyle(STYLE_ID);\n storage.remove('fontSize');\n }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-contrast';\n\nconst MODES = {\n dark: `\n html { filter: invert(1) hue-rotate(180deg) !important; }\n html img, html video, html canvas, html svg image,\n html [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n `,\n light: `\n html body { background: #fff !important; color: #000 !important; }\n html body *:not(#opennagish-widget) {\n background-color: #fff !important;\n color: #000 !important;\n border-color: #000 !important;\n box-shadow: none !important;\n }\n html body a { color: #0000EE !important; }\n html body img { opacity: 0.9; }\n `,\n invert: `\n html { filter: invert(1) !important; }\n html img, html video, html canvas, html svg image {\n filter: invert(1) !important;\n }\n `,\n};\n\nexport class ContrastModule {\n constructor(ctx) {\n this.ctx = ctx;\n this.mode = 'none';\n }\n\n setMode(mode) {\n this.mode = mode;\n if (mode === 'none' || !MODES[mode]) {\n removePageStyle(STYLE_ID);\n } else {\n injectStyleToPage(STYLE_ID, MODES[mode]);\n }\n }\n\n enable() {}\n disable() {\n this.mode = 'none';\n removePageStyle(STYLE_ID);\n }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-dark-mode';\n\nconst CSS = `\n html body {\n background-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n }\n html body *:not(#opennagish-widget) {\n background-color: transparent !important;\n color: #e0e0e0 !important;\n border-color: #444 !important;\n }\n html body a { color: #90caf9 !important; }\n html body input, html body textarea, html body select {\n background-color: #2d2d44 !important;\n color: #e0e0e0 !important;\n border-color: #555 !important;\n }\n html body button {\n background-color: #2d2d44 !important;\n color: #e0e0e0 !important;\n }\n html body img { opacity: 0.85; }\n`;\n\nexport class DarkModeModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() {\n this.active ? this.disable() : this.enable();\n }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-monochrome';\nconst CSS = `html { filter: grayscale(100%) !important; }`;\n\nexport class MonochromeModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-saturation';\n\nexport class SaturationModule {\n constructor(ctx) { this.ctx = ctx; this.value = 100; }\n\n setValue(val) {\n this.value = val;\n if (val === 100) {\n removePageStyle(STYLE_ID);\n } else {\n injectStyleToPage(STYLE_ID, `html { filter: saturate(${val}%) !important; }`);\n }\n }\n\n enable() { this.apply(); }\n\n apply() {\n if (this.value !== 100) this.setValue(this.value);\n }\n\n disable() {\n this.value = 100;\n removePageStyle(STYLE_ID);\n }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-spacing';\n\nconst CSS = `\n html body *:not(#opennagish-widget) {\n line-height: 1.8 !important;\n letter-spacing: 0.12em !important;\n word-spacing: 0.16em !important;\n }\n html body p, html body li, html body dd {\n margin-bottom: 1em !important;\n }\n`;\n\nexport class SpacingModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-dyslexia-font';\n\nconst CSS = `\n @font-face {\n font-family: 'OpenDyslexic';\n src: url('https://cdn.jsdelivr.net/npm/open-dyslexic@1.0.3/woff/OpenDyslexic-Regular.woff') format('woff');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n }\n @font-face {\n font-family: 'OpenDyslexic';\n src: url('https://cdn.jsdelivr.net/npm/open-dyslexic@1.0.3/woff/OpenDyslexic-Bold.woff') format('woff');\n font-weight: bold;\n font-style: normal;\n font-display: swap;\n }\n html body, html body *:not(#opennagish-widget) {\n font-family: 'OpenDyslexic', sans-serif !important;\n }\n`;\n\nexport class DyslexiaFontModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-hide-images';\n\nconst CSS = `\n html body img,\n html body svg,\n html body video,\n html body [role=\"img\"],\n html body [style*=\"background-image\"] {\n opacity: 0.05 !important;\n visibility: hidden !important;\n }\n`;\n\nexport class HideImagesModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\nimport * as storage from '../storage.js';\n\nconst STYLE_ID = 'anid-color-blind';\nconst SVG_ID = 'anid-color-blind-svg';\n\nconst matrices = {\n protanopia: '0.567,0.433,0,0,0 0.558,0.442,0,0,0 0,0.242,0.758,0,0 0,0,0,1,0',\n deuteranopia: '0.625,0.375,0,0,0 0.7,0.3,0,0,0 0,0.3,0.7,0,0 0,0,0,1,0',\n tritanopia: '0.95,0.05,0,0,0 0,0.433,0.567,0,0 0,0.475,0.525,0,0 0,0,0,1,0',\n};\n\nexport class ColorBlindModule {\n constructor(ctx) { this.ctx = ctx; this.mode = null; }\n\n setMode(mode) {\n this.mode = mode;\n const matrix = matrices[mode];\n if (!matrix) { this.disable(); return; }\n\n let svg = document.getElementById(SVG_ID);\n if (!svg) {\n svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.id = SVG_ID;\n svg.setAttribute('style', 'position:absolute;width:0;height:0;');\n svg.innerHTML = `<defs><filter id=\"anid-cb-filter\"><feColorMatrix type=\"matrix\" values=\"\"/></filter></defs>`;\n document.body.appendChild(svg);\n }\n svg.querySelector('feColorMatrix').setAttribute('values', matrix);\n injectStyleToPage(STYLE_ID, `html { filter: url(#anid-cb-filter) !important; }`);\n storage.set('colorBlindMode', mode);\n }\n\n enable() {\n if (this.mode) this.setMode(this.mode);\n }\n\n disable() {\n this.mode = null;\n removePageStyle(STYLE_ID);\n const svg = document.getElementById(SVG_ID);\n if (svg) svg.remove();\n storage.remove('colorBlindMode');\n }\n\n toggle() { this.mode ? this.disable() : this.setMode('protanopia'); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-keyboard-nav';\n\nconst CSS = `\n html body *:focus {\n outline: 3px solid #1565c0 !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 4px rgba(21,101,192,0.3) !important;\n }\n`;\n\nexport class KeyboardNavModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; this._onTab = null; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n document.body.dataset.anidKeyboardNav = 'true';\n injectStyleToPage(STYLE_ID, CSS);\n this._onTab = (e) => {\n if (e.key === 'Tab') {\n document.body.classList.add('anid-using-keyboard');\n }\n };\n document.addEventListener('keydown', this._onTab);\n }\n\n disable() {\n this.active = false;\n delete document.body.dataset.anidKeyboardNav;\n document.body.classList.remove('anid-using-keyboard');\n removePageStyle(STYLE_ID);\n if (this._onTab) {\n document.removeEventListener('keydown', this._onTab);\n this._onTab = null;\n }\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-focus';\n\nconst CSS = `\n html body a:focus-visible,\n html body button:focus-visible,\n html body input:focus-visible,\n html body select:focus-visible,\n html body textarea:focus-visible,\n html body [tabindex]:focus-visible {\n outline: 4px solid #ff6f00 !important;\n outline-offset: 3px !important;\n box-shadow: 0 0 0 6px rgba(255,111,0,0.3) !important;\n transition: outline 0.1s ease !important;\n }\n`;\n\nexport class FocusModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { t } from '../i18n.js';\n\nexport class HeadingsModule {\n constructor(ctx) { this.ctx = ctx; }\n\n populateList(listEl) {\n listEl.innerHTML = '';\n const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');\n if (headings.length === 0) {\n listEl.innerHTML = `<li style=\"padding:8px;color:#888;font-size:13px;\">${t('noHeadings')}</li>`;\n return;\n }\n headings.forEach((h, i) => {\n const level = h.tagName[1];\n const text = h.textContent.trim().slice(0, 60);\n const li = document.createElement('li');\n const indent = (parseInt(level) - 1) * 12;\n const btn = document.createElement('button');\n btn.style.paddingInlineStart = `${indent}px`;\n btn.textContent = `H${level}: ${text}`;\n btn.addEventListener('click', () => {\n h.scrollIntoView({ behavior: 'smooth', block: 'center' });\n h.focus({ preventScroll: true });\n h.style.outline = '3px solid #1565c0';\n h.style.outlineOffset = '4px';\n setTimeout(() => { h.style.outline = ''; h.style.outlineOffset = ''; }, 2000);\n });\n li.appendChild(btn);\n listEl.appendChild(li);\n });\n }\n\n enable() {}\n disable() {}\n}\n", "import { t } from '../i18n.js';\n\nconst LANDMARK_ROLES = {\n banner: 'header',\n navigation: 'nav',\n main: 'main',\n contentinfo: 'footer',\n complementary: 'aside',\n form: 'form',\n search: 'search',\n};\n\nexport class PageStructureModule {\n constructor(ctx) { this.ctx = ctx; }\n\n populateList(listEl) {\n listEl.innerHTML = '';\n const landmarks = [];\n\n document.querySelectorAll('[role]').forEach(el => {\n const role = el.getAttribute('role');\n if (LANDMARK_ROLES[role]) {\n landmarks.push({ el, label: el.getAttribute('aria-label') || t(LANDMARK_ROLES[role]), role });\n }\n });\n\n ['header', 'nav', 'main', 'footer', 'aside', 'form', 'search'].forEach(tag => {\n document.querySelectorAll(tag).forEach(el => {\n if (!el.getAttribute('role')) {\n landmarks.push({ el, label: el.getAttribute('aria-label') || t(tag), role: tag });\n }\n });\n });\n\n if (landmarks.length === 0) {\n listEl.innerHTML = `<li style=\"padding:8px;color:#888;font-size:13px;\">${t('noLandmarks')}</li>`;\n return;\n }\n\n landmarks.forEach(({ el, label, role }) => {\n const li = document.createElement('li');\n const btn = document.createElement('button');\n btn.textContent = `${role}: ${label}`;\n btn.addEventListener('click', () => {\n el.scrollIntoView({ behavior: 'smooth', block: 'start' });\n el.setAttribute('tabindex', '-1');\n el.focus({ preventScroll: true });\n });\n li.appendChild(btn);\n listEl.appendChild(li);\n });\n }\n\n enable() {}\n disable() {}\n}\n", "export class ReadingGuideModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; this.guide = null; this._onMove = null; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n if (!this.guide) {\n this.guide = document.createElement('div');\n this.guide.id = 'anid-reading-guide';\n this.guide.style.cssText = `\n position: fixed;\n left: 0;\n width: 100%;\n height: 12px;\n background: rgba(21, 101, 192, 0.15);\n border-top: 2px solid rgba(21, 101, 192, 0.5);\n border-bottom: 2px solid rgba(21, 101, 192, 0.5);\n pointer-events: none;\n z-index: 2147483640;\n transition: top 0.05s linear;\n `;\n document.body.appendChild(this.guide);\n }\n this.guide.style.display = '';\n this._onMove = (e) => {\n this.guide.style.top = `${e.clientY - 6}px`;\n };\n document.addEventListener('mousemove', this._onMove);\n }\n\n disable() {\n this.active = false;\n if (this._onMove) {\n document.removeEventListener('mousemove', this._onMove);\n this._onMove = null;\n }\n if (this.guide) {\n this.guide.remove();\n this.guide = null;\n }\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "export class LineMaskModule {\n constructor(ctx) {\n this.ctx = ctx;\n this.active = false;\n this.maskTop = null;\n this.maskBottom = null;\n this._onMove = null;\n }\n\n enable() {\n if (this.active) return;\n this.active = true;\n if (!this.maskTop) {\n this.maskTop = this._createOverlay('top');\n this.maskBottom = this._createOverlay('bottom');\n document.body.appendChild(this.maskTop);\n document.body.appendChild(this.maskBottom);\n }\n this.maskTop.style.display = '';\n this.maskBottom.style.display = '';\n\n this._onMove = (e) => {\n const lineHeight = 80;\n const y = e.clientY;\n this.maskTop.style.height = `${Math.max(0, y - lineHeight / 2)}px`;\n this.maskBottom.style.top = `${y + lineHeight / 2}px`;\n this.maskBottom.style.height = `${Math.max(0, window.innerHeight - y - lineHeight / 2)}px`;\n };\n document.addEventListener('mousemove', this._onMove);\n }\n\n _createOverlay(position) {\n const el = document.createElement('div');\n el.className = `anid-line-mask-${position}`;\n el.style.cssText = `\n position: fixed;\n left: 0;\n width: 100%;\n background: rgba(0, 0, 0, 0.6);\n pointer-events: none;\n z-index: 2147483640;\n transition: height 0.05s linear, top 0.05s linear;\n `;\n if (position === 'top') {\n el.style.top = '0';\n el.style.height = '0';\n } else {\n el.style.bottom = '0';\n el.style.height = '0';\n }\n return el;\n }\n\n disable() {\n this.active = false;\n if (this._onMove) {\n document.removeEventListener('mousemove', this._onMove);\n this._onMove = null;\n }\n if (this.maskTop) { this.maskTop.remove(); this.maskTop = null; }\n if (this.maskBottom) { this.maskBottom.remove(); this.maskBottom = null; }\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-big-cursor';\n\nconst CSS = `\n html body, html body *:not(#opennagish-widget) {\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 48 48'%3E%3Cpath d='M8 4l28 20H20l-1 1 9 17-5 2-9-17-6 6z' fill='%23000' stroke='%23fff' stroke-width='2'/%3E%3C/svg%3E\") 4 4, auto !important;\n }\n html body a, html body a *, html body button, html body button *,\n html body [role=\"button\"], html body input[type=\"submit\"],\n html body input[type=\"button\"], html body label, html body select {\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 48 48'%3E%3Cpath d='M20 4v28h5l-1-1 8-13h8L12 42V4z' fill='%23000' stroke='%23fff' stroke-width='2'/%3E%3C/svg%3E\") 14 4, pointer !important;\n }\n`;\n\nexport class CursorModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { t } from '../i18n.js';\nimport { escapeHtml } from '../utils.js';\n\nexport class ScreenReaderModule {\n constructor(ctx) { this.ctx = ctx; this.overlay = null; this._escHandler = null; }\n\n toggle() {\n this.overlay ? this.close() : this.show();\n }\n\n show() {\n const content = this.extractContent();\n this.overlay = document.createElement('div');\n this.overlay.setAttribute('role', 'dialog');\n this.overlay.setAttribute('aria-modal', 'true');\n this.overlay.setAttribute('aria-label', t('screenReaderPreview'));\n this.overlay.style.cssText = `\n position: fixed;\n z-index: 2147483645;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(0,0,0,0.92);\n color: #e0e0e0;\n overflow-y: auto;\n padding: 60px 40px 40px;\n font-family: 'Courier New', monospace;\n font-size: 15px;\n line-height: 2;\n white-space: pre-wrap;\n `;\n this.overlay.textContent = content;\n\n const closeBtn = document.createElement('button');\n closeBtn.textContent = `\\u2715 ${t('close')}`;\n closeBtn.setAttribute('aria-label', t('close'));\n closeBtn.style.cssText = `\n position: fixed;\n top: 12px; inset-inline-end: 12px;\n z-index: 2147483646;\n background: #c62828;\n color: #fff;\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 16px;\n cursor: pointer;\n min-width: 44px;\n min-height: 44px;\n `;\n closeBtn.addEventListener('click', () => this.close());\n\n this.overlay.appendChild(closeBtn);\n document.body.appendChild(this.overlay);\n closeBtn.focus();\n\n this._escHandler = (e) => { if (e.key === 'Escape') this.close(); };\n document.addEventListener('keydown', this._escHandler);\n }\n\n close() {\n if (this.overlay) {\n this.overlay.remove();\n this.overlay = null;\n }\n if (this._escHandler) {\n document.removeEventListener('keydown', this._escHandler);\n this._escHandler = null;\n }\n }\n\n extractContent() {\n const lines = [];\n const title = document.title;\n if (title) lines.push(`[Page Title] ${title}\\n`);\n\n const lang = document.documentElement.lang;\n if (lang) lines.push(`[Language] ${lang}\\n`);\n\n const walk = (node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent.trim();\n if (text) lines.push(text);\n return;\n }\n if (node.nodeType !== Node.ELEMENT_NODE) return;\n\n const tag = node.tagName.toLowerCase();\n const role = node.getAttribute('role');\n\n if (['script', 'style', 'noscript', 'template'].includes(tag)) return;\n if (node.hidden || node.getAttribute('aria-hidden') === 'true') return;\n if (node.id === 'opennagish-widget') return;\n\n if (/^h[1-6]$/.test(tag)) {\n lines.push(`\\n[${'#'.repeat(parseInt(tag[1]))} Heading ${tag[1]}] ${node.textContent.trim()}`);\n return;\n }\n if (tag === 'img') {\n const alt = node.alt || t('noAltText');\n lines.push(`[Image: ${alt}]`);\n return;\n }\n if (tag === 'a' && node.href) {\n lines.push(`[Link: ${node.textContent.trim()} -> ${node.href}]`);\n return;\n }\n if (['nav', 'header', 'footer', 'main', 'aside'].includes(tag) || role) {\n const ariaLabel = node.getAttribute('aria-label');\n lines.push(`\\n--- [${role || tag}${ariaLabel ? ': ' + ariaLabel : ''}] ---`);\n }\n if (tag === 'li') lines.push(' \\u2022 ');\n\n for (const child of node.childNodes) {\n walk(child);\n }\n };\n\n walk(document.body);\n return lines.join('\\n');\n }\n\n enable() {}\n disable() { this.close(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-links';\n\nconst CSS = `\n html body a {\n text-decoration: underline !important;\n text-decoration-thickness: 2px !important;\n text-underline-offset: 3px !important;\n outline: 2px solid transparent !important;\n border-bottom: 2px solid #1565c0 !important;\n background-color: rgba(21, 101, 192, 0.08) !important;\n padding: 1px 3px !important;\n border-radius: 2px !important;\n }\n html body a:hover {\n background-color: rgba(21, 101, 192, 0.18) !important;\n }\n`;\n\nexport class LinksModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { t } from '../i18n.js';\n\nconst ATTR = 'data-anid-alt-shown';\n\nexport class ImagesModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; this.overlays = []; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n document.querySelectorAll('img').forEach(img => {\n if (img.getAttribute(ATTR)) return;\n const alt = img.alt || img.getAttribute('aria-label') || '';\n const label = alt || `\\u26A0 ${t('noAltText')}`;\n const overlay = document.createElement('span');\n overlay.className = 'anid-alt-overlay';\n overlay.style.cssText = `\n position: absolute;\n bottom: 4px;\n left: 4px;\n right: 4px;\n background: ${alt ? 'rgba(21,101,192,0.9)' : 'rgba(198,40,40,0.9)'};\n color: #fff;\n font-size: 12px;\n padding: 4px 8px;\n border-radius: 4px;\n z-index: 2147483630;\n pointer-events: none;\n word-break: break-word;\n max-height: 60px;\n overflow: hidden;\n font-family: sans-serif;\n line-height: 1.4;\n `;\n overlay.textContent = label;\n\n const wrapper = img.parentElement;\n if (wrapper) {\n const pos = getComputedStyle(wrapper).position;\n if (pos === 'static') wrapper.style.position = 'relative';\n wrapper.appendChild(overlay);\n img.setAttribute(ATTR, 'true');\n this.overlays.push({ overlay, img, wrapper, hadPosition: pos });\n }\n });\n }\n\n disable() {\n this.active = false;\n this.overlays.forEach(({ overlay, img, wrapper, hadPosition }) => {\n overlay.remove();\n img.removeAttribute(ATTR);\n if (hadPosition === 'static') wrapper.style.position = '';\n });\n this.overlays = [];\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { injectStyleToPage, removePageStyle } from '../utils.js';\n\nconst STYLE_ID = 'anid-animations';\nconst ORIG_SRC_ATTR = 'data-anid-orig-src';\n\nconst CSS = `\n html body *:not(#opennagish-widget),\n html body *:not(#opennagish-widget)::before,\n html body *:not(#opennagish-widget)::after {\n animation-duration: 0.001ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.001ms !important;\n scroll-behavior: auto !important;\n }\n`;\n\nexport class AnimationsModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n injectStyleToPage(STYLE_ID, CSS);\n\n document.querySelectorAll('img[src$=\".gif\"], img[src*=\".gif?\"]').forEach(img => {\n if (img.getAttribute(ORIG_SRC_ATTR)) return;\n try {\n const canvas = document.createElement('canvas');\n canvas.width = img.naturalWidth || img.width || 100;\n canvas.height = img.naturalHeight || img.height || 100;\n const ctx2d = canvas.getContext('2d');\n ctx2d.drawImage(img, 0, 0, canvas.width, canvas.height);\n img.setAttribute(ORIG_SRC_ATTR, img.src);\n img.src = canvas.toDataURL();\n } catch (_) { /* cross-origin images cannot be captured */ }\n });\n }\n\n disable() {\n this.active = false;\n removePageStyle(STYLE_ID);\n\n document.querySelectorAll(`[${ORIG_SRC_ATTR}]`).forEach(img => {\n img.src = img.getAttribute(ORIG_SRC_ATTR);\n img.removeAttribute(ORIG_SRC_ATTR);\n });\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "const ORIG_SRC_ATTR = 'data-anid-orig-src';\n\nexport class MuteSoundsModule {\n constructor(ctx) { this.ctx = ctx; this.active = false; this.mutedElements = []; }\n\n enable() {\n if (this.active) return;\n this.active = true;\n document.querySelectorAll('audio, video').forEach(el => {\n if (!el.muted) {\n el.muted = true;\n el.pause();\n this.mutedElements.push(el);\n }\n });\n\n document.querySelectorAll('iframe').forEach(iframe => {\n try {\n const src = iframe.src || '';\n if (!src || iframe.getAttribute(ORIG_SRC_ATTR)) return;\n if (src.includes('youtube') || src.includes('vimeo') || src.includes('dailymotion')) {\n if (!src.includes('mute=1') && !src.includes('muted=1')) {\n iframe.setAttribute(ORIG_SRC_ATTR, src);\n const separator = src.includes('?') ? '&' : '?';\n iframe.src = src + separator + 'mute=1';\n }\n }\n } catch (_) { /* cross-origin */ }\n });\n }\n\n disable() {\n this.active = false;\n this.mutedElements.forEach(el => {\n el.muted = false;\n });\n this.mutedElements = [];\n\n document.querySelectorAll(`iframe[${ORIG_SRC_ATTR}]`).forEach(iframe => {\n iframe.src = iframe.getAttribute(ORIG_SRC_ATTR);\n iframe.removeAttribute(ORIG_SRC_ATTR);\n });\n }\n\n toggle() { this.active ? this.disable() : this.enable(); }\n}\n", "import { t, getLanguage } from '../i18n.js';\nimport { escapeHtml } from '../utils.js';\n\nexport class StatementModule {\n constructor(ctx) { this.ctx = ctx; this.modal = null; this.backdrop = null; this._escHandler = null; }\n\n show() {\n const config = this.ctx.config;\n if (config.statementUrl) {\n window.open(config.statementUrl, '_blank', 'noopener,noreferrer');\n return;\n }\n\n this.close();\n const data = config.statementData || {};\n\n this.backdrop = document.createElement('div');\n this.backdrop.style.cssText = 'position:fixed;z-index:2147483644;inset:0;background:rgba(0,0,0,0.5);';\n this.backdrop.addEventListener('click', () => this.close());\n\n this.modal = document.createElement('div');\n const dir = getLanguage() === 'he' || getLanguage() === 'ar' ? 'rtl' : 'ltr';\n this.modal.setAttribute('dir', dir);\n this.modal.setAttribute('role', 'dialog');\n this.modal.setAttribute('aria-modal', 'true');\n this.modal.setAttribute('aria-label', t('statementTitle'));\n this.modal.style.cssText = `\n position: fixed; z-index: 2147483645;\n top: 50%; left: 50%; transform: translate(-50%, -50%);\n width: 600px; max-width: calc(100vw - 40px); max-height: calc(100vh - 80px);\n background: #fff; border-radius: 12px;\n box-shadow: 0 16px 48px rgba(0,0,0,0.3);\n overflow-y: auto; padding: 32px;\n font-family: sans-serif; color: #1a1a2e; line-height: 1.7;\n `;\n\n const accommodations = data.accommodations || [\n t('contrastAndColors'),\n t('fontSizeAdjustment'),\n t('keyboardNavigation'),\n t('screenReaderCompat'),\n t('linkHighlighting'),\n t('animationControl'),\n ];\n\n const accList = accommodations.map(a => `<li>${escapeHtml(a)}</li>`).join('');\n\n const coordHtml = data.coordinatorName\n ? `<p><strong>${escapeHtml(t('statementCoordinator'))}:</strong> ${escapeHtml(data.coordinatorName)}</p>` : '';\n const phoneHtml = data.orgPhone\n ? `<p><strong>${escapeHtml(t('statementPhone'))}:</strong> <a href=\"tel:${escapeHtml(data.orgPhone)}\">${escapeHtml(data.orgPhone)}</a></p>` : '';\n const emailHtml = data.orgEmail\n ? `<p><strong>${escapeHtml(t('statementEmail'))}:</strong> <a href=\"mailto:${escapeHtml(data.orgEmail)}\">${escapeHtml(data.orgEmail)}</a></p>` : '';\n const auditHtml = data.lastAuditDate\n ? `<p><strong>${escapeHtml(t('statementLastAudit'))}:</strong> ${escapeHtml(data.lastAuditDate)}</p>` : '';\n\n this.modal.innerHTML = `\n <div style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;\">\n <h2 style=\"font-size:22px;margin:0;\">${escapeHtml(t('statementTitle'))}</h2>\n <button id=\"anid-stmt-close\" style=\"background:none;border:none;font-size:24px;cursor:pointer;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;\" aria-label=\"${escapeHtml(t('close'))}\">&#x2715;</button>\n </div>\n <p>${escapeHtml(t('statementIntro'))}</p>\n ${coordHtml}\n ${phoneHtml}\n ${emailHtml}\n ${auditHtml}\n <p><strong>${escapeHtml(t('statementAccommodations'))}:</strong></p>\n <ul style=\"padding-inline-start:20px;margin-bottom:16px;\">${accList}</ul>\n <p style=\"font-size:12px;color:#888;\">${escapeHtml(t('poweredBy'))} <a href=\"https://gitee.com/WilliamHao/npm-c-a11y\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color:#888;text-decoration:underline;\">A11y</a> | WCAG 2.1 AA</p>\n `;\n\n document.body.appendChild(this.backdrop);\n document.body.appendChild(this.modal);\n this.modal.querySelector('#anid-stmt-close').addEventListener('click', () => this.close());\n this.modal.querySelector('#anid-stmt-close').focus();\n\n this._escHandler = (e) => { if (e.key === 'Escape') this.close(); };\n document.addEventListener('keydown', this._escHandler);\n }\n\n close() {\n if (this.modal) { this.modal.remove(); this.modal = null; }\n if (this.backdrop) { this.backdrop.remove(); this.backdrop = null; }\n if (this._escHandler) {\n document.removeEventListener('keydown', this._escHandler);\n this._escHandler = null;\n }\n }\n\n enable() {}\n disable() { this.close(); }\n}\n", "import { t, getLanguage } from '../i18n.js';\nimport { escapeHtml } from '../utils.js';\n\nexport class BadgeModule {\n constructor(ctx) { this.ctx = ctx; this.modal = null; this.backdrop = null; this._escHandler = null; }\n\n _buildSvg() {\n const label = `WCAG 2.1 AA`;\n const sub = `A11y ${t('badgeCompliant')}`;\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"240\" height=\"40\" viewBox=\"0 0 240 40\">\n <defs>\n <linearGradient id=\"abg\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#1976d2\"/>\n <stop offset=\"100%\" stop-color=\"#0d47a1\"/>\n </linearGradient>\n </defs>\n <rect width=\"240\" height=\"40\" rx=\"8\" fill=\"url(#abg)\"/>\n <rect x=\"1\" y=\"1\" width=\"238\" height=\"38\" rx=\"7\" fill=\"none\" stroke=\"#fff\" stroke-opacity=\"0.25\"/>\n <circle cx=\"20\" cy=\"20\" r=\"12\" fill=\"#fff\" fill-opacity=\"0.2\"/>\n <text x=\"20\" y=\"25\" text-anchor=\"middle\" fill=\"#fff\" font-size=\"16\" font-family=\"sans-serif\">&#x267F;</text>\n <text x=\"40\" y=\"16\" fill=\"#fff\" font-size=\"11\" font-family=\"sans-serif\" font-weight=\"bold\">${escapeHtml(label)}</text>\n <text x=\"40\" y=\"31\" fill=\"#fff\" font-size=\"10\" font-family=\"sans-serif\" opacity=\"0.85\">${escapeHtml(sub)}</text>\n</svg>`;\n }\n\n show() {\n this.close();\n\n const badgeSvg = this._buildSvg();\n const embedCode = `<a href=\"#\" title=\"Accessibility\"><img src=\"data:image/svg+xml,${encodeURIComponent(badgeSvg.trim())}\" alt=\"WCAG 2.1 AA Accessible\" width=\"240\" height=\"40\"></a>`;\n\n const dir = getLanguage() === 'he' || getLanguage() === 'ar' ? 'rtl' : 'ltr';\n\n this.backdrop = document.createElement('div');\n this.backdrop.style.cssText = 'position:fixed;z-index:2147483644;inset:0;background:rgba(0,0,0,0.5);';\n this.backdrop.addEventListener('click', () => this.close());\n\n this.modal = document.createElement('div');\n this.modal.setAttribute('role', 'dialog');\n this.modal.setAttribute('aria-modal', 'true');\n this.modal.setAttribute('dir', dir);\n this.modal.setAttribute('aria-label', t('complianceBadge'));\n this.modal.style.cssText = `\n position:fixed;z-index:2147483645;\n top:50%;left:50%;transform:translate(-50%,-50%);\n width:520px;max-width:calc(100vw - 40px);\n background:#fff;border-radius:12px;\n box-shadow:0 16px 48px rgba(0,0,0,0.3);\n padding:32px;font-family:sans-serif;color:#1a1a2e;\n `;\n\n this.modal.innerHTML = `\n <div style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;\">\n <h2 style=\"font-size:20px;margin:0;\">${escapeHtml(t('complianceBadge'))}</h2>\n <button id=\"anid-badge-close\" style=\"background:none;border:none;font-size:24px;cursor:pointer;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;\" aria-label=\"${escapeHtml(t('close'))}\">&#x2715;</button>\n </div>\n <div style=\"text-align:center;padding:24px;background:#f5f5f5;border-radius:8px;margin-bottom:20px;\">${badgeSvg}</div>\n <label style=\"display:block;font-size:13px;color:#666;margin-bottom:6px;font-weight:600;\">${escapeHtml(t('embedCode'))}</label>\n <textarea readonly style=\"width:100%;height:80px;padding:10px;border:1px solid #ddd;border-radius:8px;font-size:12px;font-family:monospace;resize:none;background:#fafafa;direction:ltr;text-align:left;\">${escapeHtml(embedCode)}</textarea>\n <button id=\"anid-badge-copy\" style=\"display:block;margin-top:14px;padding:10px 24px;background:#1565c0;color:#fff;border:none;border-radius:8px;cursor:pointer;font-size:14px;min-height:44px;font-weight:600;margin-inline-start:auto;\">${escapeHtml(t('copyCode'))}</button>\n `;\n\n document.body.appendChild(this.backdrop);\n document.body.appendChild(this.modal);\n\n const copyBtn = this.modal.querySelector('#anid-badge-copy');\n this.modal.querySelector('#anid-badge-close').addEventListener('click', () => this.close());\n copyBtn.addEventListener('click', () => {\n this._copyToClipboard(embedCode).then(() => {\n copyBtn.textContent = t('copied');\n copyBtn.style.background = '#2e7d32';\n setTimeout(() => {\n copyBtn.textContent = t('copyCode');\n copyBtn.style.background = '#1565c0';\n }, 2000);\n this.ctx.announce(t('copied'));\n }).catch(() => {});\n });\n\n this._escHandler = (e) => { if (e.key === 'Escape') this.close(); };\n document.addEventListener('keydown', this._escHandler);\n\n this.modal.querySelector('#anid-badge-close').focus();\n }\n\n _copyToClipboard(text) {\n if (navigator.clipboard?.writeText) {\n return navigator.clipboard.writeText(text);\n }\n return new Promise((resolve, reject) => {\n try {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;left:-9999px;top:-9999px;opacity:0;';\n document.body.appendChild(ta);\n ta.select();\n const ok = document.execCommand('copy');\n ta.remove();\n ok ? resolve() : reject(new Error('execCommand failed'));\n } catch (e) { reject(e); }\n });\n }\n\n close() {\n if (this.modal) { this.modal.remove(); this.modal = null; }\n if (this.backdrop) { this.backdrop.remove(); this.backdrop = null; }\n if (this._escHandler) {\n document.removeEventListener('keydown', this._escHandler);\n this._escHandler = null;\n }\n }\n\n enable() {}\n disable() { this.close(); }\n}\n", "import { t, getLanguage } from '../i18n.js';\n\nconst LANG_MAP = { he: 'he-IL', en: 'en-US', ar: 'ar-SA', ru: 'ru-RU' };\nconst HL_ATTR = 'data-anid-tts-hl';\n\nexport class TTSModule {\n constructor(ctx) {\n this.ctx = ctx;\n this.hoverActive = false;\n this.selectionActive = false;\n this.reading = false;\n this._onMouseOver = this._onMouseOver.bind(this);\n this._onMouseUp = this._onMouseUp.bind(this);\n this._highlighted = null;\n this._savedStyles = null;\n this._hoverDebounce = null;\n this._warmUpVoices();\n }\n\n _warmUpVoices() {\n if (!this.supported) return;\n if (this.synth.getVoices().length) return;\n this.synth.addEventListener('voiceschanged', () => {}, { once: true });\n }\n\n _unlockAudio() {\n if (this._audioUnlocked) return;\n try {\n const ctx = new (window.AudioContext || window.webkitAudioContext)();\n const buf = ctx.createBuffer(1, 1, 22050);\n const src = ctx.createBufferSource();\n src.buffer = buf;\n src.connect(ctx.destination);\n src.start();\n ctx.resume().then(() => ctx.close());\n this._audioUnlocked = true;\n } catch (_) {}\n }\n\n get synth() {\n return window.speechSynthesis;\n }\n\n get supported() {\n return 'speechSynthesis' in window;\n }\n\n _getLang() {\n const pageLang = document.documentElement.lang;\n const raw = pageLang || getLanguage() || 'en';\n return LANG_MAP[raw] || raw;\n }\n\n _findVoice(lang) {\n const voices = this.synth.getVoices();\n if (!voices.length) return null;\n const prefix = lang.split('-')[0].toLowerCase();\n return voices.find(v => v.lang.toLowerCase().startsWith(prefix))\n || voices.find(v => v.default)\n || voices[0];\n }\n\n _speak(text) {\n if (!this.supported || !text.trim()) return;\n this._unlockAudio();\n this._clearResumeTimer();\n\n const fire = () => {\n const utter = new SpeechSynthesisUtterance(text);\n const lang = this._getLang();\n const voice = this._findVoice(lang);\n if (voice) {\n utter.voice = voice;\n utter.lang = voice.lang;\n } else {\n utter.lang = lang;\n }\n utter.rate = 1;\n utter.pitch = 1;\n utter.onend = () => { this.reading = false; this._clearResumeTimer(); };\n utter.onerror = () => { this.reading = false; this._clearResumeTimer(); };\n this.reading = true;\n this.synth.speak(utter);\n this._startResumeTimer();\n };\n\n if (this.synth.speaking || this.synth.pending) {\n this.synth.cancel();\n setTimeout(fire, 80);\n } else {\n fire();\n }\n }\n\n _startResumeTimer() {\n this._resumeTimer = setInterval(() => {\n if (this.synth.speaking && !this.synth.paused) {\n this.synth.pause();\n this.synth.resume();\n }\n }, 10000);\n }\n\n _clearResumeTimer() {\n if (this._resumeTimer) {\n clearInterval(this._resumeTimer);\n this._resumeTimer = null;\n }\n }\n\n stop() {\n if (!this.supported) return;\n this.synth.cancel();\n this.reading = false;\n this._clearResumeTimer();\n this._clearHighlight();\n }\n\n enableHover() {\n if (this.hoverActive) return;\n this.hoverActive = true;\n document.addEventListener('mouseover', this._onMouseOver, true);\n }\n\n disableHover() {\n this.hoverActive = false;\n document.removeEventListener('mouseover', this._onMouseOver, true);\n this._clearHighlight();\n clearTimeout(this._hoverDebounce);\n if (!this.selectionActive && !this.reading) this.stop();\n }\n\n _onMouseOver(e) {\n const el = e.target;\n if (!el || el.nodeType !== 1) return;\n if (el.closest('#opennagish-widget')) return;\n\n clearTimeout(this._hoverDebounce);\n this._hoverDebounce = setTimeout(() => {\n const text = this._getElementText(el);\n if (!text) return;\n this._clearHighlight();\n this._savedStyles = {\n outline: el.style.outline,\n outlineOffset: el.style.outlineOffset,\n background: el.style.background,\n };\n el.setAttribute(HL_ATTR, '');\n el.style.outline = '3px solid #1565c0';\n el.style.outlineOffset = '2px';\n el.style.background = 'rgba(21,101,192,0.08)';\n this._highlighted = el;\n this._speak(text);\n }, 300);\n }\n\n _getElementText(el) {\n if (el.tagName === 'IMG') return el.alt || '';\n if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') return el.value || el.placeholder || '';\n const text = el.innerText || el.textContent || '';\n return text.trim().substring(0, 500);\n }\n\n _clearHighlight() {\n if (this._highlighted) {\n this._highlighted.removeAttribute(HL_ATTR);\n if (this._savedStyles) {\n this._highlighted.style.outline = this._savedStyles.outline;\n this._highlighted.style.outlineOffset = this._savedStyles.outlineOffset;\n this._highlighted.style.background = this._savedStyles.background;\n }\n this._highlighted = null;\n this._savedStyles = null;\n }\n }\n\n enableSelection() {\n if (this.selectionActive) return;\n this.selectionActive = true;\n document.addEventListener('mouseup', this._onMouseUp, true);\n }\n\n disableSelection() {\n this.selectionActive = false;\n document.removeEventListener('mouseup', this._onMouseUp, true);\n if (!this.hoverActive && !this.reading) this.stop();\n }\n\n _onMouseUp() {\n const sel = window.getSelection();\n const text = sel ? sel.toString().trim() : '';\n if (text.length > 0) {\n this._speak(text);\n }\n }\n\n readPage() {\n const content = this._extractPageText();\n if (content) {\n this.ctx.announce(t('ttsReading'));\n this._speak(content);\n }\n }\n\n _extractPageText() {\n const lines = [];\n const walk = (node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent.trim();\n if (text) lines.push(text);\n return;\n }\n if (node.nodeType !== Node.ELEMENT_NODE) return;\n const tag = node.tagName.toLowerCase();\n if (['script', 'style', 'noscript', 'template'].includes(tag)) return;\n if (node.hidden || node.getAttribute('aria-hidden') === 'true') return;\n if (node.id === 'opennagish-widget') return;\n for (const child of node.childNodes) walk(child);\n };\n walk(document.body);\n return lines.join(' ').substring(0, 5000);\n }\n\n enable() {}\n disable() {\n this.disableHover();\n this.disableSelection();\n this.stop();\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;;;ACEO,WAAS,kBAAkB;AAChC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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",
6
+ "names": ["STYLE_ID", "STYLE_ID", "STYLE_ID", "CSS", "STYLE_ID", "STYLE_ID", "CSS", "STYLE_ID", "CSS", "STYLE_ID", "CSS", "STYLE_ID", "STYLE_ID", "CSS", "STYLE_ID", "CSS", "STYLE_ID", "CSS", "STYLE_ID", "CSS", "STYLE_ID", "CSS", "ORIG_SRC_ATTR"]
7
+ }
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@william-xu-web/c-a11y",
3
+ "version": "1.0.0",
4
+ "description": "Comprehensive open-source web accessibility overlay widget for WCAG 2.1 AA compliance",
5
+ "main": "dist/c-a11y.min.js",
6
+ "module": "dist/c-a11y.esm.js",
7
+ "files": [
8
+ "dist/",
9
+ "LICENSE",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "node build.js",
14
+ "dev": "node build.js --dev",
15
+ "test": "vitest run",
16
+ "test:watch": "vitest",
17
+ "lint": "eslint src/"
18
+ },
19
+ "keywords": [
20
+ "accessibility",
21
+ "a11y",
22
+ "wcag",
23
+ "wcag2.1",
24
+ "screen-reader",
25
+ "disability",
26
+ "inclusive"
27
+ ],
28
+ "author": "William",
29
+ "license": "MIT",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git@gitee.com:WilliamHao/npm-c-a11y.git"
33
+ },
34
+ "homepage": "https://gitee.com/WilliamHao/npm-c-a11y#readme",
35
+ "bugs": {
36
+ "url": "https://gitee.com/WilliamHao/npm-c-a11y/issues"
37
+ },
38
+ "devDependencies": {
39
+ "esbuild": "^0.27.3"
40
+ }
41
+ }