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.
@@ -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;AAsBtC,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AA+BzC,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;;uBApIJ,OAAO;oBACV,MAAM;mBACP,KAAK,CAAC,SAAS;;;;oBAmCd,MAAM;mBACP,KAAK,CAAC,SAAS;;;oBAwBd,MAAM;mBACP,KAAK,CAAC,SAAS;;;uBAiCX,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;;CAoChD,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"}
@@ -1,4 +1,4 @@
1
- export type { AppShellMainInsetProps, AppShellMainProps, AppShellNavProps, AppShellRootProps, AppShellTemplateProps, } from "./app-shell/AppShell";
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,sBAAsB,EACtB,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
+ {"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,4CAiFhD"}
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.5.1",
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
- - **В приложении с `AppShell.Template`** внешние поля колонки задаёт **`AppShell.MainInset`** (встроен в шаблон). Тогда для маршрута чаще берут **`PageContent.Section`** + **`Header`** / **`Body`**, либо **`PageContent.Root`** только ради **`maxWidth`**, без ожидания «второго» слоя полей.
8
- - **`PageContent.Root`** — когда нужен **`maxWidth`** (`full` | `readable` | `wide`; по умолчанию **`full`**) и структура шапки/тела; краевые поля **не** входят в корень — их даёт **`MainInset`**.
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.MainInset`**).
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`** в область, где уже есть тот же слой полей, что у **`AppShell.MainInset`** — у корня **нет** своих краевых полей; при необходимости используйте **`Section`**.
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) — сетка и **`MainInset`**.
127
+ - [AppShell](../../layout/app-shell/COMPONENT.md) — сетка и **`Main`**.
@@ -2,19 +2,68 @@
2
2
 
3
3
  ## About
4
4
 
5
- Каркас приложения: **сетка** `nav` + **`main`** (прокручиваемая колонка). **`AppShell.Template`** — каноничный способ собрать оболочку: он задаёт **`data-layout-template="app"`** (зазор у колонки nav при открытом **Sidebar** с `sidebarSlot="page-nav"`), **всегда** оборачивает дочерние маршруты в **`AppShell.MainInset`** с едиными полями контентной колонки (**`--prime-sys-spacing-x6`** по вертикали и горизонтали тот же формат, что в playground до выделения в кит), и при монтировании **внутри React Router** сбрасывает прокрутку **`main`** на смене пути.
5
+ Каркас приложения: **сетка** `nav` + **`main`** (прокручиваемая колонка). Поля контентной колонки (**`--prime-sys-spacing-x6`** по вертикали и горизонтали) **встроены в `AppShell.Main`** отдельной обёртки нет.
6
6
 
7
- **Не** добавляйте второй слой с теми же полями вокруг страницы: используйте **`PageContent.Section`** или **`PageContent.Root`** (без дублирующих внешних отступов у корня их даёт **`MainInset`**).
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`** (типично для фиксированной высоты вьюпорта и прокрутки только в **`main`**).
61
+ - **`AppShell.Root`** — корневая сетка; опционально **`fillViewport`**.
12
62
  - **`AppShell.Nav`** — слот навигации (**`data-layout-region="nav"`**).
13
- - **`AppShell.Main`** — основная колонка (**`<main>`**, **`ScrollContainer`**, **`data-layout-region="main"`**).
14
- - **`AppShell.MainInset`** — **единый** внутренний отступ контентной колонки; в **`Template`** уже вложен в **`Main`**. Используйте отдельно только в особых маршрутах без **`Template`** (например **`AppShell.Root`** + один **`Main`** + **`MainInset`** без боковой колонки корень сетки растянет **`main`** на всю ширину).
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
- ### Canonical example (приложение с сайдбаром)
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
- ### Canonical example (одна колонка без `nav`, те же поля)
81
+ ### Пример (одна колонка, без `nav`)
33
82
 
34
83
  ```tsx
35
84
  import { AppShell } from "prime-ui-kit";
36
85
 
37
- export function FullWidthMainRoute() {
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
- - Обертка-приложения с **`AppShell.Template`** должна находиться **внутри** **`BrowserRouter`** / **`MemoryRouter`**, чтобы сброс прокрутки работал; в тестах без роутера сброс не подключается (это нормально).
51
- - **`ref`**, переданный в **`AppShell.Template`**, по-прежнему вешается на элемент **`main`** (как на **`AppShell.Main`**).
52
- - Не дублируйте классы/обёртки с теми же отступами, что у **`MainInset`**, и не задавайте произвольные «поля страницы» литералами — один источник правды в ките.
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 | Контент внутри `MainInset` внутри `main`. |
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` (без `children` / без `ref` на типе — `ref` на `main`). |
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) — навигация в слоте `nav`.
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"`** (контентная колонка получает поля из **`AppShell.MainInset`** внутри шаблона — не дублировать).
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
- <div className={styles.exampleMainInset}>
76
- <Typography.Root
77
- as="p"
78
- variant="body-default"
79
- tone="muted"
80
- className={styles.mainPlaceholder}
81
- >
82
- Main scrolls inside <span className={styles.code}>AppShell.Main</span>; the sidebar
83
- stays in the nav column. Use{" "}
84
- <span className={styles.code}>sidebarSlot=&quot;page-nav&quot;</span> so spacing and
85
- grid behavior match the app template.
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=&quot;page-nav&quot;</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;