PageForm

Раскладка формы создания или настройки ресурса: заголовок, степпер (stepper), контент (children), сайд-блок (sideBlock) и sticky-футер с оценкой бюджета (priceSummary) и кнопками (footer). Раскладку берёт из AdaptiveProvider.

Когда использовать

  • Многошаговые формы создания/аренды/настройки ресурса со степпером и итоговой ценой.
  • Нужен закреплённый футер с основной/вторичной кнопкой и сводкой бюджета.

Анатомия

Тело PageForm на desktop — одна карточка формы фиксированной ширины по центру страницы; справа при переданных слотах встаёт липкая колонка sideItems (304px). Внутри карточки вертикальным стеком идут заголовок, степпер, контент шага и футер.

Боковая колонка отрисовывается только при переданных priceSummary.content / sideBlock; иначе карточка формы стоит одна по центру. На mobile раскладка одноколоночная: степпер sticky сверху, слоты — стопкой, футер sticky снизу.

Слоты:

  • title / subtitle — заголовок формы и подзаголовок.
  • stepper — степпер шагов; на mobile становится sticky сверху.
  • children — контент текущего шага.
  • sideBlock — массив блоков { label, content } в боковой колонке (подсказки, сводка конфигурации).
  • priceSummary{ total, content? }: на desktop content идёт карточкой боковой колонки, на mobile — оценкой бюджета в футере.
  • footer — кнопки футера (внизу карточки формы на desktop, sticky-футер на mobile). stickyFooter закрепляет его внизу при прокрутке длинной формы.

Кнопки футера

  • buttonPrimary — основная кнопка. variant из набора (continue, create, save, rent, send, restore, add) задаёт локализованную подпись; variant: 'custom' требует свой label.
  • buttonSecondary — вторичная кнопка (cancel, back или custom).
  • buttonAdditional — дополнительная кнопка @cloud-ru/ds-button.

Каждой кнопке можно передать tooltip (пропсы @cloud-ru/ds-tooltip).

Адаптивность

  • desktop — сайд-блок сбоку, футер с бюджетом и кнопками внизу.
  • mobile — слот «ещё» (moreActions, kebab) прижимается к правому краю строки заголовка; степпер sticky сверху, футер с оценкой бюджета и кнопками — sticky снизу.

Установка

pnpm add @cloud-ru/ds-uikit-product-page-layout
import { PageForm } from '@cloud-ru/ds-uikit-product-page-layout'

Props

Types

PropsPageFormProps
PropTypeDefaultRequiredDescription
childrenstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefinedno
classNamestringno
data-test-idstringno
footer{ buttonPrimary: ({ variant: ButtonPrimaryVariant; } | { variant: "custom"; label: string; }) & { tooltip?: TooltipProps; } & Omit<ButtonProps, "label">; buttonSecondary?: (({ ...; } | { ...; }) & ... 1 more ... & Omit<...>); buttonAdditional?: ({ ...; } & ... 4 more ... & { ...; }) | undefin...no
priceSummary{ total: ReactNode; content?: ReactNode; }no
sideBlock{ label: string; content: ReactNode; snapPoints?: SnapPoint[]; }[]no
stepperReactNodeno
stickyFooterbooleannoЗакрепляет футер внизу формы при прокрутке контента.
subtitleReactNodenoПодзаголовок под заголовком
titlestringyesЗаголовок страницы

Unions

Types

PageFormProps

Unions

Storybook

Figma