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 +21 -0
- package/README.md +164 -0
- package/dist/components/index.css +8194 -0
- package/dist/components/index.css.map +1 -0
- package/dist/components/index.d.ts +2679 -0
- package/dist/components/index.js +8186 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.css +9510 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8242 -0
- package/dist/index.js.map +1 -0
- package/package.json +94 -0
- package/src/styles/globals.css +91 -0
- package/src/styles/reset.css +35 -0
- package/src/styles/theme-dark.css +422 -0
- package/src/styles/theme-light.css +423 -0
- package/src/styles/tokens.css +248 -0
- package/src/styles/tokens.test.ts +27 -0
- package/src/styles/units.css +106 -0
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`.
|