abda8157e3
test / test (pull_request) Successful in 17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
82 lines
4.3 KiB
Markdown
82 lines
4.3 KiB
Markdown
# @tnsu/ui-kit
|
||
|
||
Общие UI-компоненты для SPFx web part'ов ТНСУ. Единый дизайн, один источник правды.
|
||
|
||
> Внутренняя память проекта (решения, план, прогресс) — в [PROJECT.md](./PROJECT.md).
|
||
|
||
## Установка в проект
|
||
|
||
Пакет лежит в реестре организации **tansu** на git.tnsu.kz. Реестр публичный, а сам git.tnsu.kz
|
||
доступен только из внутренней сети, поэтому **токен для установки не нужен** (из сети или по VPN).
|
||
|
||
В корне проекта — файл `.npmrc` со строкой:
|
||
|
||
```
|
||
@tnsu:registry=http://git.tnsu.kz/api/packages/tansu/npm/
|
||
```
|
||
|
||
Затем:
|
||
|
||
```powershell
|
||
npm i @tnsu/ui-kit
|
||
```
|
||
|
||
Пакет требует, чтобы в проекте уже были (peerDependencies):
|
||
`react@17`, `react-dom@17`, `@fluentui/react@8`, `tslib`.
|
||
У любого SPFx-решения этого поколения они есть.
|
||
|
||
## Использование
|
||
|
||
```ts
|
||
import { Button } from '@tnsu/ui-kit';
|
||
import '@tnsu/ui-kit/styles.css'; // один раз в корневом компоненте web part
|
||
|
||
<Button variant="primary">Отправить</Button>;
|
||
```
|
||
|
||
## Компоненты
|
||
|
||
_Наполняется по мере переноса. Полная витрина со всеми состояниями — в Storybook._
|
||
|
||
**Кнопки:** `Button`, `PrintButton`
|
||
**Сообщения:** `Alert`, `RequestNumber`
|
||
**Форма (оболочка/раскладка):** `FormCard`, `FormGrid`, `FormField`, `FormActions`, `CollapseSection`
|
||
**Поля ввода:** `TextInput`, `TextArea`, `PhoneInput`, `MoneyInput`, `Select`, `Toggle`
|
||
**Режим чтения:** `FormModeProvider`, `useFormReadOnly`
|
||
**Иконки:** `Icon`, `IconSprite`
|
||
**Файлы:** `FileDropzone`, `AttachmentList`
|
||
**Модалка:** `ConfirmHost`, `confirmModal`
|
||
**Хуки:** `useFlipRows`
|
||
|
||
> ⏳ В планах: `DataTable` (обобщение ItemsTable), `Badge`, `ErrorOverlay`, навигация (Tabs/Sidebar/Breadcrumbs).
|
||
|
||
## Разработка пакета
|
||
|
||
```powershell
|
||
npm i # поставить зависимости
|
||
npm run build # собрать пакет в dist/
|
||
npm run dev # сборка в watch-режиме
|
||
npm run storybook # витрина компонентов (localhost:6006)
|
||
```
|
||
|
||
### Публикация новой версии
|
||
|
||
Публикует пайплайн **publish** в Gitea — по кнопке: Actions → publish → Run workflow. Сначала юнит-тесты
|
||
и сборка, потом публикация в реестр tansu.
|
||
|
||
- **Версию поднимает пайплайн.** В `package.json` задаются только major.minor (патч там не важен):
|
||
новая функциональность — поднять minor руками (`0.14.x` → `0.15.0`). Патч — следующий после самого
|
||
большого опубликованного с тем же major.minor. В git ничего не коммитится.
|
||
- **Тот же код не публикуется.** Пайплайн считает хэш исходников (`src` без тестов и историй Storybook,
|
||
`package.json`, конфиги сборки, README), кладёт его в публикуемый `package.json` (поле `sourceHash`)
|
||
и сравнивает с последней опубликованной версией. Совпало — пайплайн падает с «Публиковать нечего».
|
||
- Секрет: `PACKAGES_TOKEN` — токен Gitea со scope `write:package` (владелец — участник организации tansu
|
||
с правом записи). Логин не нужен.
|
||
|
||
Пробный прогон без публикации: `DRY_RUN=1 bash ci/publish.sh`.
|
||
|
||
Версии до 0.14.0 скопированы из прежнего реестра `timur.gorodetskiy` без хэша, поэтому первая публикация
|
||
пайплайном выпустит `0.14.1` даже без изменений кода; дальше проверка работает как обычно.
|
||
|
||
На каждый push и pull request пайплайн **test** гоняет юнит-тесты и сборку.
|