@mednet/ui 0.0.0-stage → 1.0.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.
Files changed (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -2
  3. package/THIRD_PARTY_NOTICES.md +27 -0
  4. package/dist/brand/logo/logo-horizontal.d.ts +6 -0
  5. package/dist/brand/logo/logo-horizontal.js +7 -0
  6. package/dist/brand/logo/logo-mark.d.ts +6 -0
  7. package/dist/brand/logo/logo-mark.js +7 -0
  8. package/dist/brand/logo/logo-vertical.d.ts +6 -0
  9. package/dist/brand/logo/logo-vertical.js +7 -0
  10. package/dist/brand/logo.d.ts +18 -0
  11. package/dist/brand/logo.js +12 -0
  12. package/dist/brand/site-footer.d.ts +24 -0
  13. package/dist/brand/site-footer.js +15 -0
  14. package/dist/brand/site-header.d.ts +11 -0
  15. package/dist/brand/site-header.js +7 -0
  16. package/dist/components/accordion.d.ts +6 -0
  17. package/dist/components/accordion.js +17 -0
  18. package/dist/components/alert-dialog.d.ts +18 -0
  19. package/dist/components/alert-dialog.js +42 -0
  20. package/dist/components/alert.d.ts +10 -0
  21. package/dist/components/alert.js +27 -0
  22. package/dist/components/aspect-ratio.d.ts +4 -0
  23. package/dist/components/aspect-ratio.js +8 -0
  24. package/dist/components/attachment.d.ts +23 -0
  25. package/dist/components/attachment.js +68 -0
  26. package/dist/components/avatar.d.ts +11 -0
  27. package/dist/components/avatar.js +23 -0
  28. package/dist/components/badge.d.ts +7 -0
  29. package/dist/components/badge.js +33 -0
  30. package/dist/components/breadcrumb.d.ts +10 -0
  31. package/dist/components/breadcrumb.js +36 -0
  32. package/dist/components/bubble.d.ts +16 -0
  33. package/dist/components/bubble.js +59 -0
  34. package/dist/components/button-group.d.ts +10 -0
  35. package/dist/components/button-group.js +36 -0
  36. package/dist/components/button.d.ts +8 -0
  37. package/dist/components/button.js +34 -0
  38. package/dist/components/calendar.d.ts +10 -0
  39. package/dist/components/calendar.js +76 -0
  40. package/dist/components/card.d.ts +11 -0
  41. package/dist/components/card.js +24 -0
  42. package/dist/components/carousel.d.ts +28 -0
  43. package/dist/components/carousel.js +91 -0
  44. package/dist/components/chart.d.ts +44 -0
  45. package/dist/components/chart.js +132 -0
  46. package/dist/components/checkbox.d.ts +3 -0
  47. package/dist/components/checkbox.js +9 -0
  48. package/dist/components/collapsible.d.ts +5 -0
  49. package/dist/components/collapsible.js +13 -0
  50. package/dist/components/combobox.d.ts +24 -0
  51. package/dist/components/combobox.js +58 -0
  52. package/dist/components/command.d.ts +19 -0
  53. package/dist/components/command.js +35 -0
  54. package/dist/components/context-menu.d.ts +29 -0
  55. package/dist/components/context-menu.js +51 -0
  56. package/dist/components/dialog.d.ts +17 -0
  57. package/dist/components/dialog.js +37 -0
  58. package/dist/components/direction.d.ts +1 -0
  59. package/dist/components/direction.js +2 -0
  60. package/dist/components/drawer.d.ts +16 -0
  61. package/dist/components/drawer.js +75 -0
  62. package/dist/components/dropdown-menu.d.ts +29 -0
  63. package/dist/components/dropdown-menu.js +51 -0
  64. package/dist/components/empty.d.ts +11 -0
  65. package/dist/components/empty.js +33 -0
  66. package/dist/components/field.d.ts +24 -0
  67. package/dist/components/field.js +68 -0
  68. package/dist/components/hover-card.d.ts +5 -0
  69. package/dist/components/hover-card.js +14 -0
  70. package/dist/components/input-group.d.ts +18 -0
  71. package/dist/components/input-group.js +57 -0
  72. package/dist/components/input-otp.d.ts +11 -0
  73. package/dist/components/input-otp.js +21 -0
  74. package/dist/components/input.d.ts +3 -0
  75. package/dist/components/input.js +7 -0
  76. package/dist/components/item.d.ts +22 -0
  77. package/dist/components/item.js +78 -0
  78. package/dist/components/kbd.d.ts +3 -0
  79. package/dist/components/kbd.js +9 -0
  80. package/dist/components/label.d.ts +3 -0
  81. package/dist/components/label.js +7 -0
  82. package/dist/components/marker.d.ts +10 -0
  83. package/dist/components/marker.js +34 -0
  84. package/dist/components/menubar.d.ts +29 -0
  85. package/dist/components/menubar.js +56 -0
  86. package/dist/components/message-scroller.d.ts +10 -0
  87. package/dist/components/message-scroller.js +25 -0
  88. package/dist/components/message.d.ts +10 -0
  89. package/dist/components/message.js +21 -0
  90. package/dist/components/native-select.d.ts +8 -0
  91. package/dist/components/native-select.js +13 -0
  92. package/dist/components/navigation-menu.d.ts +11 -0
  93. package/dist/components/navigation-menu.js +31 -0
  94. package/dist/components/pagination.d.ts +17 -0
  95. package/dist/components/pagination.js +26 -0
  96. package/dist/components/popover.d.ts +9 -0
  97. package/dist/components/popover.js +23 -0
  98. package/dist/components/progress.d.ts +7 -0
  99. package/dist/components/progress.js +20 -0
  100. package/dist/components/questionnaire.d.ts +19 -0
  101. package/dist/components/questionnaire.js +52 -0
  102. package/dist/components/radio-group.d.ts +5 -0
  103. package/dist/components/radio-group.js +12 -0
  104. package/dist/components/resizable.d.ts +7 -0
  105. package/dist/components/resizable.js +14 -0
  106. package/dist/components/scroll-area.d.ts +5 -0
  107. package/dist/components/scroll-area.js +11 -0
  108. package/dist/components/select.d.ts +15 -0
  109. package/dist/components/select.js +34 -0
  110. package/dist/components/separator.d.ts +3 -0
  111. package/dist/components/separator.js +8 -0
  112. package/dist/components/sheet.d.ts +14 -0
  113. package/dist/components/sheet.js +37 -0
  114. package/dist/components/sidebar.d.ts +63 -0
  115. package/dist/components/sidebar.js +256 -0
  116. package/dist/components/skeleton.d.ts +2 -0
  117. package/dist/components/skeleton.js +6 -0
  118. package/dist/components/slider.d.ts +3 -0
  119. package/dist/components/slider.js +12 -0
  120. package/dist/components/spinner.d.ts +2 -0
  121. package/dist/components/spinner.js +7 -0
  122. package/dist/components/switch.d.ts +5 -0
  123. package/dist/components/switch.js +8 -0
  124. package/dist/components/table.d.ts +10 -0
  125. package/dist/components/table.js +28 -0
  126. package/dist/components/tabs.d.ts +10 -0
  127. package/dist/components/tabs.js +29 -0
  128. package/dist/components/textarea.d.ts +3 -0
  129. package/dist/components/textarea.js +6 -0
  130. package/dist/components/toast.d.ts +16 -0
  131. package/dist/components/toast.js +66 -0
  132. package/dist/components/toggle-group.d.ts +11 -0
  133. package/dist/components/toggle-group.js +24 -0
  134. package/dist/components/toggle.d.ts +8 -0
  135. package/dist/components/toggle.js +26 -0
  136. package/dist/components/tooltip.d.ts +6 -0
  137. package/dist/components/tooltip.js +17 -0
  138. package/dist/hooks/use-mobile.d.ts +1 -0
  139. package/dist/hooks/use-mobile.js +15 -0
  140. package/dist/index.d.ts +67 -0
  141. package/dist/index.js +69 -0
  142. package/dist/layouts/app-shell.d.ts +19 -0
  143. package/dist/layouts/app-shell.js +9 -0
  144. package/dist/layouts/public-layout.d.ts +14 -0
  145. package/dist/layouts/public-layout.js +8 -0
  146. package/dist/layouts/skip-link.d.ts +2 -0
  147. package/dist/layouts/skip-link.js +5 -0
  148. package/dist/lib/utils.d.ts +2 -0
  149. package/dist/lib/utils.js +7 -0
  150. package/llms.md +521 -0
  151. package/package.json +128 -3
  152. package/postcss.cjs +163 -0
  153. package/src/brand.css +69 -0
  154. package/src/shadcn-tailwind.css +638 -0
  155. package/src/styles.css +48 -0
package/llms.md ADDED
@@ -0,0 +1,521 @@
1
+ # @mednet/ui 1.0.0 — справка для AI-агентов
2
+
3
+ Справка по установленной версии `@mednet/ui` — React-компонентам дизайн-системы ЦНИИОИЗ. Читайте её перед тем, как писать интерфейс.
4
+
5
+ ## Правила
6
+
7
+ 1. **Стили — одна строка** в `app/globals.css`: `@import '@mednet/ui/styles.css';` (внутри Tailwind v4, тема бренда и классы компонентов). Montserrat (`@fontsource/montserrat`) подключается этой же строкой — отдельно ставить и импортировать шрифт не нужно.
8
+ 2. **Импорт — по подпутям:** `import { Button } from '@mednet/ui/button';`. Корневой `@mednet/ui` тоже работает, но тянет все модули.
9
+ 3. **Основа — Base UI, а не Radix.** Чтобы отрисовать часть компонента другим элементом, используйте проп `render`, **не** `asChild`:
10
+ ```tsx
11
+ <DialogTrigger render={<Button variant="outline" />}>Открыть</DialogTrigger>
12
+ <SidebarMenuButton render={<Link href="/settings" />}>Настройки</SidebarMenuButton>
13
+ ```
14
+ **Ссылка, которая выглядит как кнопка**, — это ссылка с классами кнопки, а не `Button` с `render={<a />}` (Base UI навязывает кнопке семантику кнопки):
15
+ ```tsx
16
+ import { buttonVariants } from '@mednet/ui/button';
17
+ <Link href="/reports" className={buttonVariants({ variant: 'outline' })}>Отчёты</Link>
18
+ ```
19
+ Примеры из интернета с `asChild` переписывайте на `render`. Не ставьте `@radix-ui/*`, `radix-ui`, `@base-ui/react` напрямую.
20
+ 4. **Цвета — только семантические классы:** `bg-primary`, `text-primary-foreground`, `bg-secondary`, `bg-muted`, `text-muted-foreground`, `border-border`, `border-input`, `bg-field` (заливка полей), `ring-ring`, `bg-destructive`, `text-destructive`, `bg-card`, `bg-popover`, `chart-1…chart-8`. Стандартная палитра Tailwind (`slate-100`, `zinc-500`…) удалена, а `red-500`, `blue-700` и другие шкалы — брендовые (из `@mednet/tokens`); hex, `rgb()`, `oklch()` и `bg-[#…]` запрещены линтером (`@mednet/lint-config`).
21
+ 5. **Типографика:** заголовки — `text-h1`…`text-h4` (класс задаёт размер, межстрочный и вес: h1 — bold, h2–h4 — semibold; на телефоне размеры меньше), вводный абзац — `text-lead`, остальное — `text-base`/`text-sm`/`text-xs`. Размеры экран/телефон, px: h1 48/32, h2 36/28, h3 28/24, h4 22/20, lead 18/17, base 16, sm 14, xs 13. Шрифт — Montserrat. Своих `text-[…px]` и `font-*` на заголовках не добавляйте.
22
+ 6. **Иконки — только `lucide-react`.**
23
+ 7. **Корневой layout** (обвязка Base UI):
24
+ ```tsx
25
+ <html lang="ru">
26
+ <body className="relative">
27
+ <div className="isolate">
28
+ <TooltipProvider>{children}</TooltipProvider>
29
+ </div>
30
+ <Toaster />
31
+ </body>
32
+ </html>
33
+ ```
34
+ `isolate` — порталы (диалоги, меню, подсказки, уведомления) всегда поверх страницы; `relative` — бэкдропы в Safari iOS 26+; `Toaster` (из `@mednet/ui/toast`) — один на приложение, вызов `toast.add({ title, description, type: 'success' })` из любого клиентского компонента. `TooltipProvider` (из `@mednet/ui/tooltip`) необязателен, он объединяет задержку подсказок.
35
+ 8. **Календарь — по-русски:** `<Calendar locale={ru} />`, `import { ru } from 'react-day-picker/locale';`.
36
+ 9. **Старые браузеры:** Chrome/Edge 109 (Windows 7/8.1) поддерживаются, если в `postcss.config.mjs` после `@tailwindcss/postcss` стоит `'@mednet/ui/postcss': {}`. Не работают там AI-компоненты `bubble` и эффект `shimmer` (относительные цвета, Chrome 119+) — не используйте их на публичных страницах.
37
+ 10. **Свои компоненты склеивают классы через `cn` из `@mednet/ui/utils`**, а не через clsx/tailwind-merge: обычный tailwind-merge не знает размеров шрифта бренда и роняет `text-h3` рядом с `text-foreground`.
38
+ 11. Компоненты кита не копируйте в проект и не правьте их стили `className`-ами с цветами: нужен другой вид — спросите у владельцев кита.
39
+ 12. **Графики:** `recharts` — peer-зависимость, установите его в проект (`npm i recharts`); компоненты графика импортируйте из `recharts`, обёртки — из `@mednet/ui/chart`.
40
+
41
+ ## Фирменные блоки и каркасы
42
+
43
+ Серверные компоненты: их можно рендерить в `page.tsx`/`layout.tsx` без `"use client"`.
44
+
45
+ #### `Logo`
46
+
47
+ `import { Logo } from '@mednet/ui/logo';`
48
+
49
+ | Проп | Тип | По умолчанию |
50
+ | ----------------- | ----------------------------------------------------------------------- | -------------- |
51
+ | `variant` | `'horizontal' \| 'vertical' \| 'mark'` | `'horizontal'` |
52
+ | `title` | `string` — доступное имя; без него логотип декоративный (`aria-hidden`) | — |
53
+ | `className` и др. | атрибуты `<svg>`; размер — классом высоты | — |
54
+
55
+ ```tsx
56
+ <a href="/" aria-label="ЦНИИОИЗ — на главную">
57
+ <Logo className="h-10 w-auto" />
58
+ </a>
59
+ <Logo variant="mark" title="ЦНИИОИЗ" className="size-12" />
60
+ ```
61
+
62
+ #### `SiteHeader`
63
+
64
+ `import { SiteHeader } from '@mednet/ui/site-header';` — логотип со ссылкой на главную, навигация, действия.
65
+
66
+ | Проп | Тип | По умолчанию |
67
+ | ---------- | --------------------------- | ------------ |
68
+ | `homeHref` | `string` | `'/'` |
69
+ | `nav` | `ReactNode` — ссылки | — |
70
+ | `actions` | `ReactNode` — кнопки справа | — |
71
+
72
+ ```tsx
73
+ <SiteHeader
74
+ nav={
75
+ <>
76
+ <Link href="/about">О проекте</Link>
77
+ <Link href="/reports">Отчёты</Link>
78
+ </>
79
+ }
80
+ actions={
81
+ <Link href="/login" className={buttonVariants({ size: 'sm' })}>
82
+ Войти
83
+ </Link>
84
+ }
85
+ />
86
+ ```
87
+
88
+ #### `SiteFooter`
89
+
90
+ `import { SiteFooter, CNIIOIZ } from '@mednet/ui/site-footer';` — реквизиты ЦНИИОИЗ по умолчанию (`CNIIOIZ`: `fullName`, `shortName`, `phone`, `email`).
91
+
92
+ | Проп | Тип | По умолчанию |
93
+ | ---------------- | ---------------------------------- | --------------------------------- |
94
+ | `orgName` | `string` | полное наименование ЦНИИОИЗ |
95
+ | `copyright` | `string` | `ФГБУ «ЦНИИОИЗ» Минздрава России` |
96
+ | `phone`, `email` | `string \| null` (`null` — скрыть) | телефон и почта ЦНИИОИЗ |
97
+ | `year` | `number` | текущий |
98
+ | `links` | `ReactNode` | — |
99
+
100
+ ```tsx
101
+ <SiteFooter links={<Link href="/privacy">Политика конфиденциальности</Link>} />
102
+ ```
103
+
104
+ #### `PublicLayout`
105
+
106
+ `import { PublicLayout } from '@mednet/ui/public-layout';` — лендинги и отчёты: ссылка «Перейти к содержанию», `SiteHeader`, `<main id="main">`, `SiteFooter`. Пропсы: `nav`, `actions`, `homeHref` (как у `SiteHeader`), `footer` (замена подвала), `children`.
107
+
108
+ ```tsx
109
+ // app/layout.tsx
110
+ export default function RootLayout({ children }: { children: ReactNode }) {
111
+ return (
112
+ <html lang="ru">
113
+ <body className="relative">
114
+ <div className="isolate">
115
+ <PublicLayout nav={<Link href="/about">О проекте</Link>}>{children}</PublicLayout>
116
+ </div>
117
+ <Toaster />
118
+ </body>
119
+ </html>
120
+ );
121
+ }
122
+ ```
123
+
124
+ #### `AppShell`
125
+
126
+ `import { AppShell } from '@mednet/ui/app-shell';` — инструменты, кабинеты, дашборды: боковая панель (shadcn Sidebar, сворачивается до иконок, Ctrl/⌘+B), верхняя панель, содержимое.
127
+
128
+ | Проп | Тип | По умолчанию |
129
+ | ------------- | --------------------------------------------------------------------------- | ------------ |
130
+ | `nav` | `ReactNode` — `SidebarGroup`/`SidebarMenu` из `@mednet/ui/sidebar` | обязателен |
131
+ | `title` | `ReactNode` — заголовок в верхней панели | — |
132
+ | `actions` | `ReactNode` — правая часть верхней панели | — |
133
+ | `homeHref` | `string` | `'/'` |
134
+ | `defaultOpen` | `boolean` — из cookie `sidebar_state`; при `output: 'export'` не передавать | `true` |
135
+
136
+ ```tsx
137
+ // app/(app)/layout.tsx
138
+ import { LayoutDashboard } from 'lucide-react';
139
+ import { cookies } from 'next/headers';
140
+ import Link from 'next/link';
141
+ import type { ReactNode } from 'react';
142
+ import { AppShell } from '@mednet/ui/app-shell';
143
+ import { SidebarGroup, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@mednet/ui/sidebar';
144
+
145
+ export default async function AppLayout({ children }: { children: ReactNode }) {
146
+ const defaultOpen = (await cookies()).get('sidebar_state')?.value !== 'false';
147
+ return (
148
+ <AppShell
149
+ defaultOpen={defaultOpen}
150
+ title="Мониторинг"
151
+ nav={
152
+ <SidebarGroup>
153
+ <SidebarMenu>
154
+ <SidebarMenuItem>
155
+ <SidebarMenuButton render={<Link href="/dashboard" />} tooltip="Дашборд">
156
+ <LayoutDashboard />
157
+ <span>Дашборд</span>
158
+ </SidebarMenuButton>
159
+ </SidebarMenuItem>
160
+ </SidebarMenu>
161
+ </SidebarGroup>
162
+ }
163
+ >
164
+ {children}
165
+ </AppShell>
166
+ );
167
+ }
168
+ ```
169
+
170
+ ## Модули фирменных блоков
171
+
172
+ ### `@mednet/ui/logo`
173
+
174
+ - компоненты: `Logo`, `LogoHorizontal`, `LogoMark`, `LogoVertical`
175
+ - типы: `LogoProps`
176
+
177
+ ### `@mednet/ui/site-header`
178
+
179
+ - компоненты: `SiteHeader`
180
+ - типы: `SiteHeaderProps`
181
+
182
+ ### `@mednet/ui/site-footer`
183
+
184
+ - компоненты: `SiteFooter`
185
+ - типы: `SiteFooterProps`
186
+ - прочее: `CNIIOIZ`
187
+
188
+ ### `@mednet/ui/public-layout`
189
+
190
+ - компоненты: `PublicLayout`
191
+ - типы: `PublicLayoutProps`
192
+
193
+ ### `@mednet/ui/app-shell`
194
+
195
+ - компоненты: `AppShell`
196
+ - типы: `AppShellProps`
197
+
198
+ ## Компоненты shadcn/ui (Base UI, стиль Maia)
199
+
200
+ API и примеры — как в документации shadcn/ui для Base UI (ссылка у каждого модуля). Отличия кита: цвета из токенов бренда, подписи для экранного диктора по-русски.
201
+
202
+ ### `@mednet/ui/accordion`
203
+
204
+ - компоненты: `Accordion`, `AccordionContent`, `AccordionItem`, `AccordionTrigger`
205
+ - документация: https://ui.shadcn.com/docs/components/base/accordion
206
+
207
+ ### `@mednet/ui/alert`
208
+
209
+ - компоненты: `Alert`, `AlertAction`, `AlertDescription`, `AlertTitle`
210
+ - документация: https://ui.shadcn.com/docs/components/base/alert
211
+
212
+ ### `@mednet/ui/alert-dialog`
213
+
214
+ - компоненты: `AlertDialog`, `AlertDialogAction`, `AlertDialogCancel`, `AlertDialogContent`, `AlertDialogDescription`, `AlertDialogFooter`, `AlertDialogHeader`, `AlertDialogMedia`, `AlertDialogOverlay`, `AlertDialogPortal`, `AlertDialogTitle`, `AlertDialogTrigger`
215
+ - документация: https://ui.shadcn.com/docs/components/base/alert-dialog
216
+
217
+ ### `@mednet/ui/aspect-ratio`
218
+
219
+ - компоненты: `AspectRatio`
220
+ - документация: https://ui.shadcn.com/docs/components/base/aspect-ratio
221
+
222
+ ### `@mednet/ui/attachment`
223
+
224
+ - компоненты: `Attachment`, `AttachmentAction`, `AttachmentActions`, `AttachmentContent`, `AttachmentDescription`, `AttachmentGroup`, `AttachmentMedia`, `AttachmentTitle`, `AttachmentTrigger`
225
+ - документация: https://ui.shadcn.com/docs/components/base/attachment
226
+
227
+ ### `@mednet/ui/avatar`
228
+
229
+ - компоненты: `Avatar`, `AvatarBadge`, `AvatarFallback`, `AvatarGroup`, `AvatarGroupCount`, `AvatarImage`
230
+ - документация: https://ui.shadcn.com/docs/components/base/avatar
231
+
232
+ ### `@mednet/ui/badge`
233
+
234
+ - компоненты: `Badge`
235
+ - прочее: `badgeVariants`
236
+ - документация: https://ui.shadcn.com/docs/components/base/badge
237
+
238
+ ### `@mednet/ui/breadcrumb`
239
+
240
+ - компоненты: `Breadcrumb`, `BreadcrumbEllipsis`, `BreadcrumbItem`, `BreadcrumbLink`, `BreadcrumbList`, `BreadcrumbPage`, `BreadcrumbSeparator`
241
+ - документация: https://ui.shadcn.com/docs/components/base/breadcrumb
242
+
243
+ ### `@mednet/ui/bubble`
244
+
245
+ - компоненты: `Bubble`, `BubbleContent`, `BubbleGroup`, `BubbleReactions`
246
+ - документация: https://ui.shadcn.com/docs/components/base/bubble
247
+
248
+ ### `@mednet/ui/button`
249
+
250
+ - компоненты: `Button`
251
+ - прочее: `buttonVariants`
252
+ - документация: https://ui.shadcn.com/docs/components/base/button
253
+
254
+ ### `@mednet/ui/button-group`
255
+
256
+ - компоненты: `ButtonGroup`, `ButtonGroupSeparator`, `ButtonGroupText`
257
+ - прочее: `buttonGroupVariants`
258
+ - документация: https://ui.shadcn.com/docs/components/base/button-group
259
+
260
+ ### `@mednet/ui/calendar`
261
+
262
+ - компоненты: `Calendar`, `CalendarDayButton`
263
+ - документация: https://ui.shadcn.com/docs/components/base/calendar
264
+
265
+ ### `@mednet/ui/card`
266
+
267
+ - компоненты: `Card`, `CardAction`, `CardContent`, `CardDescription`, `CardFooter`, `CardHeader`, `CardTitle`
268
+ - документация: https://ui.shadcn.com/docs/components/base/card
269
+
270
+ ### `@mednet/ui/carousel`
271
+
272
+ - компоненты: `Carousel`, `CarouselContent`, `CarouselItem`, `CarouselNext`, `CarouselPrevious`
273
+ - хуки: `useCarousel`
274
+ - типы: `CarouselApi`
275
+ - документация: https://ui.shadcn.com/docs/components/base/carousel
276
+
277
+ ### `@mednet/ui/chart`
278
+
279
+ - компоненты: `ChartContainer`, `ChartLegend`, `ChartLegendContent`, `ChartStyle`, `ChartTooltip`, `ChartTooltipContent`
280
+ - типы: `ChartConfig`
281
+ - документация: https://ui.shadcn.com/docs/components/base/chart
282
+
283
+ ### `@mednet/ui/checkbox`
284
+
285
+ - компоненты: `Checkbox`
286
+ - документация: https://ui.shadcn.com/docs/components/base/checkbox
287
+
288
+ ### `@mednet/ui/collapsible`
289
+
290
+ - компоненты: `Collapsible`, `CollapsibleContent`, `CollapsibleTrigger`
291
+ - документация: https://ui.shadcn.com/docs/components/base/collapsible
292
+
293
+ ### `@mednet/ui/combobox`
294
+
295
+ - компоненты: `Combobox`, `ComboboxChip`, `ComboboxChips`, `ComboboxChipsInput`, `ComboboxCollection`, `ComboboxContent`, `ComboboxEmpty`, `ComboboxGroup`, `ComboboxInput`, `ComboboxItem`, `ComboboxLabel`, `ComboboxList`, `ComboboxSeparator`, `ComboboxTrigger`, `ComboboxValue`
296
+ - хуки: `useComboboxAnchor`
297
+ - документация: https://ui.shadcn.com/docs/components/base/combobox
298
+
299
+ ### `@mednet/ui/command`
300
+
301
+ - компоненты: `Command`, `CommandDialog`, `CommandEmpty`, `CommandGroup`, `CommandInput`, `CommandItem`, `CommandList`, `CommandSeparator`, `CommandShortcut`
302
+ - документация: https://ui.shadcn.com/docs/components/base/command
303
+
304
+ ### `@mednet/ui/context-menu`
305
+
306
+ - компоненты: `ContextMenu`, `ContextMenuCheckboxItem`, `ContextMenuContent`, `ContextMenuGroup`, `ContextMenuItem`, `ContextMenuLabel`, `ContextMenuPortal`, `ContextMenuRadioGroup`, `ContextMenuRadioItem`, `ContextMenuSeparator`, `ContextMenuShortcut`, `ContextMenuSub`, `ContextMenuSubContent`, `ContextMenuSubTrigger`, `ContextMenuTrigger`
307
+ - документация: https://ui.shadcn.com/docs/components/base/context-menu
308
+
309
+ ### `@mednet/ui/dialog`
310
+
311
+ - компоненты: `Dialog`, `DialogClose`, `DialogContent`, `DialogDescription`, `DialogFooter`, `DialogHeader`, `DialogOverlay`, `DialogPortal`, `DialogTitle`, `DialogTrigger`
312
+ - документация: https://ui.shadcn.com/docs/components/base/dialog
313
+
314
+ ### `@mednet/ui/direction`
315
+
316
+ - компоненты: `DirectionProvider`
317
+ - хуки: `useDirection`
318
+ - документация: https://ui.shadcn.com/docs/components/base/direction
319
+
320
+ ### `@mednet/ui/drawer`
321
+
322
+ - компоненты: `Drawer`, `DrawerClose`, `DrawerContent`, `DrawerDescription`, `DrawerFooter`, `DrawerHeader`, `DrawerOverlay`, `DrawerPortal`, `DrawerSwipeHandle`, `DrawerTitle`, `DrawerTrigger`
323
+ - документация: https://ui.shadcn.com/docs/components/base/drawer
324
+
325
+ ### `@mednet/ui/dropdown-menu`
326
+
327
+ - компоненты: `DropdownMenu`, `DropdownMenuCheckboxItem`, `DropdownMenuContent`, `DropdownMenuGroup`, `DropdownMenuItem`, `DropdownMenuLabel`, `DropdownMenuPortal`, `DropdownMenuRadioGroup`, `DropdownMenuRadioItem`, `DropdownMenuSeparator`, `DropdownMenuShortcut`, `DropdownMenuSub`, `DropdownMenuSubContent`, `DropdownMenuSubTrigger`, `DropdownMenuTrigger`
328
+ - документация: https://ui.shadcn.com/docs/components/base/dropdown-menu
329
+
330
+ ### `@mednet/ui/empty`
331
+
332
+ - компоненты: `Empty`, `EmptyContent`, `EmptyDescription`, `EmptyHeader`, `EmptyMedia`, `EmptyTitle`
333
+ - документация: https://ui.shadcn.com/docs/components/base/empty
334
+
335
+ ### `@mednet/ui/field`
336
+
337
+ - компоненты: `Field`, `FieldContent`, `FieldDescription`, `FieldError`, `FieldGroup`, `FieldLabel`, `FieldLegend`, `FieldSeparator`, `FieldSet`, `FieldTitle`
338
+ - документация: https://ui.shadcn.com/docs/components/base/field
339
+
340
+ ### `@mednet/ui/hover-card`
341
+
342
+ - компоненты: `HoverCard`, `HoverCardContent`, `HoverCardTrigger`
343
+ - документация: https://ui.shadcn.com/docs/components/base/hover-card
344
+
345
+ ### `@mednet/ui/input`
346
+
347
+ - компоненты: `Input`
348
+ - документация: https://ui.shadcn.com/docs/components/base/input
349
+
350
+ ### `@mednet/ui/input-group`
351
+
352
+ - компоненты: `InputGroup`, `InputGroupAddon`, `InputGroupButton`, `InputGroupInput`, `InputGroupText`, `InputGroupTextarea`
353
+ - документация: https://ui.shadcn.com/docs/components/base/input-group
354
+
355
+ ### `@mednet/ui/input-otp`
356
+
357
+ - компоненты: `InputOTP`, `InputOTPGroup`, `InputOTPSeparator`, `InputOTPSlot`
358
+ - документация: https://ui.shadcn.com/docs/components/base/input-otp
359
+
360
+ ### `@mednet/ui/item`
361
+
362
+ - компоненты: `Item`, `ItemActions`, `ItemContent`, `ItemDescription`, `ItemFooter`, `ItemGroup`, `ItemHeader`, `ItemMedia`, `ItemSeparator`, `ItemTitle`
363
+ - документация: https://ui.shadcn.com/docs/components/base/item
364
+
365
+ ### `@mednet/ui/kbd`
366
+
367
+ - компоненты: `Kbd`, `KbdGroup`
368
+ - документация: https://ui.shadcn.com/docs/components/base/kbd
369
+
370
+ ### `@mednet/ui/label`
371
+
372
+ - компоненты: `Label`
373
+ - документация: https://ui.shadcn.com/docs/components/base/label
374
+
375
+ ### `@mednet/ui/marker`
376
+
377
+ - компоненты: `Marker`, `MarkerContent`, `MarkerIcon`
378
+ - прочее: `markerVariants`
379
+ - документация: https://ui.shadcn.com/docs/components/base/marker
380
+
381
+ ### `@mednet/ui/menubar`
382
+
383
+ - компоненты: `Menubar`, `MenubarCheckboxItem`, `MenubarContent`, `MenubarGroup`, `MenubarItem`, `MenubarLabel`, `MenubarMenu`, `MenubarPortal`, `MenubarRadioGroup`, `MenubarRadioItem`, `MenubarSeparator`, `MenubarShortcut`, `MenubarSub`, `MenubarSubContent`, `MenubarSubTrigger`, `MenubarTrigger`
384
+ - документация: https://ui.shadcn.com/docs/components/base/menubar
385
+
386
+ ### `@mednet/ui/message`
387
+
388
+ - компоненты: `Message`, `MessageAvatar`, `MessageContent`, `MessageFooter`, `MessageGroup`, `MessageHeader`
389
+ - документация: https://ui.shadcn.com/docs/components/base/message
390
+
391
+ ### `@mednet/ui/message-scroller`
392
+
393
+ - компоненты: `MessageScroller`, `MessageScrollerButton`, `MessageScrollerContent`, `MessageScrollerItem`, `MessageScrollerProvider`, `MessageScrollerViewport`
394
+ - хуки: `useMessageScroller`, `useMessageScrollerScrollable`, `useMessageScrollerVisibility`
395
+ - документация: https://ui.shadcn.com/docs/components/base/message-scroller
396
+
397
+ ### `@mednet/ui/native-select`
398
+
399
+ - компоненты: `NativeSelect`, `NativeSelectOptGroup`, `NativeSelectOption`
400
+ - документация: https://ui.shadcn.com/docs/components/base/native-select
401
+
402
+ ### `@mednet/ui/navigation-menu`
403
+
404
+ - компоненты: `NavigationMenu`, `NavigationMenuContent`, `NavigationMenuIndicator`, `NavigationMenuItem`, `NavigationMenuLink`, `NavigationMenuList`, `NavigationMenuPositioner`, `NavigationMenuTrigger`
405
+ - прочее: `navigationMenuTriggerStyle`
406
+ - документация: https://ui.shadcn.com/docs/components/base/navigation-menu
407
+
408
+ ### `@mednet/ui/pagination`
409
+
410
+ - компоненты: `Pagination`, `PaginationContent`, `PaginationEllipsis`, `PaginationItem`, `PaginationLink`, `PaginationNext`, `PaginationPrevious`
411
+ - документация: https://ui.shadcn.com/docs/components/base/pagination
412
+
413
+ ### `@mednet/ui/popover`
414
+
415
+ - компоненты: `Popover`, `PopoverContent`, `PopoverDescription`, `PopoverHeader`, `PopoverTitle`, `PopoverTrigger`
416
+ - документация: https://ui.shadcn.com/docs/components/base/popover
417
+
418
+ ### `@mednet/ui/progress`
419
+
420
+ - компоненты: `Progress`, `ProgressIndicator`, `ProgressLabel`, `ProgressTrack`, `ProgressValue`
421
+ - документация: https://ui.shadcn.com/docs/components/base/progress
422
+
423
+ ### `@mednet/ui/questionnaire`
424
+
425
+ - компоненты: `Questionnaire`, `QuestionnaireActions`, `QuestionnaireChoice`, `QuestionnaireChoiceDescription`, `QuestionnaireChoices`, `QuestionnaireDescription`, `QuestionnaireError`, `QuestionnaireInput`, `QuestionnaireItem`, `QuestionnaireNext`, `QuestionnairePrevious`, `QuestionnaireProgress`, `QuestionnaireSkip`, `QuestionnaireSubmit`, `QuestionnaireTitle`
426
+ - документация: https://ui.shadcn.com/docs/components/base/questionnaire
427
+
428
+ ### `@mednet/ui/radio-group`
429
+
430
+ - компоненты: `RadioGroup`, `RadioGroupItem`
431
+ - документация: https://ui.shadcn.com/docs/components/base/radio-group
432
+
433
+ ### `@mednet/ui/resizable`
434
+
435
+ - компоненты: `ResizableHandle`, `ResizablePanel`, `ResizablePanelGroup`
436
+ - документация: https://ui.shadcn.com/docs/components/base/resizable
437
+
438
+ ### `@mednet/ui/scroll-area`
439
+
440
+ - компоненты: `ScrollArea`, `ScrollBar`
441
+ - документация: https://ui.shadcn.com/docs/components/base/scroll-area
442
+
443
+ ### `@mednet/ui/select`
444
+
445
+ - компоненты: `Select`, `SelectContent`, `SelectGroup`, `SelectItem`, `SelectLabel`, `SelectScrollDownButton`, `SelectScrollUpButton`, `SelectSeparator`, `SelectTrigger`, `SelectValue`
446
+ - документация: https://ui.shadcn.com/docs/components/base/select
447
+
448
+ ### `@mednet/ui/separator`
449
+
450
+ - компоненты: `Separator`
451
+ - документация: https://ui.shadcn.com/docs/components/base/separator
452
+
453
+ ### `@mednet/ui/sheet`
454
+
455
+ - компоненты: `Sheet`, `SheetClose`, `SheetContent`, `SheetDescription`, `SheetFooter`, `SheetHeader`, `SheetTitle`, `SheetTrigger`
456
+ - документация: https://ui.shadcn.com/docs/components/base/sheet
457
+
458
+ ### `@mednet/ui/sidebar`
459
+
460
+ - компоненты: `Sidebar`, `SidebarContent`, `SidebarFooter`, `SidebarGroup`, `SidebarGroupAction`, `SidebarGroupContent`, `SidebarGroupLabel`, `SidebarHeader`, `SidebarInput`, `SidebarInset`, `SidebarMenu`, `SidebarMenuAction`, `SidebarMenuBadge`, `SidebarMenuButton`, `SidebarMenuItem`, `SidebarMenuSkeleton`, `SidebarMenuSub`, `SidebarMenuSubButton`, `SidebarMenuSubItem`, `SidebarProvider`, `SidebarRail`, `SidebarSeparator`, `SidebarTrigger`
461
+ - хуки: `useSidebar`
462
+ - документация: https://ui.shadcn.com/docs/components/base/sidebar
463
+
464
+ ### `@mednet/ui/skeleton`
465
+
466
+ - компоненты: `Skeleton`
467
+ - документация: https://ui.shadcn.com/docs/components/base/skeleton
468
+
469
+ ### `@mednet/ui/slider`
470
+
471
+ - компоненты: `Slider`
472
+ - документация: https://ui.shadcn.com/docs/components/base/slider
473
+
474
+ ### `@mednet/ui/spinner`
475
+
476
+ - компоненты: `Spinner`
477
+ - документация: https://ui.shadcn.com/docs/components/base/spinner
478
+
479
+ ### `@mednet/ui/switch`
480
+
481
+ - компоненты: `Switch`
482
+ - документация: https://ui.shadcn.com/docs/components/base/switch
483
+
484
+ ### `@mednet/ui/table`
485
+
486
+ - компоненты: `Table`, `TableBody`, `TableCaption`, `TableCell`, `TableFooter`, `TableHead`, `TableHeader`, `TableRow`
487
+ - документация: https://ui.shadcn.com/docs/components/base/table
488
+
489
+ ### `@mednet/ui/tabs`
490
+
491
+ - компоненты: `Tabs`, `TabsContent`, `TabsList`, `TabsTrigger`
492
+ - прочее: `tabsListVariants`
493
+ - документация: https://ui.shadcn.com/docs/components/base/tabs
494
+
495
+ ### `@mednet/ui/textarea`
496
+
497
+ - компоненты: `Textarea`
498
+ - документация: https://ui.shadcn.com/docs/components/base/textarea
499
+
500
+ ### `@mednet/ui/toast`
501
+
502
+ - компоненты: `Toast`, `ToastAction`, `ToastClose`, `ToastContent`, `ToastDescription`, `ToastPortal`, `ToastProvider`, `ToastTitle`, `ToastViewport`, `Toaster`
503
+ - хуки: `useToastManager`
504
+ - прочее: `createToastManager`, `toast`
505
+ - документация: https://ui.shadcn.com/docs/components/base/toast
506
+
507
+ ### `@mednet/ui/toggle`
508
+
509
+ - компоненты: `Toggle`
510
+ - прочее: `toggleVariants`
511
+ - документация: https://ui.shadcn.com/docs/components/base/toggle
512
+
513
+ ### `@mednet/ui/toggle-group`
514
+
515
+ - компоненты: `ToggleGroup`, `ToggleGroupItem`
516
+ - документация: https://ui.shadcn.com/docs/components/base/toggle-group
517
+
518
+ ### `@mednet/ui/tooltip`
519
+
520
+ - компоненты: `Tooltip`, `TooltipContent`, `TooltipProvider`, `TooltipTrigger`
521
+ - документация: https://ui.shadcn.com/docs/components/base/tooltip
package/package.json CHANGED
@@ -1,6 +1,131 @@
1
1
  {
2
2
  "name": "@mednet/ui",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.0.0",
4
+ "description": "React-компоненты ЦНИИОИЗ: shadcn/ui (Base UI, стиль Maia) в теме бренда, логотип, шапка, подвал, каркасы страниц",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/hpnssflw/mednet-kit.git",
10
+ "directory": "packages/ui"
11
+ },
12
+ "sideEffects": [
13
+ "**/*.css"
14
+ ],
15
+ "files": [
16
+ "dist",
17
+ "llms.md",
18
+ "postcss.cjs",
19
+ "src/styles.css",
20
+ "src/brand.css",
21
+ "src/shadcn-tailwind.css",
22
+ "README.md",
23
+ "THIRD_PARTY_NOTICES.md"
24
+ ],
25
+ "imports": {
26
+ "#components/*": {
27
+ "mednet-source": "./src/components/*.tsx",
28
+ "default": "./dist/components/*.js"
29
+ },
30
+ "#hooks/*": {
31
+ "mednet-source": "./src/hooks/*.ts",
32
+ "default": "./dist/hooks/*.js"
33
+ },
34
+ "#lib/*": {
35
+ "mednet-source": "./src/lib/*.ts",
36
+ "default": "./dist/lib/*.js"
37
+ }
38
+ },
39
+ "exports": {
40
+ ".": {
41
+ "types": "./dist/index.d.ts",
42
+ "default": "./dist/index.js"
43
+ },
44
+ "./styles.css": "./src/styles.css",
45
+ "./llms.md": "./llms.md",
46
+ "./postcss": "./postcss.cjs",
47
+ "./utils": {
48
+ "types": "./dist/lib/utils.d.ts",
49
+ "default": "./dist/lib/utils.js"
50
+ },
51
+ "./logo": {
52
+ "types": "./dist/brand/logo.d.ts",
53
+ "default": "./dist/brand/logo.js"
54
+ },
55
+ "./site-header": {
56
+ "types": "./dist/brand/site-header.d.ts",
57
+ "default": "./dist/brand/site-header.js"
58
+ },
59
+ "./site-footer": {
60
+ "types": "./dist/brand/site-footer.d.ts",
61
+ "default": "./dist/brand/site-footer.js"
62
+ },
63
+ "./public-layout": {
64
+ "types": "./dist/layouts/public-layout.d.ts",
65
+ "default": "./dist/layouts/public-layout.js"
66
+ },
67
+ "./app-shell": {
68
+ "types": "./dist/layouts/app-shell.d.ts",
69
+ "default": "./dist/layouts/app-shell.js"
70
+ },
71
+ "./*": {
72
+ "types": "./dist/components/*.d.ts",
73
+ "default": "./dist/components/*.js"
74
+ },
75
+ "./package.json": "./package.json"
76
+ },
77
+ "publishConfig": {
78
+ "access": "public"
79
+ },
80
+ "peerDependencies": {
81
+ "react": "^19.2.0",
82
+ "react-dom": "^19.2.0",
83
+ "recharts": "^3.8.0",
84
+ "tailwindcss": "^4.3.0"
85
+ },
86
+ "dependencies": {
87
+ "@base-ui/react": "^1.9.0",
88
+ "@fontsource/montserrat": "^5.3.0",
89
+ "@shadcn/react": "^0.3.1",
90
+ "class-variance-authority": "^0.7.1",
91
+ "cmdk": "^1.1.1",
92
+ "cn": "^0.4.0",
93
+ "date-fns": "^4.4.0",
94
+ "embla-carousel-react": "^8.6.0",
95
+ "input-otp": "^1.5.0",
96
+ "lightningcss": "^1.33.0",
97
+ "lucide-react": "^1.57.0",
98
+ "react-day-picker": "^10.0.2",
99
+ "react-resizable-panels": "^4.14.5",
100
+ "tw-animate-css": "^1.4.0",
101
+ "@mednet/tokens": "1.0.0"
102
+ },
103
+ "devDependencies": {
104
+ "@tailwindcss/node": "^4.3.3",
105
+ "@testing-library/jest-dom": "7.0.1",
106
+ "@testing-library/react": "16.3.3",
107
+ "@testing-library/user-event": "^14.6.1",
108
+ "@types/node": "^24",
109
+ "@types/react": "^19.3.0",
110
+ "@types/react-dom": "^19.3.0",
111
+ "jsdom": "30.1.2",
112
+ "postcss": "^8.5.30",
113
+ "react": "^19.3.0",
114
+ "react-dom": "^19.3.0",
115
+ "recharts": "3.8.0",
116
+ "shadcn": "4.21.4",
117
+ "svgo": "4.1.0",
118
+ "tailwindcss": "^4.3.3",
119
+ "typescript": "~6.0.3",
120
+ "vitest": "^5.0.4"
121
+ },
122
+ "scripts": {
123
+ "build": "node scripts/clean.mjs && tsc -p tsconfig.build.json && node scripts/build-llms.mjs",
124
+ "logos": "node scripts/gen-logos.mjs",
125
+ "gen:index": "node scripts/gen-index.mjs",
126
+ "generate": "shadcn add --all -y --overwrite && node scripts/postgen.mjs",
127
+ "typecheck": "tsc -p tsconfig.json --noEmit",
128
+ "test": "vitest run",
129
+ "vendor-css": "node scripts/vendor-shadcn-css.mjs"
130
+ }
6
131
  }