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 +78 -5
- package/dist/AccessibilityContext.d.ts +3 -3
- package/dist/AccessibilityDropdown.d.ts +24 -2
- package/dist/AccessibilityToolbar.d.ts +14 -2
- package/dist/index.d.ts +8 -6
- package/dist/index.esm.js +80 -61
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +80 -61
- package/dist/index.js.map +1 -1
- package/dist/styles.css +49 -31
- package/package.json +1 -1
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
|
|
30
|
-
import
|
|
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 {
|
|
46
|
-
|
|
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:
|
|
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
|
|
2
|
-
import { Language, TranslationKey } from
|
|
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<
|
|
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
|
|
2
|
-
export
|
|
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
|
|
2
|
-
export
|
|
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
|
|
2
|
-
export { AccessibilityToolbar } from
|
|
3
|
-
export { AccessibilityDropdown } from
|
|
4
|
-
export { T } from
|
|
5
|
-
export { translations, type Language, type TranslationKey } from
|
|
6
|
-
export type {
|
|
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:
|
|
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(
|
|
53
|
-
root.classList.toggle(
|
|
54
|
-
root.classList.toggle(
|
|
55
|
-
root.classList.toggle(
|
|
56
|
-
root.classList.toggle(
|
|
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 ||
|
|
59
|
+
if (!state.voiceEnabled ||
|
|
60
|
+
!("webkitSpeechRecognition" in window || "SpeechRecognition" in window))
|
|
60
61
|
return;
|
|
61
|
-
const SpeechRecognition = window.SpeechRecognition ||
|
|
62
|
+
const SpeechRecognition = window.SpeechRecognition ||
|
|
63
|
+
window.webkitSpeechRecognition;
|
|
62
64
|
const recognition = new SpeechRecognition();
|
|
63
65
|
recognition.continuous = true;
|
|
64
|
-
recognition.lang =
|
|
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(
|
|
74
|
+
if (transcript.includes("increase text") ||
|
|
75
|
+
transcript.includes("palakihin"))
|
|
68
76
|
increaseText();
|
|
69
|
-
if (transcript.includes(
|
|
77
|
+
if (transcript.includes("decrease text") ||
|
|
78
|
+
transcript.includes("paliitin"))
|
|
70
79
|
decreaseText();
|
|
71
|
-
if (transcript.includes(
|
|
80
|
+
if (transcript.includes("high contrast") || transcript.includes("mataas"))
|
|
72
81
|
toggleHighContrast();
|
|
73
|
-
if (transcript.includes(
|
|
82
|
+
if (transcript.includes("negative contrast") ||
|
|
83
|
+
transcript.includes("negatibo"))
|
|
74
84
|
toggleNegativeContrast();
|
|
75
|
-
if (transcript.includes(
|
|
85
|
+
if (transcript.includes("light background") ||
|
|
86
|
+
transcript.includes("maliwanag"))
|
|
76
87
|
toggleLightBackground();
|
|
77
|
-
if (transcript.includes(
|
|
88
|
+
if (transcript.includes("underline") || transcript.includes("guhit"))
|
|
78
89
|
toggleUnderlineLinks();
|
|
79
|
-
if (transcript.includes(
|
|
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(
|
|
123
|
+
throw new Error("useAccessibility must be used within AccessibilityProvider");
|
|
112
124
|
return context;
|
|
113
125
|
};
|
|
114
126
|
|
|
115
|
-
const
|
|
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(
|
|
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(
|
|
128
|
-
React.createElement("button", {
|
|
129
|
-
React.createElement("button", {
|
|
130
|
-
React.createElement("button", {
|
|
131
|
-
React.createElement("button", {
|
|
132
|
-
React.createElement("button", {
|
|
133
|
-
React.createElement("button", {
|
|
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(
|
|
148
|
+
translate("voiceCommand"))));
|
|
136
149
|
};
|
|
137
150
|
|
|
138
|
-
const
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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(
|
|
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(
|
|
157
|
-
React.createElement("div", { className: "accessibility-dropdown-section" },
|
|
158
|
-
React.createElement("button", {
|
|
159
|
-
React.createElement("button", {
|
|
160
|
-
React.createElement("button", {
|
|
161
|
-
React.createElement("button", {
|
|
162
|
-
React.createElement("button", {
|
|
163
|
-
React.createElement("button", {
|
|
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(
|
|
184
|
+
translate("voiceCommand")))))));
|
|
166
185
|
};
|
|
167
186
|
|
|
168
187
|
const T = ({ k, children }) => {
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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:
|
|
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(
|
|
55
|
-
root.classList.toggle(
|
|
56
|
-
root.classList.toggle(
|
|
57
|
-
root.classList.toggle(
|
|
58
|
-
root.classList.toggle(
|
|
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 ||
|
|
61
|
+
if (!state.voiceEnabled ||
|
|
62
|
+
!("webkitSpeechRecognition" in window || "SpeechRecognition" in window))
|
|
62
63
|
return;
|
|
63
|
-
const SpeechRecognition = window.SpeechRecognition ||
|
|
64
|
+
const SpeechRecognition = window.SpeechRecognition ||
|
|
65
|
+
window.webkitSpeechRecognition;
|
|
64
66
|
const recognition = new SpeechRecognition();
|
|
65
67
|
recognition.continuous = true;
|
|
66
|
-
recognition.lang =
|
|
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(
|
|
76
|
+
if (transcript.includes("increase text") ||
|
|
77
|
+
transcript.includes("palakihin"))
|
|
70
78
|
increaseText();
|
|
71
|
-
if (transcript.includes(
|
|
79
|
+
if (transcript.includes("decrease text") ||
|
|
80
|
+
transcript.includes("paliitin"))
|
|
72
81
|
decreaseText();
|
|
73
|
-
if (transcript.includes(
|
|
82
|
+
if (transcript.includes("high contrast") || transcript.includes("mataas"))
|
|
74
83
|
toggleHighContrast();
|
|
75
|
-
if (transcript.includes(
|
|
84
|
+
if (transcript.includes("negative contrast") ||
|
|
85
|
+
transcript.includes("negatibo"))
|
|
76
86
|
toggleNegativeContrast();
|
|
77
|
-
if (transcript.includes(
|
|
87
|
+
if (transcript.includes("light background") ||
|
|
88
|
+
transcript.includes("maliwanag"))
|
|
78
89
|
toggleLightBackground();
|
|
79
|
-
if (transcript.includes(
|
|
90
|
+
if (transcript.includes("underline") || transcript.includes("guhit"))
|
|
80
91
|
toggleUnderlineLinks();
|
|
81
|
-
if (transcript.includes(
|
|
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(
|
|
125
|
+
throw new Error("useAccessibility must be used within AccessibilityProvider");
|
|
114
126
|
return context;
|
|
115
127
|
};
|
|
116
128
|
|
|
117
|
-
const
|
|
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(
|
|
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(
|
|
130
|
-
React.createElement("button", {
|
|
131
|
-
React.createElement("button", {
|
|
132
|
-
React.createElement("button", {
|
|
133
|
-
React.createElement("button", {
|
|
134
|
-
React.createElement("button", {
|
|
135
|
-
React.createElement("button", {
|
|
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(
|
|
150
|
+
translate("voiceCommand"))));
|
|
138
151
|
};
|
|
139
152
|
|
|
140
|
-
const
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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(
|
|
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(
|
|
159
|
-
React.createElement("div", { className: "accessibility-dropdown-section" },
|
|
160
|
-
React.createElement("button", {
|
|
161
|
-
React.createElement("button", {
|
|
162
|
-
React.createElement("button", {
|
|
163
|
-
React.createElement("button", {
|
|
164
|
-
React.createElement("button", {
|
|
165
|
-
React.createElement("button", {
|
|
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(
|
|
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":"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"}
|
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:
|
|
4
|
-
padding:
|
|
5
|
-
background:
|
|
6
|
-
border-bottom: 1px solid
|
|
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
|
|
14
|
-
background:
|
|
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:
|
|
17
|
-
font-size:
|
|
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:
|
|
38
|
+
background: var(--ngp-a11y-surface-hover);
|
|
22
39
|
}
|
|
23
40
|
|
|
24
41
|
.accessibility-toolbar button.active {
|
|
25
|
-
background:
|
|
26
|
-
color:
|
|
27
|
-
border-color:
|
|
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:
|
|
39
|
-
color:
|
|
55
|
+
background: var(--ngp-a11y-accent);
|
|
56
|
+
color: var(--ngp-a11y-accent-text);
|
|
40
57
|
border: none;
|
|
41
|
-
border-radius:
|
|
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:
|
|
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:
|
|
57
|
-
border: 1px solid
|
|
58
|
-
border-radius:
|
|
59
|
-
box-shadow:
|
|
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:
|
|
85
|
+
gap: var(--ngp-a11y-gap);
|
|
69
86
|
padding: 8px 0;
|
|
70
|
-
border-bottom: 1px solid
|
|
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
|
|
87
|
-
background:
|
|
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:
|
|
90
|
-
font-size:
|
|
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:
|
|
113
|
+
background: var(--ngp-a11y-surface-hover);
|
|
96
114
|
}
|
|
97
115
|
|
|
98
116
|
.accessibility-dropdown-section button.active {
|
|
99
|
-
background:
|
|
100
|
-
color:
|
|
101
|
-
border-color:
|
|
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:
|
|
142
|
+
font-family: "Arial", "Helvetica", sans-serif !important;
|
|
125
143
|
letter-spacing: 0.05em !important;
|
|
126
144
|
line-height: 1.6 !important;
|
|
127
145
|
}
|