@verta/ui-gates (1.0.0)

Published 2026-07-07 08:22:45 +00:00 by forgeadmin

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 не видит; raw px ≥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.json required-имён: ломает CI потребителей.
  • minor — backwards-compatible опция/улучшение диагностики/ослабление правила.
  • patch — фикс правила или репорта без изменения поверхности.

Релиз-флоу

  1. В ветке: pnpm changeset (описать изменение, выбрать bump по политике выше).
  2. Там же: pnpm changeset version (бампит версию, пишет CHANGELOG).
  3. Мерж в 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
Details
npm
2026-07-07 08:22:45 +00:00
1
latest
8.2 KiB
Assets (1)
Versions (2) View all
1.0.0 2026-07-07
0.1.0 2026-07-06