@verta/ui-gates (1.0.0)
Installation
@verta:registry=npm install @verta/ui-gates@1.0.0"@verta/ui-gates": "1.0.0"About this package
@verta/ui-gates
Дизайн-гейты Verta: Biome-пресет (+GritQL-правила) и ui-gates-check
(токен-контракт + добивка динамики). Ловит машина, не ревью.
Подключение (consumer)
pnpm add -D @verta/ui-gates
biome.json проекта:
{ "extends": ["@verta/ui-gates/biome"] }
Ось гейта в package.json / CI:
{ "scripts": { "ui-gate": "ui-gates-check" } }
Пакет должен быть прямым devDependency — пути GritQL-плагинов резолвятся
как ./node_modules/@verta/ui-gates/rules/*.grit от корня проекта
(pnpm-симлинк подходит).
Что ловится
nursery/noInlineStyles,nursery/useSortedClasses(функции:cn,cva,clsx,tw) — Biome-правила;no-native-interactive.grit— нативные<button>/<input>/<select>/<textarea>/<a>внеsrc/shared/ui/**;no-direct-radix.grit— прямойimportиз@radix-ui/*внеsrc/shared/ui/**: Radix владеет copy-in кит, страницы ходят через shared UI;no-raw-color-classname.grit— arbitrary-цвета в классах:bg-[#…],text-[rgb(…)],ring-[oklch(…)]; цветофункция от токена —bg-[rgb(var(--accent))]— легальна;no-arbitrary-size.grit— arbitrary px/rem-размеры в классах:w-[37px],text-[11px];calc(…),var(--…)и безразмерные (grid-cols-[…]) легальны;no-raw-color-css.grit— сырые цвета в CSS вне токен-файла (globals.css);ui-gates-check— каждый токен изcontract/tokens.jsonобъявлен в:rootи.dark(не-цветовые — только:root); token-name гейт:var(--x), потреблённый в CSS или class-значениях без объявления в токен-файле (фантом-токен) — fail, defined-but-unused — report-only, внешние неймспейсы (--radix-,--tw-,--fd-) исключены; сырые цвета и arbitrary-размеры вcn()/cva()/template-строках/className, которые GritQL не видит; rawpx≥3px в CSS вне токен-файла (hairlines 0–2px,:root,@keyframesи prelude@mediaлегальны).
Known limitations: интерполяция `bg-${tone}` / `w-[${n}px]` не
анализируется; строка, где смешаны токен-цвет rgb(var(--…)) и сырой цвет,
grit-правилом не ловится (динамический скан ui-gates-check ловит);
useSortedClasses не сортирует объект-пропсы clsx и часть вариантов — см.
доку Biome.
Semver-политика
Якорь для всех UI-реп — версия в Forgejo npm.
- major — новое правило гейта или изменение состава
contract/tokens.jsonrequired-имён: ломает CI потребителей. - minor — backwards-compatible опция/улучшение диагностики/ослабление правила.
- patch — фикс правила или репорта без изменения поверхности.
Релиз-флоу
- В ветке:
pnpm changeset(описать изменение, выбрать bump по политике выше). - Там же:
pnpm changeset version(бампит версию, пишет CHANGELOG). - Мерж в
main→ CI (.forgejo/workflows/publish.yml) публикует недостающие версии в Forgejo npm (changeset publish, идемпотентно).
Peer-диапазон Biome запинован (>=2.5.2 <2.6.0): nursery-правила и GritQL
экспериментальны, бамп Biome = перепроверка фикстур.
Dependencies
Dependencies
| ID | Version |
|---|---|
| oxc-parser | ^0.139.0 |
Development dependencies
| ID | Version |
|---|---|
| @biomejs/biome | 2.5.2 |
| vitest | ^3.2.4 |
Peer dependencies
| ID | Version |
|---|---|
| @biomejs/biome | >=2.5.2 <2.6.0 |