---
title: Page
description: Page protocol schemas
---

{/* ⚠️  AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs go in content/docs/guides/. */}

Page Region Schema

A named region in the template where components are dropped.

<Callout type="info">
**Source:** `packages/spec/src/ui/page.zod.ts`
</Callout>

## TypeScript Usage

```typescript
import { BlankPageLayout, BlankPageLayoutItem, ElementDataSource, InterfacePageConfig, PageComponentType, PageType, PageVariable, RecordReviewConfig } from '@objectstack/spec/ui';
import type { BlankPageLayout, BlankPageLayoutItem, ElementDataSource, InterfacePageConfig, PageComponentType, PageType, PageVariable, RecordReviewConfig } from '@objectstack/spec/ui';

// Validate data
const result = BlankPageLayout.parse(data);
```

---

## BlankPageLayout

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **columns** | `integer` | ✅ | Number of grid columns |
| **rowHeight** | `integer` | ✅ | Height of each grid row in pixels |
| **gap** | `integer` | ✅ | Gap between grid items in pixels |
| **items** | `Object[]` | ✅ | Positioned components on the canvas |


---

## BlankPageLayoutItem

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **componentId** | `string` | ✅ | Reference to a PageComponent.id in the page |
| **x** | `integer` | ✅ | Grid column position (0-based) |
| **y** | `integer` | ✅ | Grid row position (0-based) |
| **width** | `integer` | ✅ | Width in grid columns |
| **height** | `integer` | ✅ | Height in grid rows |


---

## ElementDataSource

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **object** | `string` | ✅ | Object to query |
| **view** | `string` | optional | Named view to apply |
| **filter** | `[__schema0](./__schema0)` | optional | Additional filter criteria |
| **sort** | `Object[]` | optional | Sort order |
| **limit** | `integer` | optional | Max records to display |


---

## InterfacePageConfig

Interface-level page configuration (Airtable parity)

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **source** | `string` | optional | Source object name for the page |
| **levels** | `integer` | optional | Number of hierarchy levels to display |
| **filterBy** | `Object[]` | optional | Page-level filter criteria |
| **appearance** | `Object` | optional | Appearance and visualization configuration |
| **userFilters** | `Object` | optional | User filter configuration |
| **userActions** | `Object` | optional | User action toggles |
| **addRecord** | `Object` | optional | Add record entry point configuration |
| **showRecordCount** | `boolean` | optional | Show record count at page bottom |
| **allowPrinting** | `boolean` | optional | Allow users to print the page |


---

## PageComponentType

### Allowed Values

* `page:header`
* `page:footer`
* `page:sidebar`
* `page:tabs`
* `page:accordion`
* `page:card`
* `page:section`
* `record:details`
* `record:highlights`
* `record:related_list`
* `record:activity`
* `record:chatter`
* `record:path`
* `record:alert`
* `record:quick_actions`
* `record:reference_rail`
* `record:history`
* `app:launcher`
* `nav:menu`
* `nav:breadcrumb`
* `global:search`
* `global:notifications`
* `user:profile`
* `ai:chat_window`
* `ai:suggestion`
* `element:text`
* `element:number`
* `element:image`
* `element:divider`
* `element:button`
* `element:filter`
* `element:form`
* `element:record_picker`


---

## PageType

Page type — platform or interface page types

### Allowed Values

* `record`
* `home`
* `app`
* `utility`
* `dashboard`
* `grid`
* `list`
* `gallery`
* `kanban`
* `calendar`
* `timeline`
* `form`
* `record_detail`
* `record_review`
* `overview`
* `blank`


---

## PageVariable

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **name** | `string` | ✅ | Variable name |
| **type** | `Enum<'string' \| 'number' \| 'boolean' \| 'object' \| 'array' \| 'record_id'>` | ✅ |  |
| **defaultValue** | `any` | optional |  |
| **source** | `string` | optional | Component ID that writes to this variable |


---

## RecordReviewConfig

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **object** | `string` | ✅ | Target object for review |
| **filter** | `[__schema0](./__schema0)` | optional | Filter criteria for review queue |
| **sort** | `Object[]` | optional | Sort order for review queue |
| **displayFields** | `string[]` | optional | Fields to display on the review page |
| **actions** | `Object[]` | ✅ | Review actions |
| **navigation** | `Enum<'sequential' \| 'random' \| 'filtered'>` | ✅ | Record navigation mode |
| **showProgress** | `boolean` | ✅ | Show review progress indicator |


---

