Skip to content

Interface: PageDeclaration

Makaio Framework


Makaio Framework / contracts / PageDeclaration

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:103

Page declaration for packages.

Fully serializable — lazy-loads any custom components. To also register the page in sidebar navigation (PageDefinitionRegistry), provide mode, level, and component. The package loader will bridge this declaration to a PageDefinition entry automatically.

// Minimal page (slot-layout system only, no sidebar entry):
{ id: 'my-page', name: 'My Page', scope: 'any', slots: [], defaultContent: {} }
// Page with sidebar navigation entry:
{
id: 'my-page',
name: 'My Page',
scope: 'any',
mode: 'switch',
level: 'any',
component: () => import('./MyPage.js'),
slots: [],
defaultContent: {},
}

optional component?: () => Promise<{ default: ComponentType<PageComponentProps>; }>

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:156

Lazy-loaded page component for sidebar navigation.

Required when mode is provided. Must return a module with a default export that accepts PageComponentProps.

Promise<{ default: ComponentType<PageComponentProps>; }>

() => import('./MyPage.js').then(m => ({ default: m.MyPage }))

defaultContent: Partial<Record<SlotId, SlotPlacementDeclaration[]>>

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:124

Default content per slot.


optional description?: string

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:113

Optional description shown in page listings.


optional icon?: () => Promise<{ default: ComponentType<{ size?: number; }>; }>

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:126

Optional page-level icon (lazy-loaded).

Promise<{ default: ComponentType<{ size?: number; }>; }>


id: string

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:109

Unique page identifier.

Will be namespaced to '<package-name>:<page-id>' by the loader.


optional layout?: object

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:128

Optional page-level layout constraints.

optional minWidth?: number

Minimum page width in pixels.


optional level?: UiNavigationLevel

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:145

Navigation level for sidebar registration.

Required when mode is provided.


optional mode?: PageMode

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:139

Navigation mode for sidebar registration.

When provided alongside level and component, the package loader registers this page in the sidebar navigation (PageDefinitionRegistry). Omit to register in the slot-layout system only (pageRegistry).


name: string

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:111

Human-readable name.


optional order?: number

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:162

Display order in sidebar (lower = first).

Only used when mode is provided. Defaults to 50 when omitted.


optional route?: string

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:118

Route path relative to the package mount point.

`'dashboard'` becomes `/extensions/my-package/dashboard`

scope: UiScope

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:120

UI scope for this page context.


slots: SlotDeclaration[]

Defined in: ../../../packages/contracts/src/extension/contributions/page-types.ts:122

Slot definitions for this page’s layout.