Page

Page — каркас страницы приложения на весь вьюпорт (100dvw × 100dvh).

Page.Root — CSS-грид из трёх строк: Page.Header, Page.Content (растягивается на всё свободное место) и Page.Footer. Части находят свою строку по data-атрибутам, поэтому порядок детей не важен; шапка и подвал опциональны. Фон — токен фона приложения с едва заметным фиолетовым свечением из левого верхнего угла. Это корень всего приложения (один на приложение, рендерится в корневом layout), а не блок внутри страницы.

Page.Header и Page.Footer построены на Triplet: три равные колонки left / center / right, в каждый слот можно передать строку или произвольный ReactNode, несколько элементов внутри слота выстраиваются в ряд с отступом. Колонки всегда одной ширины, поэтому center стоит строго по центру страницы независимо от наполнения соседей.

Page.Content задаёт горизонтальные паддинги и min-height: 0, поэтому вложенные скролл-области (ScrollArea) сжимаются до высоты зоны и скроллятся внутри неё, а не растягивают страницу.

В примерах ниже страница ужата в рамку превью демо-обёрткой — в реальном коде она не нужна.

Мой проект
Трекер
Разработка

Анатомия

Page.Root
Page.Header
Left (left)
Center (center)
Right (right)
Page.Content
Children
Page.Footer
Left (left)
Center (center)
Right (right)

Примеры

Шапка

Page.Header отдельно от страницы: слева — кнопка меню и название проекта в одном слоте, по центру поиск, справа действие.

Мой проект

Подвал

Page.Footer — те же слоты и та же раскладка, что у шапки: отличается только строкой грида, в которую попадает.

Контент со скроллом

Список длиннее зоны контента: ScrollArea, растянутая на высоту зоны, скроллит его внутри страницы — шапка и подвал остаются на месте.

Задачи

API

PropTypeDefault
children*

Части страницы: Page.Header, Page.Content, Page.Footer

ReactNode-

Шапка страницы — первая строка грида; слоты раскладываются Triplet'ом.

PropTypeDefault
left

Контент, отображаемый слева

TripletItem-
center

Контент, отображаемый по центру

TripletItem-
right

Контент, отображаемый справа

TripletItem-

Page.Content

Основная зона страницы — занимает всё место между шапкой и подвалом.

PropTypeDefault
children*

Содержимое основной зоны страницы

ReactNode-

Подвал страницы — последняя строка грида, тот же Triplet.

PropTypeDefault