vision-accessibility 1.0.0 → 1.0.2

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.
Files changed (29) hide show
  1. package/dist/components/AccessibilityPanel/AccessibilityPanel.d.ts.map +1 -1
  2. package/dist/index.esm.js +263 -74
  3. package/dist/index.esm.js.map +1 -1
  4. package/dist/index.umd.js +7 -2
  5. package/dist/index.umd.js.map +1 -1
  6. package/dist/lib/css-applier.d.ts +9 -1
  7. package/dist/lib/css-applier.d.ts.map +1 -1
  8. package/dist/style.css +1 -1
  9. package/dist/types/index.d.ts +1 -1
  10. package/dist/types/index.d.ts.map +1 -1
  11. package/package.json +21 -13
  12. package/src/components/AccessibilityPanel/AccessibilityPanel.module.scss +32 -14
  13. package/src/components/AccessibilityPanel/AccessibilityPanel.stories.tsx +105 -0
  14. package/src/components/AccessibilityPanel/AccessibilityPanel.tsx +29 -19
  15. package/src/components/AccessibilityToggle/AccessibilityToggle.module.scss +1 -1
  16. package/src/components/AccessibilityToggle/AccessibilityToggle.stories.tsx +34 -0
  17. package/src/components/AccessibilityToggle/AccessibilityToggle.tsx +1 -1
  18. package/src/components/ColorSchemeControl/ColorSchemeControl.module.scss +1 -1
  19. package/src/components/ColorSchemeControl/ColorSchemeControl.stories.tsx +34 -0
  20. package/src/components/ColorSchemeControl/ColorSchemeControl.tsx +1 -1
  21. package/src/components/FontSizeControl/FontSizeControl.module.scss +1 -1
  22. package/src/components/FontSizeControl/FontSizeControl.stories.tsx +34 -0
  23. package/src/components/FontSizeControl/FontSizeControl.tsx +1 -1
  24. package/src/components/ImageControl/ImageControl.module.scss +1 -1
  25. package/src/components/ImageControl/ImageControl.stories.tsx +43 -0
  26. package/src/components/ImageControl/ImageControl.tsx +1 -1
  27. package/src/lib/css-applier.ts +127 -4
  28. package/src/styles/global.scss +8 -8
  29. package/src/types/index.ts +1 -1
@@ -7,7 +7,7 @@
7
7
  * - 3.1, 3.2, 3.3: Настройка размера шрифта
8
8
  * - 4.1, 4.2: Управление отображением изображений
9
9
  */
10
-
10
+ import cn from 'classnames';
11
11
  import { ColorScheme, FontSize, AccessibilitySettings } from '../types';
12
12
  import {
13
13
  getImageElements,
@@ -25,7 +25,7 @@ import {
25
25
  * CSS классы для различных настроек доступности
26
26
  */
27
27
  export const CSS_CLASSES = {
28
- HIGH_CONTRAST: 'accessibility-high-contrast',
28
+ HIGH_CONTRAST: cn('accessibility-high-contrast'),
29
29
  FONT_SMALL: 'accessibility-font-small',
30
30
  FONT_LARGE: 'accessibility-font-large',
31
31
  HIDE_IMAGES: 'accessibility-hide-images',
@@ -42,21 +42,25 @@ export const applyColorScheme = (scheme: ColorScheme): void => {
42
42
  safeDOMOperation(() => {
43
43
  if (!isDOMAvailable()) return;
44
44
 
45
- // Удаляем существующие классы и стили
45
+ // Удаляем существующие классы и стили высокого контраста перед применением нового режима
46
46
  document.body.classList.remove(CSS_CLASSES.HIGH_CONTRAST);
47
47
  document.body.style.filter = '';
48
+ // Также удаляем стили высокого контраста со всех элементов
49
+ removeHighContrastStylesFromAllElements();
48
50
 
49
51
  switch (scheme) {
50
52
  case 'high-contrast':
51
53
  // Требование 2.1: Контрастный белый на черном
52
54
  document.body.classList.add(CSS_CLASSES.HIGH_CONTRAST);
55
+ // Также применяем стили высокого контраста ко всем элементам на странице
56
+ applyHighContrastStylesToAllElements();
53
57
  break;
54
58
  case 'grayscale':
55
59
  // Требование 2.2: Черно-белый режим через CSS фильтр
56
60
  document.body.style.filter = 'grayscale(100%)';
57
61
  break;
58
62
  case 'standard':
59
- // Требование 2.3: Стандартное оформление (стили уже удалены выше)
63
+ // Требование 2.3: Стандартное оформление
60
64
  break;
61
65
  default:
62
66
  console.warn(`Неизвестная цветовая схема: ${scheme}`);
@@ -119,6 +123,9 @@ export const removeAllAccessibilityStyles = (): void => {
119
123
  // Удаляем классы с изображений
120
124
  const imageElements = getImageElements();
121
125
  removeClassFromElements(imageElements, CSS_CLASSES.HIDE_IMAGES);
126
+
127
+ // Удаляем стили высокого контраста со всех элементов
128
+ removeHighContrastStylesFromAllElements();
122
129
  }, 'Ошибка при удалении всех стилей доступности');
123
130
  };
124
131
 
@@ -139,6 +146,122 @@ export const applyAllSettings = (settings: AccessibilitySettings): void => {
139
146
  applyImageVisibility(settings.showImages);
140
147
  };
141
148
 
149
+ /**
150
+ * Применение стилей высокого контраста ко всем элементам на странице
151
+ */
152
+ export const applyHighContrastStylesToAllElements = (): void => {
153
+ safeDOMOperation(() => {
154
+ if (!isDOMAvailable()) return;
155
+
156
+ // Получаем все элементы на странице
157
+ const allElements = document.querySelectorAll('*');
158
+
159
+ allElements.forEach(element => {
160
+ // Проверяем, что элемент является HTMLElement (имеет стиль)
161
+ if (element instanceof HTMLElement) {
162
+ // Применяем стили высокого контраста к каждому элементу
163
+ element.style.backgroundColor = '#000';
164
+ element.style.color = '#fff';
165
+ element.style.borderColor = '#fff';
166
+ }
167
+ });
168
+
169
+ // Особые стили для ссылок
170
+ const links = document.querySelectorAll('a');
171
+ links.forEach(link => {
172
+ if (link instanceof HTMLElement) {
173
+ link.style.color = '#ffff00'; // желтый цвет для ссылок
174
+ }
175
+ });
176
+
177
+ // Особые стили для посещенных ссылок
178
+ const visitedLinks = document.querySelectorAll('a:visited');
179
+ visitedLinks.forEach(link => {
180
+ if (link instanceof HTMLElement) {
181
+ link.style.color = '#ff00ff'; // пурпурный для посещенных
182
+ }
183
+ });
184
+
185
+ // Особые стили для кнопок
186
+ const buttons = document.querySelectorAll('button');
187
+ buttons.forEach(button => {
188
+ if (button instanceof HTMLElement) {
189
+ button.style.backgroundColor = '#fff';
190
+ button.style.color = '#000';
191
+ button.style.border = '2px solid #fff';
192
+ }
193
+ });
194
+
195
+ // Особые стили для полей ввода
196
+ const inputs = document.querySelectorAll('input, textarea, select');
197
+ inputs.forEach(input => {
198
+ if (input instanceof HTMLElement) {
199
+ input.style.backgroundColor = '#fff';
200
+ input.style.color = '#000';
201
+ input.style.border = '2px solid #fff';
202
+ }
203
+ });
204
+ }, 'Ошибка при применении стилей высокого контраста ко всем элементам');
205
+ };
206
+
207
+ /**
208
+ * Удаление стилей высокого контраста со всех элементов на странице
209
+ */
210
+ export const removeHighContrastStylesFromAllElements = (): void => {
211
+ safeDOMOperation(() => {
212
+ if (!isDOMAvailable()) return;
213
+
214
+ // Получаем все элементы на странице
215
+ const allElements = document.querySelectorAll('*');
216
+
217
+ allElements.forEach(element => {
218
+ // Проверяем, что элемент является HTMLElement (имеет стиль)
219
+ if (element instanceof HTMLElement) {
220
+ // Удаляем инлайновые стили высокого контраста
221
+ element.style.backgroundColor = '';
222
+ element.style.color = '';
223
+ element.style.borderColor = '';
224
+ }
225
+ });
226
+
227
+ // Сбрасываем особые стили для ссылок
228
+ const links = document.querySelectorAll('a');
229
+ links.forEach(link => {
230
+ if (link instanceof HTMLElement) {
231
+ link.style.color = '';
232
+ }
233
+ });
234
+
235
+ // Сбрасываем особые стили для посещенных ссылок
236
+ const visitedLinks = document.querySelectorAll('a:visited');
237
+ visitedLinks.forEach(link => {
238
+ if (link instanceof HTMLElement) {
239
+ link.style.color = '';
240
+ }
241
+ });
242
+
243
+ // Сбрасываем особые стили для кнопок
244
+ const buttons = document.querySelectorAll('button');
245
+ buttons.forEach(button => {
246
+ if (button instanceof HTMLElement) {
247
+ button.style.backgroundColor = '';
248
+ button.style.color = '';
249
+ button.style.border = '';
250
+ }
251
+ });
252
+
253
+ // Сбрасываем особые стили для полей ввода
254
+ const inputs = document.querySelectorAll('input, textarea, select');
255
+ inputs.forEach(input => {
256
+ if (input instanceof HTMLElement) {
257
+ input.style.backgroundColor = '';
258
+ input.style.color = '';
259
+ input.style.border = '';
260
+ }
261
+ });
262
+ }, 'Ошибка при удалении стилей высокого контраста со всех элементов');
263
+ };
264
+
142
265
  /**
143
266
  * Применение конкретной настройки с проверкой общего режима
144
267
  * Применяет настройку только если общий режим доступности включен
@@ -12,14 +12,14 @@
12
12
  background: #000 !important;
13
13
  color: #fff !important;
14
14
 
15
- /* Применяем стили ко всем элементам, КРОМЕ панели доступности */
16
- *:not(.accessibility-panel-container):not(.accessibility-panel-container *) {
17
- background: #000 !important;
15
+ /* Применяем стили ко всем элементам, включая панель доступности */
16
+ * {
17
+ background: none !important;
18
18
  color: #fff !important;
19
19
  border-color: #fff !important;
20
20
  }
21
21
 
22
- a:not(.accessibility-panel-container a) {
22
+ a {
23
23
  color: #ffff00 !important;
24
24
 
25
25
  &:visited {
@@ -31,7 +31,7 @@
31
31
  }
32
32
  }
33
33
 
34
- button:not(.accessibility-panel-container button) {
34
+ button {
35
35
  background: #fff !important;
36
36
  color: #000 !important;
37
37
  border: 2px solid #fff !important;
@@ -42,9 +42,9 @@
42
42
  }
43
43
  }
44
44
 
45
- input:not(.accessibility-panel-container input),
46
- textarea:not(.accessibility-panel-container textarea),
47
- select:not(.accessibility-panel-container select) {
45
+ input,
46
+ textarea,
47
+ select {
48
48
  background: #fff !important;
49
49
  color: #000 !important;
50
50
  border: 2px solid #fff !important;
@@ -43,7 +43,7 @@ export interface AccessibilityPanelProps {
43
43
  /** Обработчик закрытия панели */
44
44
  onClose: () => void;
45
45
  /** Позиция панели относительно кнопки */
46
- position?: 'top-right' | 'top-left';
46
+ position?: 'top-right' | 'top-left' | 'bottom-left' | 'bottom-right';
47
47
  }
48
48
 
49
49
  /**