Skip to main content

ui-primitives

Use when building or refactoring massCode UI components with local Ui primitives or Shadcn, especially for cn, cva, notifications, and rules against reimplementing basic controls.

Source facts

Repository
massCodeIO/massCode
Last source activity
September 5, 2026 at 17:10
Detected SKILL.md language
Russian
Stars
7,003
Forks
270

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ui-primitives
description
Use when building or refactoring massCode UI components with local Ui primitives or Shadcn, especially for cn, cva, notifications, and rules against reimplementing basic controls.
# UI Primitives ## Overview Базовые UI-элементы в massCode должны собираться из существующих `Ui*` компонентов и Shadcn-паттернов. Этот skill отвечает за component-level usage rules, а не за общую визуальную базу. ## Component Usage - Локальные UI-компоненты доступны через auto-import с префиксом `Ui`. - Базовые элементы вроде button, input, checkbox, action button не переизобретай на сыром HTML, если есть готовый `Ui*` вариант. - Если нужного элемента нет, сначала создай его в `src/renderer/components/ui/`, потом используй в фиче. ## Buttons - Primary action должен быть явным и не конкурировать с несколькими равноправными CTA в одном контейнере. - Icon-only actions должны быть понятны по контексту и иметь tooltip или другой доступный label path. - Loading и pending actions должны использовать существующий button pattern, а не ad-hoc “disabled text swap”. - Destructive actions не должны выглядеть как обычные secondary controls. ## Cards And Containers - Для автономных panel-like блоков используй существующий `Card` / `Ui*` container pattern, если он уже есть в области. - Внутренние muted blocks не нужно пересобирать разными `div`-паттернами в каждой фиче. - Repeated panel structure должна переезжать в shared primitive или local feature primitive, а не копироваться markup-в-маркап. ## Readonly And Copyable Content - Длинный readonly output, generated text, URLs и similar content не показывай как “обычный disabled input”, если это ухудшает чтение. - Для copy flows используй существующий copy pattern и уведомления через `useSonner()`. - Readonly content должен оставаться визуально читаемым и удобно копируемым. ## Styling Helpers - Для variants используй `cva`. - Для склейки классов используй `cn()`. - Не делай variants вручную строковыми `if`-цепочками там, где нужен нормальный variant API. ## Shadcn Rules - Shadcn-компоненты импортируй вручную из `@/components/ui/shadcn/*`. - Для namespace-based компонентов используй паттерн вроде `import * as Dialog from '@/components/ui/shadcn/dialog'`. ## Notifications - Для уведомлений используй `useSonner()`. - Не добавляй локальную, параллельную систему toast/notification внутри фичи. ## Tooltip, Popover, Overlay - Tooltip — для короткого пояснения. - Popover — для richer inline content, picker-like content или contextual controls. - Не заменяй их ad-hoc overlay-разметкой без необходимости. - Validation и inline guidance должны использовать существующие tooltip/popover primitives, если проект уже их применяет в аналогичных местах. ## Dialog Focus - Во всех диалогах явно управляй фокусом при открытии и закрытии. Не допускай автоматического фокуса на крестике закрытия и появления tooltip на кнопке открытия из-за возврата фокуса после закрытия. - По умолчанию отменяй стандартный autofocus на `DialogContent`: ```vue @open-auto-focus="(e) => e.preventDefault()" @close-auto-focus="(e) => e.preventDefault()" ``` - Исключение — намеренный фокус на конкретном поле или действии, нужном для сценария диалога. Задавай такую цель явно; при закрытии выбирай цель возврата фокуса без побочного показа tooltip. - Сохраняй focus trap и клавиатурную навигацию. Проверяй открытие и закрытие мышью и клавиатурой, включая Escape. ## Common Mistakes - Писать ещё одну кнопку или input с нуля “потому что быстрее”. - Склеивать сложные conditional classes без `cn()`. - Дублировать существующий primitive внутри feature directory вместо общего `src/renderer/components/ui/`. - Использовать disabled input как универсальный readonly display surface. - Делать overlay pattern вручную там, где уже есть Shadcn primitive. - Смешивать правила primitives с вопросами визуальной базы, которые должны идти в `ui-foundations`.
View on GitHub