> For AI agents: the complete documentation index is available at https://wallarm.github.io/design-system/llms.txt, the full documentation bundle is available at https://wallarm.github.io/design-system/llms-full.txt.

# Page

The frame a microfrontend page renders into — a header carrying the title and its actions, then the content below. It tells the host shell how it wants to be laid out (`fullSize`, `fixedHeight`) through context and falls back to sensible behaviour when there is no host, so the same page works inside the console and on its own.

[Source](https://github.com/wallarm/design-system/tree/main/packages/design-system/src/components/Page) · [Storybook](https://wallarm.github.io/design-system/storybook/?path=/docs/layout-page--overview)

```tsx
import { Badge } from '@wallarm-org/design-system/Badge';
import { Button } from '@wallarm-org/design-system/Button';
import { Page, PageActions, PageContent, PageHeader, PageTitle } from '@wallarm-org/design-system/Page';

export const Basic = () => {
  return (
    <Page name='full-featured' fullSize fixedHeight>
      <PageHeader>
        <PageTitle>Page title</PageTitle>

        <Badge>1000</Badge>

        <PageActions>
          <Button variant='secondary' color='neutral' size='small'>
            Export
          </Button>
          <Button size='small'>Settings</Button>
        </PageActions>
      </PageHeader>

      <PageContent>
        <p>Full-featured page with header actions, tabs (including disabled), and content area.</p>
      </PageContent>
    </Page>
  );
};
```

## Usage

```tsx
import { Badge } from '@wallarm-org/design-system/Badge';
import { Button } from '@wallarm-org/design-system/Button';
import { Page, PageActions, PageContent, PageHeader, PageTitle } from '@wallarm-org/design-system/Page';
```

## Examples

### Sticky header

`contained` gives the page its own scroll container, which is what lets `PageHeader sticky` stick. Without it the shell does the scrolling and the header leaves with the content.

```tsx
import { Button } from '@wallarm-org/design-system/Button';
import { Page, PageActions, PageContent, PageHeader, PageTitle } from '@wallarm-org/design-system/Page';

export const StickyHeader = () => {
  return (
    <Page name='sticky-header' contained>
      <PageHeader sticky>
        <PageTitle>Sticky header</PageTitle>

        <PageActions>
          <Button variant='secondary' color='neutral' size='small'>
            Export
          </Button>
          <Button size='small'>Settings</Button>
        </PageActions>
      </PageHeader>

      <PageContent>
        {Array.from({ length: 40 }, (_, i) => (
          <p key={`row-${i + 1}`} className='py-8'>
            Content row {i + 1}
          </p>
        ))}
      </PageContent>
    </Page>
  );
};
```

### With description and toolbar

`PageHeaderGroup` stacks the title over a `PageDescription`; `PageToolbar` adds a filter row between the header and the content.

```tsx
import { useState } from 'react';
import { Button } from '@wallarm-org/design-system/Button';
import { NumericBadge } from '@wallarm-org/design-system/NumericBadge';
import { Page, PageActions, PageContent, PageDescription, PageHeader, PageHeaderGroup, PageTitle, PageToolbar } from '@wallarm-org/design-system/Page';
import { SearchInput } from '@wallarm-org/design-system/SearchInput';
import { SegmentedTabs, SegmentedTabsList, SegmentedTabsTrigger } from '@wallarm-org/design-system/SegmentedTabs';

export const WithDescriptionAndToolbar = () => {
  const [search, setSearch] = useState('');

  return (
    <Page name='with-description-and-toolbar' fixedHeight>
      <PageHeader>
        <PageHeaderGroup>
          <PageTitle>Service accounts</PageTitle>
          <PageDescription>
            Identities for automation and API access — they sign in with keys or tokens instead of a
            password.
          </PageDescription>
        </PageHeaderGroup>

        <PageActions>
          <Button size='medium'>Create service account</Button>
        </PageActions>
      </PageHeader>

      <PageToolbar>
        <SearchInput
          value={search}
          onChange={setSearch}
          placeholder='Search name'
          className='w-[320px]'
        />
        <SegmentedTabs defaultValue='all'>
          <SegmentedTabsList>
            <SegmentedTabsTrigger value='all'>
              All <NumericBadge>2</NumericBadge>
            </SegmentedTabsTrigger>
            <SegmentedTabsTrigger value='active'>
              Active <NumericBadge>1</NumericBadge>
            </SegmentedTabsTrigger>
            <SegmentedTabsTrigger value='deactivated'>
              Deactivated <NumericBadge>1</NumericBadge>
            </SegmentedTabsTrigger>
          </SegmentedTabsList>
        </SegmentedTabs>
      </PageToolbar>

      <PageContent>
        <p>Table goes here.</p>
      </PageContent>
    </Page>
  );
};
```

## Props

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| name           | `string \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| fullSize       | `boolean \| undefined`                               |         |             |
| fixedHeight    | `boolean \| undefined`                               |         |             |
| contained      | `boolean \| undefined`                               |         |             |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |
| data-testid    | `string \| undefined`                                |         |             |

### PageActions

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

### PageContent

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

### PageDescription

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

### PageHeader

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| sticky         | `boolean \| undefined`                               |         |             |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

### PageHeaderGroup

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

### PageTitle

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

### PageToolbar

| Prop           | Type                                                 | Default | Description |
| -------------- | ---------------------------------------------------- | ------- | ----------- |
| defaultChecked | `boolean \| undefined`                               |         |             |
| defaultValue   | `string \| number \| readonly string[] \| undefined` |         |             |
| autoFocus      | `boolean \| undefined`                               |         |             |
| id             | `string \| undefined`                                |         |             |
| tabIndex       | `number \| undefined`                                |         |             |
| title          | `string \| undefined`                                |         |             |
| rel            | `string \| undefined`                                |         |             |
| onChange       | `ChangeEventHandler<T, Element> \| undefined`        |         |             |

## Explorer

