# @tansu/design-system
Общая дизайн-система для всех SPFx-проектов Tansu (V5 Executive Premium).
Один источник правды для цветов, шрифтов, теней и паттернов. Меняешь здесь —
обновляется во всех проектах.
---
## Что внутри
| Файл | Что | Когда подключать |
|------|-----|------------------|
| `styles/_tokens.scss` | `$переменные` + `@mixin` (компайл-тайм, без CSS-вывода) | в **каждом** `.module.scss` |
| `styles/global.scss` | рантайм CSS-переменные `:root{--navy-900…}` | **один раз** на веб-часть (по необходимости) |
| `prompt-template.md` | промпт для генерации/переверстки веб-части по дизайну | при работе с Claude |
---
## Установка в проекте
В `package.json` проекта добавь зависимость (пин по тегу — стабильность):
```json
"dependencies": {
"@tansu/design-system": "git+https://git.tnsu.kz/timur.gorodetskiy/design-system.git#v1.0.0"
}
```
Затем:
```bash
npm install
```
> **Авторизация.** Репозиторий приватный. Чтобы `npm install` смог его скачать,
> на машине должен быть доступ к Gitea — проще всего настроить **SSH-ключ**
> (Gitea → Settings → SSH Keys) и использовать ssh-URL:
> `git+ssh://git@git.tnsu.kz/timur.gorodetskiy/design-system.git#v1.0.0`.
---
## Использование в SCSS
В любом `.module.scss`:
```scss
@import '~@tansu/design-system/styles/tokens';
.card {
background: $navy-900;
border-radius: $r-md;
box-shadow: $sh-1;
@include card-hover-gold;
}
.publishButton {
@include btn-accent;
border-radius: $r-sm;
}
```
`~` — это ссылка на `node_modules` (так работает sass-загрузчик SPFx).
### Правила (важно для поддерживаемости)
1. **Только переменные и миксины.** Сырой hex (`#D4A01E`, `#0F2440`) в компонентах — запрещён.
2. **Заголовки** — `$font-serif` (Lora), **остальной текст** — `$font-sans` (Inter).
3. **Отступы** — из шкалы `$sp-1…$sp-8`, не произвольные числа.
4. Повторяющийся паттерн (шапка, карточка, кнопка) — бери **миксин**, не копируй правила.
---
## Рантайм-переменные (опционально)
Нужны, только если читаешь цвет в рантайме (инлайн-стиль, динамическая тема).
Подключи `global.scss` **один раз** — в корневом компоненте веб-части:
```scss
// PortalMainPage.module.scss (корневой)
@import '~@tansu/design-system/styles/global';
```
```tsx
...
```
Для обычной вёрстки это не нужно — хватает `_tokens.scss`.
---
## Шрифты
Подключи Inter + Lora один раз в `onInit()` веб-части:
```ts
import { SPComponentLoader } from '@microsoft/sp-loader';
protected onInit(): Promise {
SPComponentLoader.loadCss(
'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Lora:wght@500;600;700&display=swap'
);
return super.onInit();
}
```
> Для корпоративной сети лучше **самохостить** шрифты (офлайн, скорость,
> без внешней зависимости). Это план на будущее.
---
## Как менять дизайн (workflow)
1. Правишь `styles/_tokens.scss` (например, `$gold-500`).
2. Коммит + новый тег:
```bash
git commit -am "feat: deeper gold accent"
git tag v1.1.0 && git push --tags
```
3. В проектах поднимаешь тег в `package.json` (`#v1.1.0`) → `npm install`.
4. Пересобираешь и деплоишь проект (в SPFx стили впекаются в бандл — это неизбежно).
**SemVer:** правка цвета/значения — minor (`v1.1.0`); удаление/переименование
переменной (ломает проекты) — major (`v2.0.0`).
---
## Дальше: слои дизайн-системы
- **Слой 1 — токены** (этот пакет) ✅
- **Слой 2 — миксины** (этот пакет) ✅
- **Слой 3 — React-компоненты** (`