ru-a11y-toolkit 0.1.0

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 (4) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +208 -0
  3. package/index.js +34 -0
  4. package/package.json +68 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 biondohod
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,208 @@
1
+ # ru-a11y-toolkit
2
+
3
+ [![npm version](https://img.shields.io/npm/v/ru-a11y-toolkit)](https://www.npmjs.com/package/ru-a11y-toolkit)
4
+ [![license](https://img.shields.io/npm/l/ru-a11y-toolkit)](./LICENSE)
5
+
6
+ **Toolkit** для автоматизированной проверки веб-доступности React/JS-приложений под **российские нормативы**:
7
+
8
+ - [ГОСТ Р 52872-2019](https://meganorm.ru/Data/547/54797.pdf) — требования доступности интернет-ресурсов
9
+ - [Постановление Правительства РФ №102](http://publication.pravo.gov.ru/document/0001202602100010?index=1) — доступность официальных сайтов для инвалидов по зрению _(вступает в силу 01.03.2026)_
10
+
11
+ > Все сообщения — на **русском языке** с указанием конкретных пунктов ГОСТ и Постановления №102.
12
+
13
+ ---
14
+
15
+ ## Варианты установки
16
+
17
+ Все инструменты сразу:
18
+ ```bash
19
+ npm install --save-dev ru-a11y-toolkit
20
+ ```
21
+
22
+ Или только нужный модуль:
23
+ ```bash
24
+ npm install --save-dev ru-a11y-toolkit-eslint # только ESLint-плагин
25
+ npm install --save-dev ru-a11y-toolkit-cli # только CLI (скоро)
26
+ npm install --save-dev ru-a11y-toolkit-overlay # только React Overlay (скоро)
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Состав пакета
32
+
33
+ | Пакет | Статус | Назначение |
34
+ |-------|--------|------------|
35
+ | [`ru-a11y-toolkit-eslint`](#-eslint-плагин) | ✅ Готов | Статическая проверка JSX/HTML в процессе разработки |
36
+ | [`ru-a11y-toolkit-cli`](#-cli-сканер-в-разработке) | 🚧 В разработке | Проверка готовых страниц по URL |
37
+ | [`ru-a11y-toolkit-overlay`](#-react-overlay-в-разработке) | 🚧 В разработке | Runtime-визуализация ошибок в браузере |
38
+
39
+ ---
40
+
41
+ ## 📦 ESLint-плагин
42
+
43
+ ### Установка
44
+
45
+ ```bash
46
+ npm install --save-dev ru-a11y-toolkit-eslint eslint eslint-plugin-jsx-a11y
47
+ # или через umbrella:
48
+ npm install --save-dev ru-a11y-toolkit eslint eslint-plugin-jsx-a11y
49
+ ```
50
+
51
+ ### Настройка
52
+
53
+ **`eslint.config.js`** (ESLint 9 Flat Config):
54
+ ```js
55
+ const ruA11yEslint = require('ru-a11y-toolkit-eslint');
56
+
57
+ module.exports = [
58
+ ruA11yEslint.configs['gost-aa'],
59
+ ];
60
+ ```
61
+
62
+ **`.eslintrc.js`** (ESLint 8 Legacy):
63
+ ```js
64
+ module.exports = {
65
+ extends: ['ru-a11y-toolkit-eslint/gost-aa'],
66
+ };
67
+ ```
68
+
69
+ ### Уровни конфигурации
70
+
71
+ | Конфиг | Уровень | Для кого |
72
+ |--------|---------|----------|
73
+ | `/recommended` | ГОСТ A | Все проекты — базовая доступность |
74
+ | `/gost-aa` | ГОСТ AA + №102 | Гос. органы, порталы под Постановление №102 |
75
+ | `/strict` | ГОСТ AAA | Критически важные сервисы |
76
+
77
+ ### Пример вывода
78
+
79
+ ```
80
+ ✖ Отсутствует ссылка пропуска навигации (ГОСТ Р 52872-2019 §5.2.3.1, уровень A).
81
+ Добавьте <a href="#main">Перейти к содержанию</a> в начало <body>.
82
+ [Постановление №102 п. а)]
83
+ src/App.jsx:3:5 @ru-a11y/gost-a11y/require-skip-link
84
+
85
+ ✖ Элемент <html> должен иметь атрибут lang (например, lang="ru").
86
+ [ГОСТ Р 52872-2019 §5.2.4; Постановление №102 п. а)]
87
+ src/index.jsx:1:1 @ru-a11y/gost-a11y/jsx-a11y/html-has-lang
88
+
89
+ ⚠ Значение maximum-scale=1.0 ограничивает масштабирование ниже 200%.
90
+ [Постановление №102 п. б)]
91
+ public/index.html:7:3 @ru-a11y/gost-a11y/zoom-200-warning
92
+ ```
93
+
94
+ ### Что проверяет
95
+
96
+ **7 кастомных правил** (специфика РФ):
97
+
98
+ | Правило | Нормативная база |
99
+ |---------|----------------|
100
+ | `require-skip-link` — ссылка «Перейти к содержанию» | ГОСТ §5.2.3.1; №102 п. а) |
101
+ | `require-lang-attr` — `lang="ru"` на `<html>` | ГОСТ §5.2.4; №102 п. а), д) |
102
+ | `require-title-semantic` — информативный `<title>` | ГОСТ §5.2.3; №102 п. е) |
103
+ | `no-frame-structure` — запрет `<frame>`/`<frameset>` | ГОСТ §5.1.1; №102 п. а) |
104
+ | `table-requires-th` — `<th scope>` в таблицах данных | ГОСТ §5.1.5; №102 п. а) |
105
+ | `no-table-layout` — запрет таблиц для вёрстки | ГОСТ §5.1.5; №102 п. а) |
106
+ | `zoom-200-warning` — масштабирование 200% | №102 п. б) |
107
+
108
+ **26 правил jsx-a11y** — переведены на русский с привязкой к нормативам.
109
+
110
+ → [Подробная документация ESLint-плагина](./packages/eslint-preset/README.md)
111
+
112
+ ---
113
+
114
+ ## 🔧 CLI-сканер _(в разработке)_
115
+
116
+ Планируется: проверка готовых страниц по URL через Puppeteer + axe-core с отчётом, привязанным к пунктам ГОСТ и Постановления №102.
117
+
118
+ ```bash
119
+ # Будущий API:
120
+ npx ru-a11y-toolkit-cli scan https://example.gov.ru --format html --out report.html
121
+ ```
122
+
123
+ → [README](./packages/cli/README.md)
124
+
125
+ ---
126
+
127
+ ## 🖥 React Overlay _(в разработке)_
128
+
129
+ Планируется: runtime-визуализация нарушений доступности прямо на странице — подсветка элементов, всплывающие подсказки с описанием на русском языке и ссылками на нормативные документы.
130
+
131
+ ```jsx
132
+ // Будущий API:
133
+ import { A11yOverlay } from 'ru-a11y-toolkit-overlay';
134
+
135
+ function App() {
136
+ return (
137
+ <>
138
+ {process.env.NODE_ENV === 'development' && <A11yOverlay />}
139
+ <YourApp />
140
+ </>
141
+ );
142
+ }
143
+ ```
144
+
145
+ → [README](./packages/react-overlay/README.md)
146
+
147
+ ---
148
+
149
+ ## Нормативная база
150
+
151
+ ### ГОСТ Р 52872-2019
152
+ Введён в действие с 01.04.2020. Устанавливает требования доступности для интернет-ресурсов и приложений. Основан на WCAG 2.1, адаптирован для РФ.
153
+
154
+ ### Постановление Правительства РФ №102 от 07.02.2026
155
+ Вступает в силу **01.03.2026**. Обязательно для официальных сайтов государственных органов:
156
+
157
+ | Пункт | Требование | Что проверяет |
158
+ |-------|-----------|--------------|
159
+ | п. а) | Доступ с клавиатуры, корректное считывание скринридерами | `require-skip-link`, `no-frame-structure`, `no-table-layout` и др. |
160
+ | п. б) | Масштабирование текста не менее 200% | `zoom-200-warning` |
161
+ | п. г) | Текстовые альтернативы для нетекстового контента | `jsx-a11y/alt-text`, `jsx-a11y/media-has-caption` |
162
+ | п. д) | CAPTCHA на государственном языке РФ | `require-lang-attr` (enforceRussian) |
163
+ | п. е) | Информативные заголовки страниц | `require-title-semantic` |
164
+ | п. ж) | Цель ссылок определяется из их текста | `jsx-a11y/anchor-has-content` |
165
+ | п. м) | Подписи к полям форм | `jsx-a11y/label-has-associated-control` |
166
+
167
+ ---
168
+
169
+ ## Разработка
170
+
171
+ ```bash
172
+ git clone https://github.com/biondohod/ru-a11y.git
173
+ cd ru-a11y
174
+ npm install
175
+ npm test # тесты ESLint-плагина
176
+ npm run test:all # тесты всех пакетов
177
+ ```
178
+
179
+ ### Структура репозитория
180
+
181
+ ```
182
+ ru-a11y/
183
+ ├── index.js # umbrella-реэкспорт (ru-a11y-toolkit)
184
+ ├── package.json # ru-a11y-toolkit
185
+ ├── packages/
186
+ │ ├── eslint-preset/ # ru-a11y-toolkit-eslint ✅
187
+ │ ├── cli/ # ru-a11y-toolkit-cli 🚧
188
+ │ └── react-overlay/ # ru-a11y-toolkit-overlay 🚧
189
+ ├── README.md # этот файл
190
+ └── LICENSE
191
+ ```
192
+
193
+ ### Публикация отдельного пакета
194
+
195
+ ```bash
196
+ # ESLint-плагин
197
+ cd packages/eslint-preset
198
+ npm publish --access public
199
+
200
+ # umbrella (после публикации всех зависимостей)
201
+ cd ../..
202
+ npm publish --access public
203
+ ```
204
+
205
+ ## Лицензия
206
+
207
+ MIT © [biondohod](https://github.com/biondohod)
208
+
package/index.js ADDED
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * ru-a11y-toolkit — umbrella-пакет
5
+ *
6
+ * Реэкспортирует все готовые модули toolkit.
7
+ * По мере выхода CLI и React Overlay они будут добавлены сюда.
8
+ *
9
+ * Использование:
10
+ * const toolkit = require('ru-a11y-toolkit');
11
+ * // toolkit.eslint — ESLint-плагин
12
+ * // toolkit.eslint.configs['gost-aa'] — конфиг напрямую
13
+ */
14
+
15
+ const eslint = require('ru-a11y-toolkit-eslint');
16
+
17
+ module.exports = {
18
+ /** ESLint-плагин с правилами и конфигами */
19
+ eslint,
20
+
21
+ /**
22
+ * Конфиги для прямого использования в eslint.config.js (Flat Config):
23
+ * const { configs } = require('ru-a11y-toolkit');
24
+ * module.exports = [configs.recommended];
25
+ */
26
+ configs: eslint.configs,
27
+
28
+ /**
29
+ * Все правила плагина:
30
+ * const { rules } = require('ru-a11y-toolkit');
31
+ */
32
+ rules: eslint.rules,
33
+ };
34
+
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "ru-a11y-toolkit",
3
+ "version": "0.1.0",
4
+ "description": "Toolkit для автоматизированной проверки веб-доступности React/JS-приложений под российские нормативы (ГОСТ Р 52872-2019, Постановление №102)",
5
+ "main": "index.js",
6
+ "workspaces": [
7
+ "packages/*"
8
+ ],
9
+ "scripts": {
10
+ "test": "jest --passWithNoTests",
11
+ "test:all": "npm run test --workspaces",
12
+ "lint": "eslint packages --ext .js,.jsx,.ts,.tsx",
13
+ "build": "npm run build --workspaces --if-present"
14
+ },
15
+ "dependencies": {
16
+ "ru-a11y-toolkit-eslint": "1.0.1"
17
+ },
18
+ "keywords": [
19
+ "accessibility",
20
+ "a11y",
21
+ "eslint",
22
+ "eslint-plugin",
23
+ "ГОСТ",
24
+ "доступность",
25
+ "React",
26
+ "JSX",
27
+ "wcag",
28
+ "russia",
29
+ "ru-a11y"
30
+ ],
31
+ "author": {
32
+ "name": "biondohod",
33
+ "url": "https://github.com/biondohod"
34
+ },
35
+ "license": "MIT",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/biondohod/ru-a11y.git"
39
+ },
40
+ "homepage": "https://github.com/biondohod/ru-a11y#readme",
41
+ "bugs": {
42
+ "url": "https://github.com/biondohod/ru-a11y/issues"
43
+ },
44
+ "files": [
45
+ "index.js",
46
+ "README.md",
47
+ "LICENSE"
48
+ ],
49
+ "devDependencies": {
50
+ "@babel/core": "^7.23.0",
51
+ "@babel/eslint-parser": "^7.23.0",
52
+ "@babel/preset-env": "^7.23.0",
53
+ "@babel/preset-react": "^7.22.0",
54
+ "eslint": "^9.0.0",
55
+ "eslint-plugin-jsx-a11y": "^6.8.0",
56
+ "jest": "^29.7.0",
57
+ "babel-jest": "^29.7.0"
58
+ },
59
+ "jest": {
60
+ "testEnvironment": "node",
61
+ "testMatch": [
62
+ "**/tests/**/*.test.js"
63
+ ],
64
+ "transform": {
65
+ "^.+\\.jsx?$": "babel-jest"
66
+ }
67
+ }
68
+ }