ngp-accessibility 1.0.2 → 1.0.3

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/README.md CHANGED
@@ -26,8 +26,8 @@ npm install ngp-accessibility
26
26
  ### Option 1: Toolbar (Horizontal)
27
27
 
28
28
  ```jsx
29
- import { AccessibilityProvider, AccessibilityToolbar } from 'ngp-accessibility';
30
- import 'ngp-accessibility/dist/styles.css';
29
+ import { AccessibilityProvider, AccessibilityToolbar } from "ngp-accessibility";
30
+ import "ngp-accessibility/dist/styles.css";
31
31
 
32
32
  function App() {
33
33
  return (
@@ -42,13 +42,16 @@ function App() {
42
42
  ### Option 2: Dropdown Button
43
43
 
44
44
  ```jsx
45
- import { AccessibilityProvider, AccessibilityDropdown } from 'ngp-accessibility';
46
- import 'ngp-accessibility/dist/styles.css';
45
+ import {
46
+ AccessibilityProvider,
47
+ AccessibilityDropdown,
48
+ } from "ngp-accessibility";
49
+ import "ngp-accessibility/dist/styles.css";
47
50
 
48
51
  function App() {
49
52
  return (
50
53
  <AccessibilityProvider>
51
- <div style={{ textAlign: 'right', padding: '10px' }}>
54
+ <div style={{ textAlign: "right", padding: "10px" }}>
52
55
  <AccessibilityDropdown />
53
56
  </div>
54
57
  <YourContent />
@@ -60,6 +63,7 @@ function App() {
60
63
  ## Voice Commands
61
64
 
62
65
  When voice command is enabled, you can use:
66
+
63
67
  - "increase text" / "palakihin"
64
68
  - "decrease text" / "paliitin"
65
69
  - "high contrast" / "mataas"
@@ -71,10 +75,13 @@ When voice command is enabled, you can use:
71
75
  ## API
72
76
 
73
77
  ### AccessibilityProvider
78
+
74
79
  Wrap your app with this provider.
75
80
 
76
81
  ### useAccessibility()
82
+
77
83
  Hook that returns:
84
+
78
85
  - `language`, `setLanguage(lang)`
79
86
  - `textSize`, `increaseText()`, `decreaseText()`
80
87
  - `highContrast`, `toggleHighContrast()`
@@ -86,11 +93,77 @@ Hook that returns:
86
93
  - `translate(key)` - Get translated text
87
94
 
88
95
  ### AccessibilityToolbar
96
+
89
97
  Pre-built toolbar component with all controls.
90
98
 
99
+ ## Redesign And Theming
100
+
101
+ You can fully redesign the package UI in 3 ways:
102
+
103
+ ### 1. Override CSS variables (fastest)
104
+
105
+ ```css
106
+ :root {
107
+ --ngp-a11y-bg: #101418;
108
+ --ngp-a11y-surface: #1b232c;
109
+ --ngp-a11y-surface-hover: #243241;
110
+ --ngp-a11y-text: #f2f6fa;
111
+ --ngp-a11y-border: #2d3a48;
112
+ --ngp-a11y-accent: #16a34a;
113
+ --ngp-a11y-accent-hover: #15803d;
114
+ --ngp-a11y-accent-text: #ffffff;
115
+ --ngp-a11y-radius: 999px;
116
+ }
117
+ ```
118
+
119
+ ### 2. Pass custom classes to sub-elements
120
+
121
+ ```tsx
122
+ <AccessibilityToolbar
123
+ className="my-toolbar"
124
+ classes={{
125
+ button: "my-btn",
126
+ activeButton: "my-btn-active",
127
+ select: "my-select",
128
+ }}
129
+ />
130
+ ```
131
+
132
+ ```tsx
133
+ <AccessibilityDropdown
134
+ classes={{
135
+ toggle: "my-toggle",
136
+ menu: "my-menu",
137
+ section: "my-section",
138
+ button: "my-btn",
139
+ activeButton: "my-btn-active",
140
+ }}
141
+ />
142
+ ```
143
+
144
+ ### 3. Replace the dropdown trigger UI entirely
145
+
146
+ ```tsx
147
+ <AccessibilityDropdown
148
+ renderTrigger={({ isOpen, toggle, className }) => (
149
+ <button className={`${className} custom-trigger`} onClick={toggle}>
150
+ {isOpen ? "Close Tools" : "Open Accessibility"}
151
+ </button>
152
+ )}
153
+ />
154
+ ```
155
+
156
+ TypeScript users can import the prop types directly:
157
+
158
+ - `AccessibilityToolbarProps`
159
+ - `AccessibilityToolbarClasses`
160
+ - `AccessibilityDropdownProps`
161
+ - `AccessibilityDropdownClasses`
162
+
91
163
  ## Full Documentation
92
164
 
93
165
  For complete documentation including:
166
+
94
167
  - Full page translation guide
95
168
  - Custom toolbar examples
96
169
  - TypeScript support
@@ -1,5 +1,5 @@
1
- import React, { ReactNode } from 'react';
2
- import { Language, TranslationKey } from './translations';
1
+ import React, { ReactNode } from "react";
2
+ import { Language, TranslationKey } from "./translations";
3
3
  interface AccessibilityState {
4
4
  language: Language;
5
5
  textSize: number;
@@ -25,7 +25,7 @@ interface AccessibilityContextType extends AccessibilityState {
25
25
  }
26
26
  interface AccessibilityProviderProps {
27
27
  children: ReactNode;
28
- translations?: Record<string, Record<string, any>>;
28
+ translations?: Partial<Record<Language, Record<string, string>>>;
29
29
  }
30
30
  export declare const AccessibilityProvider: React.FC<AccessibilityProviderProps>;
31
31
  export declare const useAccessibility: () => AccessibilityContextType;
@@ -1,2 +1,24 @@
1
- import React from 'react';
2
- export declare const AccessibilityDropdown: React.FC;
1
+ import React from "react";
2
+ export interface AccessibilityDropdownClasses {
3
+ root?: string;
4
+ toggle?: string;
5
+ menu?: string;
6
+ section?: string;
7
+ label?: string;
8
+ select?: string;
9
+ button?: string;
10
+ activeButton?: string;
11
+ voiceButton?: string;
12
+ }
13
+ export interface AccessibilityDropdownProps {
14
+ className?: string;
15
+ style?: React.CSSProperties;
16
+ classes?: AccessibilityDropdownClasses;
17
+ triggerLabel?: React.ReactNode;
18
+ renderTrigger?: (params: {
19
+ isOpen: boolean;
20
+ toggle: () => void;
21
+ className: string;
22
+ }) => React.ReactNode;
23
+ }
24
+ export declare const AccessibilityDropdown: React.FC<AccessibilityDropdownProps>;
@@ -1,2 +1,14 @@
1
- import React from 'react';
2
- export declare const AccessibilityToolbar: React.FC;
1
+ import React from "react";
2
+ export interface AccessibilityToolbarClasses {
3
+ root?: string;
4
+ select?: string;
5
+ button?: string;
6
+ activeButton?: string;
7
+ voiceButton?: string;
8
+ }
9
+ export interface AccessibilityToolbarProps {
10
+ className?: string;
11
+ style?: React.CSSProperties;
12
+ classes?: AccessibilityToolbarClasses;
13
+ }
14
+ export declare const AccessibilityToolbar: React.FC<AccessibilityToolbarProps>;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- export { AccessibilityProvider, useAccessibility } from './AccessibilityContext';
2
- export { AccessibilityToolbar } from './AccessibilityToolbar';
3
- export { AccessibilityDropdown } from './AccessibilityDropdown';
4
- export { T } from './T';
5
- export { translations, type Language, type TranslationKey } from './translations';
6
- export type { default as React } from 'react';
1
+ export { AccessibilityProvider, useAccessibility, } from "./AccessibilityContext";
2
+ export { AccessibilityToolbar } from "./AccessibilityToolbar";
3
+ export { AccessibilityDropdown } from "./AccessibilityDropdown";
4
+ export { T } from "./T";
5
+ export { translations, type Language, type TranslationKey, } from "./translations";
6
+ export type { AccessibilityToolbarProps, AccessibilityToolbarClasses, } from "./AccessibilityToolbar";
7
+ export type { AccessibilityDropdownProps, AccessibilityDropdownClasses, } from "./AccessibilityDropdown";
8
+ export type { default as React } from "react";
package/dist/index.esm.js CHANGED
@@ -34,9 +34,9 @@ const translations = {
34
34
  };
35
35
 
36
36
  const AccessibilityContext = createContext(undefined);
37
- const AccessibilityProvider = ({ children, translations: customTranslations }) => {
37
+ const AccessibilityProvider = ({ children, translations: customTranslations, }) => {
38
38
  const [state, setState] = useState({
39
- language: 'en',
39
+ language: "en",
40
40
  textSize: 100,
41
41
  highContrast: false,
42
42
  negativeContrast: false,
@@ -49,48 +49,60 @@ const AccessibilityProvider = ({ children, translations: customTranslations }) =
49
49
  useEffect(() => {
50
50
  const root = document.documentElement;
51
51
  root.style.fontSize = `${state.textSize}%`;
52
- root.classList.toggle('high-contrast', state.highContrast);
53
- root.classList.toggle('negative-contrast', state.negativeContrast);
54
- root.classList.toggle('light-background', state.lightBackground);
55
- root.classList.toggle('underline-links', state.underlineLinks);
56
- root.classList.toggle('readable-font', state.readableFont);
52
+ root.classList.toggle("high-contrast", state.highContrast);
53
+ root.classList.toggle("negative-contrast", state.negativeContrast);
54
+ root.classList.toggle("light-background", state.lightBackground);
55
+ root.classList.toggle("underline-links", state.underlineLinks);
56
+ root.classList.toggle("readable-font", state.readableFont);
57
57
  }, [state]);
58
58
  useEffect(() => {
59
- if (!state.voiceEnabled || !('webkitSpeechRecognition' in window || 'SpeechRecognition' in window))
59
+ if (!state.voiceEnabled ||
60
+ !("webkitSpeechRecognition" in window || "SpeechRecognition" in window))
60
61
  return;
61
- const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
62
+ const SpeechRecognition = window.SpeechRecognition ||
63
+ window.webkitSpeechRecognition;
62
64
  const recognition = new SpeechRecognition();
63
65
  recognition.continuous = true;
64
- recognition.lang = state.language === 'tl' ? 'tl-PH' : state.language === 'ceb' ? 'ceb-PH' : 'en-US';
66
+ recognition.lang =
67
+ state.language === "tl"
68
+ ? "tl-PH"
69
+ : state.language === "ceb"
70
+ ? "ceb-PH"
71
+ : "en-US";
65
72
  recognition.onresult = (event) => {
66
73
  const transcript = event.results[event.results.length - 1][0].transcript.toLowerCase();
67
- if (transcript.includes('increase text') || transcript.includes('palakihin'))
74
+ if (transcript.includes("increase text") ||
75
+ transcript.includes("palakihin"))
68
76
  increaseText();
69
- if (transcript.includes('decrease text') || transcript.includes('paliitin'))
77
+ if (transcript.includes("decrease text") ||
78
+ transcript.includes("paliitin"))
70
79
  decreaseText();
71
- if (transcript.includes('high contrast') || transcript.includes('mataas'))
80
+ if (transcript.includes("high contrast") || transcript.includes("mataas"))
72
81
  toggleHighContrast();
73
- if (transcript.includes('negative contrast') || transcript.includes('negatibo'))
82
+ if (transcript.includes("negative contrast") ||
83
+ transcript.includes("negatibo"))
74
84
  toggleNegativeContrast();
75
- if (transcript.includes('light background') || transcript.includes('maliwanag'))
85
+ if (transcript.includes("light background") ||
86
+ transcript.includes("maliwanag"))
76
87
  toggleLightBackground();
77
- if (transcript.includes('underline') || transcript.includes('guhit'))
88
+ if (transcript.includes("underline") || transcript.includes("guhit"))
78
89
  toggleUnderlineLinks();
79
- if (transcript.includes('readable font') || transcript.includes('madaling'))
90
+ if (transcript.includes("readable font") ||
91
+ transcript.includes("madaling"))
80
92
  toggleReadableFont();
81
93
  };
82
94
  recognition.start();
83
95
  return () => recognition.stop();
84
96
  }, [state.voiceEnabled, state.language]);
85
- const setLanguage = (lang) => setState(s => (Object.assign(Object.assign({}, s), { language: lang })));
86
- const increaseText = () => setState(s => (Object.assign(Object.assign({}, s), { textSize: Math.min(s.textSize + 10, 200) })));
87
- const decreaseText = () => setState(s => (Object.assign(Object.assign({}, s), { textSize: Math.max(s.textSize - 10, 80) })));
88
- const toggleHighContrast = () => setState(s => (Object.assign(Object.assign({}, s), { highContrast: !s.highContrast, negativeContrast: false })));
89
- const toggleNegativeContrast = () => setState(s => (Object.assign(Object.assign({}, s), { negativeContrast: !s.negativeContrast, highContrast: false })));
90
- const toggleLightBackground = () => setState(s => (Object.assign(Object.assign({}, s), { lightBackground: !s.lightBackground })));
91
- const toggleUnderlineLinks = () => setState(s => (Object.assign(Object.assign({}, s), { underlineLinks: !s.underlineLinks })));
92
- const toggleReadableFont = () => setState(s => (Object.assign(Object.assign({}, s), { readableFont: !s.readableFont })));
93
- const toggleVoice = () => setState(s => (Object.assign(Object.assign({}, s), { voiceEnabled: !s.voiceEnabled })));
97
+ const setLanguage = (lang) => setState((s) => (Object.assign(Object.assign({}, s), { language: lang })));
98
+ const increaseText = () => setState((s) => (Object.assign(Object.assign({}, s), { textSize: Math.min(s.textSize + 10, 200) })));
99
+ const decreaseText = () => setState((s) => (Object.assign(Object.assign({}, s), { textSize: Math.max(s.textSize - 10, 80) })));
100
+ const toggleHighContrast = () => setState((s) => (Object.assign(Object.assign({}, s), { highContrast: !s.highContrast, negativeContrast: false })));
101
+ const toggleNegativeContrast = () => setState((s) => (Object.assign(Object.assign({}, s), { negativeContrast: !s.negativeContrast, highContrast: false })));
102
+ const toggleLightBackground = () => setState((s) => (Object.assign(Object.assign({}, s), { lightBackground: !s.lightBackground })));
103
+ const toggleUnderlineLinks = () => setState((s) => (Object.assign(Object.assign({}, s), { underlineLinks: !s.underlineLinks })));
104
+ const toggleReadableFont = () => setState((s) => (Object.assign(Object.assign({}, s), { readableFont: !s.readableFont })));
105
+ const toggleVoice = () => setState((s) => (Object.assign(Object.assign({}, s), { voiceEnabled: !s.voiceEnabled })));
94
106
  const translate = (key) => translations[state.language][key];
95
107
  const t = (key) => { var _a; return ((_a = allTranslations[state.language]) === null || _a === void 0 ? void 0 : _a[key]) || key; };
96
108
  return (React.createElement(AccessibilityContext.Provider, { value: Object.assign(Object.assign({}, state), { setLanguage,
@@ -108,61 +120,68 @@ const AccessibilityProvider = ({ children, translations: customTranslations }) =
108
120
  const useAccessibility = () => {
109
121
  const context = useContext(AccessibilityContext);
110
122
  if (!context)
111
- throw new Error('useAccessibility must be used within AccessibilityProvider');
123
+ throw new Error("useAccessibility must be used within AccessibilityProvider");
112
124
  return context;
113
125
  };
114
126
 
115
- const AccessibilityToolbar = () => {
127
+ const cn$1 = (...parts) => parts.filter(Boolean).join(" ");
128
+ const AccessibilityToolbar = ({ className, style, classes, }) => {
116
129
  const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
117
- return (React.createElement("div", { className: "accessibility-toolbar" },
118
- React.createElement("select", { value: language, onChange: (e) => setLanguage(e.target.value) },
130
+ return (React.createElement("div", { className: cn$1("accessibility-toolbar", classes === null || classes === void 0 ? void 0 : classes.root, className), style: style },
131
+ React.createElement("select", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.select), value: language, onChange: (e) => setLanguage(e.target.value) },
119
132
  React.createElement("option", { value: "en" }, "English"),
120
133
  React.createElement("option", { value: "tl" }, "Tagalog"),
121
134
  React.createElement("option", { value: "ceb" }, "Cebuano")),
122
- React.createElement("button", { onClick: increaseText },
135
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: increaseText },
123
136
  "+ ",
124
- translate('increaseText')),
125
- React.createElement("button", { onClick: decreaseText },
137
+ translate("increaseText")),
138
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
126
139
  "- ",
127
- translate('decreaseText')),
128
- React.createElement("button", { onClick: toggleHighContrast, className: highContrast ? 'active' : '' }, translate('highContrast')),
129
- React.createElement("button", { onClick: toggleNegativeContrast, className: negativeContrast ? 'active' : '' }, translate('negativeContrast')),
130
- React.createElement("button", { onClick: toggleLightBackground, className: lightBackground ? 'active' : '' }, translate('lightBackground')),
131
- React.createElement("button", { onClick: toggleUnderlineLinks, className: underlineLinks ? 'active' : '' }, translate('underlineLinks')),
132
- React.createElement("button", { onClick: toggleReadableFont, className: readableFont ? 'active' : '' }, translate('readableFont')),
133
- React.createElement("button", { onClick: toggleVoice, className: voiceEnabled ? 'active' : '' },
140
+ translate("decreaseText")),
141
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, highContrast && "active", highContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": highContrast, onClick: toggleHighContrast }, translate("highContrast")),
142
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, negativeContrast && "active", negativeContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": negativeContrast, onClick: toggleNegativeContrast }, translate("negativeContrast")),
143
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, lightBackground && "active", lightBackground && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": lightBackground, onClick: toggleLightBackground }, translate("lightBackground")),
144
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, underlineLinks && "active", underlineLinks && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": underlineLinks, onClick: toggleUnderlineLinks }, translate("underlineLinks")),
145
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, readableFont && "active", readableFont && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": readableFont, onClick: toggleReadableFont }, translate("readableFont")),
146
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, classes === null || classes === void 0 ? void 0 : classes.voiceButton, voiceEnabled && "active", voiceEnabled && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": voiceEnabled, onClick: toggleVoice },
134
147
  "\uD83C\uDFA4 ",
135
- translate('voiceCommand'))));
148
+ translate("voiceCommand"))));
136
149
  };
137
150
 
138
- const AccessibilityDropdown = () => {
151
+ const cn = (...parts) => parts.filter(Boolean).join(" ");
152
+ const AccessibilityDropdown = ({ className, style, classes, triggerLabel = "♿ Accessibility", renderTrigger, }) => {
139
153
  const [isOpen, setIsOpen] = useState(false);
140
154
  const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
141
- return (React.createElement("div", { className: "accessibility-dropdown" },
142
- React.createElement("button", { className: "accessibility-dropdown-toggle", onClick: () => setIsOpen(!isOpen) }, "\u267F Accessibility"),
143
- isOpen && (React.createElement("div", { className: "accessibility-dropdown-menu" },
144
- React.createElement("div", { className: "accessibility-dropdown-section" },
145
- React.createElement("label", null, "Language:"),
146
- React.createElement("select", { value: language, onChange: (e) => setLanguage(e.target.value) },
155
+ const toggle = () => setIsOpen(!isOpen);
156
+ return (React.createElement("div", { className: cn("accessibility-dropdown", classes === null || classes === void 0 ? void 0 : classes.root, className), style: style },
157
+ renderTrigger ? (renderTrigger({
158
+ isOpen,
159
+ toggle,
160
+ className: cn("accessibility-dropdown-toggle", classes === null || classes === void 0 ? void 0 : classes.toggle),
161
+ })) : (React.createElement("button", { className: cn("accessibility-dropdown-toggle", classes === null || classes === void 0 ? void 0 : classes.toggle), onClick: toggle }, triggerLabel)),
162
+ isOpen && (React.createElement("div", { className: cn("accessibility-dropdown-menu", classes === null || classes === void 0 ? void 0 : classes.menu) },
163
+ React.createElement("div", { className: cn("accessibility-dropdown-section", classes === null || classes === void 0 ? void 0 : classes.section) },
164
+ React.createElement("label", { className: cn(classes === null || classes === void 0 ? void 0 : classes.label) }, "Language:"),
165
+ React.createElement("select", { className: cn(classes === null || classes === void 0 ? void 0 : classes.select), value: language, onChange: (e) => setLanguage(e.target.value) },
147
166
  React.createElement("option", { value: "en" }, "English"),
148
167
  React.createElement("option", { value: "tl" }, "Tagalog"),
149
168
  React.createElement("option", { value: "ceb" }, "Cebuano"))),
150
- React.createElement("div", { className: "accessibility-dropdown-section" },
151
- React.createElement("button", { onClick: increaseText },
169
+ React.createElement("div", { className: cn("accessibility-dropdown-section", classes === null || classes === void 0 ? void 0 : classes.section) },
170
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button), onClick: increaseText },
152
171
  "+ ",
153
- translate('increaseText')),
154
- React.createElement("button", { onClick: decreaseText },
172
+ translate("increaseText")),
173
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
155
174
  "- ",
156
- translate('decreaseText'))),
157
- React.createElement("div", { className: "accessibility-dropdown-section" },
158
- React.createElement("button", { onClick: toggleHighContrast, className: highContrast ? 'active' : '' }, translate('highContrast')),
159
- React.createElement("button", { onClick: toggleNegativeContrast, className: negativeContrast ? 'active' : '' }, translate('negativeContrast')),
160
- React.createElement("button", { onClick: toggleLightBackground, className: lightBackground ? 'active' : '' }, translate('lightBackground')),
161
- React.createElement("button", { onClick: toggleUnderlineLinks, className: underlineLinks ? 'active' : '' }, translate('underlineLinks')),
162
- React.createElement("button", { onClick: toggleReadableFont, className: readableFont ? 'active' : '' }, translate('readableFont')),
163
- React.createElement("button", { onClick: toggleVoice, className: voiceEnabled ? 'active' : '' },
175
+ translate("decreaseText"))),
176
+ React.createElement("div", { className: cn("accessibility-dropdown-section", classes === null || classes === void 0 ? void 0 : classes.section) },
177
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, highContrast && "active", highContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": highContrast, onClick: toggleHighContrast }, translate("highContrast")),
178
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, negativeContrast && "active", negativeContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": negativeContrast, onClick: toggleNegativeContrast }, translate("negativeContrast")),
179
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, lightBackground && "active", lightBackground && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": lightBackground, onClick: toggleLightBackground }, translate("lightBackground")),
180
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, underlineLinks && "active", underlineLinks && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": underlineLinks, onClick: toggleUnderlineLinks }, translate("underlineLinks")),
181
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, readableFont && "active", readableFont && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": readableFont, onClick: toggleReadableFont }, translate("readableFont")),
182
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, classes === null || classes === void 0 ? void 0 : classes.voiceButton, voiceEnabled && "active", voiceEnabled && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": voiceEnabled, onClick: toggleVoice },
164
183
  "\uD83C\uDFA4 ",
165
- translate('voiceCommand')))))));
184
+ translate("voiceCommand")))))));
166
185
  };
167
186
 
168
187
  const T = ({ k, children }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/translations.ts","../src/AccessibilityContext.tsx","../src/AccessibilityToolbar.tsx","../src/AccessibilityDropdown.tsx","../src/T.tsx"],"sourcesContent":["export const translations = {\n en: {\n increaseText: 'Increase Text',\n decreaseText: 'Decrease Text',\n highContrast: 'High Contrast',\n negativeContrast: 'Negative Contrast',\n lightBackground: 'Light Background',\n underlineLinks: 'Underline Links',\n readableFont: 'Readable Font',\n voiceCommand: 'Voice Command',\n },\n tl: {\n increaseText: 'Palakihin ang Teksto',\n decreaseText: 'Paliitin ang Teksto',\n highContrast: 'Mataas na Contrast',\n negativeContrast: 'Negatibong Contrast',\n lightBackground: 'Maliwanag na Background',\n underlineLinks: 'May Guhit na Links',\n readableFont: 'Madaling Basahin na Font',\n voiceCommand: 'Voice Command',\n },\n ceb: {\n increaseText: 'Padak-on ang Teksto',\n decreaseText: 'Pagamay-on ang Teksto',\n highContrast: 'Taas nga Contrast',\n negativeContrast: 'Negatibo nga Contrast',\n lightBackground: 'Hayag nga Background',\n underlineLinks: 'Linya sa Ubos sa Links',\n readableFont: 'Sayon Basahon nga Font',\n voiceCommand: 'Voice Command',\n },\n};\n\nexport type Language = keyof typeof translations;\nexport type TranslationKey = keyof typeof translations.en;\n","import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';\nimport { Language, translations, TranslationKey } from './translations';\n\ninterface AccessibilityState {\n language: Language;\n textSize: number;\n highContrast: boolean;\n negativeContrast: boolean;\n lightBackground: boolean;\n underlineLinks: boolean;\n readableFont: boolean;\n voiceEnabled: boolean;\n}\n\ninterface AccessibilityContextType extends AccessibilityState {\n setLanguage: (lang: Language) => void;\n increaseText: () => void;\n decreaseText: () => void;\n toggleHighContrast: () => void;\n toggleNegativeContrast: () => void;\n toggleLightBackground: () => void;\n toggleUnderlineLinks: () => void;\n toggleReadableFont: () => void;\n toggleVoice: () => void;\n translate: (key: TranslationKey) => string;\n t: (key: string) => string;\n}\n\nconst AccessibilityContext = createContext<AccessibilityContextType | undefined>(undefined);\n\ninterface AccessibilityProviderProps {\n children: ReactNode;\n translations?: Record<string, Record<string, any>>;\n}\n\nexport const AccessibilityProvider: React.FC<AccessibilityProviderProps> = ({ children, translations: customTranslations }) => {\n const [state, setState] = useState<AccessibilityState>({\n language: 'en',\n textSize: 100,\n highContrast: false,\n negativeContrast: false,\n lightBackground: false,\n underlineLinks: false,\n readableFont: false,\n voiceEnabled: false,\n });\n\n const allTranslations = customTranslations || translations;\n\n useEffect(() => {\n const root = document.documentElement;\n root.style.fontSize = `${state.textSize}%`;\n \n root.classList.toggle('high-contrast', state.highContrast);\n root.classList.toggle('negative-contrast', state.negativeContrast);\n root.classList.toggle('light-background', state.lightBackground);\n root.classList.toggle('underline-links', state.underlineLinks);\n root.classList.toggle('readable-font', state.readableFont);\n }, [state]);\n\n useEffect(() => {\n if (!state.voiceEnabled || !('webkitSpeechRecognition' in window || 'SpeechRecognition' in window)) return;\n\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.lang = state.language === 'tl' ? 'tl-PH' : state.language === 'ceb' ? 'ceb-PH' : 'en-US';\n\n recognition.onresult = (event: any) => {\n const transcript = event.results[event.results.length - 1][0].transcript.toLowerCase();\n \n if (transcript.includes('increase text') || transcript.includes('palakihin')) increaseText();\n if (transcript.includes('decrease text') || transcript.includes('paliitin')) decreaseText();\n if (transcript.includes('high contrast') || transcript.includes('mataas')) toggleHighContrast();\n if (transcript.includes('negative contrast') || transcript.includes('negatibo')) toggleNegativeContrast();\n if (transcript.includes('light background') || transcript.includes('maliwanag')) toggleLightBackground();\n if (transcript.includes('underline') || transcript.includes('guhit')) toggleUnderlineLinks();\n if (transcript.includes('readable font') || transcript.includes('madaling')) toggleReadableFont();\n };\n\n recognition.start();\n return () => recognition.stop();\n }, [state.voiceEnabled, state.language]);\n\n const setLanguage = (lang: Language) => setState(s => ({ ...s, language: lang }));\n const increaseText = () => setState(s => ({ ...s, textSize: Math.min(s.textSize + 10, 200) }));\n const decreaseText = () => setState(s => ({ ...s, textSize: Math.max(s.textSize - 10, 80) }));\n const toggleHighContrast = () => setState(s => ({ ...s, highContrast: !s.highContrast, negativeContrast: false }));\n const toggleNegativeContrast = () => setState(s => ({ ...s, negativeContrast: !s.negativeContrast, highContrast: false }));\n const toggleLightBackground = () => setState(s => ({ ...s, lightBackground: !s.lightBackground }));\n const toggleUnderlineLinks = () => setState(s => ({ ...s, underlineLinks: !s.underlineLinks }));\n const toggleReadableFont = () => setState(s => ({ ...s, readableFont: !s.readableFont }));\n const toggleVoice = () => setState(s => ({ ...s, voiceEnabled: !s.voiceEnabled }));\n const translate = (key: TranslationKey) => translations[state.language][key];\n const t = (key: string) => allTranslations[state.language]?.[key] || key;\n\n return (\n <AccessibilityContext.Provider value={{\n ...state,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n t,\n }}>\n {children}\n </AccessibilityContext.Provider>\n );\n};\n\nexport const useAccessibility = () => {\n const context = useContext(AccessibilityContext);\n if (!context) throw new Error('useAccessibility must be used within AccessibilityProvider');\n return context;\n};\n","import React from 'react';\nimport { useAccessibility } from './AccessibilityContext';\n\nexport const AccessibilityToolbar: React.FC = () => {\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n return (\n <div className=\"accessibility-toolbar\">\n <select value={language} onChange={(e) => setLanguage(e.target.value as any)}>\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n <button onClick={increaseText}>+ {translate('increaseText')}</button>\n <button onClick={decreaseText}>- {translate('decreaseText')}</button>\n <button onClick={toggleHighContrast} className={highContrast ? 'active' : ''}>\n {translate('highContrast')}\n </button>\n <button onClick={toggleNegativeContrast} className={negativeContrast ? 'active' : ''}>\n {translate('negativeContrast')}\n </button>\n <button onClick={toggleLightBackground} className={lightBackground ? 'active' : ''}>\n {translate('lightBackground')}\n </button>\n <button onClick={toggleUnderlineLinks} className={underlineLinks ? 'active' : ''}>\n {translate('underlineLinks')}\n </button>\n <button onClick={toggleReadableFont} className={readableFont ? 'active' : ''}>\n {translate('readableFont')}\n </button>\n <button onClick={toggleVoice} className={voiceEnabled ? 'active' : ''}>\n 🎤 {translate('voiceCommand')}\n </button>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useAccessibility } from './AccessibilityContext';\n\nexport const AccessibilityDropdown: React.FC = () => {\n const [isOpen, setIsOpen] = useState(false);\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n return (\n <div className=\"accessibility-dropdown\">\n <button \n className=\"accessibility-dropdown-toggle\"\n onClick={() => setIsOpen(!isOpen)}\n >\n ♿ Accessibility\n </button>\n \n {isOpen && (\n <div className=\"accessibility-dropdown-menu\">\n <div className=\"accessibility-dropdown-section\">\n <label>Language:</label>\n <select value={language} onChange={(e) => setLanguage(e.target.value as any)}>\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n </div>\n\n <div className=\"accessibility-dropdown-section\">\n <button onClick={increaseText}>+ {translate('increaseText')}</button>\n <button onClick={decreaseText}>- {translate('decreaseText')}</button>\n </div>\n\n <div className=\"accessibility-dropdown-section\">\n <button onClick={toggleHighContrast} className={highContrast ? 'active' : ''}>\n {translate('highContrast')}\n </button>\n <button onClick={toggleNegativeContrast} className={negativeContrast ? 'active' : ''}>\n {translate('negativeContrast')}\n </button>\n <button onClick={toggleLightBackground} className={lightBackground ? 'active' : ''}>\n {translate('lightBackground')}\n </button>\n <button onClick={toggleUnderlineLinks} className={underlineLinks ? 'active' : ''}>\n {translate('underlineLinks')}\n </button>\n <button onClick={toggleReadableFont} className={readableFont ? 'active' : ''}>\n {translate('readableFont')}\n </button>\n <button onClick={toggleVoice} className={voiceEnabled ? 'active' : ''}>\n 🎤 {translate('voiceCommand')}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useAccessibility } from './AccessibilityContext';\nimport { TranslationKey } from './translations';\n\ninterface TProps {\n k: TranslationKey | string;\n children?: React.ReactNode;\n}\n\nexport const T: React.FC<TProps> = ({ k, children }) => {\n const { translate, language } = useAccessibility();\n \n if (children && typeof children === 'string') {\n return <>{children}</>;\n }\n \n return <>{translate(k as TranslationKey)}</>;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/translations.ts","../src/AccessibilityContext.tsx","../src/AccessibilityToolbar.tsx","../src/AccessibilityDropdown.tsx","../src/T.tsx"],"sourcesContent":["export const translations = {\n en: {\n increaseText: 'Increase Text',\n decreaseText: 'Decrease Text',\n highContrast: 'High Contrast',\n negativeContrast: 'Negative Contrast',\n lightBackground: 'Light Background',\n underlineLinks: 'Underline Links',\n readableFont: 'Readable Font',\n voiceCommand: 'Voice Command',\n },\n tl: {\n increaseText: 'Palakihin ang Teksto',\n decreaseText: 'Paliitin ang Teksto',\n highContrast: 'Mataas na Contrast',\n negativeContrast: 'Negatibong Contrast',\n lightBackground: 'Maliwanag na Background',\n underlineLinks: 'May Guhit na Links',\n readableFont: 'Madaling Basahin na Font',\n voiceCommand: 'Voice Command',\n },\n ceb: {\n increaseText: 'Padak-on ang Teksto',\n decreaseText: 'Pagamay-on ang Teksto',\n highContrast: 'Taas nga Contrast',\n negativeContrast: 'Negatibo nga Contrast',\n lightBackground: 'Hayag nga Background',\n underlineLinks: 'Linya sa Ubos sa Links',\n readableFont: 'Sayon Basahon nga Font',\n voiceCommand: 'Voice Command',\n },\n};\n\nexport type Language = keyof typeof translations;\nexport type TranslationKey = keyof typeof translations.en;\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n} from \"react\";\nimport { Language, translations, TranslationKey } from \"./translations\";\n\ninterface AccessibilityState {\n language: Language;\n textSize: number;\n highContrast: boolean;\n negativeContrast: boolean;\n lightBackground: boolean;\n underlineLinks: boolean;\n readableFont: boolean;\n voiceEnabled: boolean;\n}\n\ninterface AccessibilityContextType extends AccessibilityState {\n setLanguage: (lang: Language) => void;\n increaseText: () => void;\n decreaseText: () => void;\n toggleHighContrast: () => void;\n toggleNegativeContrast: () => void;\n toggleLightBackground: () => void;\n toggleUnderlineLinks: () => void;\n toggleReadableFont: () => void;\n toggleVoice: () => void;\n translate: (key: TranslationKey) => string;\n t: (key: string) => string;\n}\n\nconst AccessibilityContext = createContext<\n AccessibilityContextType | undefined\n>(undefined);\n\ninterface AccessibilityProviderProps {\n children: ReactNode;\n translations?: Partial<Record<Language, Record<string, string>>>;\n}\n\nexport const AccessibilityProvider: React.FC<AccessibilityProviderProps> = ({\n children,\n translations: customTranslations,\n}) => {\n const [state, setState] = useState<AccessibilityState>({\n language: \"en\",\n textSize: 100,\n highContrast: false,\n negativeContrast: false,\n lightBackground: false,\n underlineLinks: false,\n readableFont: false,\n voiceEnabled: false,\n });\n\n const allTranslations: Partial<Record<Language, Record<string, string>>> =\n customTranslations || translations;\n\n useEffect(() => {\n const root = document.documentElement;\n root.style.fontSize = `${state.textSize}%`;\n\n root.classList.toggle(\"high-contrast\", state.highContrast);\n root.classList.toggle(\"negative-contrast\", state.negativeContrast);\n root.classList.toggle(\"light-background\", state.lightBackground);\n root.classList.toggle(\"underline-links\", state.underlineLinks);\n root.classList.toggle(\"readable-font\", state.readableFont);\n }, [state]);\n\n useEffect(() => {\n if (\n !state.voiceEnabled ||\n !(\"webkitSpeechRecognition\" in window || \"SpeechRecognition\" in window)\n )\n return;\n\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.lang =\n state.language === \"tl\"\n ? \"tl-PH\"\n : state.language === \"ceb\"\n ? \"ceb-PH\"\n : \"en-US\";\n\n recognition.onresult = (event: any) => {\n const transcript =\n event.results[event.results.length - 1][0].transcript.toLowerCase();\n\n if (\n transcript.includes(\"increase text\") ||\n transcript.includes(\"palakihin\")\n )\n increaseText();\n if (\n transcript.includes(\"decrease text\") ||\n transcript.includes(\"paliitin\")\n )\n decreaseText();\n if (transcript.includes(\"high contrast\") || transcript.includes(\"mataas\"))\n toggleHighContrast();\n if (\n transcript.includes(\"negative contrast\") ||\n transcript.includes(\"negatibo\")\n )\n toggleNegativeContrast();\n if (\n transcript.includes(\"light background\") ||\n transcript.includes(\"maliwanag\")\n )\n toggleLightBackground();\n if (transcript.includes(\"underline\") || transcript.includes(\"guhit\"))\n toggleUnderlineLinks();\n if (\n transcript.includes(\"readable font\") ||\n transcript.includes(\"madaling\")\n )\n toggleReadableFont();\n };\n\n recognition.start();\n return () => recognition.stop();\n }, [state.voiceEnabled, state.language]);\n\n const setLanguage = (lang: Language) =>\n setState((s) => ({ ...s, language: lang }));\n const increaseText = () =>\n setState((s) => ({ ...s, textSize: Math.min(s.textSize + 10, 200) }));\n const decreaseText = () =>\n setState((s) => ({ ...s, textSize: Math.max(s.textSize - 10, 80) }));\n const toggleHighContrast = () =>\n setState((s) => ({\n ...s,\n highContrast: !s.highContrast,\n negativeContrast: false,\n }));\n const toggleNegativeContrast = () =>\n setState((s) => ({\n ...s,\n negativeContrast: !s.negativeContrast,\n highContrast: false,\n }));\n const toggleLightBackground = () =>\n setState((s) => ({ ...s, lightBackground: !s.lightBackground }));\n const toggleUnderlineLinks = () =>\n setState((s) => ({ ...s, underlineLinks: !s.underlineLinks }));\n const toggleReadableFont = () =>\n setState((s) => ({ ...s, readableFont: !s.readableFont }));\n const toggleVoice = () =>\n setState((s) => ({ ...s, voiceEnabled: !s.voiceEnabled }));\n const translate = (key: TranslationKey) => translations[state.language][key];\n const t = (key: string) => allTranslations[state.language]?.[key] || key;\n\n return (\n <AccessibilityContext.Provider\n value={{\n ...state,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n t,\n }}\n >\n {children}\n </AccessibilityContext.Provider>\n );\n};\n\nexport const useAccessibility = () => {\n const context = useContext(AccessibilityContext);\n if (!context)\n throw new Error(\n \"useAccessibility must be used within AccessibilityProvider\",\n );\n return context;\n};\n","import React from \"react\";\nimport { useAccessibility } from \"./AccessibilityContext\";\n\nexport interface AccessibilityToolbarClasses {\n root?: string;\n select?: string;\n button?: string;\n activeButton?: string;\n voiceButton?: string;\n}\n\nexport interface AccessibilityToolbarProps {\n className?: string;\n style?: React.CSSProperties;\n classes?: AccessibilityToolbarClasses;\n}\n\nconst cn = (...parts: Array<string | false | undefined>) =>\n parts.filter(Boolean).join(\" \");\n\nexport const AccessibilityToolbar: React.FC<AccessibilityToolbarProps> = ({\n className,\n style,\n classes,\n}) => {\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n return (\n <div\n className={cn(\"accessibility-toolbar\", classes?.root, className)}\n style={style}\n >\n <select\n className={cn(classes?.select)}\n value={language}\n onChange={(e) => setLanguage(e.target.value as any)}\n >\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n <button className={cn(classes?.button)} onClick={increaseText}>\n + {translate(\"increaseText\")}\n </button>\n <button className={cn(classes?.button)} onClick={decreaseText}>\n - {translate(\"decreaseText\")}\n </button>\n <button\n className={cn(\n classes?.button,\n highContrast && \"active\",\n highContrast && classes?.activeButton,\n )}\n data-active={highContrast}\n onClick={toggleHighContrast}\n >\n {translate(\"highContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n negativeContrast && \"active\",\n negativeContrast && classes?.activeButton,\n )}\n data-active={negativeContrast}\n onClick={toggleNegativeContrast}\n >\n {translate(\"negativeContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n lightBackground && \"active\",\n lightBackground && classes?.activeButton,\n )}\n data-active={lightBackground}\n onClick={toggleLightBackground}\n >\n {translate(\"lightBackground\")}\n </button>\n <button\n className={cn(\n classes?.button,\n underlineLinks && \"active\",\n underlineLinks && classes?.activeButton,\n )}\n data-active={underlineLinks}\n onClick={toggleUnderlineLinks}\n >\n {translate(\"underlineLinks\")}\n </button>\n <button\n className={cn(\n classes?.button,\n readableFont && \"active\",\n readableFont && classes?.activeButton,\n )}\n data-active={readableFont}\n onClick={toggleReadableFont}\n >\n {translate(\"readableFont\")}\n </button>\n <button\n className={cn(\n classes?.button,\n classes?.voiceButton,\n voiceEnabled && \"active\",\n voiceEnabled && classes?.activeButton,\n )}\n data-active={voiceEnabled}\n onClick={toggleVoice}\n >\n 🎤 {translate(\"voiceCommand\")}\n </button>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { useAccessibility } from \"./AccessibilityContext\";\n\nexport interface AccessibilityDropdownClasses {\n root?: string;\n toggle?: string;\n menu?: string;\n section?: string;\n label?: string;\n select?: string;\n button?: string;\n activeButton?: string;\n voiceButton?: string;\n}\n\nexport interface AccessibilityDropdownProps {\n className?: string;\n style?: React.CSSProperties;\n classes?: AccessibilityDropdownClasses;\n triggerLabel?: React.ReactNode;\n renderTrigger?: (params: {\n isOpen: boolean;\n toggle: () => void;\n className: string;\n }) => React.ReactNode;\n}\n\nconst cn = (...parts: Array<string | false | undefined>) =>\n parts.filter(Boolean).join(\" \");\n\nexport const AccessibilityDropdown: React.FC<AccessibilityDropdownProps> = ({\n className,\n style,\n classes,\n triggerLabel = \"♿ Accessibility\",\n renderTrigger,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n const toggle = () => setIsOpen(!isOpen);\n\n return (\n <div\n className={cn(\"accessibility-dropdown\", classes?.root, className)}\n style={style}\n >\n {renderTrigger ? (\n renderTrigger({\n isOpen,\n toggle,\n className: cn(\"accessibility-dropdown-toggle\", classes?.toggle),\n })\n ) : (\n <button\n className={cn(\"accessibility-dropdown-toggle\", classes?.toggle)}\n onClick={toggle}\n >\n {triggerLabel}\n </button>\n )}\n\n {isOpen && (\n <div className={cn(\"accessibility-dropdown-menu\", classes?.menu)}>\n <div\n className={cn(\"accessibility-dropdown-section\", classes?.section)}\n >\n <label className={cn(classes?.label)}>Language:</label>\n <select\n className={cn(classes?.select)}\n value={language}\n onChange={(e) => setLanguage(e.target.value as any)}\n >\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n </div>\n\n <div\n className={cn(\"accessibility-dropdown-section\", classes?.section)}\n >\n <button className={cn(classes?.button)} onClick={increaseText}>\n + {translate(\"increaseText\")}\n </button>\n <button className={cn(classes?.button)} onClick={decreaseText}>\n - {translate(\"decreaseText\")}\n </button>\n </div>\n\n <div\n className={cn(\"accessibility-dropdown-section\", classes?.section)}\n >\n <button\n className={cn(\n classes?.button,\n highContrast && \"active\",\n highContrast && classes?.activeButton,\n )}\n data-active={highContrast}\n onClick={toggleHighContrast}\n >\n {translate(\"highContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n negativeContrast && \"active\",\n negativeContrast && classes?.activeButton,\n )}\n data-active={negativeContrast}\n onClick={toggleNegativeContrast}\n >\n {translate(\"negativeContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n lightBackground && \"active\",\n lightBackground && classes?.activeButton,\n )}\n data-active={lightBackground}\n onClick={toggleLightBackground}\n >\n {translate(\"lightBackground\")}\n </button>\n <button\n className={cn(\n classes?.button,\n underlineLinks && \"active\",\n underlineLinks && classes?.activeButton,\n )}\n data-active={underlineLinks}\n onClick={toggleUnderlineLinks}\n >\n {translate(\"underlineLinks\")}\n </button>\n <button\n className={cn(\n classes?.button,\n readableFont && \"active\",\n readableFont && classes?.activeButton,\n )}\n data-active={readableFont}\n onClick={toggleReadableFont}\n >\n {translate(\"readableFont\")}\n </button>\n <button\n className={cn(\n classes?.button,\n classes?.voiceButton,\n voiceEnabled && \"active\",\n voiceEnabled && classes?.activeButton,\n )}\n data-active={voiceEnabled}\n onClick={toggleVoice}\n >\n 🎤 {translate(\"voiceCommand\")}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useAccessibility } from './AccessibilityContext';\nimport { TranslationKey } from './translations';\n\ninterface TProps {\n k: TranslationKey | string;\n children?: React.ReactNode;\n}\n\nexport const T: React.FC<TProps> = ({ k, children }) => {\n const { translate, language } = useAccessibility();\n \n if (children && typeof children === 'string') {\n return <>{children}</>;\n }\n \n return <>{translate(k as TranslationKey)}</>;\n};\n"],"names":["cn"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -36,9 +36,9 @@ const translations = {
36
36
  };
37
37
 
38
38
  const AccessibilityContext = React.createContext(undefined);
39
- const AccessibilityProvider = ({ children, translations: customTranslations }) => {
39
+ const AccessibilityProvider = ({ children, translations: customTranslations, }) => {
40
40
  const [state, setState] = React.useState({
41
- language: 'en',
41
+ language: "en",
42
42
  textSize: 100,
43
43
  highContrast: false,
44
44
  negativeContrast: false,
@@ -51,48 +51,60 @@ const AccessibilityProvider = ({ children, translations: customTranslations }) =
51
51
  React.useEffect(() => {
52
52
  const root = document.documentElement;
53
53
  root.style.fontSize = `${state.textSize}%`;
54
- root.classList.toggle('high-contrast', state.highContrast);
55
- root.classList.toggle('negative-contrast', state.negativeContrast);
56
- root.classList.toggle('light-background', state.lightBackground);
57
- root.classList.toggle('underline-links', state.underlineLinks);
58
- root.classList.toggle('readable-font', state.readableFont);
54
+ root.classList.toggle("high-contrast", state.highContrast);
55
+ root.classList.toggle("negative-contrast", state.negativeContrast);
56
+ root.classList.toggle("light-background", state.lightBackground);
57
+ root.classList.toggle("underline-links", state.underlineLinks);
58
+ root.classList.toggle("readable-font", state.readableFont);
59
59
  }, [state]);
60
60
  React.useEffect(() => {
61
- if (!state.voiceEnabled || !('webkitSpeechRecognition' in window || 'SpeechRecognition' in window))
61
+ if (!state.voiceEnabled ||
62
+ !("webkitSpeechRecognition" in window || "SpeechRecognition" in window))
62
63
  return;
63
- const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
64
+ const SpeechRecognition = window.SpeechRecognition ||
65
+ window.webkitSpeechRecognition;
64
66
  const recognition = new SpeechRecognition();
65
67
  recognition.continuous = true;
66
- recognition.lang = state.language === 'tl' ? 'tl-PH' : state.language === 'ceb' ? 'ceb-PH' : 'en-US';
68
+ recognition.lang =
69
+ state.language === "tl"
70
+ ? "tl-PH"
71
+ : state.language === "ceb"
72
+ ? "ceb-PH"
73
+ : "en-US";
67
74
  recognition.onresult = (event) => {
68
75
  const transcript = event.results[event.results.length - 1][0].transcript.toLowerCase();
69
- if (transcript.includes('increase text') || transcript.includes('palakihin'))
76
+ if (transcript.includes("increase text") ||
77
+ transcript.includes("palakihin"))
70
78
  increaseText();
71
- if (transcript.includes('decrease text') || transcript.includes('paliitin'))
79
+ if (transcript.includes("decrease text") ||
80
+ transcript.includes("paliitin"))
72
81
  decreaseText();
73
- if (transcript.includes('high contrast') || transcript.includes('mataas'))
82
+ if (transcript.includes("high contrast") || transcript.includes("mataas"))
74
83
  toggleHighContrast();
75
- if (transcript.includes('negative contrast') || transcript.includes('negatibo'))
84
+ if (transcript.includes("negative contrast") ||
85
+ transcript.includes("negatibo"))
76
86
  toggleNegativeContrast();
77
- if (transcript.includes('light background') || transcript.includes('maliwanag'))
87
+ if (transcript.includes("light background") ||
88
+ transcript.includes("maliwanag"))
78
89
  toggleLightBackground();
79
- if (transcript.includes('underline') || transcript.includes('guhit'))
90
+ if (transcript.includes("underline") || transcript.includes("guhit"))
80
91
  toggleUnderlineLinks();
81
- if (transcript.includes('readable font') || transcript.includes('madaling'))
92
+ if (transcript.includes("readable font") ||
93
+ transcript.includes("madaling"))
82
94
  toggleReadableFont();
83
95
  };
84
96
  recognition.start();
85
97
  return () => recognition.stop();
86
98
  }, [state.voiceEnabled, state.language]);
87
- const setLanguage = (lang) => setState(s => (Object.assign(Object.assign({}, s), { language: lang })));
88
- const increaseText = () => setState(s => (Object.assign(Object.assign({}, s), { textSize: Math.min(s.textSize + 10, 200) })));
89
- const decreaseText = () => setState(s => (Object.assign(Object.assign({}, s), { textSize: Math.max(s.textSize - 10, 80) })));
90
- const toggleHighContrast = () => setState(s => (Object.assign(Object.assign({}, s), { highContrast: !s.highContrast, negativeContrast: false })));
91
- const toggleNegativeContrast = () => setState(s => (Object.assign(Object.assign({}, s), { negativeContrast: !s.negativeContrast, highContrast: false })));
92
- const toggleLightBackground = () => setState(s => (Object.assign(Object.assign({}, s), { lightBackground: !s.lightBackground })));
93
- const toggleUnderlineLinks = () => setState(s => (Object.assign(Object.assign({}, s), { underlineLinks: !s.underlineLinks })));
94
- const toggleReadableFont = () => setState(s => (Object.assign(Object.assign({}, s), { readableFont: !s.readableFont })));
95
- const toggleVoice = () => setState(s => (Object.assign(Object.assign({}, s), { voiceEnabled: !s.voiceEnabled })));
99
+ const setLanguage = (lang) => setState((s) => (Object.assign(Object.assign({}, s), { language: lang })));
100
+ const increaseText = () => setState((s) => (Object.assign(Object.assign({}, s), { textSize: Math.min(s.textSize + 10, 200) })));
101
+ const decreaseText = () => setState((s) => (Object.assign(Object.assign({}, s), { textSize: Math.max(s.textSize - 10, 80) })));
102
+ const toggleHighContrast = () => setState((s) => (Object.assign(Object.assign({}, s), { highContrast: !s.highContrast, negativeContrast: false })));
103
+ const toggleNegativeContrast = () => setState((s) => (Object.assign(Object.assign({}, s), { negativeContrast: !s.negativeContrast, highContrast: false })));
104
+ const toggleLightBackground = () => setState((s) => (Object.assign(Object.assign({}, s), { lightBackground: !s.lightBackground })));
105
+ const toggleUnderlineLinks = () => setState((s) => (Object.assign(Object.assign({}, s), { underlineLinks: !s.underlineLinks })));
106
+ const toggleReadableFont = () => setState((s) => (Object.assign(Object.assign({}, s), { readableFont: !s.readableFont })));
107
+ const toggleVoice = () => setState((s) => (Object.assign(Object.assign({}, s), { voiceEnabled: !s.voiceEnabled })));
96
108
  const translate = (key) => translations[state.language][key];
97
109
  const t = (key) => { var _a; return ((_a = allTranslations[state.language]) === null || _a === void 0 ? void 0 : _a[key]) || key; };
98
110
  return (React.createElement(AccessibilityContext.Provider, { value: Object.assign(Object.assign({}, state), { setLanguage,
@@ -110,61 +122,68 @@ const AccessibilityProvider = ({ children, translations: customTranslations }) =
110
122
  const useAccessibility = () => {
111
123
  const context = React.useContext(AccessibilityContext);
112
124
  if (!context)
113
- throw new Error('useAccessibility must be used within AccessibilityProvider');
125
+ throw new Error("useAccessibility must be used within AccessibilityProvider");
114
126
  return context;
115
127
  };
116
128
 
117
- const AccessibilityToolbar = () => {
129
+ const cn$1 = (...parts) => parts.filter(Boolean).join(" ");
130
+ const AccessibilityToolbar = ({ className, style, classes, }) => {
118
131
  const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
119
- return (React.createElement("div", { className: "accessibility-toolbar" },
120
- React.createElement("select", { value: language, onChange: (e) => setLanguage(e.target.value) },
132
+ return (React.createElement("div", { className: cn$1("accessibility-toolbar", classes === null || classes === void 0 ? void 0 : classes.root, className), style: style },
133
+ React.createElement("select", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.select), value: language, onChange: (e) => setLanguage(e.target.value) },
121
134
  React.createElement("option", { value: "en" }, "English"),
122
135
  React.createElement("option", { value: "tl" }, "Tagalog"),
123
136
  React.createElement("option", { value: "ceb" }, "Cebuano")),
124
- React.createElement("button", { onClick: increaseText },
137
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: increaseText },
125
138
  "+ ",
126
- translate('increaseText')),
127
- React.createElement("button", { onClick: decreaseText },
139
+ translate("increaseText")),
140
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
128
141
  "- ",
129
- translate('decreaseText')),
130
- React.createElement("button", { onClick: toggleHighContrast, className: highContrast ? 'active' : '' }, translate('highContrast')),
131
- React.createElement("button", { onClick: toggleNegativeContrast, className: negativeContrast ? 'active' : '' }, translate('negativeContrast')),
132
- React.createElement("button", { onClick: toggleLightBackground, className: lightBackground ? 'active' : '' }, translate('lightBackground')),
133
- React.createElement("button", { onClick: toggleUnderlineLinks, className: underlineLinks ? 'active' : '' }, translate('underlineLinks')),
134
- React.createElement("button", { onClick: toggleReadableFont, className: readableFont ? 'active' : '' }, translate('readableFont')),
135
- React.createElement("button", { onClick: toggleVoice, className: voiceEnabled ? 'active' : '' },
142
+ translate("decreaseText")),
143
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, highContrast && "active", highContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": highContrast, onClick: toggleHighContrast }, translate("highContrast")),
144
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, negativeContrast && "active", negativeContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": negativeContrast, onClick: toggleNegativeContrast }, translate("negativeContrast")),
145
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, lightBackground && "active", lightBackground && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": lightBackground, onClick: toggleLightBackground }, translate("lightBackground")),
146
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, underlineLinks && "active", underlineLinks && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": underlineLinks, onClick: toggleUnderlineLinks }, translate("underlineLinks")),
147
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, readableFont && "active", readableFont && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": readableFont, onClick: toggleReadableFont }, translate("readableFont")),
148
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button, classes === null || classes === void 0 ? void 0 : classes.voiceButton, voiceEnabled && "active", voiceEnabled && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": voiceEnabled, onClick: toggleVoice },
136
149
  "\uD83C\uDFA4 ",
137
- translate('voiceCommand'))));
150
+ translate("voiceCommand"))));
138
151
  };
139
152
 
140
- const AccessibilityDropdown = () => {
153
+ const cn = (...parts) => parts.filter(Boolean).join(" ");
154
+ const AccessibilityDropdown = ({ className, style, classes, triggerLabel = "♿ Accessibility", renderTrigger, }) => {
141
155
  const [isOpen, setIsOpen] = React.useState(false);
142
156
  const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
143
- return (React.createElement("div", { className: "accessibility-dropdown" },
144
- React.createElement("button", { className: "accessibility-dropdown-toggle", onClick: () => setIsOpen(!isOpen) }, "\u267F Accessibility"),
145
- isOpen && (React.createElement("div", { className: "accessibility-dropdown-menu" },
146
- React.createElement("div", { className: "accessibility-dropdown-section" },
147
- React.createElement("label", null, "Language:"),
148
- React.createElement("select", { value: language, onChange: (e) => setLanguage(e.target.value) },
157
+ const toggle = () => setIsOpen(!isOpen);
158
+ return (React.createElement("div", { className: cn("accessibility-dropdown", classes === null || classes === void 0 ? void 0 : classes.root, className), style: style },
159
+ renderTrigger ? (renderTrigger({
160
+ isOpen,
161
+ toggle,
162
+ className: cn("accessibility-dropdown-toggle", classes === null || classes === void 0 ? void 0 : classes.toggle),
163
+ })) : (React.createElement("button", { className: cn("accessibility-dropdown-toggle", classes === null || classes === void 0 ? void 0 : classes.toggle), onClick: toggle }, triggerLabel)),
164
+ isOpen && (React.createElement("div", { className: cn("accessibility-dropdown-menu", classes === null || classes === void 0 ? void 0 : classes.menu) },
165
+ React.createElement("div", { className: cn("accessibility-dropdown-section", classes === null || classes === void 0 ? void 0 : classes.section) },
166
+ React.createElement("label", { className: cn(classes === null || classes === void 0 ? void 0 : classes.label) }, "Language:"),
167
+ React.createElement("select", { className: cn(classes === null || classes === void 0 ? void 0 : classes.select), value: language, onChange: (e) => setLanguage(e.target.value) },
149
168
  React.createElement("option", { value: "en" }, "English"),
150
169
  React.createElement("option", { value: "tl" }, "Tagalog"),
151
170
  React.createElement("option", { value: "ceb" }, "Cebuano"))),
152
- React.createElement("div", { className: "accessibility-dropdown-section" },
153
- React.createElement("button", { onClick: increaseText },
171
+ React.createElement("div", { className: cn("accessibility-dropdown-section", classes === null || classes === void 0 ? void 0 : classes.section) },
172
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button), onClick: increaseText },
154
173
  "+ ",
155
- translate('increaseText')),
156
- React.createElement("button", { onClick: decreaseText },
174
+ translate("increaseText")),
175
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
157
176
  "- ",
158
- translate('decreaseText'))),
159
- React.createElement("div", { className: "accessibility-dropdown-section" },
160
- React.createElement("button", { onClick: toggleHighContrast, className: highContrast ? 'active' : '' }, translate('highContrast')),
161
- React.createElement("button", { onClick: toggleNegativeContrast, className: negativeContrast ? 'active' : '' }, translate('negativeContrast')),
162
- React.createElement("button", { onClick: toggleLightBackground, className: lightBackground ? 'active' : '' }, translate('lightBackground')),
163
- React.createElement("button", { onClick: toggleUnderlineLinks, className: underlineLinks ? 'active' : '' }, translate('underlineLinks')),
164
- React.createElement("button", { onClick: toggleReadableFont, className: readableFont ? 'active' : '' }, translate('readableFont')),
165
- React.createElement("button", { onClick: toggleVoice, className: voiceEnabled ? 'active' : '' },
177
+ translate("decreaseText"))),
178
+ React.createElement("div", { className: cn("accessibility-dropdown-section", classes === null || classes === void 0 ? void 0 : classes.section) },
179
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, highContrast && "active", highContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": highContrast, onClick: toggleHighContrast }, translate("highContrast")),
180
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, negativeContrast && "active", negativeContrast && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": negativeContrast, onClick: toggleNegativeContrast }, translate("negativeContrast")),
181
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, lightBackground && "active", lightBackground && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": lightBackground, onClick: toggleLightBackground }, translate("lightBackground")),
182
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, underlineLinks && "active", underlineLinks && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": underlineLinks, onClick: toggleUnderlineLinks }, translate("underlineLinks")),
183
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, readableFont && "active", readableFont && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": readableFont, onClick: toggleReadableFont }, translate("readableFont")),
184
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button, classes === null || classes === void 0 ? void 0 : classes.voiceButton, voiceEnabled && "active", voiceEnabled && (classes === null || classes === void 0 ? void 0 : classes.activeButton)), "data-active": voiceEnabled, onClick: toggleVoice },
166
185
  "\uD83C\uDFA4 ",
167
- translate('voiceCommand')))))));
186
+ translate("voiceCommand")))))));
168
187
  };
169
188
 
170
189
  const T = ({ k, children }) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/translations.ts","../src/AccessibilityContext.tsx","../src/AccessibilityToolbar.tsx","../src/AccessibilityDropdown.tsx","../src/T.tsx"],"sourcesContent":["export const translations = {\n en: {\n increaseText: 'Increase Text',\n decreaseText: 'Decrease Text',\n highContrast: 'High Contrast',\n negativeContrast: 'Negative Contrast',\n lightBackground: 'Light Background',\n underlineLinks: 'Underline Links',\n readableFont: 'Readable Font',\n voiceCommand: 'Voice Command',\n },\n tl: {\n increaseText: 'Palakihin ang Teksto',\n decreaseText: 'Paliitin ang Teksto',\n highContrast: 'Mataas na Contrast',\n negativeContrast: 'Negatibong Contrast',\n lightBackground: 'Maliwanag na Background',\n underlineLinks: 'May Guhit na Links',\n readableFont: 'Madaling Basahin na Font',\n voiceCommand: 'Voice Command',\n },\n ceb: {\n increaseText: 'Padak-on ang Teksto',\n decreaseText: 'Pagamay-on ang Teksto',\n highContrast: 'Taas nga Contrast',\n negativeContrast: 'Negatibo nga Contrast',\n lightBackground: 'Hayag nga Background',\n underlineLinks: 'Linya sa Ubos sa Links',\n readableFont: 'Sayon Basahon nga Font',\n voiceCommand: 'Voice Command',\n },\n};\n\nexport type Language = keyof typeof translations;\nexport type TranslationKey = keyof typeof translations.en;\n","import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';\nimport { Language, translations, TranslationKey } from './translations';\n\ninterface AccessibilityState {\n language: Language;\n textSize: number;\n highContrast: boolean;\n negativeContrast: boolean;\n lightBackground: boolean;\n underlineLinks: boolean;\n readableFont: boolean;\n voiceEnabled: boolean;\n}\n\ninterface AccessibilityContextType extends AccessibilityState {\n setLanguage: (lang: Language) => void;\n increaseText: () => void;\n decreaseText: () => void;\n toggleHighContrast: () => void;\n toggleNegativeContrast: () => void;\n toggleLightBackground: () => void;\n toggleUnderlineLinks: () => void;\n toggleReadableFont: () => void;\n toggleVoice: () => void;\n translate: (key: TranslationKey) => string;\n t: (key: string) => string;\n}\n\nconst AccessibilityContext = createContext<AccessibilityContextType | undefined>(undefined);\n\ninterface AccessibilityProviderProps {\n children: ReactNode;\n translations?: Record<string, Record<string, any>>;\n}\n\nexport const AccessibilityProvider: React.FC<AccessibilityProviderProps> = ({ children, translations: customTranslations }) => {\n const [state, setState] = useState<AccessibilityState>({\n language: 'en',\n textSize: 100,\n highContrast: false,\n negativeContrast: false,\n lightBackground: false,\n underlineLinks: false,\n readableFont: false,\n voiceEnabled: false,\n });\n\n const allTranslations = customTranslations || translations;\n\n useEffect(() => {\n const root = document.documentElement;\n root.style.fontSize = `${state.textSize}%`;\n \n root.classList.toggle('high-contrast', state.highContrast);\n root.classList.toggle('negative-contrast', state.negativeContrast);\n root.classList.toggle('light-background', state.lightBackground);\n root.classList.toggle('underline-links', state.underlineLinks);\n root.classList.toggle('readable-font', state.readableFont);\n }, [state]);\n\n useEffect(() => {\n if (!state.voiceEnabled || !('webkitSpeechRecognition' in window || 'SpeechRecognition' in window)) return;\n\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.lang = state.language === 'tl' ? 'tl-PH' : state.language === 'ceb' ? 'ceb-PH' : 'en-US';\n\n recognition.onresult = (event: any) => {\n const transcript = event.results[event.results.length - 1][0].transcript.toLowerCase();\n \n if (transcript.includes('increase text') || transcript.includes('palakihin')) increaseText();\n if (transcript.includes('decrease text') || transcript.includes('paliitin')) decreaseText();\n if (transcript.includes('high contrast') || transcript.includes('mataas')) toggleHighContrast();\n if (transcript.includes('negative contrast') || transcript.includes('negatibo')) toggleNegativeContrast();\n if (transcript.includes('light background') || transcript.includes('maliwanag')) toggleLightBackground();\n if (transcript.includes('underline') || transcript.includes('guhit')) toggleUnderlineLinks();\n if (transcript.includes('readable font') || transcript.includes('madaling')) toggleReadableFont();\n };\n\n recognition.start();\n return () => recognition.stop();\n }, [state.voiceEnabled, state.language]);\n\n const setLanguage = (lang: Language) => setState(s => ({ ...s, language: lang }));\n const increaseText = () => setState(s => ({ ...s, textSize: Math.min(s.textSize + 10, 200) }));\n const decreaseText = () => setState(s => ({ ...s, textSize: Math.max(s.textSize - 10, 80) }));\n const toggleHighContrast = () => setState(s => ({ ...s, highContrast: !s.highContrast, negativeContrast: false }));\n const toggleNegativeContrast = () => setState(s => ({ ...s, negativeContrast: !s.negativeContrast, highContrast: false }));\n const toggleLightBackground = () => setState(s => ({ ...s, lightBackground: !s.lightBackground }));\n const toggleUnderlineLinks = () => setState(s => ({ ...s, underlineLinks: !s.underlineLinks }));\n const toggleReadableFont = () => setState(s => ({ ...s, readableFont: !s.readableFont }));\n const toggleVoice = () => setState(s => ({ ...s, voiceEnabled: !s.voiceEnabled }));\n const translate = (key: TranslationKey) => translations[state.language][key];\n const t = (key: string) => allTranslations[state.language]?.[key] || key;\n\n return (\n <AccessibilityContext.Provider value={{\n ...state,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n t,\n }}>\n {children}\n </AccessibilityContext.Provider>\n );\n};\n\nexport const useAccessibility = () => {\n const context = useContext(AccessibilityContext);\n if (!context) throw new Error('useAccessibility must be used within AccessibilityProvider');\n return context;\n};\n","import React from 'react';\nimport { useAccessibility } from './AccessibilityContext';\n\nexport const AccessibilityToolbar: React.FC = () => {\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n return (\n <div className=\"accessibility-toolbar\">\n <select value={language} onChange={(e) => setLanguage(e.target.value as any)}>\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n <button onClick={increaseText}>+ {translate('increaseText')}</button>\n <button onClick={decreaseText}>- {translate('decreaseText')}</button>\n <button onClick={toggleHighContrast} className={highContrast ? 'active' : ''}>\n {translate('highContrast')}\n </button>\n <button onClick={toggleNegativeContrast} className={negativeContrast ? 'active' : ''}>\n {translate('negativeContrast')}\n </button>\n <button onClick={toggleLightBackground} className={lightBackground ? 'active' : ''}>\n {translate('lightBackground')}\n </button>\n <button onClick={toggleUnderlineLinks} className={underlineLinks ? 'active' : ''}>\n {translate('underlineLinks')}\n </button>\n <button onClick={toggleReadableFont} className={readableFont ? 'active' : ''}>\n {translate('readableFont')}\n </button>\n <button onClick={toggleVoice} className={voiceEnabled ? 'active' : ''}>\n 🎤 {translate('voiceCommand')}\n </button>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useAccessibility } from './AccessibilityContext';\n\nexport const AccessibilityDropdown: React.FC = () => {\n const [isOpen, setIsOpen] = useState(false);\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n return (\n <div className=\"accessibility-dropdown\">\n <button \n className=\"accessibility-dropdown-toggle\"\n onClick={() => setIsOpen(!isOpen)}\n >\n ♿ Accessibility\n </button>\n \n {isOpen && (\n <div className=\"accessibility-dropdown-menu\">\n <div className=\"accessibility-dropdown-section\">\n <label>Language:</label>\n <select value={language} onChange={(e) => setLanguage(e.target.value as any)}>\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n </div>\n\n <div className=\"accessibility-dropdown-section\">\n <button onClick={increaseText}>+ {translate('increaseText')}</button>\n <button onClick={decreaseText}>- {translate('decreaseText')}</button>\n </div>\n\n <div className=\"accessibility-dropdown-section\">\n <button onClick={toggleHighContrast} className={highContrast ? 'active' : ''}>\n {translate('highContrast')}\n </button>\n <button onClick={toggleNegativeContrast} className={negativeContrast ? 'active' : ''}>\n {translate('negativeContrast')}\n </button>\n <button onClick={toggleLightBackground} className={lightBackground ? 'active' : ''}>\n {translate('lightBackground')}\n </button>\n <button onClick={toggleUnderlineLinks} className={underlineLinks ? 'active' : ''}>\n {translate('underlineLinks')}\n </button>\n <button onClick={toggleReadableFont} className={readableFont ? 'active' : ''}>\n {translate('readableFont')}\n </button>\n <button onClick={toggleVoice} className={voiceEnabled ? 'active' : ''}>\n 🎤 {translate('voiceCommand')}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useAccessibility } from './AccessibilityContext';\nimport { TranslationKey } from './translations';\n\ninterface TProps {\n k: TranslationKey | string;\n children?: React.ReactNode;\n}\n\nexport const T: React.FC<TProps> = ({ k, children }) => {\n const { translate, language } = useAccessibility();\n \n if (children && typeof children === 'string') {\n return <>{children}</>;\n }\n \n return <>{translate(k as TranslationKey)}</>;\n};\n"],"names":["createContext","useState","useEffect","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/translations.ts","../src/AccessibilityContext.tsx","../src/AccessibilityToolbar.tsx","../src/AccessibilityDropdown.tsx","../src/T.tsx"],"sourcesContent":["export const translations = {\n en: {\n increaseText: 'Increase Text',\n decreaseText: 'Decrease Text',\n highContrast: 'High Contrast',\n negativeContrast: 'Negative Contrast',\n lightBackground: 'Light Background',\n underlineLinks: 'Underline Links',\n readableFont: 'Readable Font',\n voiceCommand: 'Voice Command',\n },\n tl: {\n increaseText: 'Palakihin ang Teksto',\n decreaseText: 'Paliitin ang Teksto',\n highContrast: 'Mataas na Contrast',\n negativeContrast: 'Negatibong Contrast',\n lightBackground: 'Maliwanag na Background',\n underlineLinks: 'May Guhit na Links',\n readableFont: 'Madaling Basahin na Font',\n voiceCommand: 'Voice Command',\n },\n ceb: {\n increaseText: 'Padak-on ang Teksto',\n decreaseText: 'Pagamay-on ang Teksto',\n highContrast: 'Taas nga Contrast',\n negativeContrast: 'Negatibo nga Contrast',\n lightBackground: 'Hayag nga Background',\n underlineLinks: 'Linya sa Ubos sa Links',\n readableFont: 'Sayon Basahon nga Font',\n voiceCommand: 'Voice Command',\n },\n};\n\nexport type Language = keyof typeof translations;\nexport type TranslationKey = keyof typeof translations.en;\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n} from \"react\";\nimport { Language, translations, TranslationKey } from \"./translations\";\n\ninterface AccessibilityState {\n language: Language;\n textSize: number;\n highContrast: boolean;\n negativeContrast: boolean;\n lightBackground: boolean;\n underlineLinks: boolean;\n readableFont: boolean;\n voiceEnabled: boolean;\n}\n\ninterface AccessibilityContextType extends AccessibilityState {\n setLanguage: (lang: Language) => void;\n increaseText: () => void;\n decreaseText: () => void;\n toggleHighContrast: () => void;\n toggleNegativeContrast: () => void;\n toggleLightBackground: () => void;\n toggleUnderlineLinks: () => void;\n toggleReadableFont: () => void;\n toggleVoice: () => void;\n translate: (key: TranslationKey) => string;\n t: (key: string) => string;\n}\n\nconst AccessibilityContext = createContext<\n AccessibilityContextType | undefined\n>(undefined);\n\ninterface AccessibilityProviderProps {\n children: ReactNode;\n translations?: Partial<Record<Language, Record<string, string>>>;\n}\n\nexport const AccessibilityProvider: React.FC<AccessibilityProviderProps> = ({\n children,\n translations: customTranslations,\n}) => {\n const [state, setState] = useState<AccessibilityState>({\n language: \"en\",\n textSize: 100,\n highContrast: false,\n negativeContrast: false,\n lightBackground: false,\n underlineLinks: false,\n readableFont: false,\n voiceEnabled: false,\n });\n\n const allTranslations: Partial<Record<Language, Record<string, string>>> =\n customTranslations || translations;\n\n useEffect(() => {\n const root = document.documentElement;\n root.style.fontSize = `${state.textSize}%`;\n\n root.classList.toggle(\"high-contrast\", state.highContrast);\n root.classList.toggle(\"negative-contrast\", state.negativeContrast);\n root.classList.toggle(\"light-background\", state.lightBackground);\n root.classList.toggle(\"underline-links\", state.underlineLinks);\n root.classList.toggle(\"readable-font\", state.readableFont);\n }, [state]);\n\n useEffect(() => {\n if (\n !state.voiceEnabled ||\n !(\"webkitSpeechRecognition\" in window || \"SpeechRecognition\" in window)\n )\n return;\n\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.lang =\n state.language === \"tl\"\n ? \"tl-PH\"\n : state.language === \"ceb\"\n ? \"ceb-PH\"\n : \"en-US\";\n\n recognition.onresult = (event: any) => {\n const transcript =\n event.results[event.results.length - 1][0].transcript.toLowerCase();\n\n if (\n transcript.includes(\"increase text\") ||\n transcript.includes(\"palakihin\")\n )\n increaseText();\n if (\n transcript.includes(\"decrease text\") ||\n transcript.includes(\"paliitin\")\n )\n decreaseText();\n if (transcript.includes(\"high contrast\") || transcript.includes(\"mataas\"))\n toggleHighContrast();\n if (\n transcript.includes(\"negative contrast\") ||\n transcript.includes(\"negatibo\")\n )\n toggleNegativeContrast();\n if (\n transcript.includes(\"light background\") ||\n transcript.includes(\"maliwanag\")\n )\n toggleLightBackground();\n if (transcript.includes(\"underline\") || transcript.includes(\"guhit\"))\n toggleUnderlineLinks();\n if (\n transcript.includes(\"readable font\") ||\n transcript.includes(\"madaling\")\n )\n toggleReadableFont();\n };\n\n recognition.start();\n return () => recognition.stop();\n }, [state.voiceEnabled, state.language]);\n\n const setLanguage = (lang: Language) =>\n setState((s) => ({ ...s, language: lang }));\n const increaseText = () =>\n setState((s) => ({ ...s, textSize: Math.min(s.textSize + 10, 200) }));\n const decreaseText = () =>\n setState((s) => ({ ...s, textSize: Math.max(s.textSize - 10, 80) }));\n const toggleHighContrast = () =>\n setState((s) => ({\n ...s,\n highContrast: !s.highContrast,\n negativeContrast: false,\n }));\n const toggleNegativeContrast = () =>\n setState((s) => ({\n ...s,\n negativeContrast: !s.negativeContrast,\n highContrast: false,\n }));\n const toggleLightBackground = () =>\n setState((s) => ({ ...s, lightBackground: !s.lightBackground }));\n const toggleUnderlineLinks = () =>\n setState((s) => ({ ...s, underlineLinks: !s.underlineLinks }));\n const toggleReadableFont = () =>\n setState((s) => ({ ...s, readableFont: !s.readableFont }));\n const toggleVoice = () =>\n setState((s) => ({ ...s, voiceEnabled: !s.voiceEnabled }));\n const translate = (key: TranslationKey) => translations[state.language][key];\n const t = (key: string) => allTranslations[state.language]?.[key] || key;\n\n return (\n <AccessibilityContext.Provider\n value={{\n ...state,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n t,\n }}\n >\n {children}\n </AccessibilityContext.Provider>\n );\n};\n\nexport const useAccessibility = () => {\n const context = useContext(AccessibilityContext);\n if (!context)\n throw new Error(\n \"useAccessibility must be used within AccessibilityProvider\",\n );\n return context;\n};\n","import React from \"react\";\nimport { useAccessibility } from \"./AccessibilityContext\";\n\nexport interface AccessibilityToolbarClasses {\n root?: string;\n select?: string;\n button?: string;\n activeButton?: string;\n voiceButton?: string;\n}\n\nexport interface AccessibilityToolbarProps {\n className?: string;\n style?: React.CSSProperties;\n classes?: AccessibilityToolbarClasses;\n}\n\nconst cn = (...parts: Array<string | false | undefined>) =>\n parts.filter(Boolean).join(\" \");\n\nexport const AccessibilityToolbar: React.FC<AccessibilityToolbarProps> = ({\n className,\n style,\n classes,\n}) => {\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n return (\n <div\n className={cn(\"accessibility-toolbar\", classes?.root, className)}\n style={style}\n >\n <select\n className={cn(classes?.select)}\n value={language}\n onChange={(e) => setLanguage(e.target.value as any)}\n >\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n <button className={cn(classes?.button)} onClick={increaseText}>\n + {translate(\"increaseText\")}\n </button>\n <button className={cn(classes?.button)} onClick={decreaseText}>\n - {translate(\"decreaseText\")}\n </button>\n <button\n className={cn(\n classes?.button,\n highContrast && \"active\",\n highContrast && classes?.activeButton,\n )}\n data-active={highContrast}\n onClick={toggleHighContrast}\n >\n {translate(\"highContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n negativeContrast && \"active\",\n negativeContrast && classes?.activeButton,\n )}\n data-active={negativeContrast}\n onClick={toggleNegativeContrast}\n >\n {translate(\"negativeContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n lightBackground && \"active\",\n lightBackground && classes?.activeButton,\n )}\n data-active={lightBackground}\n onClick={toggleLightBackground}\n >\n {translate(\"lightBackground\")}\n </button>\n <button\n className={cn(\n classes?.button,\n underlineLinks && \"active\",\n underlineLinks && classes?.activeButton,\n )}\n data-active={underlineLinks}\n onClick={toggleUnderlineLinks}\n >\n {translate(\"underlineLinks\")}\n </button>\n <button\n className={cn(\n classes?.button,\n readableFont && \"active\",\n readableFont && classes?.activeButton,\n )}\n data-active={readableFont}\n onClick={toggleReadableFont}\n >\n {translate(\"readableFont\")}\n </button>\n <button\n className={cn(\n classes?.button,\n classes?.voiceButton,\n voiceEnabled && \"active\",\n voiceEnabled && classes?.activeButton,\n )}\n data-active={voiceEnabled}\n onClick={toggleVoice}\n >\n 🎤 {translate(\"voiceCommand\")}\n </button>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { useAccessibility } from \"./AccessibilityContext\";\n\nexport interface AccessibilityDropdownClasses {\n root?: string;\n toggle?: string;\n menu?: string;\n section?: string;\n label?: string;\n select?: string;\n button?: string;\n activeButton?: string;\n voiceButton?: string;\n}\n\nexport interface AccessibilityDropdownProps {\n className?: string;\n style?: React.CSSProperties;\n classes?: AccessibilityDropdownClasses;\n triggerLabel?: React.ReactNode;\n renderTrigger?: (params: {\n isOpen: boolean;\n toggle: () => void;\n className: string;\n }) => React.ReactNode;\n}\n\nconst cn = (...parts: Array<string | false | undefined>) =>\n parts.filter(Boolean).join(\" \");\n\nexport const AccessibilityDropdown: React.FC<AccessibilityDropdownProps> = ({\n className,\n style,\n classes,\n triggerLabel = \"♿ Accessibility\",\n renderTrigger,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const {\n language,\n setLanguage,\n increaseText,\n decreaseText,\n toggleHighContrast,\n toggleNegativeContrast,\n toggleLightBackground,\n toggleUnderlineLinks,\n toggleReadableFont,\n toggleVoice,\n translate,\n highContrast,\n negativeContrast,\n lightBackground,\n underlineLinks,\n readableFont,\n voiceEnabled,\n } = useAccessibility();\n\n const toggle = () => setIsOpen(!isOpen);\n\n return (\n <div\n className={cn(\"accessibility-dropdown\", classes?.root, className)}\n style={style}\n >\n {renderTrigger ? (\n renderTrigger({\n isOpen,\n toggle,\n className: cn(\"accessibility-dropdown-toggle\", classes?.toggle),\n })\n ) : (\n <button\n className={cn(\"accessibility-dropdown-toggle\", classes?.toggle)}\n onClick={toggle}\n >\n {triggerLabel}\n </button>\n )}\n\n {isOpen && (\n <div className={cn(\"accessibility-dropdown-menu\", classes?.menu)}>\n <div\n className={cn(\"accessibility-dropdown-section\", classes?.section)}\n >\n <label className={cn(classes?.label)}>Language:</label>\n <select\n className={cn(classes?.select)}\n value={language}\n onChange={(e) => setLanguage(e.target.value as any)}\n >\n <option value=\"en\">English</option>\n <option value=\"tl\">Tagalog</option>\n <option value=\"ceb\">Cebuano</option>\n </select>\n </div>\n\n <div\n className={cn(\"accessibility-dropdown-section\", classes?.section)}\n >\n <button className={cn(classes?.button)} onClick={increaseText}>\n + {translate(\"increaseText\")}\n </button>\n <button className={cn(classes?.button)} onClick={decreaseText}>\n - {translate(\"decreaseText\")}\n </button>\n </div>\n\n <div\n className={cn(\"accessibility-dropdown-section\", classes?.section)}\n >\n <button\n className={cn(\n classes?.button,\n highContrast && \"active\",\n highContrast && classes?.activeButton,\n )}\n data-active={highContrast}\n onClick={toggleHighContrast}\n >\n {translate(\"highContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n negativeContrast && \"active\",\n negativeContrast && classes?.activeButton,\n )}\n data-active={negativeContrast}\n onClick={toggleNegativeContrast}\n >\n {translate(\"negativeContrast\")}\n </button>\n <button\n className={cn(\n classes?.button,\n lightBackground && \"active\",\n lightBackground && classes?.activeButton,\n )}\n data-active={lightBackground}\n onClick={toggleLightBackground}\n >\n {translate(\"lightBackground\")}\n </button>\n <button\n className={cn(\n classes?.button,\n underlineLinks && \"active\",\n underlineLinks && classes?.activeButton,\n )}\n data-active={underlineLinks}\n onClick={toggleUnderlineLinks}\n >\n {translate(\"underlineLinks\")}\n </button>\n <button\n className={cn(\n classes?.button,\n readableFont && \"active\",\n readableFont && classes?.activeButton,\n )}\n data-active={readableFont}\n onClick={toggleReadableFont}\n >\n {translate(\"readableFont\")}\n </button>\n <button\n className={cn(\n classes?.button,\n classes?.voiceButton,\n voiceEnabled && \"active\",\n voiceEnabled && classes?.activeButton,\n )}\n data-active={voiceEnabled}\n onClick={toggleVoice}\n >\n 🎤 {translate(\"voiceCommand\")}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useAccessibility } from './AccessibilityContext';\nimport { TranslationKey } from './translations';\n\ninterface TProps {\n k: TranslationKey | string;\n children?: React.ReactNode;\n}\n\nexport const T: React.FC<TProps> = ({ k, children }) => {\n const { translate, language } = useAccessibility();\n \n if (children && typeof children === 'string') {\n return <>{children}</>;\n }\n \n return <>{translate(k as TranslationKey)}</>;\n};\n"],"names":["createContext","useState","useEffect","useContext","cn"],"mappings":";;;;AAAa,MAAA,YAAY,GAAG;AAC1B,IAAA,EAAE,EAAE;AACF,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,gBAAgB,EAAE,mBAAmB;AACrC,QAAA,eAAe,EAAE,kBAAkB;AACnC,QAAA,cAAc,EAAE,iBAAiB;AACjC,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,YAAY,EAAE,eAAe;AAC9B,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,YAAY,EAAE,sBAAsB;AACpC,QAAA,YAAY,EAAE,qBAAqB;AACnC,QAAA,YAAY,EAAE,oBAAoB;AAClC,QAAA,gBAAgB,EAAE,qBAAqB;AACvC,QAAA,eAAe,EAAE,yBAAyB;AAC1C,QAAA,cAAc,EAAE,oBAAoB;AACpC,QAAA,YAAY,EAAE,0BAA0B;AACxC,QAAA,YAAY,EAAE,eAAe;AAC9B,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,YAAY,EAAE,qBAAqB;AACnC,QAAA,YAAY,EAAE,uBAAuB;AACrC,QAAA,YAAY,EAAE,mBAAmB;AACjC,QAAA,gBAAgB,EAAE,uBAAuB;AACzC,QAAA,eAAe,EAAE,sBAAsB;AACvC,QAAA,cAAc,EAAE,wBAAwB;AACxC,QAAA,YAAY,EAAE,wBAAwB;AACtC,QAAA,YAAY,EAAE,eAAe;AAC9B,KAAA;;;ACIH,MAAM,oBAAoB,GAAGA,mBAAa,CAExC,SAAS,CAAC,CAAC;AAON,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,QAAQ,EACR,YAAY,EAAE,kBAAkB,GACjC,KAAI;AACH,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGC,cAAQ,CAAqB;AACrD,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,eAAe,GACnB,kBAAkB,IAAI,YAAY,CAAC;IAErCC,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAC;QAE3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AAC7D,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZA,eAAS,CAAC,MAAK;QACb,IACE,CAAC,KAAK,CAAC,YAAY;YACnB,EAAE,yBAAyB,IAAI,MAAM,IAAI,mBAAmB,IAAI,MAAM,CAAC;YAEvE,OAAO;AAET,QAAA,MAAM,iBAAiB,GACpB,MAAc,CAAC,iBAAiB;YAChC,MAAc,CAAC,uBAAuB,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAC5C,QAAA,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;AAC9B,QAAA,WAAW,CAAC,IAAI;YACd,KAAK,CAAC,QAAQ,KAAK,IAAI;AACrB,kBAAE,OAAO;AACT,kBAAE,KAAK,CAAC,QAAQ,KAAK,KAAK;AACxB,sBAAE,QAAQ;sBACR,OAAO,CAAC;AAEhB,QAAA,WAAW,CAAC,QAAQ,GAAG,CAAC,KAAU,KAAI;YACpC,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAEtE,YAAA,IACE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;AACpC,gBAAA,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;AAEhC,gBAAA,YAAY,EAAE,CAAC;AACjB,YAAA,IACE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;AACpC,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AAE/B,gBAAA,YAAY,EAAE,CAAC;AACjB,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvE,gBAAA,kBAAkB,EAAE,CAAC;AACvB,YAAA,IACE,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACxC,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AAE/B,gBAAA,sBAAsB,EAAE,CAAC;AAC3B,YAAA,IACE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACvC,gBAAA,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;AAEhC,gBAAA,qBAAqB,EAAE,CAAC;AAC1B,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClE,gBAAA,oBAAoB,EAAE,CAAC;AACzB,YAAA,IACE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;AACpC,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AAE/B,gBAAA,kBAAkB,EAAE,CAAC;AACzB,SAAC,CAAC;QAEF,WAAW,CAAC,KAAK,EAAE,CAAC;AACpB,QAAA,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;KACjC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,CAAC,IAAc,KACjC,QAAQ,CAAC,CAAC,CAAC,sCAAW,CAAC,CAAA,EAAA,EAAE,QAAQ,EAAE,IAAI,EAAG,CAAA,CAAA,CAAC,CAAC;AAC9C,IAAA,MAAM,YAAY,GAAG,MACnB,QAAQ,CAAC,CAAC,CAAC,sCAAW,CAAC,CAAA,EAAA,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,EAAE,GAAG,CAAC,EAAA,CAAA,CAAG,CAAC,CAAC;AACxE,IAAA,MAAM,YAAY,GAAG,MACnB,QAAQ,CAAC,CAAC,CAAC,sCAAW,CAAC,CAAA,EAAA,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC,EAAA,CAAA,CAAG,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,MACzB,QAAQ,CAAC,CAAC,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,CAAC,CAAA,EAAA,EACJ,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,EAC7B,gBAAgB,EAAE,KAAK,EACvB,CAAA,CAAA,CAAC,CAAC;IACN,MAAM,sBAAsB,GAAG,MAC7B,QAAQ,CAAC,CAAC,CAAC,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,CAAC,CAAA,EAAA,EACJ,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,EACrC,YAAY,EAAE,KAAK,EACnB,CAAA,CAAA,CAAC,CAAC;IACN,MAAM,qBAAqB,GAAG,MAC5B,QAAQ,CAAC,CAAC,CAAC,MAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAAC,CAAE,EAAA,EAAA,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,EAAG,CAAA,CAAA,CAAC,CAAC;IACnE,MAAM,oBAAoB,GAAG,MAC3B,QAAQ,CAAC,CAAC,CAAC,MAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAAC,CAAE,EAAA,EAAA,cAAc,EAAE,CAAC,CAAC,CAAC,cAAc,EAAG,CAAA,CAAA,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,MACzB,QAAQ,CAAC,CAAC,CAAC,MAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAAC,CAAE,EAAA,EAAA,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,EAAG,CAAA,CAAA,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,MAClB,QAAQ,CAAC,CAAC,CAAC,MAAW,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAAC,CAAE,EAAA,EAAA,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,EAAG,CAAA,CAAA,CAAC,CAAC;AAC7D,IAAA,MAAM,SAAS,GAAG,CAAC,GAAmB,KAAK,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,CAAC,GAAG,CAAC,GAAW,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,CAAA,EAAA,GAAA,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,KAAI,GAAG,CAAA,EAAA,CAAC;IAEzE,QACE,KAAC,CAAA,aAAA,CAAA,oBAAoB,CAAC,QAAQ,IAC5B,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACA,KAAK,CAAA,EAAA,EACR,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,kBAAkB;YAClB,sBAAsB;YACtB,qBAAqB;YACrB,oBAAoB;YACpB,kBAAkB;YAClB,WAAW;YACX,SAAS;AACT,YAAA,CAAC,EAGF,CAAA,EAAA,EAAA,QAAQ,CACqB,EAChC;AACJ,EAAE;AAEK,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,OAAO,GAAGC,gBAAU,CAAC,oBAAoB,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,OAAO;AACV,QAAA,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;AACJ,IAAA,OAAO,OAAO,CAAC;AACjB;;AC3KA,MAAMC,IAAE,GAAG,CAAC,GAAG,KAAwC,KACrD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3B,MAAM,oBAAoB,GAAwC,CAAC,EACxE,SAAS,EACT,KAAK,EACL,OAAO,GACR,KAAI;AACH,IAAA,MAAM,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,GACb,GAAG,gBAAgB,EAAE,CAAC;IAEvB,QACE,6BACE,SAAS,EAAEA,IAAE,CAAC,uBAAuB,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,IAAI,EAAE,SAAS,CAAC,EAChE,KAAK,EAAE,KAAK,EAAA;AAEZ,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,CAAC,EAC9B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAY,CAAC,EAAA;YAEnD,KAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,KAAK,EAAC,IAAI,EAAiB,EAAA,SAAA,CAAA;YACnC,KAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,KAAK,EAAC,IAAI,EAAiB,EAAA,SAAA,CAAA;AACnC,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,KAAK,EAAA,EAAA,SAAA,CAAiB,CAC7B;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAEA,IAAE,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAA;;YACxD,SAAS,CAAC,cAAc,CAAC,CACrB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAEA,IAAE,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAA;;YACxD,SAAS,CAAC,cAAc,CAAC,CACrB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,YAAY,IAAI,QAAQ,EACxB,YAAY,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACtC,EACY,aAAA,EAAA,YAAY,EACzB,OAAO,EAAE,kBAAkB,EAAA,EAE1B,SAAS,CAAC,cAAc,CAAC,CACnB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,gBAAgB,IAAI,QAAQ,EAC5B,gBAAgB,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CAC1C,EACY,aAAA,EAAA,gBAAgB,EAC7B,OAAO,EAAE,sBAAsB,EAAA,EAE9B,SAAS,CAAC,kBAAkB,CAAC,CACvB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,eAAe,IAAI,QAAQ,EAC3B,eAAe,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACzC,EACY,aAAA,EAAA,eAAe,EAC5B,OAAO,EAAE,qBAAqB,EAAA,EAE7B,SAAS,CAAC,iBAAiB,CAAC,CACtB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,cAAc,IAAI,QAAQ,EAC1B,cAAc,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACxC,EACY,aAAA,EAAA,cAAc,EAC3B,OAAO,EAAE,oBAAoB,EAAA,EAE5B,SAAS,CAAC,gBAAgB,CAAC,CACrB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,YAAY,IAAI,QAAQ,EACxB,YAAY,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACtC,EACY,aAAA,EAAA,YAAY,EACzB,OAAO,EAAE,kBAAkB,EAAA,EAE1B,SAAS,CAAC,cAAc,CAAC,CACnB;AACT,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAEA,IAAE,CACX,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,EACf,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,WAAW,EACpB,YAAY,IAAI,QAAQ,EACxB,YAAY,KAAI,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,YAAY,CAAA,CACtC,EAAA,aAAA,EACY,YAAY,EACzB,OAAO,EAAE,WAAW,EAAA;;AAEhB,YAAA,SAAS,CAAC,cAAc,CAAC,CACtB,CACL,EACN;AACJ;;AC3GA,MAAM,EAAE,GAAG,CAAC,GAAG,KAAwC,KACrD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAErB,MAAA,qBAAqB,GAAyC,CAAC,EAC1E,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,GAAG,iBAAiB,EAChC,aAAa,GACd,KAAI;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGH,cAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,IAAA,MAAM,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,GACb,GAAG,gBAAgB,EAAE,CAAC;IAEvB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;IAExC,QACE,6BACE,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,IAAI,EAAE,SAAS,CAAC,EACjE,KAAK,EAAE,KAAK,EAAA;AAEX,QAAA,aAAa,IACZ,aAAa,CAAC;YACZ,MAAM;YACN,MAAM;AACN,YAAA,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC;SAChE,CAAC,KAEF,KACE,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC,EAC/D,OAAO,EAAE,MAAM,EAAA,EAEd,YAAY,CACN,CACV;AAEA,QAAA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,IAAI,CAAC,EAAA;AAC9D,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,gCAAgC,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,OAAO,CAAC,EAAA;AAEjE,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAE,EAAE,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,KAAK,CAAC,EAAmB,EAAA,WAAA,CAAA;AACvD,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,CAAC,EAC9B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAY,CAAC,EAAA;oBAEnD,KAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,KAAK,EAAC,IAAI,EAAiB,EAAA,SAAA,CAAA;oBACnC,KAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,KAAK,EAAC,IAAI,EAAiB,EAAA,SAAA,CAAA;AACnC,oBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,KAAK,EAAA,EAAA,SAAA,CAAiB,CAC7B,CACL;AAEN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,gCAAgC,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,OAAO,CAAC,EAAA;AAEjE,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAE,EAAE,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAA;;oBACxD,SAAS,CAAC,cAAc,CAAC,CACrB;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAE,EAAE,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAA;;AACxD,oBAAA,SAAS,CAAC,cAAc,CAAC,CACrB,CACL;AAEN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,gCAAgC,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,OAAO,CAAC,EAAA;AAEjE,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,YAAY,IAAI,QAAQ,EACxB,YAAY,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACtC,EACY,aAAA,EAAA,YAAY,EACzB,OAAO,EAAE,kBAAkB,EAAA,EAE1B,SAAS,CAAC,cAAc,CAAC,CACnB;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,gBAAgB,IAAI,QAAQ,EAC5B,gBAAgB,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CAC1C,EACY,aAAA,EAAA,gBAAgB,EAC7B,OAAO,EAAE,sBAAsB,EAAA,EAE9B,SAAS,CAAC,kBAAkB,CAAC,CACvB;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,eAAe,IAAI,QAAQ,EAC3B,eAAe,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACzC,EACY,aAAA,EAAA,eAAe,EAC5B,OAAO,EAAE,qBAAqB,EAAA,EAE7B,SAAS,CAAC,iBAAiB,CAAC,CACtB;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,cAAc,IAAI,QAAQ,EAC1B,cAAc,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACxC,EACY,aAAA,EAAA,cAAc,EAC3B,OAAO,EAAE,oBAAoB,EAAA,EAE5B,SAAS,CAAC,gBAAgB,CAAC,CACrB;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,EACf,YAAY,IAAI,QAAQ,EACxB,YAAY,KAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,CACtC,EACY,aAAA,EAAA,YAAY,EACzB,OAAO,EAAE,kBAAkB,EAAA,EAE1B,SAAS,CAAC,cAAc,CAAC,CACnB;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,EACf,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,WAAW,EACpB,YAAY,IAAI,QAAQ,EACxB,YAAY,KAAI,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,YAAY,CAAA,CACtC,EAAA,aAAA,EACY,YAAY,EACzB,OAAO,EAAE,WAAW,EAAA;;oBAEhB,SAAS,CAAC,cAAc,CAAC,CACtB,CACL,CACF,CACP,CACG,EACN;AACJ;;AC9Ka,MAAA,CAAC,GAAqB,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAI;IACrD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAEnD,IAAA,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAC5C,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAG,QAAQ,CAAI,CAAC;KACxB;AAED,IAAA,OAAO,0CAAG,SAAS,CAAC,CAAmB,CAAC,CAAI,CAAC;AAC/C;;;;;;;;;"}
package/dist/styles.css CHANGED
@@ -1,30 +1,47 @@
1
+ :root {
2
+ --ngp-a11y-gap: 8px;
3
+ --ngp-a11y-padding: 12px;
4
+ --ngp-a11y-radius: 4px;
5
+ --ngp-a11y-font-size: 14px;
6
+ --ngp-a11y-border: #ccc;
7
+ --ngp-a11y-bg: #f5f5f5;
8
+ --ngp-a11y-surface: #ffffff;
9
+ --ngp-a11y-surface-hover: #f5f5f5;
10
+ --ngp-a11y-text: #111111;
11
+ --ngp-a11y-accent: #007bff;
12
+ --ngp-a11y-accent-hover: #0056b3;
13
+ --ngp-a11y-accent-text: #ffffff;
14
+ --ngp-a11y-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
15
+ }
16
+
1
17
  .accessibility-toolbar {
2
18
  display: flex;
3
- gap: 8px;
4
- padding: 12px;
5
- background: #f5f5f5;
6
- border-bottom: 1px solid #ddd;
19
+ gap: var(--ngp-a11y-gap);
20
+ padding: var(--ngp-a11y-padding);
21
+ background: var(--ngp-a11y-bg);
22
+ border-bottom: 1px solid var(--ngp-a11y-border);
7
23
  flex-wrap: wrap;
8
24
  }
9
25
 
10
26
  .accessibility-toolbar button,
11
27
  .accessibility-toolbar select {
12
28
  padding: 8px 12px;
13
- border: 1px solid #ccc;
14
- background: white;
29
+ border: 1px solid var(--ngp-a11y-border);
30
+ background: var(--ngp-a11y-surface);
31
+ color: var(--ngp-a11y-text);
15
32
  cursor: pointer;
16
- border-radius: 4px;
17
- font-size: 14px;
33
+ border-radius: var(--ngp-a11y-radius);
34
+ font-size: var(--ngp-a11y-font-size);
18
35
  }
19
36
 
20
37
  .accessibility-toolbar button:hover {
21
- background: #e9e9e9;
38
+ background: var(--ngp-a11y-surface-hover);
22
39
  }
23
40
 
24
41
  .accessibility-toolbar button.active {
25
- background: #007bff;
26
- color: white;
27
- border-color: #007bff;
42
+ background: var(--ngp-a11y-accent);
43
+ color: var(--ngp-a11y-accent-text);
44
+ border-color: var(--ngp-a11y-accent);
28
45
  }
29
46
 
30
47
  /* Dropdown Styles */
@@ -35,17 +52,17 @@
35
52
 
36
53
  .accessibility-dropdown-toggle {
37
54
  padding: 10px 16px;
38
- background: #007bff;
39
- color: white;
55
+ background: var(--ngp-a11y-accent);
56
+ color: var(--ngp-a11y-accent-text);
40
57
  border: none;
41
- border-radius: 4px;
58
+ border-radius: var(--ngp-a11y-radius);
42
59
  cursor: pointer;
43
60
  font-size: 16px;
44
61
  font-weight: 500;
45
62
  }
46
63
 
47
64
  .accessibility-dropdown-toggle:hover {
48
- background: #0056b3;
65
+ background: var(--ngp-a11y-accent-hover);
49
66
  }
50
67
 
51
68
  .accessibility-dropdown-menu {
@@ -53,10 +70,10 @@
53
70
  top: 100%;
54
71
  right: 0;
55
72
  margin-top: 8px;
56
- background: white;
57
- border: 1px solid #ddd;
58
- border-radius: 4px;
59
- box-shadow: 0 4px 12px rgba(0,0,0,0.15);
73
+ background: var(--ngp-a11y-surface);
74
+ border: 1px solid var(--ngp-a11y-border);
75
+ border-radius: var(--ngp-a11y-radius);
76
+ box-shadow: var(--ngp-a11y-shadow);
60
77
  min-width: 280px;
61
78
  z-index: 1000;
62
79
  padding: 12px;
@@ -65,9 +82,9 @@
65
82
  .accessibility-dropdown-section {
66
83
  display: flex;
67
84
  flex-direction: column;
68
- gap: 8px;
85
+ gap: var(--ngp-a11y-gap);
69
86
  padding: 8px 0;
70
- border-bottom: 1px solid #eee;
87
+ border-bottom: 1px solid var(--ngp-a11y-border);
71
88
  }
72
89
 
73
90
  .accessibility-dropdown-section:last-child {
@@ -83,22 +100,23 @@
83
100
  .accessibility-dropdown-section button,
84
101
  .accessibility-dropdown-section select {
85
102
  padding: 8px 12px;
86
- border: 1px solid #ccc;
87
- background: white;
103
+ border: 1px solid var(--ngp-a11y-border);
104
+ background: var(--ngp-a11y-surface);
105
+ color: var(--ngp-a11y-text);
88
106
  cursor: pointer;
89
- border-radius: 4px;
90
- font-size: 14px;
107
+ border-radius: var(--ngp-a11y-radius);
108
+ font-size: var(--ngp-a11y-font-size);
91
109
  text-align: left;
92
110
  }
93
111
 
94
112
  .accessibility-dropdown-section button:hover {
95
- background: #f5f5f5;
113
+ background: var(--ngp-a11y-surface-hover);
96
114
  }
97
115
 
98
116
  .accessibility-dropdown-section button.active {
99
- background: #007bff;
100
- color: white;
101
- border-color: #007bff;
117
+ background: var(--ngp-a11y-accent);
118
+ color: var(--ngp-a11y-accent-text);
119
+ border-color: var(--ngp-a11y-accent);
102
120
  }
103
121
 
104
122
  .high-contrast {
@@ -121,7 +139,7 @@
121
139
 
122
140
  .readable-font,
123
141
  .readable-font * {
124
- font-family: 'Arial', 'Helvetica', sans-serif !important;
142
+ font-family: "Arial", "Helvetica", sans-serif !important;
125
143
  letter-spacing: 0.05em !important;
126
144
  line-height: 1.6 !important;
127
145
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngp-accessibility",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "React accessibility package with translation, text sizing, contrast modes, and voice commands",
5
5
  "author": {
6
6
  "name": "Rodolfo Miclat Jr."