prime-ui-kit 0.2.0

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 esurkov1
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,164 @@
1
+ # prime-ui-kit
2
+
3
+ **prime-ui-kit** — UI-кит для **React 19** с упором на предсказуемый рантайм, **CSS Modules** и **дизайн-токены** в виде обычных **CSS variables** (`--prime-sys-*`). Без Tailwind в обязательном стеке, без «монолита» Radix на каждый виджет: оверлеи, выпадающие списки, фокус и позиционирование опираются на **собственные хуки и разметку**, а тяжёлые peer-зависимости сведены к узкой зоне (даты и доступность календаря).
4
+
5
+ Репозиторий: [github.com/esurkov1/prime-ui](https://github.com/esurkov1/prime-ui). Пакет в npm: **`prime-ui-kit`**.
6
+
7
+ ---
8
+
9
+ ## Зачем такой подход
10
+
11
+ ### Почти без зависимостей (в смысле рантайма)
12
+
13
+ - **Сборка не вшивает peer-пакеты** в бандл библиотеки (`tsup` с `external` для React, React Aria, react-day-picker, date-fns) — в приложении одна версия, без дублирования.
14
+ - **Мало прямых зависимостей пакета:** иконки (`lucide-react`), анимации уведомлений (`framer-motion`), навигационные ссылки в сайдбаре (`react-router-dom`). Ядро форм, модалок, селектов, тултипов и т.д. не тянет десятки `@radix-ui/*`.
15
+ - **Нет Tailwind** как обязательного слоя: потребителю не нужно подключать utility-first CSS, чтобы кит выглядел согласованно — достаточно импортировать сгенерированные **токены и темы** плюс `styles.css`.
16
+
17
+ ### Подходит под разные «фреймворки» вокруг React
18
+
19
+ Компоненты написаны на **React** — это не Vue/Svelte-виджеты. Зато кит **не привязан** к Next.js, Remix или чистому Vite: это обычные ESM-модули и CSS, которые работают в любом React-приложении, где есть поддержка **CSS Modules** (как у большинства сборщиков). Отдельно: **слой токенов** — чистый CSS; его можно использовать для визуального согласования даже вне React (например, обвязка на другом стеке с теми же переменными), а композиция остаётся в React.
20
+
21
+ ### Предсказуемая архитектура
22
+
23
+ - **Дизайн-система из кода:** палитра, размеры контролов, семантика цветов и темы **генерируются** из TypeScript (`tokens/` → `bun run tokens:build` → `src/styles/*.css`). В компонентах — **`--prime-sys-*`**, а не разрозненные литералы.
24
+ - **Внутренний слой** (`src/internal/`): `cx`, контексты, Portal, **Slot** (аналог паттерна `asChild` без Radix), хуки вроде `useFocusTrap`, `useScrollLock`, `usePosition`.
25
+ - **Состояния и размеры** централизованы (`src/internal/states.ts` — например `componentSizes`: `s` | `m` | `l` | `xl`).
26
+ - **Сложные виджеты** — composable API: `Modal.Root`, `Select.Trigger`, `Input.Field`, … с типизированным контекстом.
27
+ - **Темы:** `data-theme="light" | "dark"` на корне или изолированном контейнере.
28
+
29
+ ---
30
+
31
+ ## Архитектура репозитория
32
+
33
+ ```text
34
+ tokens/primitives.ts
35
+ → tokens/semantic.ts
36
+ → tokens/themes/light.ts | dark.ts
37
+
38
+ scripts/build-tokens.ts
39
+
40
+ src/styles/tokens.css
41
+ src/styles/theme-light.css (AUTO-GENERATED)
42
+ src/styles/theme-dark.css
43
+
44
+ src/components/*/*.tsx + *.module.css — публичные компоненты
45
+ src/internal/* — инфраструктура кита
46
+ src/hooks/* — хуки (например поля форм)
47
+ src/icons/* — обвязка иконок
48
+ src/index.ts — публичный entry + globals.css
49
+
50
+ dist/ — ESM + типы после tsup
51
+ ```
52
+
53
+ **Публикация в npm** (`package.json` → `files`): `dist`, `src/styles`, `LICENSE`. Явные **`exports`**: основной entry, `prime-ui-kit/components`, отдельные пути к `styles.css`, `tokens.css`, `theme-light.css`, `theme-dark.css`.
54
+
55
+ ---
56
+
57
+ ## Что входит в кит (обзор возможностей)
58
+
59
+ Формы и ввод: **Input**, **Textarea**, **Checkbox**, **Radio**, **Switch**, **Select**, **Slider**, **DigitInput**, **FileUpload**, **ColorPicker**, **Hint**, **Label**, **Kbd**.
60
+
61
+ Оверлеи и навигация по слоям: **Modal**, **Drawer**, **Popover**, **Dropdown**, **Tooltip**, **CommandMenu**.
62
+
63
+ Компоновка и продукт: **PageShell**, **PageContent**, **Sidebar**, **Breadcrumb**, **Tabs**, **Accordion**, **Stepper** (горизонтальный/вертикальный), **SegmentedControl**, **Pagination**, **DataTable**.
64
+
65
+ Обратная связь и контент: **Button**, **ButtonGroup**, **LinkButton**, **Badge**, **Banner**, **Notification** (+ провайдер/store), **ProgressBar**, **ProgressCircle**, **Typography**, **Divider**, **Tag**, **Avatar**, **CodeBlock**, **Datepicker** (с пресетами и временем).
66
+
67
+ Дополнительно: **ControlSizeProvider** для согласованного размера контролов в поддереве, **ExampleFrame** (для доков/playground).
68
+
69
+ Полный список экспортов — `src/components/index.ts`. Живые примеры — `playground/` (`bun run playground:dev`).
70
+
71
+ ---
72
+
73
+ ## Зависимости: честная таблица
74
+
75
+ | Слой | Пакеты |
76
+ |------|--------|
77
+ | **Peer (обязательно в приложении)** | `react`, `react-dom`, `react-aria-components`, `react-day-picker`, `date-fns` |
78
+ | **Идёт с китом (dependencies)** | `lucide-react`, `framer-motion`, `react-router-dom` |
79
+
80
+ **React Aria** и **react-day-picker** подключены там, где нужна проверенная доступность и поведение календаря; остальная интерактивность реализована локально. **React Router** нужен для ссылок в **Sidebar**; без роутера можно не использовать эти части API или обернуть приложение в `Router`.
81
+
82
+ В исходниках **нет** `@radix-ui/*`; полиморфные триггеры — через внутренний **Slot** (`src/internal/slot.tsx`).
83
+
84
+ ---
85
+
86
+ ## Установка
87
+
88
+ ```bash
89
+ npm install prime-ui-kit
90
+ npm install react react-dom react-aria-components react-day-picker date-fns
91
+ ```
92
+
93
+ Версии peer — см. `package.json`.
94
+
95
+ ---
96
+
97
+ ## Подключение стилей
98
+
99
+ Рекомендуемый порядок в точке входа:
100
+
101
+ ```css
102
+ @import "prime-ui-kit/tokens.css";
103
+ @import "prime-ui-kit/theme-light.css";
104
+ /* или theme-dark.css / переключение через data-theme */
105
+ @import "prime-ui-kit/styles.css";
106
+ ```
107
+
108
+ ---
109
+
110
+ ## Импорт компонентов
111
+
112
+ ```tsx
113
+ import { Button, Input, Modal } from "prime-ui-kit";
114
+
115
+ import { DataTable } from "prime-ui-kit/components";
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Примеры API
121
+
122
+ ```tsx
123
+ <Input.Root size="m" label="Email" id="email">
124
+ <Input.Wrapper>
125
+ <Input.Field type="email" placeholder="name@company.com" />
126
+ </Input.Wrapper>
127
+ </Input.Root>
128
+
129
+ <Button variant="primary" mode="filled" size="l">
130
+ Отправить
131
+ </Button>
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Разработка и проверка
137
+
138
+ | Команда | Назначение |
139
+ |---------|------------|
140
+ | `bun run verify` | lint + типы + тесты + сборка |
141
+ | `bun run build` | токены + `tsup` |
142
+ | `bun run tokens:build` | пересборка CSS токенов |
143
+ | `bun run playground:dev` | Vite playground |
144
+ | `bun run test` | Vitest |
145
+ | `bun run check` / `check:fix` | Biome |
146
+
147
+ Контракт для контрибьюторов — **`RULES.md`**. Материалы для ассистентов и чеклисты — каталог **`prime-ui-skill/`** (в npm-пакет не входит).
148
+
149
+ ---
150
+
151
+ ## CI и публикация в npm
152
+
153
+ В GitHub Secrets нужен **`NPM_TOKEN`**.
154
+
155
+ - На push в `main` и в PR — проверка `bun run verify`.
156
+ - Релиз через **GitHub Release**: workflow собирает пакет и выполняет `npm publish`.
157
+
158
+ Перед релизом обновите **`version`** в `package.json` и создайте релиз с тегом вида `v0.2.0`, совпадающим с версией пакета.
159
+
160
+ ---
161
+
162
+ ## Лицензия
163
+
164
+ MIT — см. файл `LICENSE`.