@zelelo/iskra-ui 0.0.0-stage → 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.
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zelelo622 (Iskra UI)
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 CONNECTED WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,210 @@
1
- # Temporary Holding Version
1
+ # Iskra UI
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Современная, доступная (a11y) и легковесная библиотека React-компонентов, написанная на TypeScript.
4
+
5
+ ## Установка
6
+
7
+ ```bash
8
+ npm install @zelelo/iskra-ui
9
+ # или
10
+ yarn add @zelelo/iskra-ui
11
+ # или
12
+ pnpm add @zelelo/iskra-ui
13
+ ```
14
+
15
+ **Peer Dependencies:**
16
+ Убедитесь, что в вашем проекте установлен React версии 18 или выше:
17
+
18
+ ```bash
19
+ npm install react react-dom
20
+ ```
21
+
22
+ ## Использование
23
+
24
+ Стили поставляются отдельным файлом - подключите его один раз в корне приложения:
25
+
26
+ ```tsx
27
+ import { Button, Input } from "@zelelo/iskra-ui";
28
+ import "@zelelo/iskra-ui/styles.css";
29
+
30
+ function App() {
31
+ return (
32
+ <div>
33
+ <Input placeholder="Введите имя..." />
34
+ <Button variant="primary" size="md">
35
+ Отправить
36
+ </Button>
37
+ </div>
38
+ );
39
+ }
40
+ ```
41
+
42
+ ## Доступные компоненты
43
+
44
+ - **Accordion** - гармошка для скрытия/показа контента.
45
+ - **Alert** - цветные блоки для уведомлений.
46
+ - **Badge** - индикаторы.
47
+ - **Button** - основная кнопка.
48
+ - **Checkbox** - чекбокс, в том числе с состоянием "частично выбрано".
49
+ - **Input** - поле ввода.
50
+ - **Modal** - модальное окно на нативном `<dialog>`.
51
+ - **Radio** - радиокнопка.
52
+ - **RadioGroup** - группа радиокнопок.
53
+ - **Skeleton** - заглушки для загрузки контента.
54
+ - **Spinner** - индикатор загрузки.
55
+ - **Switch** - переключатель.
56
+ - **Tabs** - вкладки с навигацией с клавиатуры.
57
+ - **Toast** - всплывающие уведомления.
58
+ - **Tooltip** - всплывающие подсказки при наведении и фокусе.
59
+
60
+ История изменений - в [CHANGELOG.md](https://github.com/Zelelo622/Iskra-UI/blob/main/CHANGELOG.md) (появится после первого релиза).
61
+
62
+ ---
63
+
64
+ ## Разработка
65
+
66
+ ### Окружение
67
+
68
+ Версия Node.js зафиксирована в `.nvmrc`:
69
+
70
+ ```bash
71
+ nvm use # переключиться на нужную версию Node
72
+ npm install # зависимости + git-хуки (ставятся автоматически через lefthook)
73
+ ```
74
+
75
+ После `npm install` в `.git/hooks` должны появиться `pre-commit`, `commit-msg` и `pre-push`. Если их нет - выполните `npx lefthook install`.
76
+
77
+ Все файлы в репозитории хранятся с переводами строк LF (см. `.gitattributes`), поэтому на Windows не нужно ничего настраивать в git.
78
+
79
+ ### Команды
80
+
81
+ | Команда | Что делает |
82
+ | :--------------------- | :-------------------------------------------------------------- |
83
+ | `npm run dev` | Ladle - витрина компонентов для разработки |
84
+ | `npm run build` | Сборка библиотеки в `dist` (ESM + CJS + типы + `index.css`) |
85
+ | `npm run lint` | oxlint + ESLint (порядок и стиль импортов) |
86
+ | `npm run lint:fix` | То же с автоисправлением |
87
+ | `npm run format` | Форматирование oxfmt |
88
+ | `npm run format:check` | Проверка форматирования без изменений |
89
+ | `npm run typecheck` | Проверка типов TypeScript |
90
+ | `npm run check` | Всё сразу: lint, format:check, typecheck, build |
91
+ | `npm run check:fix` | Исправить всё, что исправляется автоматически, и прогнать check |
92
+
93
+ ### Git-хуки (lefthook)
94
+
95
+ - **pre-commit** - oxlint и ESLint по изменённым файлам; oxfmt сам форматирует файлы и добавляет исправления в коммит.
96
+ - **commit-msg** - commitlint проверяет сообщение коммита (правила ниже).
97
+ - **pre-push** - проверка типов и сборка.
98
+
99
+ ---
100
+
101
+ ## Коммиты и CHANGELOG
102
+
103
+ `CHANGELOG.md`, номер версии и релизы генерируются **автоматически** из истории коммитов в `main` с помощью [release-please](https://github.com/googleapis/release-please). Поэтому сообщение коммита - это не формальность: тип решает, попадёт ли изменение в changelog и какая выйдет версия, а описание пользователи прочитают в списке изменений.
104
+
105
+ ### Формат
106
+
107
+ ```
108
+ <тип>(<область>): <описание>
109
+ ```
110
+
111
+ - **тип** - обязательный, из таблицы ниже;
112
+ - **область** - необязательная, но для изменений в компоненте указывайте её;
113
+ - **описание** - по-русски, с маленькой буквы, без точки в конце, в прошедшем времени или как результат: «добавлено…», «исправлено…».
114
+
115
+ Для ломающих изменений после типа ставится `!` (см. ниже).
116
+
117
+ ### Типы
118
+
119
+ | Тип | Когда использовать | В CHANGELOG | Версия |
120
+ | :--------- | :----------------------------------------------------------- | :------------------- | :----- |
121
+ | `feat` | Новый компонент, проп, вариант, возможность для пользователя | «Новые возможности» | minor |
122
+ | `fix` | Исправление бага, который видит пользователь библиотеки | «Исправления» | patch |
123
+ | `perf` | Ускорение без изменения поведения | «Производительность» | patch |
124
+ | `revert` | Откат предыдущего коммита | «Откаты» | patch |
125
+ | `docs` | README, JSDoc, сторис | нет | - |
126
+ | `style` | Форматирование, без изменения логики | нет | - |
127
+ | `refactor` | Переписан код без изменения поведения | нет | - |
128
+ | `test` | Тесты | нет | - |
129
+ | `build` | Сборка, tsup, `package.json`, зависимости | нет | - |
130
+ | `ci` | GitHub Actions | нет | - |
131
+ | `chore` | Прочее: конфиги линтеров, хуки, рутина | нет | - |
132
+
133
+ Если с последнего релиза в `main` были только коммиты без версии (`docs`, `chore` и т. п.), релиз не создаётся.
134
+
135
+ ### Области
136
+
137
+ - Компоненты - имя папки в нижнем регистре: `accordion`, `alert`, `badge`, `button`, `checkbox`, `input`, `modal`, `radio`, `radiogroup`, `skeleton`, `spinner`, `switch`, `tabs`, `toast`, `tooltip`. Новый компонент становится допустимой областью автоматически, как только появляется его папка в `src/components`.
138
+ - `tokens` - CSS-переменные и дизайн-токены.
139
+ - `utils` - общие утилиты (`src/utils`).
140
+ - `deps` - зависимости.
141
+ - `build`, `lint`, `ci`, `docs`, `release` - инфраструктура проекта.
142
+
143
+ Если указать область, которой нет в этом списке, commitlint отклонит коммит.
144
+
145
+ ### Ломающие изменения
146
+
147
+ Если изменение требует правок в коде у пользователей библиотеки (переименован или удалён проп, изменилось поведение по умолчанию), поставьте `!` и опишите, что делать, в теле коммита:
148
+
149
+ ```
150
+ feat(button)!: проп variant="outline" переименован в "secondary"
151
+
152
+ BREAKING CHANGE: замените variant="outline" на variant="secondary".
153
+ ```
154
+
155
+ Пока версия ниже 1.0.0, ломающее изменение повышает minor (`0.3.0 → 0.4.0`), после 1.0.0 - major (`1.4.0 → 2.0.0`).
156
+
157
+ ### Примеры
158
+
159
+ | ✅ Хорошо | ❌ Плохо |
160
+ | :-------------------------------------------------- | :---------------------------- |
161
+ | `feat(checkbox): добавлено состояние indeterminate` | `feat: чекбокс` |
162
+ | `fix(modal): onClose больше не вызывается дважды` | `fix: фикс` |
163
+ | `feat(tokens): добавлены токены радиусов` | `feat(Tokens): Радиусы.` |
164
+ | `chore(lint): включено правило import/no-cycle` | `feat(lint): правила линтера` |
165
+ | `build(deps): обновлён tsup до 8.3` | `refactor(deps): tsup` |
166
+ | `docs(input): добавлены сторис для иконок` | `feat: сторис` |
167
+
168
+ Описание - это строка, которую увидят пользователи в CHANGELOG. Пишите, **что изменилось для них**, а не что вы делали в коде.
169
+
170
+ ---
171
+
172
+ ## Pull Request и релизы
173
+
174
+ ### Как вносить изменения
175
+
176
+ 1. Создайте ветку от `main`.
177
+ 2. Откройте Pull Request в `main`. **Заголовок PR должен соответствовать правилам коммитов** - при Squash and Merge именно он становится коммитом в `main` и строкой в CHANGELOG. Заголовок проверяется в CI.
178
+ 3. После прохождения проверок PR сливается через **Squash and Merge**.
179
+
180
+ Ветка `main` защищена: прямой пуш запрещён, слить код можно только через PR с успешными проверками.
181
+
182
+ ### Как выходит релиз
183
+
184
+ 1. После каждого слияния в `main` release-please открывает или обновляет PR `chore: release X.Y.Z`. В нём уже посчитана новая версия, обновлены `package.json` и `CHANGELOG.md`.
185
+ 2. Когда нужно выпустить версию - слейте этот PR. Перед слиянием CHANGELOG в нём можно отредактировать вручную.
186
+ 3. После слияния автоматически создаются тег `vX.Y.Z` и GitHub Release, и пакет публикуется в npm.
187
+
188
+ Версию в `package.json` и `CHANGELOG.md` **не меняйте руками** вне релизного PR - release-please ведёт их сам.
189
+
190
+ ### Однократная настройка репозитория
191
+
192
+ - **Settings → Actions → General → Workflow permissions:** включить «Allow GitHub Actions to create and approve pull requests».
193
+ - **Secret `NPM_TOKEN`** - npm access token с правом публикации пакета `@zelelo/iskra-ui`.
194
+ - **Secret `RELEASE_PLEASE_TOKEN`** - fine-grained personal access token на этот репозиторий (Contents и Pull requests: Read and write). Нужен потому, что PR, созданный стандартным токеном GitHub Actions, не запускает CI, и обязательные проверки на релизном PR не пройдут. Без этого секрета release-please работает со стандартным токеном.
195
+
196
+ ---
197
+
198
+ ## CI / GitHub Actions
199
+
200
+ | Workflow | Когда запускается | Что делает |
201
+ | :------------- | :---------------------- | :-------------------------------------------------------------- |
202
+ | `ci.yml` | PR и пуш в `main` | lint, format:check, typecheck, build, сборка Ladle |
203
+ | `pr-title.yml` | Открытие и изменение PR | Проверяет заголовок PR правилами commitlint |
204
+ | `release.yml` | Пуш в `main` | Ведёт релизный PR; после его слияния - тег, GitHub Release, npm |
205
+
206
+ ---
207
+
208
+ ## Лицензия
209
+
210
+ MIT © Zelelo622