ieee-atiig-accessibility-menu 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +23 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +23 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -340,13 +340,22 @@ var styles = `
|
|
|
340
340
|
}
|
|
341
341
|
|
|
342
342
|
.a11y-menu-button {
|
|
343
|
-
position: fixed;
|
|
343
|
+
position: fixed;
|
|
344
|
+
z-index: var(--a11y-z, 60);
|
|
345
|
+
display: flex; align-items: center; justify-content: center;
|
|
344
346
|
width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;
|
|
345
|
-
color: #fff;
|
|
347
|
+
color: #fff;
|
|
348
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
|
|
349
|
+
background: linear-gradient(135deg, var(--a11y-gradient-from, #023A74), var(--a11y-gradient-to, #01A0A0));
|
|
350
|
+
box-shadow: 0 4px 30px rgba(2, 58, 116, 0.28);
|
|
346
351
|
}
|
|
347
352
|
.a11y-menu-button:hover { transform: scale(1.1); }
|
|
348
353
|
.a11y-menu-button:active { transform: scale(0.95); }
|
|
349
|
-
.a11y-menu-button[data-open="true"] {
|
|
354
|
+
.a11y-menu-button[data-open="true"] {
|
|
355
|
+
transform: rotate(180deg);
|
|
356
|
+
background: var(--a11y-primary, #0D6EAD);
|
|
357
|
+
box-shadow: 0 10px 20px rgba(2, 58, 116, 0.3);
|
|
358
|
+
}
|
|
350
359
|
.a11y-menu-button-icon { width: 24px; height: 24px; }
|
|
351
360
|
|
|
352
361
|
.a11y-menu-overlay {
|
|
@@ -513,19 +522,24 @@ function AccessibilityMenu({
|
|
|
513
522
|
ssr = false
|
|
514
523
|
}) {
|
|
515
524
|
if (typeof window === "undefined") {
|
|
525
|
+
const ssrTheme = { ...DEFAULT_THEME, ...themeProp };
|
|
526
|
+
const ssrZIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp };
|
|
516
527
|
const isRight2 = position === "bottom-right";
|
|
517
528
|
const offset = typeof positionOffset === "number" ? positionOffset : positionOffset.y;
|
|
518
529
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
519
530
|
"button",
|
|
520
531
|
{
|
|
521
|
-
suppressHydrationWarning: true,
|
|
522
532
|
className: `a11y-menu-button ${buttonClassName}`,
|
|
523
533
|
"data-open": false,
|
|
524
534
|
"data-right": isRight2,
|
|
525
535
|
style: {
|
|
526
536
|
bottom: `${20 + offset}px`,
|
|
527
537
|
left: isRight2 ? void 0 : `${20 + offset}px`,
|
|
528
|
-
right: isRight2 ? `${20 + offset}px` : void 0
|
|
538
|
+
right: isRight2 ? `${20 + offset}px` : void 0,
|
|
539
|
+
"--a11y-z": `${ssrZIndex.button}`,
|
|
540
|
+
"--a11y-gradient-from": ssrTheme.gradientFrom,
|
|
541
|
+
"--a11y-gradient-to": ssrTheme.gradientTo,
|
|
542
|
+
"--a11y-primary": ssrTheme.primary
|
|
529
543
|
},
|
|
530
544
|
"aria-label": labelsProp?.menuButton || "Accessibility Menu",
|
|
531
545
|
type: "button",
|
|
@@ -578,9 +592,10 @@ function AccessibilityMenu({
|
|
|
578
592
|
bottom: `${20 + offsetNum}px`,
|
|
579
593
|
left: isRight ? void 0 : `${20 + offsetNum}px`,
|
|
580
594
|
right: isRight ? `${20 + offsetNum}px` : void 0,
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
595
|
+
"--a11y-z": `${zIndex.button}`,
|
|
596
|
+
"--a11y-gradient-from": theme.gradientFrom,
|
|
597
|
+
"--a11y-gradient-to": theme.gradientTo,
|
|
598
|
+
"--a11y-primary": theme.primary
|
|
584
599
|
},
|
|
585
600
|
"aria-label": labels.menuButton,
|
|
586
601
|
type: "button",
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-is-mobile.ts","../src/use-mouse-position.ts","../src/types.ts","../src/use-settings.ts","../src/use-inject-styles.ts","../src/reading-aid.tsx","../src/accessibility-toggle.tsx","../src/styles.ts","../src/accessibility-menu.tsx"],"names":["useState","useEffect","useCallback","styles","jsxs","Fragment","jsx","isRight"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useState, useEffect } from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\n/**\n * Detects if the viewport is mobile-sized.\n * The original component imported this from a project-specific `@/hooks/use-mobile` module.\n * This implementation uses a basic window width check compatible with SSR.\n */\nexport function useIsMobile(breakpoint: number = MOBILE_BREAKPOINT): boolean {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < breakpoint)\n check()\n window.addEventListener(\"resize\", check)\n return () => window.removeEventListener(\"resize\", check)\n }, [breakpoint])\n\n return isMobile\n}\n","import { useState, useEffect } from \"react\"\n\n/**\n * Tracks the vertical mouse/touch position for the reading aid overlay.\n * Falls back to a safe default during SSR.\n */\nexport function useMousePosition(isMobile: boolean): { y: number } {\n const [mousePos, setMousePos] = useState({ y: 300 })\n\n useEffect(() => {\n if (isMobile) {\n const handleTouch = (e: TouchEvent) => {\n if (e.touches.length > 0) setMousePos({ y: e.touches[0].clientY })\n }\n window.addEventListener(\"touchmove\", handleTouch, { passive: true })\n return () => window.removeEventListener(\"touchmove\", handleTouch)\n }\n\n const handleMouseMove = (e: MouseEvent) => setMousePos({ y: e.clientY })\n window.addEventListener(\"mousemove\", handleMouseMove)\n return () => window.removeEventListener(\"mousemove\", handleMouseMove)\n }, [isMobile])\n\n return mousePos\n}\n","import type { ReactNode } from \"react\"\n\nexport type FontSizeStep = 0 | 10 | 20 | 30\n\nexport type LineHeightStep = 0 | 15 | 20 | 25\n\nexport type TextAlignOption = \"off\" | \"left\" | \"center\" | \"right\" | \"justify\"\n\nexport interface AccessibilitySettings {\n fontSize: FontSizeStep\n lineHeight: LineHeightStep\n textAlign: TextAlignOption\n dyslexicFont: boolean\n grayscale: boolean\n stopAnimations: boolean\n bigCursor: boolean\n readingAid: boolean\n readingAidSize: number\n}\n\nexport type MenuPosition = \"bottom-left\" | \"bottom-right\"\n\nexport interface PositionOffset {\n x: number\n y: number\n}\n\nexport interface ThemeColors {\n primary: string\n primaryHover: string\n accent: string\n accentOverlay: string\n border: string\n background: string\n text: string\n textMuted: string\n activeBg: string\n activeBorder: string\n gradientFrom: string\n gradientTo: string\n}\n\nexport interface SectionLabels {\n fontSize: string\n lineHeight: string\n alignment: string\n readingAid: string\n desaturate: string\n dyslexicFont: string\n bigCursor: string\n stopAnimations: string\n reset: string\n menuTitle: string\n menuButton: string\n off: string\n}\n\nexport interface ZIndexConfig {\n button: number\n overlay: number\n panel: number\n readingAid: number\n}\n\nexport interface AccessibilityMenuProps {\n initialSettings?: Partial<AccessibilitySettings>\n storageKey?: string\n position?: MenuPosition\n positionOffset?: number | PositionOffset\n labels?: Partial<SectionLabels>\n className?: string\n buttonClassName?: string\n panelClassName?: string\n zIndex?: Partial<ZIndexConfig>\n onSettingsChange?: (settings: AccessibilitySettings) => void\n onReset?: () => void\n showResetButton?: boolean\n showFontSize?: boolean\n showLineHeight?: boolean\n showAlignment?: boolean\n showReadingAid?: boolean\n showDesaturate?: boolean\n showDyslexicFont?: boolean\n showBigCursor?: boolean\n showStopAnimations?: boolean\n theme?: Partial<ThemeColors>\n ssr?: boolean\n}\n\nexport interface AccessibilityToggleProps {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport interface ReadingAidProps {\n mouseY: number\n size: number\n zIndex: number\n theme?: Partial<ThemeColors>\n}\n\nexport const DEFAULT_SETTINGS: AccessibilitySettings = {\n fontSize: 0,\n lineHeight: 0,\n textAlign: \"off\",\n dyslexicFont: false,\n grayscale: false,\n stopAnimations: false,\n bigCursor: false,\n readingAid: false,\n readingAidSize: 1,\n}\n\nexport const DEFAULT_LABELS: SectionLabels = {\n fontSize: \"Font Size\",\n lineHeight: \"Line Height\",\n alignment: \"Alignment\",\n readingAid: \"Reading Aid\",\n desaturate: \"Desaturate\",\n dyslexicFont: \"Dyslexia Friendly\",\n bigCursor: \"Big Cursor\",\n stopAnimations: \"Stop Animations\",\n reset: \"Reset Settings\",\n menuTitle: \"Accessibility\",\n menuButton: \"Accessibility Menu\",\n off: \"Off\",\n}\n\nexport const DEFAULT_Z_INDEX: ZIndexConfig = {\n button: 60,\n overlay: 65,\n panel: 70,\n readingAid: 9998,\n}\n\nexport const DEFAULT_THEME: ThemeColors = {\n primary: \"#023A74\",\n primaryHover: \"#012a55\",\n accent: \"#01A0A0\",\n accentOverlay: \"rgba(1, 160, 160, 0.6)\",\n border: \"#e2e8f0\",\n background: \"#ffffff\",\n text: \"#0f172a\",\n textMuted: \"#94a3b8\",\n activeBg: \"rgba(1, 160, 160, 0.05)\",\n activeBorder: \"rgba(1, 160, 160, 0.2)\",\n gradientFrom: \"#023A74\",\n gradientTo: \"#01A0A0\",\n}\n\nexport const ROOT_CLASSES = {\n fontSize: (v: number) => `a11y-font-size-${v}`,\n lineHeight: (v: number) => `a11y-line-height-${v}`,\n textAlign: (v: string) => `a11y-align-${v}`,\n dyslexicFont: \"a11y-dyslexic-font\",\n grayscale: \"a11y-grayscale\",\n stopAnimations: \"a11y-stop-animations\",\n bigCursor: \"a11y-big-cursor\",\n} as const\n\nexport const ALL_ROOT_CLASSES = [\n \"a11y-font-size-10\",\n \"a11y-font-size-20\",\n \"a11y-font-size-30\",\n \"a11y-line-height-15\",\n \"a11y-line-height-20\",\n \"a11y-line-height-25\",\n \"a11y-align-left\",\n \"a11y-align-right\",\n \"a11y-align-center\",\n \"a11y-align-justify\",\n \"a11y-dyslexic-font\",\n \"a11y-grayscale\",\n \"a11y-stop-animations\",\n \"a11y-big-cursor\",\n] as const\n","import { useState, useEffect, useCallback } from \"react\"\nimport type { AccessibilitySettings } from \"./types\"\nimport { DEFAULT_SETTINGS, ALL_ROOT_CLASSES } from \"./types\"\n\nfunction applyRootClasses(settings: AccessibilitySettings) {\n if (typeof document === \"undefined\") return\n const root = document.documentElement\n\n ALL_ROOT_CLASSES.forEach((cls) => root.classList.remove(cls))\n\n if (settings.fontSize > 0) root.classList.add(`a11y-font-size-${settings.fontSize}`)\n if (settings.lineHeight > 0) root.classList.add(`a11y-line-height-${settings.lineHeight}`)\n if (settings.textAlign !== \"off\") root.classList.add(`a11y-align-${settings.textAlign}`)\n if (settings.dyslexicFont) root.classList.add(\"a11y-dyslexic-font\")\n if (settings.grayscale) root.classList.add(\"a11y-grayscale\")\n if (settings.stopAnimations) root.classList.add(\"a11y-stop-animations\")\n if (settings.bigCursor) root.classList.add(\"a11y-big-cursor\")\n}\n\nexport function useSettings(\n storageKey: string,\n initialSettings?: Partial<AccessibilitySettings>,\n onSettingsChange?: (settings: AccessibilitySettings) => void,\n) {\n const [settings, setSettings] = useState<AccessibilitySettings>(() => {\n if (typeof window === \"undefined\") {\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n }\n\n try {\n const saved = localStorage.getItem(storageKey)\n if (saved) {\n return { ...DEFAULT_SETTINGS, ...JSON.parse(saved), ...initialSettings }\n }\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to parse stored settings:`, error)\n }\n\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n })\n\n useEffect(() => {\n applyRootClasses(settings)\n }, [settings])\n\n const persist = useCallback(\n (next: AccessibilitySettings) => {\n if (typeof window !== \"undefined\") {\n try {\n localStorage.setItem(storageKey, JSON.stringify(next))\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to persist settings:`, error)\n }\n }\n onSettingsChange?.(next)\n },\n [storageKey, onSettingsChange],\n )\n\n const setVal = useCallback(\n <K extends keyof AccessibilitySettings>(key: K, val: AccessibilitySettings[K]) => {\n setSettings((prev) => {\n const next = { ...prev, [key]: val }\n persist(next)\n return next\n })\n },\n [persist],\n )\n\n const resetSettings = useCallback(() => {\n const defaults = { ...DEFAULT_SETTINGS, ...initialSettings }\n setSettings(defaults)\n persist(defaults)\n }, [initialSettings, persist])\n\n return { settings, setVal, resetSettings }\n}\n","import { useEffect } from \"react\"\n\nconst STYLE_ID = \"ieee-atiig-accessibility-menu-injected-styles\"\n\n/**\n * Injects the package stylesheet into the document head at runtime.\n * This is automatically called by the component but can be used standalone.\n */\nexport function useInjectStyles(styles?: string) {\n useEffect(() => {\n if (typeof window === \"undefined\") return\n if (document.getElementById(STYLE_ID)) return\n\n if (styles) {\n const style = document.createElement(\"style\")\n style.id = STYLE_ID\n style.textContent = styles\n document.head.appendChild(style)\n }\n }, [styles])\n}\n","import type { ReadingAidProps } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\nexport function ReadingAid({ mouseY, size, zIndex, theme: themeProp }: ReadingAidProps) {\n const theme = { ...DEFAULT_THEME, ...themeProp }\n const readingAidHeight = 56 * (size || 1)\n const offset = readingAidHeight / 2\n\n return (\n <>\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"top\"\n style={{\n height: `${Math.max(0, mouseY - offset)}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"bottom\"\n style={{\n top: `${mouseY + offset}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-bar\"\n style={{\n top: `${mouseY - offset}px`,\n height: `${readingAidHeight}px`,\n zIndex: zIndex - 1,\n background: \"rgba(1, 160, 160, 0.06)\",\n borderTop: `2px solid ${theme.accentOverlay}`,\n borderBottom: `2px solid ${theme.accentOverlay}`,\n }}\n />\n </>\n )\n}\n","import type { ReactNode } from \"react\"\nimport type { ThemeColors } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\ninterface Props {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport function AccessibilityToggle({ icon, label, isActive, onToggle, theme: themeProp }: Props) {\n const t = { ...DEFAULT_THEME, ...themeProp }\n\n return (\n <button\n onClick={onToggle}\n className=\"a11y-menu-toggle\"\n data-active={isActive}\n type=\"button\"\n aria-pressed={isActive}\n style={{\n borderColor: isActive ? t.activeBorder : \"transparent\",\n backgroundColor: isActive ? t.activeBg : t.background,\n }}\n >\n <div className=\"a11y-menu-toggle-left\">\n <div\n className=\"a11y-menu-toggle-icon-wrap\"\n data-active={isActive}\n style={{\n background: isActive\n ? `linear-gradient(135deg, ${t.gradientFrom}, ${t.gradientTo})`\n : undefined,\n }}\n >\n {icon}\n </div>\n <span\n className=\"a11y-menu-toggle-label\"\n style={{ color: isActive ? t.primary : undefined }}\n >\n {label}\n </span>\n </div>\n <div\n className=\"a11y-menu-toggle-check\"\n data-active={isActive}\n style={{\n backgroundColor: isActive ? t.accent : undefined,\n borderColor: isActive ? t.accent : t.border,\n }}\n >\n <svg\n className=\"a11y-menu-check-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n </button>\n )\n}\n","/**\n * Inline styles for the accessibility menu.\n * Injected automatically when the component mounts.\n * Users can also import `ieee-atiig-accessibility-menu/styles.css` for static loading.\n */\n\n// We duplicate the CSS here so the component can inject it at runtime\n// without requiring users to manually import a CSS file.\nexport const styles = `\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed; z-index: 60; display: flex; align-items: center; justify-content: center;\n width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;\n color: #fff; transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;\n}\n.a11y-menu-button:hover { transform: scale(1.1); }\n.a11y-menu-button:active { transform: scale(0.95); }\n.a11y-menu-button[data-open=\"true\"] { transform: rotate(180deg); }\n.a11y-menu-button-icon { width: 24px; height: 24px; }\n\n.a11y-menu-overlay {\n position: fixed; inset: 0; z-index: 65;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n.a11y-menu-panel {\n position: fixed; z-index: 70;\n width: calc(100% - 32px); max-width: 320px;\n padding: 20px; border: 1px solid; border-radius: 24px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); overflow: hidden;\n animation: a11y-menu-fade-in 0.3s ease;\n}\n\n@keyframes a11y-menu-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@media (min-width: 768px) {\n .a11y-menu-panel { left: 20px; right: auto; }\n .a11y-menu-panel[data-right=\"true\"] { left: auto; right: 20px; }\n}\n\n.a11y-menu-header {\n display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px;\n}\n.a11y-menu-header-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-header-icon {\n width: 36px; height: 36px; border-radius: 16px;\n display: flex; align-items: center; justify-content: center;\n color: #fff; box-shadow: 0 4px 14px rgba(2, 58, 116, 0.15);\n}\n.a11y-menu-header-icon svg { width: 16px; height: 16px; }\n.a11y-menu-title {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; margin: 0;\n}\n.a11y-menu-close {\n width: 28px; height: 28px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; display: flex;\n align-items: center; justify-content: center; color: #94a3b8;\n transition: background 0.2s ease;\n}\n.a11y-menu-close:hover { background: #f1f5f9; }\n.a11y-menu-close svg { width: 16px; height: 16px; }\n\n.a11y-menu-body { max-height: 65vh; overflow-y: auto; padding-right: 4px; }\n.a11y-menu-body::-webkit-scrollbar { width: 4px; }\n.a11y-menu-body::-webkit-scrollbar-track { background: transparent; }\n.a11y-menu-body::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 2px; }\n\n.a11y-menu-section { margin-bottom: 16px; }\n.a11y-menu-section-label {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; color: #94a3b8;\n margin-left: 4px; margin-bottom: 8px;\n display: flex; align-items: center; gap: 8px;\n}\n\n.a11y-menu-btn-group {\n display: flex; gap: 4px; background: #f8fafc;\n padding: 4px; border-radius: 16px;\n border: 1px solid rgba(226, 232, 240, 0.8); overflow-x: auto;\n}\n.a11y-menu-btn-group-item {\n flex: 1; min-width: 32px; padding: 8px 4px; border: none; border-radius: 12px;\n background: transparent; font-size: 10px; font-weight: 700; color: #94a3b8;\n cursor: pointer; transition: all 0.2s ease;\n display: flex; align-items: center; justify-content: center;\n}\n.a11y-menu-btn-group-item[data-active=\"true\"] {\n background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transform: scale(1.02);\n}\n.a11y-menu-btn-group-item:hover { color: #475569; }\n\n.a11y-menu-toggle {\n width: 100%; display: flex; align-items: center; justify-content: space-between;\n padding: 10px; border-radius: 16px; border: 1px solid transparent;\n cursor: pointer; transition: all 0.3s ease; margin-bottom: 8px;\n}\n.a11y-menu-toggle:hover { background: rgba(248, 250, 252, 0.3); }\n.a11y-menu-toggle-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-toggle-icon-wrap {\n width: 32px; height: 32px; border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n background: #f8fafc; color: #94a3b8; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-icon-wrap svg { width: 16px; height: 16px; }\n.a11y-menu-toggle-icon-wrap[data-active=\"true\"] { color: #fff; }\n.a11y-menu-toggle-label { font-size: 11px; font-weight: 700; letter-spacing: -0.01em; color: #475569; }\n.a11y-menu-toggle-check {\n width: 20px; height: 20px; border-radius: 50%; border: 2px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-check[data-active=\"true\"] { background: #01a0a0; border-color: #01a0a0; color: #fff; }\n.a11y-menu-check-icon { width: 10px; height: 10px; stroke-width: 5; }\n\n.a11y-menu-reset {\n width: 100%; margin-top: 20px; padding: 12px; border-radius: 16px;\n background: #f8fafc; border: 1px solid #f1f5f9;\n font-size: 9px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; cursor: pointer; transition: background 0.2s ease;\n}\n.a11y-menu-reset:hover { background: #f1f5f9; }\n\n@media (max-width: 767px) {\n .a11y-menu-panel { left: 16px; right: 16px; }\n .a11y-menu-panel[data-right=\"true\"] { left: 16px; right: 16px; }\n}\n`\n","\n\"use client\"\n\nimport { useState } from \"react\"\nimport { useIsMobile } from \"./use-is-mobile\"\nimport { useMousePosition } from \"./use-mouse-position\"\nimport { useSettings } from \"./use-settings\"\nimport { useInjectStyles } from \"./use-inject-styles\"\nimport { ReadingAid } from \"./reading-aid\"\nimport { AccessibilityToggle } from \"./accessibility-toggle\"\nimport type { AccessibilityMenuProps } from \"./types\"\nimport {\n DEFAULT_LABELS,\n DEFAULT_Z_INDEX,\n DEFAULT_THEME,\n} from \"./types\"\nimport { styles } from \"./styles\"\n\nconst ALIGNMENT_ICONS = {\n off: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n left: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h12\" />\n <path d=\"M3 18h6\" />\n </svg>\n ),\n center: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M6 12h12\" />\n <path d=\"M9 18h6\" />\n </svg>\n ),\n right: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M9 12h12\" />\n <path d=\"M15 18h6\" />\n </svg>\n ),\n justify: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h18\" />\n <path d=\"M3 18h18\" />\n </svg>\n ),\n} as const\n\nconst ALIGNMENT_VALUES = [\"off\", \"left\", \"center\", \"right\", \"justify\"] as const\n\nexport function AccessibilityMenu({\n initialSettings,\n storageKey = \"ieee-atiig-accessibility-menu-settings\",\n position = \"bottom-left\",\n positionOffset = 0,\n labels: labelsProp,\n className = \"\",\n buttonClassName = \"\",\n panelClassName = \"\",\n zIndex: zIndexProp,\n onSettingsChange,\n onReset,\n showResetButton = true,\n showFontSize = true,\n showLineHeight = true,\n showAlignment = true,\n showReadingAid = true,\n showDesaturate = true,\n showDyslexicFont = true,\n showBigCursor = true,\n showStopAnimations = true,\n theme: themeProp,\n ssr = false,\n}: AccessibilityMenuProps) {\n if (typeof window === \"undefined\") {\n const isRight = position === \"bottom-right\"\n const offset = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n return (\n <button\n suppressHydrationWarning\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={false}\n data-right={isRight}\n style={{\n bottom: `${20 + offset}px`,\n left: isRight ? undefined : `${20 + offset}px`,\n right: isRight ? `${20 + offset}px` : undefined,\n }}\n aria-label={labelsProp?.menuButton || \"Accessibility Menu\"}\n type=\"button\"\n >\n <svg className=\"a11y-menu-button-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n )\n }\n\n useInjectStyles(styles)\n\n const [isOpen, setIsOpen] = useState(false)\n const isMobile = useIsMobile()\n const mousePos = useMousePosition(isMobile)\n const { settings, setVal, resetSettings } = useSettings(\n storageKey,\n initialSettings,\n onSettingsChange,\n )\n\n const labels = { ...DEFAULT_LABELS, ...labelsProp }\n const zIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp }\n const theme = { ...DEFAULT_THEME, ...themeProp }\n\n const offsetNum = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n const isRight = position === \"bottom-right\"\n\n const handleReset = () => {\n resetSettings()\n onReset?.()\n }\n\n return (\n <>\n {settings.readingAid && (\n <ReadingAid\n mouseY={mousePos.y}\n size={settings.readingAidSize}\n zIndex={zIndex.readingAid}\n theme={theme}\n />\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={isOpen}\n data-right={isRight}\n style={{\n bottom: `${20 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n zIndex: zIndex.button,\n background: isOpen\n ? theme.primary\n : `linear-gradient(135deg, ${theme.gradientFrom}, ${theme.gradientTo})`,\n boxShadow: isOpen\n ? `0 10px 20px rgba(2, 58, 116, 0.3)`\n : `0 4px 30px rgba(2, 58, 116, 0.28)`,\n }}\n aria-label={labels.menuButton}\n type=\"button\"\n >\n <svg\n className=\"a11y-menu-button-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <>\n <div\n className=\"a11y-menu-overlay\"\n onClick={() => setIsOpen(false)}\n style={{ zIndex: zIndex.overlay }}\n />\n <div\n className={`a11y-menu-panel ${panelClassName} ${className}`}\n data-right={isRight}\n style={{\n bottom: `${80 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n zIndex: zIndex.panel,\n backgroundColor: theme.background,\n borderColor: theme.border,\n }}\n >\n <div className=\"a11y-menu-header\">\n <div className=\"a11y-menu-header-left\">\n <div\n className=\"a11y-menu-header-icon\"\n style={{\n background: `linear-gradient(135deg, ${theme.gradientFrom}, ${theme.gradientTo})`,\n }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </div>\n <h3 className=\"a11y-menu-title\" style={{ color: theme.text }}>\n {labels.menuTitle}\n </h3>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"a11y-menu-close\"\n type=\"button\"\n aria-label=\"Close\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"a11y-menu-body\">\n {showFontSize && (\n <Section label={labels.fontSize}>\n <ButtonGroup\n value={settings.fontSize}\n options={[0, 10, 20, 30]}\n renderLabel={(v) => (v === 0 ? labels.off : `+${v}%`)}\n onChange={(v) => setVal(\"fontSize\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showLineHeight && (\n <Section label={labels.lineHeight}>\n <ButtonGroup\n value={settings.lineHeight}\n options={[0, 15, 20, 25]}\n renderLabel={(v) => (v === 0 ? labels.off : `${1 + v / 100}x`)}\n onChange={(v) => setVal(\"lineHeight\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showAlignment && (\n <Section label={labels.alignment}>\n <ButtonGroup\n value={settings.textAlign}\n options={ALIGNMENT_VALUES}\n renderLabel={(v: string) => ALIGNMENT_ICONS[v as keyof typeof ALIGNMENT_ICONS]}\n onChange={(v) => setVal(\"textAlign\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showReadingAid && (\n <Section label={labels.readingAid}>\n <ButtonGroup\n value={settings.readingAid ? settings.readingAidSize : 0}\n options={[0, 0.9, 1, 1.2]}\n renderLabel={(v) => (v === 0 ? labels.off : `${v}x`)}\n onChange={(v) => {\n if (v === 0) {\n setVal(\"readingAid\", false)\n } else {\n setVal(\"readingAid\", true)\n setVal(\"readingAidSize\", v as number)\n }\n }}\n activeColor={theme.accent}\n />\n </Section>\n )}\n\n {showDesaturate && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n }\n label={labels.desaturate}\n isActive={settings.grayscale}\n onToggle={() => setVal(\"grayscale\", !settings.grayscale)}\n theme={theme}\n />\n )}\n\n {showDyslexicFont && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n }\n label={labels.dyslexicFont}\n isActive={settings.dyslexicFont}\n onToggle={() => setVal(\"dyslexicFont\", !settings.dyslexicFont)}\n theme={theme}\n />\n )}\n\n {showBigCursor && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M3 3 9.77 19.47a.75.75 0 0 0 1.45.05L13 14.5l3 4.5.77.77a.75.75 0 0 0 1.06 0l3.94-3.94a.75.75 0 0 0 0-1.06L21 14.5l-4.5-3 5.47-1.78a.75.75 0 0 0-.05-1.45L3 3Z\" />\n </svg>\n }\n label={labels.bigCursor}\n isActive={settings.bigCursor}\n onToggle={() => setVal(\"bigCursor\", !settings.bigCursor)}\n theme={theme}\n />\n )}\n\n {showStopAnimations && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M12 2a10 10 0 0 1 7.38 16.75\" />\n <path d=\"M12 22a10 10 0 0 1-7.38-16.75\" />\n <path d=\"M12 22V2\" />\n <path d=\"M2 12h20\" />\n </svg>\n }\n label={labels.stopAnimations}\n isActive={settings.stopAnimations}\n onToggle={() => setVal(\"stopAnimations\", !settings.stopAnimations)}\n theme={theme}\n />\n )}\n </div>\n\n {showResetButton && (\n <button onClick={handleReset} className=\"a11y-menu-reset\" type=\"button\" style={{ color: theme.textMuted }}>\n {labels.reset}\n </button>\n )}\n </div>\n </>\n )}\n </>\n )\n}\n\nfunction Section({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"a11y-menu-section\">\n <div className=\"a11y-menu-section-label\">{label}</div>\n {children}\n </div>\n )\n}\n\nfunction ButtonGroup<T extends string | number>({\n value,\n options,\n renderLabel,\n onChange,\n activeColor,\n}: {\n value: T\n options: readonly T[]\n renderLabel: (v: T) => string | React.ReactNode\n onChange: (v: T) => void\n activeColor: string\n}) {\n return (\n <div className=\"a11y-menu-btn-group\">\n {options.map((val) => (\n <button\n key={String(val)}\n onClick={() => onChange(val)}\n className=\"a11y-menu-btn-group-item\"\n data-active={value === val}\n type=\"button\"\n style={{ color: value === val ? activeColor : undefined }}\n >\n {renderLabel(val)}\n </button>\n ))}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/use-is-mobile.ts","../src/use-mouse-position.ts","../src/types.ts","../src/use-settings.ts","../src/use-inject-styles.ts","../src/reading-aid.tsx","../src/accessibility-toggle.tsx","../src/styles.ts","../src/accessibility-menu.tsx"],"names":["useState","useEffect","useCallback","styles","jsxs","Fragment","jsx","isRight"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useState, useEffect } from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\n/**\n * Detects if the viewport is mobile-sized.\n * The original component imported this from a project-specific `@/hooks/use-mobile` module.\n * This implementation uses a basic window width check compatible with SSR.\n */\nexport function useIsMobile(breakpoint: number = MOBILE_BREAKPOINT): boolean {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < breakpoint)\n check()\n window.addEventListener(\"resize\", check)\n return () => window.removeEventListener(\"resize\", check)\n }, [breakpoint])\n\n return isMobile\n}\n","import { useState, useEffect } from \"react\"\n\n/**\n * Tracks the vertical mouse/touch position for the reading aid overlay.\n * Falls back to a safe default during SSR.\n */\nexport function useMousePosition(isMobile: boolean): { y: number } {\n const [mousePos, setMousePos] = useState({ y: 300 })\n\n useEffect(() => {\n if (isMobile) {\n const handleTouch = (e: TouchEvent) => {\n if (e.touches.length > 0) setMousePos({ y: e.touches[0].clientY })\n }\n window.addEventListener(\"touchmove\", handleTouch, { passive: true })\n return () => window.removeEventListener(\"touchmove\", handleTouch)\n }\n\n const handleMouseMove = (e: MouseEvent) => setMousePos({ y: e.clientY })\n window.addEventListener(\"mousemove\", handleMouseMove)\n return () => window.removeEventListener(\"mousemove\", handleMouseMove)\n }, [isMobile])\n\n return mousePos\n}\n","import type { ReactNode } from \"react\"\n\nexport type FontSizeStep = 0 | 10 | 20 | 30\n\nexport type LineHeightStep = 0 | 15 | 20 | 25\n\nexport type TextAlignOption = \"off\" | \"left\" | \"center\" | \"right\" | \"justify\"\n\nexport interface AccessibilitySettings {\n fontSize: FontSizeStep\n lineHeight: LineHeightStep\n textAlign: TextAlignOption\n dyslexicFont: boolean\n grayscale: boolean\n stopAnimations: boolean\n bigCursor: boolean\n readingAid: boolean\n readingAidSize: number\n}\n\nexport type MenuPosition = \"bottom-left\" | \"bottom-right\"\n\nexport interface PositionOffset {\n x: number\n y: number\n}\n\nexport interface ThemeColors {\n primary: string\n primaryHover: string\n accent: string\n accentOverlay: string\n border: string\n background: string\n text: string\n textMuted: string\n activeBg: string\n activeBorder: string\n gradientFrom: string\n gradientTo: string\n}\n\nexport interface SectionLabels {\n fontSize: string\n lineHeight: string\n alignment: string\n readingAid: string\n desaturate: string\n dyslexicFont: string\n bigCursor: string\n stopAnimations: string\n reset: string\n menuTitle: string\n menuButton: string\n off: string\n}\n\nexport interface ZIndexConfig {\n button: number\n overlay: number\n panel: number\n readingAid: number\n}\n\nexport interface AccessibilityMenuProps {\n initialSettings?: Partial<AccessibilitySettings>\n storageKey?: string\n position?: MenuPosition\n positionOffset?: number | PositionOffset\n labels?: Partial<SectionLabels>\n className?: string\n buttonClassName?: string\n panelClassName?: string\n zIndex?: Partial<ZIndexConfig>\n onSettingsChange?: (settings: AccessibilitySettings) => void\n onReset?: () => void\n showResetButton?: boolean\n showFontSize?: boolean\n showLineHeight?: boolean\n showAlignment?: boolean\n showReadingAid?: boolean\n showDesaturate?: boolean\n showDyslexicFont?: boolean\n showBigCursor?: boolean\n showStopAnimations?: boolean\n theme?: Partial<ThemeColors>\n ssr?: boolean\n}\n\nexport interface AccessibilityToggleProps {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport interface ReadingAidProps {\n mouseY: number\n size: number\n zIndex: number\n theme?: Partial<ThemeColors>\n}\n\nexport const DEFAULT_SETTINGS: AccessibilitySettings = {\n fontSize: 0,\n lineHeight: 0,\n textAlign: \"off\",\n dyslexicFont: false,\n grayscale: false,\n stopAnimations: false,\n bigCursor: false,\n readingAid: false,\n readingAidSize: 1,\n}\n\nexport const DEFAULT_LABELS: SectionLabels = {\n fontSize: \"Font Size\",\n lineHeight: \"Line Height\",\n alignment: \"Alignment\",\n readingAid: \"Reading Aid\",\n desaturate: \"Desaturate\",\n dyslexicFont: \"Dyslexia Friendly\",\n bigCursor: \"Big Cursor\",\n stopAnimations: \"Stop Animations\",\n reset: \"Reset Settings\",\n menuTitle: \"Accessibility\",\n menuButton: \"Accessibility Menu\",\n off: \"Off\",\n}\n\nexport const DEFAULT_Z_INDEX: ZIndexConfig = {\n button: 60,\n overlay: 65,\n panel: 70,\n readingAid: 9998,\n}\n\nexport const DEFAULT_THEME: ThemeColors = {\n primary: \"#023A74\",\n primaryHover: \"#012a55\",\n accent: \"#01A0A0\",\n accentOverlay: \"rgba(1, 160, 160, 0.6)\",\n border: \"#e2e8f0\",\n background: \"#ffffff\",\n text: \"#0f172a\",\n textMuted: \"#94a3b8\",\n activeBg: \"rgba(1, 160, 160, 0.05)\",\n activeBorder: \"rgba(1, 160, 160, 0.2)\",\n gradientFrom: \"#023A74\",\n gradientTo: \"#01A0A0\",\n}\n\nexport const ROOT_CLASSES = {\n fontSize: (v: number) => `a11y-font-size-${v}`,\n lineHeight: (v: number) => `a11y-line-height-${v}`,\n textAlign: (v: string) => `a11y-align-${v}`,\n dyslexicFont: \"a11y-dyslexic-font\",\n grayscale: \"a11y-grayscale\",\n stopAnimations: \"a11y-stop-animations\",\n bigCursor: \"a11y-big-cursor\",\n} as const\n\nexport const ALL_ROOT_CLASSES = [\n \"a11y-font-size-10\",\n \"a11y-font-size-20\",\n \"a11y-font-size-30\",\n \"a11y-line-height-15\",\n \"a11y-line-height-20\",\n \"a11y-line-height-25\",\n \"a11y-align-left\",\n \"a11y-align-right\",\n \"a11y-align-center\",\n \"a11y-align-justify\",\n \"a11y-dyslexic-font\",\n \"a11y-grayscale\",\n \"a11y-stop-animations\",\n \"a11y-big-cursor\",\n] as const\n","import { useState, useEffect, useCallback } from \"react\"\nimport type { AccessibilitySettings } from \"./types\"\nimport { DEFAULT_SETTINGS, ALL_ROOT_CLASSES } from \"./types\"\n\nfunction applyRootClasses(settings: AccessibilitySettings) {\n if (typeof document === \"undefined\") return\n const root = document.documentElement\n\n ALL_ROOT_CLASSES.forEach((cls) => root.classList.remove(cls))\n\n if (settings.fontSize > 0) root.classList.add(`a11y-font-size-${settings.fontSize}`)\n if (settings.lineHeight > 0) root.classList.add(`a11y-line-height-${settings.lineHeight}`)\n if (settings.textAlign !== \"off\") root.classList.add(`a11y-align-${settings.textAlign}`)\n if (settings.dyslexicFont) root.classList.add(\"a11y-dyslexic-font\")\n if (settings.grayscale) root.classList.add(\"a11y-grayscale\")\n if (settings.stopAnimations) root.classList.add(\"a11y-stop-animations\")\n if (settings.bigCursor) root.classList.add(\"a11y-big-cursor\")\n}\n\nexport function useSettings(\n storageKey: string,\n initialSettings?: Partial<AccessibilitySettings>,\n onSettingsChange?: (settings: AccessibilitySettings) => void,\n) {\n const [settings, setSettings] = useState<AccessibilitySettings>(() => {\n if (typeof window === \"undefined\") {\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n }\n\n try {\n const saved = localStorage.getItem(storageKey)\n if (saved) {\n return { ...DEFAULT_SETTINGS, ...JSON.parse(saved), ...initialSettings }\n }\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to parse stored settings:`, error)\n }\n\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n })\n\n useEffect(() => {\n applyRootClasses(settings)\n }, [settings])\n\n const persist = useCallback(\n (next: AccessibilitySettings) => {\n if (typeof window !== \"undefined\") {\n try {\n localStorage.setItem(storageKey, JSON.stringify(next))\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to persist settings:`, error)\n }\n }\n onSettingsChange?.(next)\n },\n [storageKey, onSettingsChange],\n )\n\n const setVal = useCallback(\n <K extends keyof AccessibilitySettings>(key: K, val: AccessibilitySettings[K]) => {\n setSettings((prev) => {\n const next = { ...prev, [key]: val }\n persist(next)\n return next\n })\n },\n [persist],\n )\n\n const resetSettings = useCallback(() => {\n const defaults = { ...DEFAULT_SETTINGS, ...initialSettings }\n setSettings(defaults)\n persist(defaults)\n }, [initialSettings, persist])\n\n return { settings, setVal, resetSettings }\n}\n","import { useEffect } from \"react\"\n\nconst STYLE_ID = \"ieee-atiig-accessibility-menu-injected-styles\"\n\n/**\n * Injects the package stylesheet into the document head at runtime.\n * This is automatically called by the component but can be used standalone.\n */\nexport function useInjectStyles(styles?: string) {\n useEffect(() => {\n if (typeof window === \"undefined\") return\n if (document.getElementById(STYLE_ID)) return\n\n if (styles) {\n const style = document.createElement(\"style\")\n style.id = STYLE_ID\n style.textContent = styles\n document.head.appendChild(style)\n }\n }, [styles])\n}\n","import type { ReadingAidProps } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\nexport function ReadingAid({ mouseY, size, zIndex, theme: themeProp }: ReadingAidProps) {\n const theme = { ...DEFAULT_THEME, ...themeProp }\n const readingAidHeight = 56 * (size || 1)\n const offset = readingAidHeight / 2\n\n return (\n <>\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"top\"\n style={{\n height: `${Math.max(0, mouseY - offset)}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"bottom\"\n style={{\n top: `${mouseY + offset}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-bar\"\n style={{\n top: `${mouseY - offset}px`,\n height: `${readingAidHeight}px`,\n zIndex: zIndex - 1,\n background: \"rgba(1, 160, 160, 0.06)\",\n borderTop: `2px solid ${theme.accentOverlay}`,\n borderBottom: `2px solid ${theme.accentOverlay}`,\n }}\n />\n </>\n )\n}\n","import type { ReactNode } from \"react\"\nimport type { ThemeColors } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\ninterface Props {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport function AccessibilityToggle({ icon, label, isActive, onToggle, theme: themeProp }: Props) {\n const t = { ...DEFAULT_THEME, ...themeProp }\n\n return (\n <button\n onClick={onToggle}\n className=\"a11y-menu-toggle\"\n data-active={isActive}\n type=\"button\"\n aria-pressed={isActive}\n style={{\n borderColor: isActive ? t.activeBorder : \"transparent\",\n backgroundColor: isActive ? t.activeBg : t.background,\n }}\n >\n <div className=\"a11y-menu-toggle-left\">\n <div\n className=\"a11y-menu-toggle-icon-wrap\"\n data-active={isActive}\n style={{\n background: isActive\n ? `linear-gradient(135deg, ${t.gradientFrom}, ${t.gradientTo})`\n : undefined,\n }}\n >\n {icon}\n </div>\n <span\n className=\"a11y-menu-toggle-label\"\n style={{ color: isActive ? t.primary : undefined }}\n >\n {label}\n </span>\n </div>\n <div\n className=\"a11y-menu-toggle-check\"\n data-active={isActive}\n style={{\n backgroundColor: isActive ? t.accent : undefined,\n borderColor: isActive ? t.accent : t.border,\n }}\n >\n <svg\n className=\"a11y-menu-check-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n </button>\n )\n}\n","/**\n * Inline styles for the accessibility menu.\n * Injected automatically when the component mounts.\n * Users can also import `ieee-atiig-accessibility-menu/styles.css` for static loading.\n */\n\n// We duplicate the CSS here so the component can inject it at runtime\n// without requiring users to manually import a CSS file.\nexport const styles = `\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed;\n z-index: var(--a11y-z, 60);\n display: flex; align-items: center; justify-content: center;\n width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;\n color: #fff;\n transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;\n background: linear-gradient(135deg, var(--a11y-gradient-from, #023A74), var(--a11y-gradient-to, #01A0A0));\n box-shadow: 0 4px 30px rgba(2, 58, 116, 0.28);\n}\n.a11y-menu-button:hover { transform: scale(1.1); }\n.a11y-menu-button:active { transform: scale(0.95); }\n.a11y-menu-button[data-open=\"true\"] {\n transform: rotate(180deg);\n background: var(--a11y-primary, #0D6EAD);\n box-shadow: 0 10px 20px rgba(2, 58, 116, 0.3);\n}\n.a11y-menu-button-icon { width: 24px; height: 24px; }\n\n.a11y-menu-overlay {\n position: fixed; inset: 0; z-index: 65;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n.a11y-menu-panel {\n position: fixed; z-index: 70;\n width: calc(100% - 32px); max-width: 320px;\n padding: 20px; border: 1px solid; border-radius: 24px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); overflow: hidden;\n animation: a11y-menu-fade-in 0.3s ease;\n}\n\n@keyframes a11y-menu-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@media (min-width: 768px) {\n .a11y-menu-panel { left: 20px; right: auto; }\n .a11y-menu-panel[data-right=\"true\"] { left: auto; right: 20px; }\n}\n\n.a11y-menu-header {\n display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px;\n}\n.a11y-menu-header-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-header-icon {\n width: 36px; height: 36px; border-radius: 16px;\n display: flex; align-items: center; justify-content: center;\n color: #fff; box-shadow: 0 4px 14px rgba(2, 58, 116, 0.15);\n}\n.a11y-menu-header-icon svg { width: 16px; height: 16px; }\n.a11y-menu-title {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; margin: 0;\n}\n.a11y-menu-close {\n width: 28px; height: 28px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; display: flex;\n align-items: center; justify-content: center; color: #94a3b8;\n transition: background 0.2s ease;\n}\n.a11y-menu-close:hover { background: #f1f5f9; }\n.a11y-menu-close svg { width: 16px; height: 16px; }\n\n.a11y-menu-body { max-height: 65vh; overflow-y: auto; padding-right: 4px; }\n.a11y-menu-body::-webkit-scrollbar { width: 4px; }\n.a11y-menu-body::-webkit-scrollbar-track { background: transparent; }\n.a11y-menu-body::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 2px; }\n\n.a11y-menu-section { margin-bottom: 16px; }\n.a11y-menu-section-label {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; color: #94a3b8;\n margin-left: 4px; margin-bottom: 8px;\n display: flex; align-items: center; gap: 8px;\n}\n\n.a11y-menu-btn-group {\n display: flex; gap: 4px; background: #f8fafc;\n padding: 4px; border-radius: 16px;\n border: 1px solid rgba(226, 232, 240, 0.8); overflow-x: auto;\n}\n.a11y-menu-btn-group-item {\n flex: 1; min-width: 32px; padding: 8px 4px; border: none; border-radius: 12px;\n background: transparent; font-size: 10px; font-weight: 700; color: #94a3b8;\n cursor: pointer; transition: all 0.2s ease;\n display: flex; align-items: center; justify-content: center;\n}\n.a11y-menu-btn-group-item[data-active=\"true\"] {\n background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transform: scale(1.02);\n}\n.a11y-menu-btn-group-item:hover { color: #475569; }\n\n.a11y-menu-toggle {\n width: 100%; display: flex; align-items: center; justify-content: space-between;\n padding: 10px; border-radius: 16px; border: 1px solid transparent;\n cursor: pointer; transition: all 0.3s ease; margin-bottom: 8px;\n}\n.a11y-menu-toggle:hover { background: rgba(248, 250, 252, 0.3); }\n.a11y-menu-toggle-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-toggle-icon-wrap {\n width: 32px; height: 32px; border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n background: #f8fafc; color: #94a3b8; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-icon-wrap svg { width: 16px; height: 16px; }\n.a11y-menu-toggle-icon-wrap[data-active=\"true\"] { color: #fff; }\n.a11y-menu-toggle-label { font-size: 11px; font-weight: 700; letter-spacing: -0.01em; color: #475569; }\n.a11y-menu-toggle-check {\n width: 20px; height: 20px; border-radius: 50%; border: 2px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-check[data-active=\"true\"] { background: #01a0a0; border-color: #01a0a0; color: #fff; }\n.a11y-menu-check-icon { width: 10px; height: 10px; stroke-width: 5; }\n\n.a11y-menu-reset {\n width: 100%; margin-top: 20px; padding: 12px; border-radius: 16px;\n background: #f8fafc; border: 1px solid #f1f5f9;\n font-size: 9px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; cursor: pointer; transition: background 0.2s ease;\n}\n.a11y-menu-reset:hover { background: #f1f5f9; }\n\n@media (max-width: 767px) {\n .a11y-menu-panel { left: 16px; right: 16px; }\n .a11y-menu-panel[data-right=\"true\"] { left: 16px; right: 16px; }\n}\n`\n","\n\"use client\"\n\nimport { useState } from \"react\"\nimport { useIsMobile } from \"./use-is-mobile\"\nimport { useMousePosition } from \"./use-mouse-position\"\nimport { useSettings } from \"./use-settings\"\nimport { useInjectStyles } from \"./use-inject-styles\"\nimport { ReadingAid } from \"./reading-aid\"\nimport { AccessibilityToggle } from \"./accessibility-toggle\"\nimport type { AccessibilityMenuProps } from \"./types\"\nimport {\n DEFAULT_LABELS,\n DEFAULT_Z_INDEX,\n DEFAULT_THEME,\n} from \"./types\"\nimport { styles } from \"./styles\"\n\nconst ALIGNMENT_ICONS = {\n off: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n left: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h12\" />\n <path d=\"M3 18h6\" />\n </svg>\n ),\n center: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M6 12h12\" />\n <path d=\"M9 18h6\" />\n </svg>\n ),\n right: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M9 12h12\" />\n <path d=\"M15 18h6\" />\n </svg>\n ),\n justify: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h18\" />\n <path d=\"M3 18h18\" />\n </svg>\n ),\n} as const\n\nconst ALIGNMENT_VALUES = [\"off\", \"left\", \"center\", \"right\", \"justify\"] as const\n\nexport function AccessibilityMenu({\n initialSettings,\n storageKey = \"ieee-atiig-accessibility-menu-settings\",\n position = \"bottom-left\",\n positionOffset = 0,\n labels: labelsProp,\n className = \"\",\n buttonClassName = \"\",\n panelClassName = \"\",\n zIndex: zIndexProp,\n onSettingsChange,\n onReset,\n showResetButton = true,\n showFontSize = true,\n showLineHeight = true,\n showAlignment = true,\n showReadingAid = true,\n showDesaturate = true,\n showDyslexicFont = true,\n showBigCursor = true,\n showStopAnimations = true,\n theme: themeProp,\n ssr = false,\n}: AccessibilityMenuProps) {\n if (typeof window === \"undefined\") {\n const ssrTheme = { ...DEFAULT_THEME, ...themeProp }\n const ssrZIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp }\n const isRight = position === \"bottom-right\"\n const offset = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n return (\n <button\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={false}\n data-right={isRight}\n style={{\n bottom: `${20 + offset}px`,\n left: isRight ? undefined : `${20 + offset}px`,\n right: isRight ? `${20 + offset}px` : undefined,\n \"--a11y-z\": `${ssrZIndex.button}`,\n \"--a11y-gradient-from\": ssrTheme.gradientFrom,\n \"--a11y-gradient-to\": ssrTheme.gradientTo,\n \"--a11y-primary\": ssrTheme.primary,\n } as any}\n aria-label={labelsProp?.menuButton || \"Accessibility Menu\"}\n type=\"button\"\n >\n <svg className=\"a11y-menu-button-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n )\n }\n\n useInjectStyles(styles)\n\n const [isOpen, setIsOpen] = useState(false)\n const isMobile = useIsMobile()\n const mousePos = useMousePosition(isMobile)\n const { settings, setVal, resetSettings } = useSettings(\n storageKey,\n initialSettings,\n onSettingsChange,\n )\n\n const labels = { ...DEFAULT_LABELS, ...labelsProp }\n const zIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp }\n const theme = { ...DEFAULT_THEME, ...themeProp }\n\n const offsetNum = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n const isRight = position === \"bottom-right\"\n\n const handleReset = () => {\n resetSettings()\n onReset?.()\n }\n\n return (\n <>\n {settings.readingAid && (\n <ReadingAid\n mouseY={mousePos.y}\n size={settings.readingAidSize}\n zIndex={zIndex.readingAid}\n theme={theme}\n />\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={isOpen}\n data-right={isRight}\n style={{\n bottom: `${20 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n \"--a11y-z\": `${zIndex.button}`,\n \"--a11y-gradient-from\": theme.gradientFrom,\n \"--a11y-gradient-to\": theme.gradientTo,\n \"--a11y-primary\": theme.primary,\n } as any}\n aria-label={labels.menuButton}\n type=\"button\"\n >\n <svg\n className=\"a11y-menu-button-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <>\n <div\n className=\"a11y-menu-overlay\"\n onClick={() => setIsOpen(false)}\n style={{ zIndex: zIndex.overlay }}\n />\n <div\n className={`a11y-menu-panel ${panelClassName} ${className}`}\n data-right={isRight}\n style={{\n bottom: `${80 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n zIndex: zIndex.panel,\n backgroundColor: theme.background,\n borderColor: theme.border,\n }}\n >\n <div className=\"a11y-menu-header\">\n <div className=\"a11y-menu-header-left\">\n <div\n className=\"a11y-menu-header-icon\"\n style={{\n background: `linear-gradient(135deg, ${theme.gradientFrom}, ${theme.gradientTo})`,\n }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </div>\n <h3 className=\"a11y-menu-title\" style={{ color: theme.text }}>\n {labels.menuTitle}\n </h3>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"a11y-menu-close\"\n type=\"button\"\n aria-label=\"Close\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"a11y-menu-body\">\n {showFontSize && (\n <Section label={labels.fontSize}>\n <ButtonGroup\n value={settings.fontSize}\n options={[0, 10, 20, 30]}\n renderLabel={(v) => (v === 0 ? labels.off : `+${v}%`)}\n onChange={(v) => setVal(\"fontSize\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showLineHeight && (\n <Section label={labels.lineHeight}>\n <ButtonGroup\n value={settings.lineHeight}\n options={[0, 15, 20, 25]}\n renderLabel={(v) => (v === 0 ? labels.off : `${1 + v / 100}x`)}\n onChange={(v) => setVal(\"lineHeight\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showAlignment && (\n <Section label={labels.alignment}>\n <ButtonGroup\n value={settings.textAlign}\n options={ALIGNMENT_VALUES}\n renderLabel={(v: string) => ALIGNMENT_ICONS[v as keyof typeof ALIGNMENT_ICONS]}\n onChange={(v) => setVal(\"textAlign\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showReadingAid && (\n <Section label={labels.readingAid}>\n <ButtonGroup\n value={settings.readingAid ? settings.readingAidSize : 0}\n options={[0, 0.9, 1, 1.2]}\n renderLabel={(v) => (v === 0 ? labels.off : `${v}x`)}\n onChange={(v) => {\n if (v === 0) {\n setVal(\"readingAid\", false)\n } else {\n setVal(\"readingAid\", true)\n setVal(\"readingAidSize\", v as number)\n }\n }}\n activeColor={theme.accent}\n />\n </Section>\n )}\n\n {showDesaturate && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n }\n label={labels.desaturate}\n isActive={settings.grayscale}\n onToggle={() => setVal(\"grayscale\", !settings.grayscale)}\n theme={theme}\n />\n )}\n\n {showDyslexicFont && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n }\n label={labels.dyslexicFont}\n isActive={settings.dyslexicFont}\n onToggle={() => setVal(\"dyslexicFont\", !settings.dyslexicFont)}\n theme={theme}\n />\n )}\n\n {showBigCursor && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M3 3 9.77 19.47a.75.75 0 0 0 1.45.05L13 14.5l3 4.5.77.77a.75.75 0 0 0 1.06 0l3.94-3.94a.75.75 0 0 0 0-1.06L21 14.5l-4.5-3 5.47-1.78a.75.75 0 0 0-.05-1.45L3 3Z\" />\n </svg>\n }\n label={labels.bigCursor}\n isActive={settings.bigCursor}\n onToggle={() => setVal(\"bigCursor\", !settings.bigCursor)}\n theme={theme}\n />\n )}\n\n {showStopAnimations && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M12 2a10 10 0 0 1 7.38 16.75\" />\n <path d=\"M12 22a10 10 0 0 1-7.38-16.75\" />\n <path d=\"M12 22V2\" />\n <path d=\"M2 12h20\" />\n </svg>\n }\n label={labels.stopAnimations}\n isActive={settings.stopAnimations}\n onToggle={() => setVal(\"stopAnimations\", !settings.stopAnimations)}\n theme={theme}\n />\n )}\n </div>\n\n {showResetButton && (\n <button onClick={handleReset} className=\"a11y-menu-reset\" type=\"button\" style={{ color: theme.textMuted }}>\n {labels.reset}\n </button>\n )}\n </div>\n </>\n )}\n </>\n )\n}\n\nfunction Section({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"a11y-menu-section\">\n <div className=\"a11y-menu-section-label\">{label}</div>\n {children}\n </div>\n )\n}\n\nfunction ButtonGroup<T extends string | number>({\n value,\n options,\n renderLabel,\n onChange,\n activeColor,\n}: {\n value: T\n options: readonly T[]\n renderLabel: (v: T) => string | React.ReactNode\n onChange: (v: T) => void\n activeColor: string\n}) {\n return (\n <div className=\"a11y-menu-btn-group\">\n {options.map((val) => (\n <button\n key={String(val)}\n onClick={() => onChange(val)}\n className=\"a11y-menu-btn-group-item\"\n data-active={value === val}\n type=\"button\"\n style={{ color: value === val ? activeColor : undefined }}\n >\n {renderLabel(val)}\n </button>\n ))}\n </div>\n )\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -143,6 +143,6 @@ declare function useInjectStyles(styles?: string): void;
|
|
|
143
143
|
* Injected automatically when the component mounts.
|
|
144
144
|
* Users can also import `ieee-atiig-accessibility-menu/styles.css` for static loading.
|
|
145
145
|
*/
|
|
146
|
-
declare const styles = "\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed
|
|
146
|
+
declare const styles = "\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed;\n z-index: var(--a11y-z, 60);\n display: flex; align-items: center; justify-content: center;\n width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;\n color: #fff;\n transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;\n background: linear-gradient(135deg, var(--a11y-gradient-from, #023A74), var(--a11y-gradient-to, #01A0A0));\n box-shadow: 0 4px 30px rgba(2, 58, 116, 0.28);\n}\n.a11y-menu-button:hover { transform: scale(1.1); }\n.a11y-menu-button:active { transform: scale(0.95); }\n.a11y-menu-button[data-open=\"true\"] {\n transform: rotate(180deg);\n background: var(--a11y-primary, #0D6EAD);\n box-shadow: 0 10px 20px rgba(2, 58, 116, 0.3);\n}\n.a11y-menu-button-icon { width: 24px; height: 24px; }\n\n.a11y-menu-overlay {\n position: fixed; inset: 0; z-index: 65;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n.a11y-menu-panel {\n position: fixed; z-index: 70;\n width: calc(100% - 32px); max-width: 320px;\n padding: 20px; border: 1px solid; border-radius: 24px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); overflow: hidden;\n animation: a11y-menu-fade-in 0.3s ease;\n}\n\n@keyframes a11y-menu-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@media (min-width: 768px) {\n .a11y-menu-panel { left: 20px; right: auto; }\n .a11y-menu-panel[data-right=\"true\"] { left: auto; right: 20px; }\n}\n\n.a11y-menu-header {\n display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px;\n}\n.a11y-menu-header-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-header-icon {\n width: 36px; height: 36px; border-radius: 16px;\n display: flex; align-items: center; justify-content: center;\n color: #fff; box-shadow: 0 4px 14px rgba(2, 58, 116, 0.15);\n}\n.a11y-menu-header-icon svg { width: 16px; height: 16px; }\n.a11y-menu-title {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; margin: 0;\n}\n.a11y-menu-close {\n width: 28px; height: 28px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; display: flex;\n align-items: center; justify-content: center; color: #94a3b8;\n transition: background 0.2s ease;\n}\n.a11y-menu-close:hover { background: #f1f5f9; }\n.a11y-menu-close svg { width: 16px; height: 16px; }\n\n.a11y-menu-body { max-height: 65vh; overflow-y: auto; padding-right: 4px; }\n.a11y-menu-body::-webkit-scrollbar { width: 4px; }\n.a11y-menu-body::-webkit-scrollbar-track { background: transparent; }\n.a11y-menu-body::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 2px; }\n\n.a11y-menu-section { margin-bottom: 16px; }\n.a11y-menu-section-label {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; color: #94a3b8;\n margin-left: 4px; margin-bottom: 8px;\n display: flex; align-items: center; gap: 8px;\n}\n\n.a11y-menu-btn-group {\n display: flex; gap: 4px; background: #f8fafc;\n padding: 4px; border-radius: 16px;\n border: 1px solid rgba(226, 232, 240, 0.8); overflow-x: auto;\n}\n.a11y-menu-btn-group-item {\n flex: 1; min-width: 32px; padding: 8px 4px; border: none; border-radius: 12px;\n background: transparent; font-size: 10px; font-weight: 700; color: #94a3b8;\n cursor: pointer; transition: all 0.2s ease;\n display: flex; align-items: center; justify-content: center;\n}\n.a11y-menu-btn-group-item[data-active=\"true\"] {\n background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transform: scale(1.02);\n}\n.a11y-menu-btn-group-item:hover { color: #475569; }\n\n.a11y-menu-toggle {\n width: 100%; display: flex; align-items: center; justify-content: space-between;\n padding: 10px; border-radius: 16px; border: 1px solid transparent;\n cursor: pointer; transition: all 0.3s ease; margin-bottom: 8px;\n}\n.a11y-menu-toggle:hover { background: rgba(248, 250, 252, 0.3); }\n.a11y-menu-toggle-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-toggle-icon-wrap {\n width: 32px; height: 32px; border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n background: #f8fafc; color: #94a3b8; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-icon-wrap svg { width: 16px; height: 16px; }\n.a11y-menu-toggle-icon-wrap[data-active=\"true\"] { color: #fff; }\n.a11y-menu-toggle-label { font-size: 11px; font-weight: 700; letter-spacing: -0.01em; color: #475569; }\n.a11y-menu-toggle-check {\n width: 20px; height: 20px; border-radius: 50%; border: 2px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-check[data-active=\"true\"] { background: #01a0a0; border-color: #01a0a0; color: #fff; }\n.a11y-menu-check-icon { width: 10px; height: 10px; stroke-width: 5; }\n\n.a11y-menu-reset {\n width: 100%; margin-top: 20px; padding: 12px; border-radius: 16px;\n background: #f8fafc; border: 1px solid #f1f5f9;\n font-size: 9px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; cursor: pointer; transition: background 0.2s ease;\n}\n.a11y-menu-reset:hover { background: #f1f5f9; }\n\n@media (max-width: 767px) {\n .a11y-menu-panel { left: 16px; right: 16px; }\n .a11y-menu-panel[data-right=\"true\"] { left: 16px; right: 16px; }\n}\n";
|
|
147
147
|
|
|
148
148
|
export { ALL_ROOT_CLASSES, AccessibilityMenu, type AccessibilityMenuProps, type AccessibilitySettings, AccessibilityToggle, type AccessibilityToggleProps, DEFAULT_LABELS, DEFAULT_SETTINGS, DEFAULT_THEME, DEFAULT_Z_INDEX, type FontSizeStep, type LineHeightStep, type MenuPosition, type PositionOffset, ROOT_CLASSES, ReadingAid, type ReadingAidProps, type SectionLabels, type TextAlignOption, type ThemeColors, type ZIndexConfig, styles, useInjectStyles, useIsMobile, useSettings };
|
package/dist/index.d.ts
CHANGED
|
@@ -143,6 +143,6 @@ declare function useInjectStyles(styles?: string): void;
|
|
|
143
143
|
* Injected automatically when the component mounts.
|
|
144
144
|
* Users can also import `ieee-atiig-accessibility-menu/styles.css` for static loading.
|
|
145
145
|
*/
|
|
146
|
-
declare const styles = "\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed
|
|
146
|
+
declare const styles = "\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed;\n z-index: var(--a11y-z, 60);\n display: flex; align-items: center; justify-content: center;\n width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;\n color: #fff;\n transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;\n background: linear-gradient(135deg, var(--a11y-gradient-from, #023A74), var(--a11y-gradient-to, #01A0A0));\n box-shadow: 0 4px 30px rgba(2, 58, 116, 0.28);\n}\n.a11y-menu-button:hover { transform: scale(1.1); }\n.a11y-menu-button:active { transform: scale(0.95); }\n.a11y-menu-button[data-open=\"true\"] {\n transform: rotate(180deg);\n background: var(--a11y-primary, #0D6EAD);\n box-shadow: 0 10px 20px rgba(2, 58, 116, 0.3);\n}\n.a11y-menu-button-icon { width: 24px; height: 24px; }\n\n.a11y-menu-overlay {\n position: fixed; inset: 0; z-index: 65;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n.a11y-menu-panel {\n position: fixed; z-index: 70;\n width: calc(100% - 32px); max-width: 320px;\n padding: 20px; border: 1px solid; border-radius: 24px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); overflow: hidden;\n animation: a11y-menu-fade-in 0.3s ease;\n}\n\n@keyframes a11y-menu-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@media (min-width: 768px) {\n .a11y-menu-panel { left: 20px; right: auto; }\n .a11y-menu-panel[data-right=\"true\"] { left: auto; right: 20px; }\n}\n\n.a11y-menu-header {\n display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px;\n}\n.a11y-menu-header-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-header-icon {\n width: 36px; height: 36px; border-radius: 16px;\n display: flex; align-items: center; justify-content: center;\n color: #fff; box-shadow: 0 4px 14px rgba(2, 58, 116, 0.15);\n}\n.a11y-menu-header-icon svg { width: 16px; height: 16px; }\n.a11y-menu-title {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; margin: 0;\n}\n.a11y-menu-close {\n width: 28px; height: 28px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; display: flex;\n align-items: center; justify-content: center; color: #94a3b8;\n transition: background 0.2s ease;\n}\n.a11y-menu-close:hover { background: #f1f5f9; }\n.a11y-menu-close svg { width: 16px; height: 16px; }\n\n.a11y-menu-body { max-height: 65vh; overflow-y: auto; padding-right: 4px; }\n.a11y-menu-body::-webkit-scrollbar { width: 4px; }\n.a11y-menu-body::-webkit-scrollbar-track { background: transparent; }\n.a11y-menu-body::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 2px; }\n\n.a11y-menu-section { margin-bottom: 16px; }\n.a11y-menu-section-label {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; color: #94a3b8;\n margin-left: 4px; margin-bottom: 8px;\n display: flex; align-items: center; gap: 8px;\n}\n\n.a11y-menu-btn-group {\n display: flex; gap: 4px; background: #f8fafc;\n padding: 4px; border-radius: 16px;\n border: 1px solid rgba(226, 232, 240, 0.8); overflow-x: auto;\n}\n.a11y-menu-btn-group-item {\n flex: 1; min-width: 32px; padding: 8px 4px; border: none; border-radius: 12px;\n background: transparent; font-size: 10px; font-weight: 700; color: #94a3b8;\n cursor: pointer; transition: all 0.2s ease;\n display: flex; align-items: center; justify-content: center;\n}\n.a11y-menu-btn-group-item[data-active=\"true\"] {\n background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transform: scale(1.02);\n}\n.a11y-menu-btn-group-item:hover { color: #475569; }\n\n.a11y-menu-toggle {\n width: 100%; display: flex; align-items: center; justify-content: space-between;\n padding: 10px; border-radius: 16px; border: 1px solid transparent;\n cursor: pointer; transition: all 0.3s ease; margin-bottom: 8px;\n}\n.a11y-menu-toggle:hover { background: rgba(248, 250, 252, 0.3); }\n.a11y-menu-toggle-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-toggle-icon-wrap {\n width: 32px; height: 32px; border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n background: #f8fafc; color: #94a3b8; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-icon-wrap svg { width: 16px; height: 16px; }\n.a11y-menu-toggle-icon-wrap[data-active=\"true\"] { color: #fff; }\n.a11y-menu-toggle-label { font-size: 11px; font-weight: 700; letter-spacing: -0.01em; color: #475569; }\n.a11y-menu-toggle-check {\n width: 20px; height: 20px; border-radius: 50%; border: 2px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-check[data-active=\"true\"] { background: #01a0a0; border-color: #01a0a0; color: #fff; }\n.a11y-menu-check-icon { width: 10px; height: 10px; stroke-width: 5; }\n\n.a11y-menu-reset {\n width: 100%; margin-top: 20px; padding: 12px; border-radius: 16px;\n background: #f8fafc; border: 1px solid #f1f5f9;\n font-size: 9px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; cursor: pointer; transition: background 0.2s ease;\n}\n.a11y-menu-reset:hover { background: #f1f5f9; }\n\n@media (max-width: 767px) {\n .a11y-menu-panel { left: 16px; right: 16px; }\n .a11y-menu-panel[data-right=\"true\"] { left: 16px; right: 16px; }\n}\n";
|
|
147
147
|
|
|
148
148
|
export { ALL_ROOT_CLASSES, AccessibilityMenu, type AccessibilityMenuProps, type AccessibilitySettings, AccessibilityToggle, type AccessibilityToggleProps, DEFAULT_LABELS, DEFAULT_SETTINGS, DEFAULT_THEME, DEFAULT_Z_INDEX, type FontSizeStep, type LineHeightStep, type MenuPosition, type PositionOffset, ROOT_CLASSES, ReadingAid, type ReadingAidProps, type SectionLabels, type TextAlignOption, type ThemeColors, type ZIndexConfig, styles, useInjectStyles, useIsMobile, useSettings };
|
package/dist/index.js
CHANGED
|
@@ -339,13 +339,22 @@ var styles = `
|
|
|
339
339
|
}
|
|
340
340
|
|
|
341
341
|
.a11y-menu-button {
|
|
342
|
-
position: fixed;
|
|
342
|
+
position: fixed;
|
|
343
|
+
z-index: var(--a11y-z, 60);
|
|
344
|
+
display: flex; align-items: center; justify-content: center;
|
|
343
345
|
width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;
|
|
344
|
-
color: #fff;
|
|
346
|
+
color: #fff;
|
|
347
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
|
|
348
|
+
background: linear-gradient(135deg, var(--a11y-gradient-from, #023A74), var(--a11y-gradient-to, #01A0A0));
|
|
349
|
+
box-shadow: 0 4px 30px rgba(2, 58, 116, 0.28);
|
|
345
350
|
}
|
|
346
351
|
.a11y-menu-button:hover { transform: scale(1.1); }
|
|
347
352
|
.a11y-menu-button:active { transform: scale(0.95); }
|
|
348
|
-
.a11y-menu-button[data-open="true"] {
|
|
353
|
+
.a11y-menu-button[data-open="true"] {
|
|
354
|
+
transform: rotate(180deg);
|
|
355
|
+
background: var(--a11y-primary, #0D6EAD);
|
|
356
|
+
box-shadow: 0 10px 20px rgba(2, 58, 116, 0.3);
|
|
357
|
+
}
|
|
349
358
|
.a11y-menu-button-icon { width: 24px; height: 24px; }
|
|
350
359
|
|
|
351
360
|
.a11y-menu-overlay {
|
|
@@ -512,19 +521,24 @@ function AccessibilityMenu({
|
|
|
512
521
|
ssr = false
|
|
513
522
|
}) {
|
|
514
523
|
if (typeof window === "undefined") {
|
|
524
|
+
const ssrTheme = { ...DEFAULT_THEME, ...themeProp };
|
|
525
|
+
const ssrZIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp };
|
|
515
526
|
const isRight2 = position === "bottom-right";
|
|
516
527
|
const offset = typeof positionOffset === "number" ? positionOffset : positionOffset.y;
|
|
517
528
|
return /* @__PURE__ */ jsx(
|
|
518
529
|
"button",
|
|
519
530
|
{
|
|
520
|
-
suppressHydrationWarning: true,
|
|
521
531
|
className: `a11y-menu-button ${buttonClassName}`,
|
|
522
532
|
"data-open": false,
|
|
523
533
|
"data-right": isRight2,
|
|
524
534
|
style: {
|
|
525
535
|
bottom: `${20 + offset}px`,
|
|
526
536
|
left: isRight2 ? void 0 : `${20 + offset}px`,
|
|
527
|
-
right: isRight2 ? `${20 + offset}px` : void 0
|
|
537
|
+
right: isRight2 ? `${20 + offset}px` : void 0,
|
|
538
|
+
"--a11y-z": `${ssrZIndex.button}`,
|
|
539
|
+
"--a11y-gradient-from": ssrTheme.gradientFrom,
|
|
540
|
+
"--a11y-gradient-to": ssrTheme.gradientTo,
|
|
541
|
+
"--a11y-primary": ssrTheme.primary
|
|
528
542
|
},
|
|
529
543
|
"aria-label": labelsProp?.menuButton || "Accessibility Menu",
|
|
530
544
|
type: "button",
|
|
@@ -577,9 +591,10 @@ function AccessibilityMenu({
|
|
|
577
591
|
bottom: `${20 + offsetNum}px`,
|
|
578
592
|
left: isRight ? void 0 : `${20 + offsetNum}px`,
|
|
579
593
|
right: isRight ? `${20 + offsetNum}px` : void 0,
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
594
|
+
"--a11y-z": `${zIndex.button}`,
|
|
595
|
+
"--a11y-gradient-from": theme.gradientFrom,
|
|
596
|
+
"--a11y-gradient-to": theme.gradientTo,
|
|
597
|
+
"--a11y-primary": theme.primary
|
|
583
598
|
},
|
|
584
599
|
"aria-label": labels.menuButton,
|
|
585
600
|
type: "button",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-is-mobile.ts","../src/use-mouse-position.ts","../src/types.ts","../src/use-settings.ts","../src/use-inject-styles.ts","../src/reading-aid.tsx","../src/accessibility-toggle.tsx","../src/styles.ts","../src/accessibility-menu.tsx"],"names":["useState","useEffect","styles","jsxs","jsx","isRight","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect } from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\n/**\n * Detects if the viewport is mobile-sized.\n * The original component imported this from a project-specific `@/hooks/use-mobile` module.\n * This implementation uses a basic window width check compatible with SSR.\n */\nexport function useIsMobile(breakpoint: number = MOBILE_BREAKPOINT): boolean {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < breakpoint)\n check()\n window.addEventListener(\"resize\", check)\n return () => window.removeEventListener(\"resize\", check)\n }, [breakpoint])\n\n return isMobile\n}\n","import { useState, useEffect } from \"react\"\n\n/**\n * Tracks the vertical mouse/touch position for the reading aid overlay.\n * Falls back to a safe default during SSR.\n */\nexport function useMousePosition(isMobile: boolean): { y: number } {\n const [mousePos, setMousePos] = useState({ y: 300 })\n\n useEffect(() => {\n if (isMobile) {\n const handleTouch = (e: TouchEvent) => {\n if (e.touches.length > 0) setMousePos({ y: e.touches[0].clientY })\n }\n window.addEventListener(\"touchmove\", handleTouch, { passive: true })\n return () => window.removeEventListener(\"touchmove\", handleTouch)\n }\n\n const handleMouseMove = (e: MouseEvent) => setMousePos({ y: e.clientY })\n window.addEventListener(\"mousemove\", handleMouseMove)\n return () => window.removeEventListener(\"mousemove\", handleMouseMove)\n }, [isMobile])\n\n return mousePos\n}\n","import type { ReactNode } from \"react\"\n\nexport type FontSizeStep = 0 | 10 | 20 | 30\n\nexport type LineHeightStep = 0 | 15 | 20 | 25\n\nexport type TextAlignOption = \"off\" | \"left\" | \"center\" | \"right\" | \"justify\"\n\nexport interface AccessibilitySettings {\n fontSize: FontSizeStep\n lineHeight: LineHeightStep\n textAlign: TextAlignOption\n dyslexicFont: boolean\n grayscale: boolean\n stopAnimations: boolean\n bigCursor: boolean\n readingAid: boolean\n readingAidSize: number\n}\n\nexport type MenuPosition = \"bottom-left\" | \"bottom-right\"\n\nexport interface PositionOffset {\n x: number\n y: number\n}\n\nexport interface ThemeColors {\n primary: string\n primaryHover: string\n accent: string\n accentOverlay: string\n border: string\n background: string\n text: string\n textMuted: string\n activeBg: string\n activeBorder: string\n gradientFrom: string\n gradientTo: string\n}\n\nexport interface SectionLabels {\n fontSize: string\n lineHeight: string\n alignment: string\n readingAid: string\n desaturate: string\n dyslexicFont: string\n bigCursor: string\n stopAnimations: string\n reset: string\n menuTitle: string\n menuButton: string\n off: string\n}\n\nexport interface ZIndexConfig {\n button: number\n overlay: number\n panel: number\n readingAid: number\n}\n\nexport interface AccessibilityMenuProps {\n initialSettings?: Partial<AccessibilitySettings>\n storageKey?: string\n position?: MenuPosition\n positionOffset?: number | PositionOffset\n labels?: Partial<SectionLabels>\n className?: string\n buttonClassName?: string\n panelClassName?: string\n zIndex?: Partial<ZIndexConfig>\n onSettingsChange?: (settings: AccessibilitySettings) => void\n onReset?: () => void\n showResetButton?: boolean\n showFontSize?: boolean\n showLineHeight?: boolean\n showAlignment?: boolean\n showReadingAid?: boolean\n showDesaturate?: boolean\n showDyslexicFont?: boolean\n showBigCursor?: boolean\n showStopAnimations?: boolean\n theme?: Partial<ThemeColors>\n ssr?: boolean\n}\n\nexport interface AccessibilityToggleProps {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport interface ReadingAidProps {\n mouseY: number\n size: number\n zIndex: number\n theme?: Partial<ThemeColors>\n}\n\nexport const DEFAULT_SETTINGS: AccessibilitySettings = {\n fontSize: 0,\n lineHeight: 0,\n textAlign: \"off\",\n dyslexicFont: false,\n grayscale: false,\n stopAnimations: false,\n bigCursor: false,\n readingAid: false,\n readingAidSize: 1,\n}\n\nexport const DEFAULT_LABELS: SectionLabels = {\n fontSize: \"Font Size\",\n lineHeight: \"Line Height\",\n alignment: \"Alignment\",\n readingAid: \"Reading Aid\",\n desaturate: \"Desaturate\",\n dyslexicFont: \"Dyslexia Friendly\",\n bigCursor: \"Big Cursor\",\n stopAnimations: \"Stop Animations\",\n reset: \"Reset Settings\",\n menuTitle: \"Accessibility\",\n menuButton: \"Accessibility Menu\",\n off: \"Off\",\n}\n\nexport const DEFAULT_Z_INDEX: ZIndexConfig = {\n button: 60,\n overlay: 65,\n panel: 70,\n readingAid: 9998,\n}\n\nexport const DEFAULT_THEME: ThemeColors = {\n primary: \"#023A74\",\n primaryHover: \"#012a55\",\n accent: \"#01A0A0\",\n accentOverlay: \"rgba(1, 160, 160, 0.6)\",\n border: \"#e2e8f0\",\n background: \"#ffffff\",\n text: \"#0f172a\",\n textMuted: \"#94a3b8\",\n activeBg: \"rgba(1, 160, 160, 0.05)\",\n activeBorder: \"rgba(1, 160, 160, 0.2)\",\n gradientFrom: \"#023A74\",\n gradientTo: \"#01A0A0\",\n}\n\nexport const ROOT_CLASSES = {\n fontSize: (v: number) => `a11y-font-size-${v}`,\n lineHeight: (v: number) => `a11y-line-height-${v}`,\n textAlign: (v: string) => `a11y-align-${v}`,\n dyslexicFont: \"a11y-dyslexic-font\",\n grayscale: \"a11y-grayscale\",\n stopAnimations: \"a11y-stop-animations\",\n bigCursor: \"a11y-big-cursor\",\n} as const\n\nexport const ALL_ROOT_CLASSES = [\n \"a11y-font-size-10\",\n \"a11y-font-size-20\",\n \"a11y-font-size-30\",\n \"a11y-line-height-15\",\n \"a11y-line-height-20\",\n \"a11y-line-height-25\",\n \"a11y-align-left\",\n \"a11y-align-right\",\n \"a11y-align-center\",\n \"a11y-align-justify\",\n \"a11y-dyslexic-font\",\n \"a11y-grayscale\",\n \"a11y-stop-animations\",\n \"a11y-big-cursor\",\n] as const\n","import { useState, useEffect, useCallback } from \"react\"\nimport type { AccessibilitySettings } from \"./types\"\nimport { DEFAULT_SETTINGS, ALL_ROOT_CLASSES } from \"./types\"\n\nfunction applyRootClasses(settings: AccessibilitySettings) {\n if (typeof document === \"undefined\") return\n const root = document.documentElement\n\n ALL_ROOT_CLASSES.forEach((cls) => root.classList.remove(cls))\n\n if (settings.fontSize > 0) root.classList.add(`a11y-font-size-${settings.fontSize}`)\n if (settings.lineHeight > 0) root.classList.add(`a11y-line-height-${settings.lineHeight}`)\n if (settings.textAlign !== \"off\") root.classList.add(`a11y-align-${settings.textAlign}`)\n if (settings.dyslexicFont) root.classList.add(\"a11y-dyslexic-font\")\n if (settings.grayscale) root.classList.add(\"a11y-grayscale\")\n if (settings.stopAnimations) root.classList.add(\"a11y-stop-animations\")\n if (settings.bigCursor) root.classList.add(\"a11y-big-cursor\")\n}\n\nexport function useSettings(\n storageKey: string,\n initialSettings?: Partial<AccessibilitySettings>,\n onSettingsChange?: (settings: AccessibilitySettings) => void,\n) {\n const [settings, setSettings] = useState<AccessibilitySettings>(() => {\n if (typeof window === \"undefined\") {\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n }\n\n try {\n const saved = localStorage.getItem(storageKey)\n if (saved) {\n return { ...DEFAULT_SETTINGS, ...JSON.parse(saved), ...initialSettings }\n }\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to parse stored settings:`, error)\n }\n\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n })\n\n useEffect(() => {\n applyRootClasses(settings)\n }, [settings])\n\n const persist = useCallback(\n (next: AccessibilitySettings) => {\n if (typeof window !== \"undefined\") {\n try {\n localStorage.setItem(storageKey, JSON.stringify(next))\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to persist settings:`, error)\n }\n }\n onSettingsChange?.(next)\n },\n [storageKey, onSettingsChange],\n )\n\n const setVal = useCallback(\n <K extends keyof AccessibilitySettings>(key: K, val: AccessibilitySettings[K]) => {\n setSettings((prev) => {\n const next = { ...prev, [key]: val }\n persist(next)\n return next\n })\n },\n [persist],\n )\n\n const resetSettings = useCallback(() => {\n const defaults = { ...DEFAULT_SETTINGS, ...initialSettings }\n setSettings(defaults)\n persist(defaults)\n }, [initialSettings, persist])\n\n return { settings, setVal, resetSettings }\n}\n","import { useEffect } from \"react\"\n\nconst STYLE_ID = \"ieee-atiig-accessibility-menu-injected-styles\"\n\n/**\n * Injects the package stylesheet into the document head at runtime.\n * This is automatically called by the component but can be used standalone.\n */\nexport function useInjectStyles(styles?: string) {\n useEffect(() => {\n if (typeof window === \"undefined\") return\n if (document.getElementById(STYLE_ID)) return\n\n if (styles) {\n const style = document.createElement(\"style\")\n style.id = STYLE_ID\n style.textContent = styles\n document.head.appendChild(style)\n }\n }, [styles])\n}\n","import type { ReadingAidProps } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\nexport function ReadingAid({ mouseY, size, zIndex, theme: themeProp }: ReadingAidProps) {\n const theme = { ...DEFAULT_THEME, ...themeProp }\n const readingAidHeight = 56 * (size || 1)\n const offset = readingAidHeight / 2\n\n return (\n <>\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"top\"\n style={{\n height: `${Math.max(0, mouseY - offset)}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"bottom\"\n style={{\n top: `${mouseY + offset}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-bar\"\n style={{\n top: `${mouseY - offset}px`,\n height: `${readingAidHeight}px`,\n zIndex: zIndex - 1,\n background: \"rgba(1, 160, 160, 0.06)\",\n borderTop: `2px solid ${theme.accentOverlay}`,\n borderBottom: `2px solid ${theme.accentOverlay}`,\n }}\n />\n </>\n )\n}\n","import type { ReactNode } from \"react\"\nimport type { ThemeColors } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\ninterface Props {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport function AccessibilityToggle({ icon, label, isActive, onToggle, theme: themeProp }: Props) {\n const t = { ...DEFAULT_THEME, ...themeProp }\n\n return (\n <button\n onClick={onToggle}\n className=\"a11y-menu-toggle\"\n data-active={isActive}\n type=\"button\"\n aria-pressed={isActive}\n style={{\n borderColor: isActive ? t.activeBorder : \"transparent\",\n backgroundColor: isActive ? t.activeBg : t.background,\n }}\n >\n <div className=\"a11y-menu-toggle-left\">\n <div\n className=\"a11y-menu-toggle-icon-wrap\"\n data-active={isActive}\n style={{\n background: isActive\n ? `linear-gradient(135deg, ${t.gradientFrom}, ${t.gradientTo})`\n : undefined,\n }}\n >\n {icon}\n </div>\n <span\n className=\"a11y-menu-toggle-label\"\n style={{ color: isActive ? t.primary : undefined }}\n >\n {label}\n </span>\n </div>\n <div\n className=\"a11y-menu-toggle-check\"\n data-active={isActive}\n style={{\n backgroundColor: isActive ? t.accent : undefined,\n borderColor: isActive ? t.accent : t.border,\n }}\n >\n <svg\n className=\"a11y-menu-check-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n </button>\n )\n}\n","/**\n * Inline styles for the accessibility menu.\n * Injected automatically when the component mounts.\n * Users can also import `ieee-atiig-accessibility-menu/styles.css` for static loading.\n */\n\n// We duplicate the CSS here so the component can inject it at runtime\n// without requiring users to manually import a CSS file.\nexport const styles = `\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed; z-index: 60; display: flex; align-items: center; justify-content: center;\n width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;\n color: #fff; transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;\n}\n.a11y-menu-button:hover { transform: scale(1.1); }\n.a11y-menu-button:active { transform: scale(0.95); }\n.a11y-menu-button[data-open=\"true\"] { transform: rotate(180deg); }\n.a11y-menu-button-icon { width: 24px; height: 24px; }\n\n.a11y-menu-overlay {\n position: fixed; inset: 0; z-index: 65;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n.a11y-menu-panel {\n position: fixed; z-index: 70;\n width: calc(100% - 32px); max-width: 320px;\n padding: 20px; border: 1px solid; border-radius: 24px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); overflow: hidden;\n animation: a11y-menu-fade-in 0.3s ease;\n}\n\n@keyframes a11y-menu-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@media (min-width: 768px) {\n .a11y-menu-panel { left: 20px; right: auto; }\n .a11y-menu-panel[data-right=\"true\"] { left: auto; right: 20px; }\n}\n\n.a11y-menu-header {\n display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px;\n}\n.a11y-menu-header-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-header-icon {\n width: 36px; height: 36px; border-radius: 16px;\n display: flex; align-items: center; justify-content: center;\n color: #fff; box-shadow: 0 4px 14px rgba(2, 58, 116, 0.15);\n}\n.a11y-menu-header-icon svg { width: 16px; height: 16px; }\n.a11y-menu-title {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; margin: 0;\n}\n.a11y-menu-close {\n width: 28px; height: 28px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; display: flex;\n align-items: center; justify-content: center; color: #94a3b8;\n transition: background 0.2s ease;\n}\n.a11y-menu-close:hover { background: #f1f5f9; }\n.a11y-menu-close svg { width: 16px; height: 16px; }\n\n.a11y-menu-body { max-height: 65vh; overflow-y: auto; padding-right: 4px; }\n.a11y-menu-body::-webkit-scrollbar { width: 4px; }\n.a11y-menu-body::-webkit-scrollbar-track { background: transparent; }\n.a11y-menu-body::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 2px; }\n\n.a11y-menu-section { margin-bottom: 16px; }\n.a11y-menu-section-label {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; color: #94a3b8;\n margin-left: 4px; margin-bottom: 8px;\n display: flex; align-items: center; gap: 8px;\n}\n\n.a11y-menu-btn-group {\n display: flex; gap: 4px; background: #f8fafc;\n padding: 4px; border-radius: 16px;\n border: 1px solid rgba(226, 232, 240, 0.8); overflow-x: auto;\n}\n.a11y-menu-btn-group-item {\n flex: 1; min-width: 32px; padding: 8px 4px; border: none; border-radius: 12px;\n background: transparent; font-size: 10px; font-weight: 700; color: #94a3b8;\n cursor: pointer; transition: all 0.2s ease;\n display: flex; align-items: center; justify-content: center;\n}\n.a11y-menu-btn-group-item[data-active=\"true\"] {\n background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transform: scale(1.02);\n}\n.a11y-menu-btn-group-item:hover { color: #475569; }\n\n.a11y-menu-toggle {\n width: 100%; display: flex; align-items: center; justify-content: space-between;\n padding: 10px; border-radius: 16px; border: 1px solid transparent;\n cursor: pointer; transition: all 0.3s ease; margin-bottom: 8px;\n}\n.a11y-menu-toggle:hover { background: rgba(248, 250, 252, 0.3); }\n.a11y-menu-toggle-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-toggle-icon-wrap {\n width: 32px; height: 32px; border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n background: #f8fafc; color: #94a3b8; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-icon-wrap svg { width: 16px; height: 16px; }\n.a11y-menu-toggle-icon-wrap[data-active=\"true\"] { color: #fff; }\n.a11y-menu-toggle-label { font-size: 11px; font-weight: 700; letter-spacing: -0.01em; color: #475569; }\n.a11y-menu-toggle-check {\n width: 20px; height: 20px; border-radius: 50%; border: 2px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-check[data-active=\"true\"] { background: #01a0a0; border-color: #01a0a0; color: #fff; }\n.a11y-menu-check-icon { width: 10px; height: 10px; stroke-width: 5; }\n\n.a11y-menu-reset {\n width: 100%; margin-top: 20px; padding: 12px; border-radius: 16px;\n background: #f8fafc; border: 1px solid #f1f5f9;\n font-size: 9px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; cursor: pointer; transition: background 0.2s ease;\n}\n.a11y-menu-reset:hover { background: #f1f5f9; }\n\n@media (max-width: 767px) {\n .a11y-menu-panel { left: 16px; right: 16px; }\n .a11y-menu-panel[data-right=\"true\"] { left: 16px; right: 16px; }\n}\n`\n","\n\"use client\"\n\nimport { useState } from \"react\"\nimport { useIsMobile } from \"./use-is-mobile\"\nimport { useMousePosition } from \"./use-mouse-position\"\nimport { useSettings } from \"./use-settings\"\nimport { useInjectStyles } from \"./use-inject-styles\"\nimport { ReadingAid } from \"./reading-aid\"\nimport { AccessibilityToggle } from \"./accessibility-toggle\"\nimport type { AccessibilityMenuProps } from \"./types\"\nimport {\n DEFAULT_LABELS,\n DEFAULT_Z_INDEX,\n DEFAULT_THEME,\n} from \"./types\"\nimport { styles } from \"./styles\"\n\nconst ALIGNMENT_ICONS = {\n off: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n left: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h12\" />\n <path d=\"M3 18h6\" />\n </svg>\n ),\n center: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M6 12h12\" />\n <path d=\"M9 18h6\" />\n </svg>\n ),\n right: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M9 12h12\" />\n <path d=\"M15 18h6\" />\n </svg>\n ),\n justify: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h18\" />\n <path d=\"M3 18h18\" />\n </svg>\n ),\n} as const\n\nconst ALIGNMENT_VALUES = [\"off\", \"left\", \"center\", \"right\", \"justify\"] as const\n\nexport function AccessibilityMenu({\n initialSettings,\n storageKey = \"ieee-atiig-accessibility-menu-settings\",\n position = \"bottom-left\",\n positionOffset = 0,\n labels: labelsProp,\n className = \"\",\n buttonClassName = \"\",\n panelClassName = \"\",\n zIndex: zIndexProp,\n onSettingsChange,\n onReset,\n showResetButton = true,\n showFontSize = true,\n showLineHeight = true,\n showAlignment = true,\n showReadingAid = true,\n showDesaturate = true,\n showDyslexicFont = true,\n showBigCursor = true,\n showStopAnimations = true,\n theme: themeProp,\n ssr = false,\n}: AccessibilityMenuProps) {\n if (typeof window === \"undefined\") {\n const isRight = position === \"bottom-right\"\n const offset = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n return (\n <button\n suppressHydrationWarning\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={false}\n data-right={isRight}\n style={{\n bottom: `${20 + offset}px`,\n left: isRight ? undefined : `${20 + offset}px`,\n right: isRight ? `${20 + offset}px` : undefined,\n }}\n aria-label={labelsProp?.menuButton || \"Accessibility Menu\"}\n type=\"button\"\n >\n <svg className=\"a11y-menu-button-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n )\n }\n\n useInjectStyles(styles)\n\n const [isOpen, setIsOpen] = useState(false)\n const isMobile = useIsMobile()\n const mousePos = useMousePosition(isMobile)\n const { settings, setVal, resetSettings } = useSettings(\n storageKey,\n initialSettings,\n onSettingsChange,\n )\n\n const labels = { ...DEFAULT_LABELS, ...labelsProp }\n const zIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp }\n const theme = { ...DEFAULT_THEME, ...themeProp }\n\n const offsetNum = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n const isRight = position === \"bottom-right\"\n\n const handleReset = () => {\n resetSettings()\n onReset?.()\n }\n\n return (\n <>\n {settings.readingAid && (\n <ReadingAid\n mouseY={mousePos.y}\n size={settings.readingAidSize}\n zIndex={zIndex.readingAid}\n theme={theme}\n />\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={isOpen}\n data-right={isRight}\n style={{\n bottom: `${20 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n zIndex: zIndex.button,\n background: isOpen\n ? theme.primary\n : `linear-gradient(135deg, ${theme.gradientFrom}, ${theme.gradientTo})`,\n boxShadow: isOpen\n ? `0 10px 20px rgba(2, 58, 116, 0.3)`\n : `0 4px 30px rgba(2, 58, 116, 0.28)`,\n }}\n aria-label={labels.menuButton}\n type=\"button\"\n >\n <svg\n className=\"a11y-menu-button-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <>\n <div\n className=\"a11y-menu-overlay\"\n onClick={() => setIsOpen(false)}\n style={{ zIndex: zIndex.overlay }}\n />\n <div\n className={`a11y-menu-panel ${panelClassName} ${className}`}\n data-right={isRight}\n style={{\n bottom: `${80 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n zIndex: zIndex.panel,\n backgroundColor: theme.background,\n borderColor: theme.border,\n }}\n >\n <div className=\"a11y-menu-header\">\n <div className=\"a11y-menu-header-left\">\n <div\n className=\"a11y-menu-header-icon\"\n style={{\n background: `linear-gradient(135deg, ${theme.gradientFrom}, ${theme.gradientTo})`,\n }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </div>\n <h3 className=\"a11y-menu-title\" style={{ color: theme.text }}>\n {labels.menuTitle}\n </h3>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"a11y-menu-close\"\n type=\"button\"\n aria-label=\"Close\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"a11y-menu-body\">\n {showFontSize && (\n <Section label={labels.fontSize}>\n <ButtonGroup\n value={settings.fontSize}\n options={[0, 10, 20, 30]}\n renderLabel={(v) => (v === 0 ? labels.off : `+${v}%`)}\n onChange={(v) => setVal(\"fontSize\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showLineHeight && (\n <Section label={labels.lineHeight}>\n <ButtonGroup\n value={settings.lineHeight}\n options={[0, 15, 20, 25]}\n renderLabel={(v) => (v === 0 ? labels.off : `${1 + v / 100}x`)}\n onChange={(v) => setVal(\"lineHeight\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showAlignment && (\n <Section label={labels.alignment}>\n <ButtonGroup\n value={settings.textAlign}\n options={ALIGNMENT_VALUES}\n renderLabel={(v: string) => ALIGNMENT_ICONS[v as keyof typeof ALIGNMENT_ICONS]}\n onChange={(v) => setVal(\"textAlign\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showReadingAid && (\n <Section label={labels.readingAid}>\n <ButtonGroup\n value={settings.readingAid ? settings.readingAidSize : 0}\n options={[0, 0.9, 1, 1.2]}\n renderLabel={(v) => (v === 0 ? labels.off : `${v}x`)}\n onChange={(v) => {\n if (v === 0) {\n setVal(\"readingAid\", false)\n } else {\n setVal(\"readingAid\", true)\n setVal(\"readingAidSize\", v as number)\n }\n }}\n activeColor={theme.accent}\n />\n </Section>\n )}\n\n {showDesaturate && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n }\n label={labels.desaturate}\n isActive={settings.grayscale}\n onToggle={() => setVal(\"grayscale\", !settings.grayscale)}\n theme={theme}\n />\n )}\n\n {showDyslexicFont && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n }\n label={labels.dyslexicFont}\n isActive={settings.dyslexicFont}\n onToggle={() => setVal(\"dyslexicFont\", !settings.dyslexicFont)}\n theme={theme}\n />\n )}\n\n {showBigCursor && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M3 3 9.77 19.47a.75.75 0 0 0 1.45.05L13 14.5l3 4.5.77.77a.75.75 0 0 0 1.06 0l3.94-3.94a.75.75 0 0 0 0-1.06L21 14.5l-4.5-3 5.47-1.78a.75.75 0 0 0-.05-1.45L3 3Z\" />\n </svg>\n }\n label={labels.bigCursor}\n isActive={settings.bigCursor}\n onToggle={() => setVal(\"bigCursor\", !settings.bigCursor)}\n theme={theme}\n />\n )}\n\n {showStopAnimations && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M12 2a10 10 0 0 1 7.38 16.75\" />\n <path d=\"M12 22a10 10 0 0 1-7.38-16.75\" />\n <path d=\"M12 22V2\" />\n <path d=\"M2 12h20\" />\n </svg>\n }\n label={labels.stopAnimations}\n isActive={settings.stopAnimations}\n onToggle={() => setVal(\"stopAnimations\", !settings.stopAnimations)}\n theme={theme}\n />\n )}\n </div>\n\n {showResetButton && (\n <button onClick={handleReset} className=\"a11y-menu-reset\" type=\"button\" style={{ color: theme.textMuted }}>\n {labels.reset}\n </button>\n )}\n </div>\n </>\n )}\n </>\n )\n}\n\nfunction Section({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"a11y-menu-section\">\n <div className=\"a11y-menu-section-label\">{label}</div>\n {children}\n </div>\n )\n}\n\nfunction ButtonGroup<T extends string | number>({\n value,\n options,\n renderLabel,\n onChange,\n activeColor,\n}: {\n value: T\n options: readonly T[]\n renderLabel: (v: T) => string | React.ReactNode\n onChange: (v: T) => void\n activeColor: string\n}) {\n return (\n <div className=\"a11y-menu-btn-group\">\n {options.map((val) => (\n <button\n key={String(val)}\n onClick={() => onChange(val)}\n className=\"a11y-menu-btn-group-item\"\n data-active={value === val}\n type=\"button\"\n style={{ color: value === val ? activeColor : undefined }}\n >\n {renderLabel(val)}\n </button>\n ))}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/use-is-mobile.ts","../src/use-mouse-position.ts","../src/types.ts","../src/use-settings.ts","../src/use-inject-styles.ts","../src/reading-aid.tsx","../src/accessibility-toggle.tsx","../src/styles.ts","../src/accessibility-menu.tsx"],"names":["useState","useEffect","styles","jsxs","jsx","isRight","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect } from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\n/**\n * Detects if the viewport is mobile-sized.\n * The original component imported this from a project-specific `@/hooks/use-mobile` module.\n * This implementation uses a basic window width check compatible with SSR.\n */\nexport function useIsMobile(breakpoint: number = MOBILE_BREAKPOINT): boolean {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < breakpoint)\n check()\n window.addEventListener(\"resize\", check)\n return () => window.removeEventListener(\"resize\", check)\n }, [breakpoint])\n\n return isMobile\n}\n","import { useState, useEffect } from \"react\"\n\n/**\n * Tracks the vertical mouse/touch position for the reading aid overlay.\n * Falls back to a safe default during SSR.\n */\nexport function useMousePosition(isMobile: boolean): { y: number } {\n const [mousePos, setMousePos] = useState({ y: 300 })\n\n useEffect(() => {\n if (isMobile) {\n const handleTouch = (e: TouchEvent) => {\n if (e.touches.length > 0) setMousePos({ y: e.touches[0].clientY })\n }\n window.addEventListener(\"touchmove\", handleTouch, { passive: true })\n return () => window.removeEventListener(\"touchmove\", handleTouch)\n }\n\n const handleMouseMove = (e: MouseEvent) => setMousePos({ y: e.clientY })\n window.addEventListener(\"mousemove\", handleMouseMove)\n return () => window.removeEventListener(\"mousemove\", handleMouseMove)\n }, [isMobile])\n\n return mousePos\n}\n","import type { ReactNode } from \"react\"\n\nexport type FontSizeStep = 0 | 10 | 20 | 30\n\nexport type LineHeightStep = 0 | 15 | 20 | 25\n\nexport type TextAlignOption = \"off\" | \"left\" | \"center\" | \"right\" | \"justify\"\n\nexport interface AccessibilitySettings {\n fontSize: FontSizeStep\n lineHeight: LineHeightStep\n textAlign: TextAlignOption\n dyslexicFont: boolean\n grayscale: boolean\n stopAnimations: boolean\n bigCursor: boolean\n readingAid: boolean\n readingAidSize: number\n}\n\nexport type MenuPosition = \"bottom-left\" | \"bottom-right\"\n\nexport interface PositionOffset {\n x: number\n y: number\n}\n\nexport interface ThemeColors {\n primary: string\n primaryHover: string\n accent: string\n accentOverlay: string\n border: string\n background: string\n text: string\n textMuted: string\n activeBg: string\n activeBorder: string\n gradientFrom: string\n gradientTo: string\n}\n\nexport interface SectionLabels {\n fontSize: string\n lineHeight: string\n alignment: string\n readingAid: string\n desaturate: string\n dyslexicFont: string\n bigCursor: string\n stopAnimations: string\n reset: string\n menuTitle: string\n menuButton: string\n off: string\n}\n\nexport interface ZIndexConfig {\n button: number\n overlay: number\n panel: number\n readingAid: number\n}\n\nexport interface AccessibilityMenuProps {\n initialSettings?: Partial<AccessibilitySettings>\n storageKey?: string\n position?: MenuPosition\n positionOffset?: number | PositionOffset\n labels?: Partial<SectionLabels>\n className?: string\n buttonClassName?: string\n panelClassName?: string\n zIndex?: Partial<ZIndexConfig>\n onSettingsChange?: (settings: AccessibilitySettings) => void\n onReset?: () => void\n showResetButton?: boolean\n showFontSize?: boolean\n showLineHeight?: boolean\n showAlignment?: boolean\n showReadingAid?: boolean\n showDesaturate?: boolean\n showDyslexicFont?: boolean\n showBigCursor?: boolean\n showStopAnimations?: boolean\n theme?: Partial<ThemeColors>\n ssr?: boolean\n}\n\nexport interface AccessibilityToggleProps {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport interface ReadingAidProps {\n mouseY: number\n size: number\n zIndex: number\n theme?: Partial<ThemeColors>\n}\n\nexport const DEFAULT_SETTINGS: AccessibilitySettings = {\n fontSize: 0,\n lineHeight: 0,\n textAlign: \"off\",\n dyslexicFont: false,\n grayscale: false,\n stopAnimations: false,\n bigCursor: false,\n readingAid: false,\n readingAidSize: 1,\n}\n\nexport const DEFAULT_LABELS: SectionLabels = {\n fontSize: \"Font Size\",\n lineHeight: \"Line Height\",\n alignment: \"Alignment\",\n readingAid: \"Reading Aid\",\n desaturate: \"Desaturate\",\n dyslexicFont: \"Dyslexia Friendly\",\n bigCursor: \"Big Cursor\",\n stopAnimations: \"Stop Animations\",\n reset: \"Reset Settings\",\n menuTitle: \"Accessibility\",\n menuButton: \"Accessibility Menu\",\n off: \"Off\",\n}\n\nexport const DEFAULT_Z_INDEX: ZIndexConfig = {\n button: 60,\n overlay: 65,\n panel: 70,\n readingAid: 9998,\n}\n\nexport const DEFAULT_THEME: ThemeColors = {\n primary: \"#023A74\",\n primaryHover: \"#012a55\",\n accent: \"#01A0A0\",\n accentOverlay: \"rgba(1, 160, 160, 0.6)\",\n border: \"#e2e8f0\",\n background: \"#ffffff\",\n text: \"#0f172a\",\n textMuted: \"#94a3b8\",\n activeBg: \"rgba(1, 160, 160, 0.05)\",\n activeBorder: \"rgba(1, 160, 160, 0.2)\",\n gradientFrom: \"#023A74\",\n gradientTo: \"#01A0A0\",\n}\n\nexport const ROOT_CLASSES = {\n fontSize: (v: number) => `a11y-font-size-${v}`,\n lineHeight: (v: number) => `a11y-line-height-${v}`,\n textAlign: (v: string) => `a11y-align-${v}`,\n dyslexicFont: \"a11y-dyslexic-font\",\n grayscale: \"a11y-grayscale\",\n stopAnimations: \"a11y-stop-animations\",\n bigCursor: \"a11y-big-cursor\",\n} as const\n\nexport const ALL_ROOT_CLASSES = [\n \"a11y-font-size-10\",\n \"a11y-font-size-20\",\n \"a11y-font-size-30\",\n \"a11y-line-height-15\",\n \"a11y-line-height-20\",\n \"a11y-line-height-25\",\n \"a11y-align-left\",\n \"a11y-align-right\",\n \"a11y-align-center\",\n \"a11y-align-justify\",\n \"a11y-dyslexic-font\",\n \"a11y-grayscale\",\n \"a11y-stop-animations\",\n \"a11y-big-cursor\",\n] as const\n","import { useState, useEffect, useCallback } from \"react\"\nimport type { AccessibilitySettings } from \"./types\"\nimport { DEFAULT_SETTINGS, ALL_ROOT_CLASSES } from \"./types\"\n\nfunction applyRootClasses(settings: AccessibilitySettings) {\n if (typeof document === \"undefined\") return\n const root = document.documentElement\n\n ALL_ROOT_CLASSES.forEach((cls) => root.classList.remove(cls))\n\n if (settings.fontSize > 0) root.classList.add(`a11y-font-size-${settings.fontSize}`)\n if (settings.lineHeight > 0) root.classList.add(`a11y-line-height-${settings.lineHeight}`)\n if (settings.textAlign !== \"off\") root.classList.add(`a11y-align-${settings.textAlign}`)\n if (settings.dyslexicFont) root.classList.add(\"a11y-dyslexic-font\")\n if (settings.grayscale) root.classList.add(\"a11y-grayscale\")\n if (settings.stopAnimations) root.classList.add(\"a11y-stop-animations\")\n if (settings.bigCursor) root.classList.add(\"a11y-big-cursor\")\n}\n\nexport function useSettings(\n storageKey: string,\n initialSettings?: Partial<AccessibilitySettings>,\n onSettingsChange?: (settings: AccessibilitySettings) => void,\n) {\n const [settings, setSettings] = useState<AccessibilitySettings>(() => {\n if (typeof window === \"undefined\") {\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n }\n\n try {\n const saved = localStorage.getItem(storageKey)\n if (saved) {\n return { ...DEFAULT_SETTINGS, ...JSON.parse(saved), ...initialSettings }\n }\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to parse stored settings:`, error)\n }\n\n return { ...DEFAULT_SETTINGS, ...initialSettings }\n })\n\n useEffect(() => {\n applyRootClasses(settings)\n }, [settings])\n\n const persist = useCallback(\n (next: AccessibilitySettings) => {\n if (typeof window !== \"undefined\") {\n try {\n localStorage.setItem(storageKey, JSON.stringify(next))\n } catch (error) {\n console.error(`[ieee-atiig-accessibility-menu] Failed to persist settings:`, error)\n }\n }\n onSettingsChange?.(next)\n },\n [storageKey, onSettingsChange],\n )\n\n const setVal = useCallback(\n <K extends keyof AccessibilitySettings>(key: K, val: AccessibilitySettings[K]) => {\n setSettings((prev) => {\n const next = { ...prev, [key]: val }\n persist(next)\n return next\n })\n },\n [persist],\n )\n\n const resetSettings = useCallback(() => {\n const defaults = { ...DEFAULT_SETTINGS, ...initialSettings }\n setSettings(defaults)\n persist(defaults)\n }, [initialSettings, persist])\n\n return { settings, setVal, resetSettings }\n}\n","import { useEffect } from \"react\"\n\nconst STYLE_ID = \"ieee-atiig-accessibility-menu-injected-styles\"\n\n/**\n * Injects the package stylesheet into the document head at runtime.\n * This is automatically called by the component but can be used standalone.\n */\nexport function useInjectStyles(styles?: string) {\n useEffect(() => {\n if (typeof window === \"undefined\") return\n if (document.getElementById(STYLE_ID)) return\n\n if (styles) {\n const style = document.createElement(\"style\")\n style.id = STYLE_ID\n style.textContent = styles\n document.head.appendChild(style)\n }\n }, [styles])\n}\n","import type { ReadingAidProps } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\nexport function ReadingAid({ mouseY, size, zIndex, theme: themeProp }: ReadingAidProps) {\n const theme = { ...DEFAULT_THEME, ...themeProp }\n const readingAidHeight = 56 * (size || 1)\n const offset = readingAidHeight / 2\n\n return (\n <>\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"top\"\n style={{\n height: `${Math.max(0, mouseY - offset)}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-shade\"\n data-side=\"bottom\"\n style={{\n top: `${mouseY + offset}px`,\n zIndex,\n background: `rgba(2, 58, 116, 0.62)`,\n }}\n />\n <div\n className=\"a11y-menu-reading-aid-bar\"\n style={{\n top: `${mouseY - offset}px`,\n height: `${readingAidHeight}px`,\n zIndex: zIndex - 1,\n background: \"rgba(1, 160, 160, 0.06)\",\n borderTop: `2px solid ${theme.accentOverlay}`,\n borderBottom: `2px solid ${theme.accentOverlay}`,\n }}\n />\n </>\n )\n}\n","import type { ReactNode } from \"react\"\nimport type { ThemeColors } from \"./types\"\nimport { DEFAULT_THEME } from \"./types\"\n\ninterface Props {\n icon: ReactNode\n label: string\n isActive: boolean\n onToggle: () => void\n theme?: Partial<ThemeColors>\n}\n\nexport function AccessibilityToggle({ icon, label, isActive, onToggle, theme: themeProp }: Props) {\n const t = { ...DEFAULT_THEME, ...themeProp }\n\n return (\n <button\n onClick={onToggle}\n className=\"a11y-menu-toggle\"\n data-active={isActive}\n type=\"button\"\n aria-pressed={isActive}\n style={{\n borderColor: isActive ? t.activeBorder : \"transparent\",\n backgroundColor: isActive ? t.activeBg : t.background,\n }}\n >\n <div className=\"a11y-menu-toggle-left\">\n <div\n className=\"a11y-menu-toggle-icon-wrap\"\n data-active={isActive}\n style={{\n background: isActive\n ? `linear-gradient(135deg, ${t.gradientFrom}, ${t.gradientTo})`\n : undefined,\n }}\n >\n {icon}\n </div>\n <span\n className=\"a11y-menu-toggle-label\"\n style={{ color: isActive ? t.primary : undefined }}\n >\n {label}\n </span>\n </div>\n <div\n className=\"a11y-menu-toggle-check\"\n data-active={isActive}\n style={{\n backgroundColor: isActive ? t.accent : undefined,\n borderColor: isActive ? t.accent : t.border,\n }}\n >\n <svg\n className=\"a11y-menu-check-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n </button>\n )\n}\n","/**\n * Inline styles for the accessibility menu.\n * Injected automatically when the component mounts.\n * Users can also import `ieee-atiig-accessibility-menu/styles.css` for static loading.\n */\n\n// We duplicate the CSS here so the component can inject it at runtime\n// without requiring users to manually import a CSS file.\nexport const styles = `\n/* ===== ieee-atiig-accessibility-menu: Core Styles ===== */\n\n.a11y-font-size-10 { font-size: 110% !important; }\n.a11y-font-size-20 { font-size: 120% !important; }\n.a11y-font-size-30 { font-size: 130% !important; }\n\n.a11y-line-height-15 { line-height: 1.5 !important; }\n.a11y-line-height-20 { line-height: 2 !important; }\n.a11y-line-height-25 { line-height: 2.5 !important; }\n\n.a11y-align-left :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: left !important; }\n.a11y-align-center :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: center !important; }\n.a11y-align-right :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: right !important; }\n.a11y-align-justify :where(h1, h2, h3, h4, h5, h6, p, li, blockquote, figcaption) { text-align: justify !important; }\n\n.a11y-dyslexic-font,\n.a11y-dyslexic-font * {\n font-family: \"OpenDyslexic\", \"Comic Sans MS\", \"Lexie Readable\", sans-serif !important;\n font-style: normal !important;\n}\n\n.a11y-grayscale,\n.a11y-grayscale * {\n filter: grayscale(100%) !important;\n -webkit-filter: grayscale(100%) !important;\n}\n\n.a11y-stop-animations,\n.a11y-stop-animations *,\n.a11y-stop-animations *::before,\n.a11y-stop-animations *::after {\n animation-duration: 0s !important;\n animation-delay: 0s !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}\n\n.a11y-big-cursor * {\n cursor: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewBox='0 0 40 48'><defs><filter id='shadow'><feDropShadow dx='1' dy='1' stdDeviation='1' flood-opacity='0.5'/></filter></defs><path d='M5 2 L5 35 L12 28 L20 44 L25 42 L17 26 L30 26 Z' fill='white' stroke='black' stroke-width='2' filter='url(%23shadow)'/></svg>\") 10 0, default !important;\n}\n\n.a11y-menu-reading-aid-shade {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-reading-aid-bar {\n position: fixed; left: 0; right: 0; pointer-events: none;\n}\n\n.a11y-menu-button {\n position: fixed;\n z-index: var(--a11y-z, 60);\n display: flex; align-items: center; justify-content: center;\n width: 56px; height: 56px; border: none; border-radius: 50%; cursor: pointer;\n color: #fff;\n transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;\n background: linear-gradient(135deg, var(--a11y-gradient-from, #023A74), var(--a11y-gradient-to, #01A0A0));\n box-shadow: 0 4px 30px rgba(2, 58, 116, 0.28);\n}\n.a11y-menu-button:hover { transform: scale(1.1); }\n.a11y-menu-button:active { transform: scale(0.95); }\n.a11y-menu-button[data-open=\"true\"] {\n transform: rotate(180deg);\n background: var(--a11y-primary, #0D6EAD);\n box-shadow: 0 10px 20px rgba(2, 58, 116, 0.3);\n}\n.a11y-menu-button-icon { width: 24px; height: 24px; }\n\n.a11y-menu-overlay {\n position: fixed; inset: 0; z-index: 65;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n.a11y-menu-panel {\n position: fixed; z-index: 70;\n width: calc(100% - 32px); max-width: 320px;\n padding: 20px; border: 1px solid; border-radius: 24px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); overflow: hidden;\n animation: a11y-menu-fade-in 0.3s ease;\n}\n\n@keyframes a11y-menu-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@media (min-width: 768px) {\n .a11y-menu-panel { left: 20px; right: auto; }\n .a11y-menu-panel[data-right=\"true\"] { left: auto; right: 20px; }\n}\n\n.a11y-menu-header {\n display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px;\n}\n.a11y-menu-header-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-header-icon {\n width: 36px; height: 36px; border-radius: 16px;\n display: flex; align-items: center; justify-content: center;\n color: #fff; box-shadow: 0 4px 14px rgba(2, 58, 116, 0.15);\n}\n.a11y-menu-header-icon svg { width: 16px; height: 16px; }\n.a11y-menu-title {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; margin: 0;\n}\n.a11y-menu-close {\n width: 28px; height: 28px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; display: flex;\n align-items: center; justify-content: center; color: #94a3b8;\n transition: background 0.2s ease;\n}\n.a11y-menu-close:hover { background: #f1f5f9; }\n.a11y-menu-close svg { width: 16px; height: 16px; }\n\n.a11y-menu-body { max-height: 65vh; overflow-y: auto; padding-right: 4px; }\n.a11y-menu-body::-webkit-scrollbar { width: 4px; }\n.a11y-menu-body::-webkit-scrollbar-track { background: transparent; }\n.a11y-menu-body::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 2px; }\n\n.a11y-menu-section { margin-bottom: 16px; }\n.a11y-menu-section-label {\n font-size: 10px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; color: #94a3b8;\n margin-left: 4px; margin-bottom: 8px;\n display: flex; align-items: center; gap: 8px;\n}\n\n.a11y-menu-btn-group {\n display: flex; gap: 4px; background: #f8fafc;\n padding: 4px; border-radius: 16px;\n border: 1px solid rgba(226, 232, 240, 0.8); overflow-x: auto;\n}\n.a11y-menu-btn-group-item {\n flex: 1; min-width: 32px; padding: 8px 4px; border: none; border-radius: 12px;\n background: transparent; font-size: 10px; font-weight: 700; color: #94a3b8;\n cursor: pointer; transition: all 0.2s ease;\n display: flex; align-items: center; justify-content: center;\n}\n.a11y-menu-btn-group-item[data-active=\"true\"] {\n background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transform: scale(1.02);\n}\n.a11y-menu-btn-group-item:hover { color: #475569; }\n\n.a11y-menu-toggle {\n width: 100%; display: flex; align-items: center; justify-content: space-between;\n padding: 10px; border-radius: 16px; border: 1px solid transparent;\n cursor: pointer; transition: all 0.3s ease; margin-bottom: 8px;\n}\n.a11y-menu-toggle:hover { background: rgba(248, 250, 252, 0.3); }\n.a11y-menu-toggle-left { display: flex; align-items: center; gap: 12px; }\n.a11y-menu-toggle-icon-wrap {\n width: 32px; height: 32px; border-radius: 12px;\n display: flex; align-items: center; justify-content: center;\n background: #f8fafc; color: #94a3b8; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-icon-wrap svg { width: 16px; height: 16px; }\n.a11y-menu-toggle-icon-wrap[data-active=\"true\"] { color: #fff; }\n.a11y-menu-toggle-label { font-size: 11px; font-weight: 700; letter-spacing: -0.01em; color: #475569; }\n.a11y-menu-toggle-check {\n width: 20px; height: 20px; border-radius: 50%; border: 2px solid #e2e8f0;\n display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0;\n}\n.a11y-menu-toggle-check[data-active=\"true\"] { background: #01a0a0; border-color: #01a0a0; color: #fff; }\n.a11y-menu-check-icon { width: 10px; height: 10px; stroke-width: 5; }\n\n.a11y-menu-reset {\n width: 100%; margin-top: 20px; padding: 12px; border-radius: 16px;\n background: #f8fafc; border: 1px solid #f1f5f9;\n font-size: 9px; font-weight: 900; text-transform: uppercase;\n letter-spacing: 0.1em; cursor: pointer; transition: background 0.2s ease;\n}\n.a11y-menu-reset:hover { background: #f1f5f9; }\n\n@media (max-width: 767px) {\n .a11y-menu-panel { left: 16px; right: 16px; }\n .a11y-menu-panel[data-right=\"true\"] { left: 16px; right: 16px; }\n}\n`\n","\n\"use client\"\n\nimport { useState } from \"react\"\nimport { useIsMobile } from \"./use-is-mobile\"\nimport { useMousePosition } from \"./use-mouse-position\"\nimport { useSettings } from \"./use-settings\"\nimport { useInjectStyles } from \"./use-inject-styles\"\nimport { ReadingAid } from \"./reading-aid\"\nimport { AccessibilityToggle } from \"./accessibility-toggle\"\nimport type { AccessibilityMenuProps } from \"./types\"\nimport {\n DEFAULT_LABELS,\n DEFAULT_Z_INDEX,\n DEFAULT_THEME,\n} from \"./types\"\nimport { styles } from \"./styles\"\n\nconst ALIGNMENT_ICONS = {\n off: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n left: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h12\" />\n <path d=\"M3 18h6\" />\n </svg>\n ),\n center: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M6 12h12\" />\n <path d=\"M9 18h6\" />\n </svg>\n ),\n right: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M9 12h12\" />\n <path d=\"M15 18h6\" />\n </svg>\n ),\n justify: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 14, height: 14 }}>\n <path d=\"M3 6h18\" />\n <path d=\"M3 12h18\" />\n <path d=\"M3 18h18\" />\n </svg>\n ),\n} as const\n\nconst ALIGNMENT_VALUES = [\"off\", \"left\", \"center\", \"right\", \"justify\"] as const\n\nexport function AccessibilityMenu({\n initialSettings,\n storageKey = \"ieee-atiig-accessibility-menu-settings\",\n position = \"bottom-left\",\n positionOffset = 0,\n labels: labelsProp,\n className = \"\",\n buttonClassName = \"\",\n panelClassName = \"\",\n zIndex: zIndexProp,\n onSettingsChange,\n onReset,\n showResetButton = true,\n showFontSize = true,\n showLineHeight = true,\n showAlignment = true,\n showReadingAid = true,\n showDesaturate = true,\n showDyslexicFont = true,\n showBigCursor = true,\n showStopAnimations = true,\n theme: themeProp,\n ssr = false,\n}: AccessibilityMenuProps) {\n if (typeof window === \"undefined\") {\n const ssrTheme = { ...DEFAULT_THEME, ...themeProp }\n const ssrZIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp }\n const isRight = position === \"bottom-right\"\n const offset = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n return (\n <button\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={false}\n data-right={isRight}\n style={{\n bottom: `${20 + offset}px`,\n left: isRight ? undefined : `${20 + offset}px`,\n right: isRight ? `${20 + offset}px` : undefined,\n \"--a11y-z\": `${ssrZIndex.button}`,\n \"--a11y-gradient-from\": ssrTheme.gradientFrom,\n \"--a11y-gradient-to\": ssrTheme.gradientTo,\n \"--a11y-primary\": ssrTheme.primary,\n } as any}\n aria-label={labelsProp?.menuButton || \"Accessibility Menu\"}\n type=\"button\"\n >\n <svg className=\"a11y-menu-button-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n )\n }\n\n useInjectStyles(styles)\n\n const [isOpen, setIsOpen] = useState(false)\n const isMobile = useIsMobile()\n const mousePos = useMousePosition(isMobile)\n const { settings, setVal, resetSettings } = useSettings(\n storageKey,\n initialSettings,\n onSettingsChange,\n )\n\n const labels = { ...DEFAULT_LABELS, ...labelsProp }\n const zIndex = { ...DEFAULT_Z_INDEX, ...zIndexProp }\n const theme = { ...DEFAULT_THEME, ...themeProp }\n\n const offsetNum = typeof positionOffset === \"number\" ? positionOffset : positionOffset.y\n const isRight = position === \"bottom-right\"\n\n const handleReset = () => {\n resetSettings()\n onReset?.()\n }\n\n return (\n <>\n {settings.readingAid && (\n <ReadingAid\n mouseY={mousePos.y}\n size={settings.readingAidSize}\n zIndex={zIndex.readingAid}\n theme={theme}\n />\n )}\n\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={`a11y-menu-button ${buttonClassName}`}\n data-open={isOpen}\n data-right={isRight}\n style={{\n bottom: `${20 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n \"--a11y-z\": `${zIndex.button}`,\n \"--a11y-gradient-from\": theme.gradientFrom,\n \"--a11y-gradient-to\": theme.gradientTo,\n \"--a11y-primary\": theme.primary,\n } as any}\n aria-label={labels.menuButton}\n type=\"button\"\n >\n <svg\n className=\"a11y-menu-button-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <>\n <div\n className=\"a11y-menu-overlay\"\n onClick={() => setIsOpen(false)}\n style={{ zIndex: zIndex.overlay }}\n />\n <div\n className={`a11y-menu-panel ${panelClassName} ${className}`}\n data-right={isRight}\n style={{\n bottom: `${80 + offsetNum}px`,\n left: isRight ? undefined : `${20 + offsetNum}px`,\n right: isRight ? `${20 + offsetNum}px` : undefined,\n zIndex: zIndex.panel,\n backgroundColor: theme.background,\n borderColor: theme.border,\n }}\n >\n <div className=\"a11y-menu-header\">\n <div className=\"a11y-menu-header-left\">\n <div\n className=\"a11y-menu-header-icon\"\n style={{\n background: `linear-gradient(135deg, ${theme.gradientFrom}, ${theme.gradientTo})`,\n }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n </div>\n <h3 className=\"a11y-menu-title\" style={{ color: theme.text }}>\n {labels.menuTitle}\n </h3>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"a11y-menu-close\"\n type=\"button\"\n aria-label=\"Close\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"a11y-menu-body\">\n {showFontSize && (\n <Section label={labels.fontSize}>\n <ButtonGroup\n value={settings.fontSize}\n options={[0, 10, 20, 30]}\n renderLabel={(v) => (v === 0 ? labels.off : `+${v}%`)}\n onChange={(v) => setVal(\"fontSize\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showLineHeight && (\n <Section label={labels.lineHeight}>\n <ButtonGroup\n value={settings.lineHeight}\n options={[0, 15, 20, 25]}\n renderLabel={(v) => (v === 0 ? labels.off : `${1 + v / 100}x`)}\n onChange={(v) => setVal(\"lineHeight\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showAlignment && (\n <Section label={labels.alignment}>\n <ButtonGroup\n value={settings.textAlign}\n options={ALIGNMENT_VALUES}\n renderLabel={(v: string) => ALIGNMENT_ICONS[v as keyof typeof ALIGNMENT_ICONS]}\n onChange={(v) => setVal(\"textAlign\", v)}\n activeColor={theme.primary}\n />\n </Section>\n )}\n\n {showReadingAid && (\n <Section label={labels.readingAid}>\n <ButtonGroup\n value={settings.readingAid ? settings.readingAidSize : 0}\n options={[0, 0.9, 1, 1.2]}\n renderLabel={(v) => (v === 0 ? labels.off : `${v}x`)}\n onChange={(v) => {\n if (v === 0) {\n setVal(\"readingAid\", false)\n } else {\n setVal(\"readingAid\", true)\n setVal(\"readingAidSize\", v as number)\n }\n }}\n activeColor={theme.accent}\n />\n </Section>\n )}\n\n {showDesaturate && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n }\n label={labels.desaturate}\n isActive={settings.grayscale}\n onToggle={() => setVal(\"grayscale\", !settings.grayscale)}\n theme={theme}\n />\n )}\n\n {showDyslexicFont && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <circle cx=\"16\" cy=\"4\" r=\"1\" />\n <path d=\"m18 19 1-7-6 1\" />\n <path d=\"m5 8 3-3 5.5 3-2.36 3.5\" />\n <path d=\"M4.24 14.5a5 5 0 0 0 6.88 6\" />\n <path d=\"M13.76 17.5a5 5 0 0 0-6.88-6\" />\n </svg>\n }\n label={labels.dyslexicFont}\n isActive={settings.dyslexicFont}\n onToggle={() => setVal(\"dyslexicFont\", !settings.dyslexicFont)}\n theme={theme}\n />\n )}\n\n {showBigCursor && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M3 3 9.77 19.47a.75.75 0 0 0 1.45.05L13 14.5l3 4.5.77.77a.75.75 0 0 0 1.06 0l3.94-3.94a.75.75 0 0 0 0-1.06L21 14.5l-4.5-3 5.47-1.78a.75.75 0 0 0-.05-1.45L3 3Z\" />\n </svg>\n }\n label={labels.bigCursor}\n isActive={settings.bigCursor}\n onToggle={() => setVal(\"bigCursor\", !settings.bigCursor)}\n theme={theme}\n />\n )}\n\n {showStopAnimations && (\n <AccessibilityToggle\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ width: 16, height: 16 }}>\n <path d=\"M12 2a10 10 0 0 1 7.38 16.75\" />\n <path d=\"M12 22a10 10 0 0 1-7.38-16.75\" />\n <path d=\"M12 22V2\" />\n <path d=\"M2 12h20\" />\n </svg>\n }\n label={labels.stopAnimations}\n isActive={settings.stopAnimations}\n onToggle={() => setVal(\"stopAnimations\", !settings.stopAnimations)}\n theme={theme}\n />\n )}\n </div>\n\n {showResetButton && (\n <button onClick={handleReset} className=\"a11y-menu-reset\" type=\"button\" style={{ color: theme.textMuted }}>\n {labels.reset}\n </button>\n )}\n </div>\n </>\n )}\n </>\n )\n}\n\nfunction Section({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"a11y-menu-section\">\n <div className=\"a11y-menu-section-label\">{label}</div>\n {children}\n </div>\n )\n}\n\nfunction ButtonGroup<T extends string | number>({\n value,\n options,\n renderLabel,\n onChange,\n activeColor,\n}: {\n value: T\n options: readonly T[]\n renderLabel: (v: T) => string | React.ReactNode\n onChange: (v: T) => void\n activeColor: string\n}) {\n return (\n <div className=\"a11y-menu-btn-group\">\n {options.map((val) => (\n <button\n key={String(val)}\n onClick={() => onChange(val)}\n className=\"a11y-menu-btn-group-item\"\n data-active={value === val}\n type=\"button\"\n style={{ color: value === val ? activeColor : undefined }}\n >\n {renderLabel(val)}\n </button>\n ))}\n </div>\n )\n}\n"]}
|
package/package.json
CHANGED