ngp-accessibility 1.0.1 → 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
@@ -0,0 +1,32 @@
1
+ import React, { ReactNode } from "react";
2
+ import { Language, TranslationKey } from "./translations";
3
+ interface AccessibilityState {
4
+ language: Language;
5
+ textSize: number;
6
+ highContrast: boolean;
7
+ negativeContrast: boolean;
8
+ lightBackground: boolean;
9
+ underlineLinks: boolean;
10
+ readableFont: boolean;
11
+ voiceEnabled: boolean;
12
+ }
13
+ interface AccessibilityContextType extends AccessibilityState {
14
+ setLanguage: (lang: Language) => void;
15
+ increaseText: () => void;
16
+ decreaseText: () => void;
17
+ toggleHighContrast: () => void;
18
+ toggleNegativeContrast: () => void;
19
+ toggleLightBackground: () => void;
20
+ toggleUnderlineLinks: () => void;
21
+ toggleReadableFont: () => void;
22
+ toggleVoice: () => void;
23
+ translate: (key: TranslationKey) => string;
24
+ t: (key: string) => string;
25
+ }
26
+ interface AccessibilityProviderProps {
27
+ children: ReactNode;
28
+ translations?: Partial<Record<Language, Record<string, string>>>;
29
+ }
30
+ export declare const AccessibilityProvider: React.FC<AccessibilityProviderProps>;
31
+ export declare const useAccessibility: () => AccessibilityContextType;
32
+ export {};
@@ -0,0 +1,24 @@
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>;
@@ -0,0 +1,14 @@
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/T.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { TranslationKey } from './translations';
3
+ interface TProps {
4
+ k: TranslationKey | string;
5
+ children?: React.ReactNode;
6
+ }
7
+ export declare const T: React.FC<TProps>;
8
+ export {};
@@ -0,0 +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 { AccessibilityToolbarProps, AccessibilityToolbarClasses, } from "./AccessibilityToolbar";
7
+ export type { AccessibilityDropdownProps, AccessibilityDropdownClasses, } from "./AccessibilityDropdown";
8
+ export type { default as React } from "react";
@@ -0,0 +1,196 @@
1
+ import React, { createContext, useState, useEffect, useContext } from 'react';
2
+
3
+ const translations = {
4
+ en: {
5
+ increaseText: 'Increase Text',
6
+ decreaseText: 'Decrease Text',
7
+ highContrast: 'High Contrast',
8
+ negativeContrast: 'Negative Contrast',
9
+ lightBackground: 'Light Background',
10
+ underlineLinks: 'Underline Links',
11
+ readableFont: 'Readable Font',
12
+ voiceCommand: 'Voice Command',
13
+ },
14
+ tl: {
15
+ increaseText: 'Palakihin ang Teksto',
16
+ decreaseText: 'Paliitin ang Teksto',
17
+ highContrast: 'Mataas na Contrast',
18
+ negativeContrast: 'Negatibong Contrast',
19
+ lightBackground: 'Maliwanag na Background',
20
+ underlineLinks: 'May Guhit na Links',
21
+ readableFont: 'Madaling Basahin na Font',
22
+ voiceCommand: 'Voice Command',
23
+ },
24
+ ceb: {
25
+ increaseText: 'Padak-on ang Teksto',
26
+ decreaseText: 'Pagamay-on ang Teksto',
27
+ highContrast: 'Taas nga Contrast',
28
+ negativeContrast: 'Negatibo nga Contrast',
29
+ lightBackground: 'Hayag nga Background',
30
+ underlineLinks: 'Linya sa Ubos sa Links',
31
+ readableFont: 'Sayon Basahon nga Font',
32
+ voiceCommand: 'Voice Command',
33
+ },
34
+ };
35
+
36
+ const AccessibilityContext = createContext(undefined);
37
+ const AccessibilityProvider = ({ children, translations: customTranslations, }) => {
38
+ const [state, setState] = useState({
39
+ language: "en",
40
+ textSize: 100,
41
+ highContrast: false,
42
+ negativeContrast: false,
43
+ lightBackground: false,
44
+ underlineLinks: false,
45
+ readableFont: false,
46
+ voiceEnabled: false,
47
+ });
48
+ const allTranslations = customTranslations || translations;
49
+ useEffect(() => {
50
+ const root = document.documentElement;
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);
57
+ }, [state]);
58
+ useEffect(() => {
59
+ if (!state.voiceEnabled ||
60
+ !("webkitSpeechRecognition" in window || "SpeechRecognition" in window))
61
+ return;
62
+ const SpeechRecognition = window.SpeechRecognition ||
63
+ window.webkitSpeechRecognition;
64
+ const recognition = new SpeechRecognition();
65
+ recognition.continuous = true;
66
+ recognition.lang =
67
+ state.language === "tl"
68
+ ? "tl-PH"
69
+ : state.language === "ceb"
70
+ ? "ceb-PH"
71
+ : "en-US";
72
+ recognition.onresult = (event) => {
73
+ const transcript = event.results[event.results.length - 1][0].transcript.toLowerCase();
74
+ if (transcript.includes("increase text") ||
75
+ transcript.includes("palakihin"))
76
+ increaseText();
77
+ if (transcript.includes("decrease text") ||
78
+ transcript.includes("paliitin"))
79
+ decreaseText();
80
+ if (transcript.includes("high contrast") || transcript.includes("mataas"))
81
+ toggleHighContrast();
82
+ if (transcript.includes("negative contrast") ||
83
+ transcript.includes("negatibo"))
84
+ toggleNegativeContrast();
85
+ if (transcript.includes("light background") ||
86
+ transcript.includes("maliwanag"))
87
+ toggleLightBackground();
88
+ if (transcript.includes("underline") || transcript.includes("guhit"))
89
+ toggleUnderlineLinks();
90
+ if (transcript.includes("readable font") ||
91
+ transcript.includes("madaling"))
92
+ toggleReadableFont();
93
+ };
94
+ recognition.start();
95
+ return () => recognition.stop();
96
+ }, [state.voiceEnabled, state.language]);
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 })));
106
+ const translate = (key) => translations[state.language][key];
107
+ const t = (key) => { var _a; return ((_a = allTranslations[state.language]) === null || _a === void 0 ? void 0 : _a[key]) || key; };
108
+ return (React.createElement(AccessibilityContext.Provider, { value: Object.assign(Object.assign({}, state), { setLanguage,
109
+ increaseText,
110
+ decreaseText,
111
+ toggleHighContrast,
112
+ toggleNegativeContrast,
113
+ toggleLightBackground,
114
+ toggleUnderlineLinks,
115
+ toggleReadableFont,
116
+ toggleVoice,
117
+ translate,
118
+ t }) }, children));
119
+ };
120
+ const useAccessibility = () => {
121
+ const context = useContext(AccessibilityContext);
122
+ if (!context)
123
+ throw new Error("useAccessibility must be used within AccessibilityProvider");
124
+ return context;
125
+ };
126
+
127
+ const cn$1 = (...parts) => parts.filter(Boolean).join(" ");
128
+ const AccessibilityToolbar = ({ className, style, classes, }) => {
129
+ const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
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) },
132
+ React.createElement("option", { value: "en" }, "English"),
133
+ React.createElement("option", { value: "tl" }, "Tagalog"),
134
+ React.createElement("option", { value: "ceb" }, "Cebuano")),
135
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: increaseText },
136
+ "+ ",
137
+ translate("increaseText")),
138
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
139
+ "- ",
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 },
147
+ "\uD83C\uDFA4 ",
148
+ translate("voiceCommand"))));
149
+ };
150
+
151
+ const cn = (...parts) => parts.filter(Boolean).join(" ");
152
+ const AccessibilityDropdown = ({ className, style, classes, triggerLabel = "♿ Accessibility", renderTrigger, }) => {
153
+ const [isOpen, setIsOpen] = useState(false);
154
+ const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
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) },
166
+ React.createElement("option", { value: "en" }, "English"),
167
+ React.createElement("option", { value: "tl" }, "Tagalog"),
168
+ React.createElement("option", { value: "ceb" }, "Cebuano"))),
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 },
171
+ "+ ",
172
+ translate("increaseText")),
173
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
174
+ "- ",
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 },
183
+ "\uD83C\uDFA4 ",
184
+ translate("voiceCommand")))))));
185
+ };
186
+
187
+ const T = ({ k, children }) => {
188
+ const { translate, language } = useAccessibility();
189
+ if (children && typeof children === 'string') {
190
+ return React.createElement(React.Fragment, null, children);
191
+ }
192
+ return React.createElement(React.Fragment, null, translate(k));
193
+ };
194
+
195
+ export { AccessibilityDropdown, AccessibilityProvider, AccessibilityToolbar, T, translations, useAccessibility };
196
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +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, {\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 ADDED
@@ -0,0 +1,203 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ const translations = {
6
+ en: {
7
+ increaseText: 'Increase Text',
8
+ decreaseText: 'Decrease Text',
9
+ highContrast: 'High Contrast',
10
+ negativeContrast: 'Negative Contrast',
11
+ lightBackground: 'Light Background',
12
+ underlineLinks: 'Underline Links',
13
+ readableFont: 'Readable Font',
14
+ voiceCommand: 'Voice Command',
15
+ },
16
+ tl: {
17
+ increaseText: 'Palakihin ang Teksto',
18
+ decreaseText: 'Paliitin ang Teksto',
19
+ highContrast: 'Mataas na Contrast',
20
+ negativeContrast: 'Negatibong Contrast',
21
+ lightBackground: 'Maliwanag na Background',
22
+ underlineLinks: 'May Guhit na Links',
23
+ readableFont: 'Madaling Basahin na Font',
24
+ voiceCommand: 'Voice Command',
25
+ },
26
+ ceb: {
27
+ increaseText: 'Padak-on ang Teksto',
28
+ decreaseText: 'Pagamay-on ang Teksto',
29
+ highContrast: 'Taas nga Contrast',
30
+ negativeContrast: 'Negatibo nga Contrast',
31
+ lightBackground: 'Hayag nga Background',
32
+ underlineLinks: 'Linya sa Ubos sa Links',
33
+ readableFont: 'Sayon Basahon nga Font',
34
+ voiceCommand: 'Voice Command',
35
+ },
36
+ };
37
+
38
+ const AccessibilityContext = React.createContext(undefined);
39
+ const AccessibilityProvider = ({ children, translations: customTranslations, }) => {
40
+ const [state, setState] = React.useState({
41
+ language: "en",
42
+ textSize: 100,
43
+ highContrast: false,
44
+ negativeContrast: false,
45
+ lightBackground: false,
46
+ underlineLinks: false,
47
+ readableFont: false,
48
+ voiceEnabled: false,
49
+ });
50
+ const allTranslations = customTranslations || translations;
51
+ React.useEffect(() => {
52
+ const root = document.documentElement;
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);
59
+ }, [state]);
60
+ React.useEffect(() => {
61
+ if (!state.voiceEnabled ||
62
+ !("webkitSpeechRecognition" in window || "SpeechRecognition" in window))
63
+ return;
64
+ const SpeechRecognition = window.SpeechRecognition ||
65
+ window.webkitSpeechRecognition;
66
+ const recognition = new SpeechRecognition();
67
+ recognition.continuous = true;
68
+ recognition.lang =
69
+ state.language === "tl"
70
+ ? "tl-PH"
71
+ : state.language === "ceb"
72
+ ? "ceb-PH"
73
+ : "en-US";
74
+ recognition.onresult = (event) => {
75
+ const transcript = event.results[event.results.length - 1][0].transcript.toLowerCase();
76
+ if (transcript.includes("increase text") ||
77
+ transcript.includes("palakihin"))
78
+ increaseText();
79
+ if (transcript.includes("decrease text") ||
80
+ transcript.includes("paliitin"))
81
+ decreaseText();
82
+ if (transcript.includes("high contrast") || transcript.includes("mataas"))
83
+ toggleHighContrast();
84
+ if (transcript.includes("negative contrast") ||
85
+ transcript.includes("negatibo"))
86
+ toggleNegativeContrast();
87
+ if (transcript.includes("light background") ||
88
+ transcript.includes("maliwanag"))
89
+ toggleLightBackground();
90
+ if (transcript.includes("underline") || transcript.includes("guhit"))
91
+ toggleUnderlineLinks();
92
+ if (transcript.includes("readable font") ||
93
+ transcript.includes("madaling"))
94
+ toggleReadableFont();
95
+ };
96
+ recognition.start();
97
+ return () => recognition.stop();
98
+ }, [state.voiceEnabled, state.language]);
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 })));
108
+ const translate = (key) => translations[state.language][key];
109
+ const t = (key) => { var _a; return ((_a = allTranslations[state.language]) === null || _a === void 0 ? void 0 : _a[key]) || key; };
110
+ return (React.createElement(AccessibilityContext.Provider, { value: Object.assign(Object.assign({}, state), { setLanguage,
111
+ increaseText,
112
+ decreaseText,
113
+ toggleHighContrast,
114
+ toggleNegativeContrast,
115
+ toggleLightBackground,
116
+ toggleUnderlineLinks,
117
+ toggleReadableFont,
118
+ toggleVoice,
119
+ translate,
120
+ t }) }, children));
121
+ };
122
+ const useAccessibility = () => {
123
+ const context = React.useContext(AccessibilityContext);
124
+ if (!context)
125
+ throw new Error("useAccessibility must be used within AccessibilityProvider");
126
+ return context;
127
+ };
128
+
129
+ const cn$1 = (...parts) => parts.filter(Boolean).join(" ");
130
+ const AccessibilityToolbar = ({ className, style, classes, }) => {
131
+ const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
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) },
134
+ React.createElement("option", { value: "en" }, "English"),
135
+ React.createElement("option", { value: "tl" }, "Tagalog"),
136
+ React.createElement("option", { value: "ceb" }, "Cebuano")),
137
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: increaseText },
138
+ "+ ",
139
+ translate("increaseText")),
140
+ React.createElement("button", { className: cn$1(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
141
+ "- ",
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 },
149
+ "\uD83C\uDFA4 ",
150
+ translate("voiceCommand"))));
151
+ };
152
+
153
+ const cn = (...parts) => parts.filter(Boolean).join(" ");
154
+ const AccessibilityDropdown = ({ className, style, classes, triggerLabel = "♿ Accessibility", renderTrigger, }) => {
155
+ const [isOpen, setIsOpen] = React.useState(false);
156
+ const { language, setLanguage, increaseText, decreaseText, toggleHighContrast, toggleNegativeContrast, toggleLightBackground, toggleUnderlineLinks, toggleReadableFont, toggleVoice, translate, highContrast, negativeContrast, lightBackground, underlineLinks, readableFont, voiceEnabled, } = useAccessibility();
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) },
168
+ React.createElement("option", { value: "en" }, "English"),
169
+ React.createElement("option", { value: "tl" }, "Tagalog"),
170
+ React.createElement("option", { value: "ceb" }, "Cebuano"))),
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 },
173
+ "+ ",
174
+ translate("increaseText")),
175
+ React.createElement("button", { className: cn(classes === null || classes === void 0 ? void 0 : classes.button), onClick: decreaseText },
176
+ "- ",
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 },
185
+ "\uD83C\uDFA4 ",
186
+ translate("voiceCommand")))))));
187
+ };
188
+
189
+ const T = ({ k, children }) => {
190
+ const { translate, language } = useAccessibility();
191
+ if (children && typeof children === 'string') {
192
+ return React.createElement(React.Fragment, null, children);
193
+ }
194
+ return React.createElement(React.Fragment, null, translate(k));
195
+ };
196
+
197
+ exports.AccessibilityDropdown = AccessibilityDropdown;
198
+ exports.AccessibilityProvider = AccessibilityProvider;
199
+ exports.AccessibilityToolbar = AccessibilityToolbar;
200
+ exports.T = T;
201
+ exports.translations = translations;
202
+ exports.useAccessibility = useAccessibility;
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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, {\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":"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"}
@@ -0,0 +1,145 @@
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
+
17
+ .accessibility-toolbar {
18
+ display: flex;
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);
23
+ flex-wrap: wrap;
24
+ }
25
+
26
+ .accessibility-toolbar button,
27
+ .accessibility-toolbar select {
28
+ padding: 8px 12px;
29
+ border: 1px solid var(--ngp-a11y-border);
30
+ background: var(--ngp-a11y-surface);
31
+ color: var(--ngp-a11y-text);
32
+ cursor: pointer;
33
+ border-radius: var(--ngp-a11y-radius);
34
+ font-size: var(--ngp-a11y-font-size);
35
+ }
36
+
37
+ .accessibility-toolbar button:hover {
38
+ background: var(--ngp-a11y-surface-hover);
39
+ }
40
+
41
+ .accessibility-toolbar button.active {
42
+ background: var(--ngp-a11y-accent);
43
+ color: var(--ngp-a11y-accent-text);
44
+ border-color: var(--ngp-a11y-accent);
45
+ }
46
+
47
+ /* Dropdown Styles */
48
+ .accessibility-dropdown {
49
+ position: relative;
50
+ display: inline-block;
51
+ }
52
+
53
+ .accessibility-dropdown-toggle {
54
+ padding: 10px 16px;
55
+ background: var(--ngp-a11y-accent);
56
+ color: var(--ngp-a11y-accent-text);
57
+ border: none;
58
+ border-radius: var(--ngp-a11y-radius);
59
+ cursor: pointer;
60
+ font-size: 16px;
61
+ font-weight: 500;
62
+ }
63
+
64
+ .accessibility-dropdown-toggle:hover {
65
+ background: var(--ngp-a11y-accent-hover);
66
+ }
67
+
68
+ .accessibility-dropdown-menu {
69
+ position: absolute;
70
+ top: 100%;
71
+ right: 0;
72
+ margin-top: 8px;
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);
77
+ min-width: 280px;
78
+ z-index: 1000;
79
+ padding: 12px;
80
+ }
81
+
82
+ .accessibility-dropdown-section {
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: var(--ngp-a11y-gap);
86
+ padding: 8px 0;
87
+ border-bottom: 1px solid var(--ngp-a11y-border);
88
+ }
89
+
90
+ .accessibility-dropdown-section:last-child {
91
+ border-bottom: none;
92
+ }
93
+
94
+ .accessibility-dropdown-section label {
95
+ font-weight: 500;
96
+ font-size: 14px;
97
+ margin-bottom: 4px;
98
+ }
99
+
100
+ .accessibility-dropdown-section button,
101
+ .accessibility-dropdown-section select {
102
+ padding: 8px 12px;
103
+ border: 1px solid var(--ngp-a11y-border);
104
+ background: var(--ngp-a11y-surface);
105
+ color: var(--ngp-a11y-text);
106
+ cursor: pointer;
107
+ border-radius: var(--ngp-a11y-radius);
108
+ font-size: var(--ngp-a11y-font-size);
109
+ text-align: left;
110
+ }
111
+
112
+ .accessibility-dropdown-section button:hover {
113
+ background: var(--ngp-a11y-surface-hover);
114
+ }
115
+
116
+ .accessibility-dropdown-section button.active {
117
+ background: var(--ngp-a11y-accent);
118
+ color: var(--ngp-a11y-accent-text);
119
+ border-color: var(--ngp-a11y-accent);
120
+ }
121
+
122
+ .high-contrast {
123
+ filter: contrast(2);
124
+ }
125
+
126
+ .negative-contrast {
127
+ filter: invert(1) hue-rotate(180deg);
128
+ }
129
+
130
+ .light-background,
131
+ .light-background body {
132
+ background: #ffffff !important;
133
+ color: #000000 !important;
134
+ }
135
+
136
+ .underline-links a {
137
+ text-decoration: underline !important;
138
+ }
139
+
140
+ .readable-font,
141
+ .readable-font * {
142
+ font-family: "Arial", "Helvetica", sans-serif !important;
143
+ letter-spacing: 0.05em !important;
144
+ line-height: 1.6 !important;
145
+ }
@@ -0,0 +1,34 @@
1
+ export declare const translations: {
2
+ en: {
3
+ increaseText: string;
4
+ decreaseText: string;
5
+ highContrast: string;
6
+ negativeContrast: string;
7
+ lightBackground: string;
8
+ underlineLinks: string;
9
+ readableFont: string;
10
+ voiceCommand: string;
11
+ };
12
+ tl: {
13
+ increaseText: string;
14
+ decreaseText: string;
15
+ highContrast: string;
16
+ negativeContrast: string;
17
+ lightBackground: string;
18
+ underlineLinks: string;
19
+ readableFont: string;
20
+ voiceCommand: string;
21
+ };
22
+ ceb: {
23
+ increaseText: string;
24
+ decreaseText: string;
25
+ highContrast: string;
26
+ negativeContrast: string;
27
+ lightBackground: string;
28
+ underlineLinks: string;
29
+ readableFont: string;
30
+ voiceCommand: string;
31
+ };
32
+ };
33
+ export type Language = keyof typeof translations;
34
+ export type TranslationKey = keyof typeof translations.en;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngp-accessibility",
3
- "version": "1.0.1",
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."
@@ -12,7 +12,7 @@
12
12
  "dist"
13
13
  ],
14
14
  "scripts": {
15
- "build": "rollup -c",
15
+ "build": "rollup -c && cp src/styles.css dist/styles.css",
16
16
  "dev": "rollup -c -w"
17
17
  },
18
18
  "keywords": [
@@ -32,6 +32,7 @@
32
32
  "@rollup/plugin-typescript": "^11.0.0",
33
33
  "@types/react": "^18.0.0",
34
34
  "rollup": "^3.0.0",
35
+ "tslib": "^2.6.0",
35
36
  "typescript": "^5.0.0"
36
37
  },
37
38
  "license": "MIT"