Property Panel Configuration
Configure the property panels displayed alongside assets and live channels in the portal
Overview
Property panels are the tabbed side panels that appear when a user selects an asset or live channel. Each tab represents a panel (e.g. Properties, Transcript, Sharing) and is driven by the pageModules section of the portal configuration.
The portal ships with sensible defaults for every page type, so pageModules can be omitted entirely from the config. When it is present, it is used to:
- Override the splitter layout sizes for a page
- Disable specific default panels
- Add custom panels (e.g. embedded iFrames)
pageModules structure
pageModules is a top-level array in the portal config. Each entry targets one page by type and optionally carries a propertiesPanelModule and splitterSizes.
{
"pageModules": [
{
"type": "assets",
"splitterSizes": [20, 50, 25],
"propertiesPanelModule": {
"panels": []
}
}
]
}pageModules properties
| Property | Type | Required | Description |
|---|---|---|---|
type | string | Yes | The page this module applies to. See Page Types below. |
splitterSizes | number[] | No | Panel width percentages. Must sum to 100. Defaults are applied per page type when omitted. |
propertiesPanelModule | object | No | Controls which property panels are shown. Omit entirely to use all defaults. |
propertiesPanelModule properties
| Property | Type | Required | Description |
|---|---|---|---|
panels | object[] | No | Combined list for disabling default panels and adding custom panels. Entries are matched to defaults by type — matched entries are merged, unmatched entries are appended as new panels. |
Page types
type value | Page | Default splitterSizes |
|---|---|---|
assets | Assets library | [20, 50, 25] |
collections | Collections | [25, 50, 25] |
liveChannels | Live Channels | [60, 40] |
continueWatching | Continue Watching | [75, 25] |
favorites | Favorites | [75, 25] |
search | Search results | [75, 25] |
Default panels
The following panels are included by default for each page type. No configuration is required to enable them.
Assets, Collections, Continue Watching
| Panel | type value | Default icon | Shown in | Media types |
|---|---|---|---|---|
| Properties | details | pi pi-book | Item preview | All |
| Transcript | transcript | pi pi-align-justify | Item dialog | Video, Audio |
| Annotations | annotations | pi pi-images | Item dialog | Image, Video, Audio |
| Comments | comments | pi pi-comment | Item dialog | All |
| Clip Search | clipSearch | pi pi-search | Item dialog | Video |
| Sharing | sharing | pi pi-share-alt | Item preview | All |
Note: Some panels are also gated by top-level config flags.
transcriptrequiresshowTranscripts: true,annotationsrequiresallowAnnotations: true,clipSearchrequiresenableLlmSearch: true, andsharingonly appears when the asset has an embed code.
Live Channels
| Panel | type value | Default icon | Shown in |
|---|---|---|---|
| Properties | details | pi pi-book | Item preview |
| Sharing | sharing | pi pi-share-alt | Item preview |
panels array
The panels array in propertiesPanelModule is the single place for both disabling default panels and adding custom panels. Each entry is matched by its type value against the built-in defaults for the page:
- Matched entry — merged with the default, allowing any field to be overridden (including
disabled: trueto suppress it). - Unmatched entry — treated as a new panel and appended after the defaults.
panels properties
| Property | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Panel type. Must match a default panel's type to override it, or use a unique value (e.g. iframe) to add a new panel. |
disabled | boolean | No | Set to true to hide the panel entirely. Use this to suppress a default panel. |
title | object | No* | Display label keyed by language code (e.g. { "en": "My Panel", "es": "Mi panel" }). Required for new (non-default) panels. Falls back to en if the current language key is absent. |
name | string | No* | Unique identifier for this panel within the page. Used as the menu item ID. Required for new (non-default) panels. |
icon | string | No | PrimeIcons class for the tab icon (e.g. pi pi-external-link). Overrides the default icon when set. |
url | string | No | URL to embed. Required when type is iframe. |
order | number | No* | Sort position relative to other panels. Higher numbers appear later. Required for new (non-default) panels. |
targets | string[] | No* | Where the panel appears: "itemPreview" for the inline side panel, "itemDialog" for the full asset dialog. Both values can be included. Required for new (non-default) panels. |
mediaTypes | number[] | No | Restrict the panel to specific media types. Omit or leave empty to show for all. See Media type values below. |
Disabling default panels
Add the panel's type to panels with disabled: true to suppress it for that page.
{
"pageModules": [
{
"type": "assets",
"propertiesPanelModule": {
"panels": [
{ "type": "sharing", "disabled": true },
{ "type": "annotations", "disabled": true }
]
}
}
]
}Adding custom panels
Add a new entry to panels with a type value that does not match any default panel. The primary use case is embedding an external URL in an iFrame tab.
{
"pageModules": [
{
"type": "assets",
"propertiesPanelModule": {
"panels": [
{
"title": { "en": "Rights Portal", "es": "Portal de derechos" },
"name": "rightsPortal",
"type": "iframe",
"icon": "pi pi-external-link",
"url": "https://example.com/rights",
"order": 100,
"targets": ["itemPreview"],
"mediaTypes": [2]
}
]
}
}
]
}Media type values
| Value | Media type |
|---|---|
1 | Images |
2 | Videos |
3 | Documents |
4 | Text |
5 | Audio |
6 | Other |
7 | Manifest |
Full examples
Assets page — disable sharing, add an iFrame panel
{
"pageModules": [
{
"type": "assets",
"splitterSizes": [20, 50, 30],
"propertiesPanelModule": {
"panels": [
{ "type": "sharing", "disabled": true },
{
"title": { "en": "Rights Portal", "es": "Portal de derechos" },
"name": "rightsPortal",
"type": "iframe",
"icon": "pi pi-external-link",
"url": "https://example.com/rights",
"order": 100,
"targets": ["itemPreview", "itemDialog"]
}
]
}
}
]
}Live Channels page — disable sharing
{
"pageModules": [
{
"type": "liveChannels",
"propertiesPanelModule": {
"panels": [
{ "type": "sharing", "disabled": true }
]
}
}
]
}Multiple page types in one config
In this example both pages use their default splitterSizes, so neither entry needs to declare them. The assets page disables the sharing panel; the live channels page adds a custom iFrame tab.
{
"pageModules": [
{
"type": "assets",
"propertiesPanelModule": {
"panels": [
{ "type": "sharing", "disabled": true }
]
}
},
{
"type": "liveChannels",
"propertiesPanelModule": {
"panels": [
{
"title": { "en": "Stream Info" },
"name": "streamInfo",
"type": "iframe",
"icon": "pi pi-info-circle",
"url": "https://example.com/stream-info",
"order": 30,
"targets": ["itemPreview"]
}
]
}
}
]
}Splitter sizes
splitterSizes controls the relative width of the page's layout columns as a percentage array. The number of values must match the number of columns the page uses.
- Pages with a folder tree + content + properties layout (assets, collections) take 3 values.
- Pages with a content + properties layout (live channels, continue watching, favorites, search) take 2 values.
All values must sum to 100. If splitterSizes is omitted, the defaults from the Page Types table are applied automatically — most configurations will not need to set this at all.
"splitterSizes": [20, 55, 25]Tip: On mobile viewports the layout switches to vertical orientation automatically regardless of the configured sizes.
