prime-ui-kit 0.5.1 → 0.6.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/README.md +11 -2
- package/dist/components/index.css +24 -9
- package/dist/components/index.css.map +3 -3
- package/dist/components/index.js +3 -19
- package/dist/components/index.js.map +3 -3
- package/dist/index.css +24 -9
- package/dist/index.css.map +3 -3
- package/dist/index.js +3 -19
- package/dist/index.js.map +3 -3
- package/dist/layout/app-shell/AppShell.d.ts +0 -8
- package/dist/layout/app-shell/AppShell.d.ts.map +1 -1
- package/dist/layout/index.d.ts +1 -1
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/sidebar/examples/01-app-shell-nav.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/page-content/COMPONENT.md +9 -5
- package/src/layout/app-shell/COMPONENT.md +77 -27
- package/src/layout/sidebar/COMPONENT.md +1 -1
- package/src/layout/sidebar/examples/01-app-shell-nav.tsx +11 -13
- package/src/layout/sidebar/examples/examples.module.css +0 -10
|
@@ -16,10 +16,6 @@ export type AppShellMainProps = {
|
|
|
16
16
|
className?: string;
|
|
17
17
|
children?: React.ReactNode;
|
|
18
18
|
} & React.HTMLAttributes<HTMLElement>;
|
|
19
|
-
export type AppShellMainInsetProps = {
|
|
20
|
-
className?: string;
|
|
21
|
-
children?: React.ReactNode;
|
|
22
|
-
} & React.HTMLAttributes<HTMLDivElement>;
|
|
23
19
|
export type AppShellTemplateProps = {
|
|
24
20
|
fillViewport?: boolean;
|
|
25
21
|
className?: string;
|
|
@@ -40,10 +36,6 @@ export declare const AppShell: {
|
|
|
40
36
|
className?: string;
|
|
41
37
|
children?: React.ReactNode;
|
|
42
38
|
} & React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
|
|
43
|
-
MainInset: React.ForwardRefExoticComponent<{
|
|
44
|
-
className?: string;
|
|
45
|
-
children?: React.ReactNode;
|
|
46
|
-
} & React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
47
39
|
Template: React.ForwardRefExoticComponent<{
|
|
48
40
|
fillViewport?: boolean;
|
|
49
41
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../../src/layout/app-shell/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAmBzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEzC,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,2CAMtE;kBANQ,WAAW;;;AASpB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../../src/layout/app-shell/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAmBzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEzC,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,2CAMtE;kBANQ,WAAW;;;AASpB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAoCtC,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;CACjD,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;AA6BnE,eAAO,MAAM,QAAQ;;uBAhHJ,OAAO;oBACV,MAAM;mBACP,KAAK,CAAC,SAAS;;;;oBAmCd,MAAM;mBACP,KAAK,CAAC,SAAS;;;uBAsCX,OAAO;oBACV,MAAM;QAClB,2CAA2C;aACtC,KAAK,CAAC,SAAS;mBACT,KAAK,CAAC,SAAS;mBACf,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;oBACjC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC;;CAmChD,CAAC"}
|
package/dist/layout/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { AppShellMainProps, AppShellNavProps, AppShellRootProps, AppShellTemplateProps, } from "./app-shell/AppShell";
|
|
2
2
|
export { AppShell } from "./app-shell/AppShell";
|
|
3
3
|
export type { SidebarContentProps, SidebarFooterProps, SidebarGroupLabelProps, SidebarGroupProps, SidebarHeaderMainProps, SidebarHeaderProps, SidebarHeaderRowProps, SidebarIdentityButtonProps, SidebarMenuActionProps, SidebarMenuButtonProps, SidebarMenuIconProps, SidebarMenuItemProps, SidebarMenuLabelProps, SidebarMenuLinkProps, SidebarMenuProps, SidebarMenuRouterLinkProps, SidebarMenuTrailingProps, SidebarNavCategoryCountProps, SidebarNavCategoryLabelProps, SidebarNavCategoryPanelProps, SidebarNavCategoryProps, SidebarNavCategoryTriggerProps, SidebarNavDocTreeProps, SidebarNavPanelBodyProps, SidebarNavPanelHeadingProps, SidebarNavPanelProps, SidebarResponsive, SidebarRootProps, SidebarSize, SidebarTextProps, SidebarToggleButtonProps, } from "./sidebar/Sidebar";
|
|
4
4
|
export { Sidebar, useSidebarContext } from "./sidebar/Sidebar";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,EAC9B,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"01-app-shell-nav.d.ts","sourceRoot":"","sources":["../../../../../src/layout/sidebar/examples/01-app-shell-nav.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,
|
|
1
|
+
{"version":3,"file":"01-app-shell-nav.d.ts","sourceRoot":"","sources":["../../../../../src/layout/sidebar/examples/01-app-shell-nav.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,4CA+EhD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prime-ui-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "React 19 UI kit: CSS Modules, semantic design tokens (--prime-sys-*), composable components — forms, modals, selects, tables, navigation, overlays. TypeScript, ESM, a11y-oriented.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -4,13 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
Семантические примитивы **контентной колонки**: **`PageContent.Section`** (регион страницы **`<section>`** без собственных внешних полей), **`PageContent.Root`** (обёртка страницы с опциональным **`maxWidth`**, **без** дублирующих полей к краю колонки), **`PageContent.Title`** → **`<h1>`**, **`PageContent.Description`** с **`measure`**, **`PageContent.Body`**. Типографика — токены кита.
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
- **`PageContent.Root`** — когда нужен **`maxWidth`** (`full` | `readable` | `wide`; по умолчанию **`full`**) и структура шапки/тела; краевые поля **не** входят в корень — их даёт **`
|
|
7
|
+
- **С `AppShell.Template`** краевые поля колонки задаёт **`AppShell.Main`**. Для маршрута чаще берут **`PageContent.Section`** + **`Header`** / **`Body`**, либо **`PageContent.Root`** только ради **`maxWidth`**, без второго слоя полей.
|
|
8
|
+
- **`PageContent.Root`** — когда нужен **`maxWidth`** (`full` | `readable` | `wide`; по умолчанию **`full`**) и структура шапки/тела; краевые поля **не** входят в корень — их даёт **`AppShell.Main`**.
|
|
9
9
|
- **`Description`** с **`measure="full"`**, если ширину уже ограничивает родитель; по умолчанию **`measure="readable"`** — узкая мера лида ~65ch.
|
|
10
10
|
|
|
11
|
+
### Краевые поля колонки
|
|
12
|
+
|
|
13
|
+
Они **не** задаются **`PageContent`**: их даёт **`AppShell.Main`**. Если контент «прилип» к краю экрана, проверьте шелл и стили — см. [AppShell](../../layout/app-shell/COMPONENT.md).
|
|
14
|
+
|
|
11
15
|
## Composition
|
|
12
16
|
|
|
13
|
-
- **`PageContent.Root`** — внешняя обёртка: **`maxWidth`** через `data-max-width` (кроме `full`), **padding по краям колонки — 0** (поля у **`AppShell.
|
|
17
|
+
- **`PageContent.Root`** — внешняя обёртка: **`maxWidth`** через `data-max-width` (кроме `full`), **padding по краям колонки — 0** (поля у **`AppShell.Main`**).
|
|
14
18
|
- **`PageContent.Section`** — **`<section>`**; сочетайте с **`aria-labelledby`** на заголовок **`PageContent.Title`**.
|
|
15
19
|
- **`PageContent.Header`** — заголовок + описание с отступами.
|
|
16
20
|
- **`PageContent.Title`** — **`<h1>`** (один на вью).
|
|
@@ -62,7 +66,7 @@ export function AccountPage() {
|
|
|
62
66
|
## Rules
|
|
63
67
|
|
|
64
68
|
- На вью — **один** `h1` через **`PageContent.Title`**.
|
|
65
|
-
- **Не** вкладывайте **`PageContent.Root`**
|
|
69
|
+
- **Не** вкладывайте **`PageContent.Root`** так, чтобы дублировать краевые поля, которые уже даёт **`AppShell.Main`**.
|
|
66
70
|
- **`Description`**: по умолчанию узкая мера; **`measure="full"`**, когда колонка уже ограничена снаружи.
|
|
67
71
|
|
|
68
72
|
## API
|
|
@@ -120,4 +124,4 @@ export function AccountPage() {
|
|
|
120
124
|
## Related
|
|
121
125
|
|
|
122
126
|
- [Typography](../typography/COMPONENT.md) — роли текста на странице.
|
|
123
|
-
- [AppShell](../../layout/app-shell/COMPONENT.md) — сетка и **`
|
|
127
|
+
- [AppShell](../../layout/app-shell/COMPONENT.md) — сетка и **`Main`**.
|
|
@@ -2,19 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
## About
|
|
4
4
|
|
|
5
|
-
Каркас приложения: **сетка** `nav` + **`main`** (прокручиваемая колонка).
|
|
5
|
+
Каркас приложения: **сетка** `nav` + **`main`** (прокручиваемая колонка). Поля контентной колонки (**`--prime-sys-spacing-x6`** по вертикали и горизонтали) **встроены в `AppShell.Main`** — отдельной обёртки нет.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**`AppShell.Template`** — рекомендуемая сборка: **`Root`** + **`Nav`** + **`Main`**, дети шаблона рендерятся **прямо внутри** `<main>`, плюс при монтировании **внутри React Router** сбрасывается прокрутка **`main`** при смене пути.
|
|
8
|
+
|
|
9
|
+
**Не** дублируйте те же поля вокруг страницы: внутри **`main`** используйте **`PageContent.Section`** или **`PageContent.Root`** (у **`PageContent`** краевых полей к колонке нет — их даёт **`Main`**).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Схема слоёв и отступов
|
|
14
|
+
|
|
15
|
+
Внешние поля у контента в правой колонке задаёт **сам** элемент **`AppShell.Main`** (класс **`layoutMain`** в сборке; в DOM — **`data-app-shell-main-padded`** для проверки в DevTools).
|
|
16
|
+
|
|
17
|
+
### Дерево регионов
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
┌─ AppShell.Root ───────────────────────────────────────────── fillViewport → высота вьюпорта, без padding
|
|
21
|
+
│ data-layout-template="app" (у Template)
|
|
22
|
+
│
|
|
23
|
+
├── AppShell.Nav data-layout-region="nav" padding: 0 у оболочки; внутренние отступы — у Sidebar
|
|
24
|
+
│ └── …
|
|
25
|
+
│
|
|
26
|
+
└── AppShell.Main <main> ScrollContainer, прокрутка по вертикали
|
|
27
|
+
data-layout-region="main"
|
|
28
|
+
data-app-shell-main-padded=""
|
|
29
|
+
padding-block / padding-inline = var(--prime-sys-spacing-x6) ← канон полей колонки
|
|
30
|
+
└── маршруты: <Outlet /> / страницы / PageContent.*
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Зазор между колонками
|
|
34
|
+
|
|
35
|
+
На **`min-width: 48rem`**, если **`data-layout-template="app"`** и сайдбар **`expanded`** или **`compact`**, между **`Nav`** и **`Main`** — **`column-gap: var(--prime-sys-spacing-x3)`** (разделитель колонок, не замена полей внутри `main`).
|
|
36
|
+
|
|
37
|
+
### Сводка по токенам
|
|
38
|
+
|
|
39
|
+
| Участок | Токен / правило |
|
|
40
|
+
|--------|------------------|
|
|
41
|
+
| Поля контента внутри `main` | `--prime-sys-spacing-x6` (block + inline) |
|
|
42
|
+
| Зазор nav ↔ main (широкий экран + открытый sidebar) | `--prime-sys-spacing-x3` |
|
|
43
|
+
| Корень сетки, слот `nav` | `padding: 0` у оболочек; поля `main` — см. выше |
|
|
44
|
+
|
|
45
|
+
### Диаграмма (Mermaid)
|
|
46
|
+
|
|
47
|
+
```mermaid
|
|
48
|
+
flowchart TB
|
|
49
|
+
subgraph Root["AppShell.Root"]
|
|
50
|
+
Nav["AppShell.Nav"]
|
|
51
|
+
Main["AppShell.Main\nx6 padding + scroll"]
|
|
52
|
+
end
|
|
53
|
+
Nav --- Main
|
|
54
|
+
Main --> Page["Страница / Outlet / PageContent"]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
8
58
|
|
|
9
59
|
## Composition
|
|
10
60
|
|
|
11
|
-
- **`AppShell.Root`** — корневая сетка; опционально **`fillViewport
|
|
61
|
+
- **`AppShell.Root`** — корневая сетка; опционально **`fillViewport`**.
|
|
12
62
|
- **`AppShell.Nav`** — слот навигации (**`data-layout-region="nav"`**).
|
|
13
|
-
- **`AppShell.Main`** —
|
|
14
|
-
- **`AppShell.
|
|
15
|
-
- **`AppShell.Template`** — **`Root`** + **`Nav`** + **`Main`**, внутри **`Main`** — **`MainInset`** (дети шаблона) + сброс прокрутки при смене **`pathname`** (только если предок — React Router).
|
|
63
|
+
- **`AppShell.Main`** — **`<main>`** с каноническими полями колонки и прокруткой (**`data-layout-region="main"`**).
|
|
64
|
+
- **`AppShell.Template`** — **`Root`** + **`Nav`** + **`Main`**, дети — **прямые** дочерние узлы **`main`** + сброс прокрутки при смене **`pathname`** (если предок — React Router).
|
|
16
65
|
|
|
17
|
-
###
|
|
66
|
+
### Пример (сайдбар + маршруты)
|
|
18
67
|
|
|
19
68
|
```tsx
|
|
20
69
|
import { AppShell, Sidebar } from "prime-ui-kit";
|
|
@@ -29,27 +78,36 @@ export function AppLayout() {
|
|
|
29
78
|
}
|
|
30
79
|
```
|
|
31
80
|
|
|
32
|
-
###
|
|
81
|
+
### Пример (одна колонка, без `nav`)
|
|
33
82
|
|
|
34
83
|
```tsx
|
|
35
84
|
import { AppShell } from "prime-ui-kit";
|
|
36
85
|
|
|
37
|
-
export function
|
|
86
|
+
export function FullWidthMain() {
|
|
38
87
|
return (
|
|
39
88
|
<AppShell.Root fillViewport>
|
|
40
|
-
<AppShell.Main>
|
|
41
|
-
<AppShell.MainInset>{/* страница */}</AppShell.MainInset>
|
|
42
|
-
</AppShell.Main>
|
|
89
|
+
<AppShell.Main>{/* страница — поля уже на main */}</AppShell.Main>
|
|
43
90
|
</AppShell.Root>
|
|
44
91
|
);
|
|
45
92
|
}
|
|
46
93
|
```
|
|
47
94
|
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Почему «пропали отступы»
|
|
98
|
+
|
|
99
|
+
1. **Не подключены стили пакета** — **`prime-ui-kit/styles.css`** и **`prime-ui-kit/bundle.css`** (или эквивалент).
|
|
100
|
+
2. **Маршруты не внутри `AppShell.Template`** — **`Outlet`** должен быть ребёнком **`Template`** (или контент внутри **`AppShell.Main`** при ручной сборке).
|
|
101
|
+
3. **Ожидание полей от `PageContent.Root`** — краевые поля задаёт **`Main`**, не **`PageContent`**.
|
|
102
|
+
4. **Редкий full-bleed в `main`** — при необходимости обнулите поля через **`className`** на **`AppShell.Main`** (осознанно, точечно).
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
48
106
|
## Rules
|
|
49
107
|
|
|
50
|
-
-
|
|
51
|
-
- **`ref
|
|
52
|
-
- Не дублируйте
|
|
108
|
+
- **`AppShell.Template`** внутри **`BrowserRouter`** / **`MemoryRouter`** — для сброса прокрутки.
|
|
109
|
+
- **`ref`** на **`Template`** вешается на **`<main>`** (`AppShell.Main`).
|
|
110
|
+
- Не дублируйте обёртки с полями **`x6`** вокруг страницы.
|
|
53
111
|
|
|
54
112
|
## API
|
|
55
113
|
|
|
@@ -69,22 +127,14 @@ export function FullWidthMainRoute() {
|
|
|
69
127
|
| fillViewport | `boolean` | — | No | Пробрасывается в `Root`. |
|
|
70
128
|
| className | `string` | — | No | Класс на `Root`. |
|
|
71
129
|
| nav | `React.ReactNode` | — | **Yes** | Левая колонка (напр. `Sidebar.Root`). |
|
|
72
|
-
| children | `React.ReactNode` | — | No | Контент внутри
|
|
130
|
+
| children | `React.ReactNode` | — | No | Контент внутри `<main>` (прямые дети). |
|
|
73
131
|
| navProps | `Omit<AppShellNavProps, "children">` | — | No | Пропсы на слот навигации. |
|
|
74
132
|
| mainProps | `Omit<AppShellMainProps, "children">` | — | No | Пропсы на `main` (напр. `id`, `tabIndex`). |
|
|
75
|
-
| …rest | `HTMLAttributes<HTMLDivElement>` | — | No | Остальное на `Root
|
|
76
|
-
|
|
77
|
-
### AppShell.MainInset
|
|
78
|
-
|
|
79
|
-
| Prop | Type | Default | Required | Description |
|
|
80
|
-
|------|------|---------|----------|-------------|
|
|
81
|
-
| className | `string` | — | No | Доп. класс; поля заданы модулем кита. |
|
|
82
|
-
| children | `React.ReactNode` | — | No | Содержимое колонки. |
|
|
83
|
-
| …rest | `HTMLAttributes<HTMLDivElement>` | — | No | В т.ч. `ref` (`forwardRef`). |
|
|
133
|
+
| …rest | `HTMLAttributes<HTMLDivElement>` | — | No | Остальное на `Root`. |
|
|
84
134
|
|
|
85
135
|
`AppShell.Nav` и `AppShell.Main` — см. исходные типы в **`AppShell.tsx`**.
|
|
86
136
|
|
|
87
137
|
## Related
|
|
88
138
|
|
|
89
|
-
- [PageContent](../../components/page-content/COMPONENT.md)
|
|
90
|
-
- [Sidebar](../sidebar/COMPONENT.md)
|
|
139
|
+
- [PageContent](../../components/page-content/COMPONENT.md)
|
|
140
|
+
- [Sidebar](../sidebar/COMPONENT.md)
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
**When to use**
|
|
10
10
|
|
|
11
|
-
- Persistent app navigation beside main content, including **`AppShell.Template`** nav slot with **`sidebarSlot="page-nav"`** (
|
|
11
|
+
- Persistent app navigation beside main content, including **`AppShell.Template`** nav slot with **`sidebarSlot="page-nav"`** (поля контентной колонки на **`AppShell.Main`** — не дублировать).
|
|
12
12
|
- Desktop width toggle (expanded vs icon rail) with optional tooltips in **`compact`**.
|
|
13
13
|
- Mobile drawer behavior when **`responsive={true}`** (default): overlay, backdrop; **edge**-кнопка **`Sidebar.ToggleButton`** на границе панели и смещается вместе с ней (в т.ч. при закрытии drawer).
|
|
14
14
|
|
|
@@ -72,19 +72,17 @@ export default function SidebarExampleAppShellNav() {
|
|
|
72
72
|
</Sidebar.Root>
|
|
73
73
|
}
|
|
74
74
|
>
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
</Typography.Root>
|
|
87
|
-
</div>
|
|
75
|
+
<Typography.Root
|
|
76
|
+
as="p"
|
|
77
|
+
variant="body-default"
|
|
78
|
+
tone="muted"
|
|
79
|
+
className={styles.mainPlaceholder}
|
|
80
|
+
>
|
|
81
|
+
Main scrolls inside <span className={styles.code}>AppShell.Main</span> (page gutters are
|
|
82
|
+
on <span className={styles.code}>main</span>); the sidebar stays in the nav column. Use{" "}
|
|
83
|
+
<span className={styles.code}>sidebarSlot="page-nav"</span> so spacing and grid
|
|
84
|
+
behavior match the app template.
|
|
85
|
+
</Typography.Root>
|
|
88
86
|
</AppShell.Template>
|
|
89
87
|
</div>
|
|
90
88
|
);
|
|
@@ -21,16 +21,6 @@
|
|
|
21
21
|
min-height: 0;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
/* Поля колонки контента (раньше `mainProps.variant="page"` на `AppShell.Main`). */
|
|
25
|
-
.exampleMainInset {
|
|
26
|
-
box-sizing: border-box;
|
|
27
|
-
flex: 1;
|
|
28
|
-
min-height: 0;
|
|
29
|
-
min-width: 0;
|
|
30
|
-
padding-block: var(--prime-sys-spacing-x6);
|
|
31
|
-
padding-inline: var(--prime-sys-spacing-x6);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
24
|
.mainPlaceholder {
|
|
35
25
|
box-sizing: border-box;
|
|
36
26
|
margin: 0;
|