artefact-design-system 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,11 +42,14 @@
42
42
 
43
43
  ### shadcn/vendored (стандартный API — см. shadcn-документацию)
44
44
 
45
- `Avatar`, `Badge`, `Button`, `Checkbox`, `Input`, `RadioGroup`, `Select`, `Switch`, `Toggle`/`ToggleGroup`, `Tooltip`, `NavigationMenu`, `Progress`, `Separator`, `Dialog`.
45
+ `Avatar`, `Badge`, `Button`, `ButtonGroup`/`ButtonGroupText`/`ButtonGroupSeparator`, `Checkbox`, `Input`, `Textarea`, `Label`, `RadioGroup`, `Select`, `Switch`, `Toggle`/`ToggleGroup`, `Tooltip`, `NavigationMenu`, `Progress`, `Separator`, `Spinner`, `Dialog`.
46
46
 
47
47
  Используются как есть, без правки исходников. Наши оверрайды — на уровне темы/атрибутов, не пропсов:
48
48
  - `[data-slot="button"]`/`[data-slot="input"]`/`[data-slot="select-trigger"]` — высота/радиус пересчитаны в `brand-overrides.css` (см. `DESIGN.md` → Components).
49
49
  - Если конкретному месту нужно другое поведение (например, `Select`, который умеет очищаться крестиком) — это уже не «просто shadcn Select», это новый Components-тир композит (см. `FilterSelect` ниже), а не проп на самом `Select`.
50
+ - **`ButtonGroup` — тут наш pill-оверрайд явно выключен.** `[data-slot="button"]` обычно всегда pill (`border-radius: 9999px`), но кнопка внутри `ButtonGroup` — исключение (`brand-overrides.css`, селектор с двумя `[data-slot]`): иначе pill-радиус на каждой кнопке перебивает `ButtonGroup`'ы собственные `rounded-l-none`/`rounded-r-none`, и сегментированный контрол просто не получается — так и было до этой правки (проверялось вживую при первой же попытке отрендерить компонент). Если понадобится третье радиус-исключение — паттерн такой же: два `[data-slot]` в селекторе побеждают одиночный независимо от порядка подключения файлов.
51
+ - **`Spinner`** — единственное намеренное исключение из правила «иконки только через `Icon`/`REGISTRY`»: это `Loader2Icon` из `lucide-react`, не Phosphor — фиксированный анимированный глиф, не элемент управляемого словаря.
52
+ - **`variant="outline"` у `Item` (и вообще любой shadcn `border-border`) рендерится без видимой границы** — `color.border` в этой системе прозрачен намеренно (то же правило, что у осей чартов, см. `BarChart` ниже). Нужна видимая обводка/подложка ряда — бери `variant="muted"`.
50
53
 
51
54
  `recharts` — реальная, объявленная зависимость этого пакета (не только внутренняя деталь реализации чартов ниже). Если для какой-то задачи не хватает ни одного из готовых чарт-компонентов — можно писать напрямую на `recharts`, но объявляй его явной зависимостью в своём `package.json`, не рассчитывай, что он долетит транзитивно через хойстинг node_modules (он долетает сегодня, но это случайность конкретного дерева зависимостей, не гарантия).
52
55
 
@@ -76,11 +79,15 @@ Primitives + Foundation, собранные в конкретную повтор
76
79
 
77
80
  ### shadcn/vendored, но на уровне Components (не Primitives)
78
81
 
79
- `Card`, `EmptyState` (`empty.tsx`), `Tabs`, `Alert`, `Menu` (`dropdown-menu.tsx`), `Pagination`, `Table`, `Notification` (`sonner.tsx`).
82
+ `Card`, `EmptyState` (`empty.tsx`), `Tabs`, `Alert`, `Menu` (`dropdown-menu.tsx`), `Pagination`, `Table`, `Notification` (`sonner.tsx`), `Item` (см. отдельную строку ниже).
80
83
 
81
84
  Это тоже стандартные shadcn-компоненты, но они — композиционные оболочки (слоты Header/Content/Footer, список пунктов и т.п.), а не атомарный контрол — поэтому классифицированы как Components, не Primitives. API — см. shadcn-документацию.
82
85
 
83
- **⚠️ Карточка-метрика (`Card` + `Text` + `LineChart`) не компонент.** Демонстрационный код в `src/stories/ChartAdvanced.stories.tsx` показывает такую композицию вручную — не экспортируется, есть только как образец, скопируй руками, если нужен такой паттерн.
86
+ | Компонент | Что делает | Когда брать / не брать |
87
+ |---|---|---|
88
+ | `Item` + `ItemGroup`/`ItemSeparator`/`ItemMedia`/`ItemContent`/`ItemTitle`/`ItemDescription`/`ItemActions`/`ItemHeader`/`ItemFooter` | Governed строка списка: иконка/медиа + заголовок + описание + trailing-действия. `variant("default"\|"outline"\|"muted")`, `size("default"\|"sm"\|"xs")`. | Любой список строк одной формы — диалоги ассистента, уведомления, activity feed. Не собирай flex-строку + свой `<hr>` вручную под этот же паттерн, `ItemGroup`/`ItemSeparator` уже это делают. `variant="outline"` — см. предупреждение про `color.border` выше. |
89
+
90
+ **⚠️ Карточка-метрика (`Card` + `Text` + `Sparkline`) — не компонент.** Демонстрационный код в `src/stories/MetricCard.stories.tsx` показывает такую композицию вручную — не экспортируется, есть только как образец, скопируй руками, если нужен такой паттерн. Живёт в `Components/MetricCard`, не в `Components/Chart/*` — по сути это карточка (Card-композиция), встроенный график — не главное в её категоризации, а один из ингредиентов.
84
91
 
85
92
  ⚠️ **Известный пробел:** `Notification` (`sonner.tsx`) использует `next-themes`, но `ThemeProvider` в приложении не смонтирован — тема тостов всегда резолвится в `"system"`. Не чинилось, низкий приоритет.
86
93