Skip to content

Side panel

The side panel is a layout container that pushes-in from the right side of an application (for left-to-right/LTR orientation).

Usage

The side panel is used to display additional content or functionality that is related to the main content of a page.

Side panel

The panel takes the full application height and a fixed width. There are three pre-defined widths available: regular (390px), wide (500px), and extended (responsive).

The extended variant adapts its width based on application breakpoints, providing more horizontal space on larger viewports while maintaining the same behavior and interaction model as other side panels.

When to use

  • Use it to show detail information of a selected item/object from the main working area (e.g. of a list).
  • Use it for navigation items such as links or menus.
  • Use it for filter options to enable users to refine their search results.
  • Use it for settings and preferences to allow users to customize their experience.
  • Use it for help and support information.
  • Use it for notifications to alert users about important updates, events or more.

Best practices

  • Don't use it for permanent information. The content should be changing based on the context.
  • The content should be scrollable if it exceeds the height of the application window.

Design

Side panel elements

  1. Title: A descriptive title for the panel based on its content.
  2. Section header (optional): Use it for breaking the panel into multiple distinct sections.
  3. Content body: A container that allows to implement any kind of different content.
  4. Exit icon: Button used to hide or collapse the side panel.

Content

The side panel can contain any content based on the use case. It is common to use it with accordions and tabs to section information without overwhelming users.

A special variation of the side panel allows for icons to represent the status of the selection, remaining visible even in the collapsed state. This is commonly used to represent data point states including event states, but is not restricted to these cases.

Side panel content

Modes

The side panel can be either closeable (the panel is completely hidden) or collapsible (still visible with summary information) according to the application/project use-case.

  • Use a closeable side panel if the content has no direct relation to the items within the main content area. Closeable side panels are typically opened by selecting an entry within the horizontal navigation.
  • Use a collapsible side panel if the content changes based on the selection made within the main content area.

Side panel collapsible

A side panel can be configured to use either over-mode or scroll-mode. In over-mode, the panel overlaps the main content area, while in scroll-mode, the panel pushes the main content area away.

Side panel modes

Extended side panel

The extended side panel can be used as a responsive container when additional space is required beyond standard panel widths.

Side panelextended

The extended side panel can remain alongside the main content, overlay it, or be used to navigate to a dedicated page.

Side panel behavior

Collapsible floating button

This is a variation of the collapsed state, specifically designed for smaller screens.

Side panel floating button

The floating button is restricted to the following configurations:

It should never be used in combination with the responsive behavior of the vertical navigation.

If data point states are available (out of service, event active, etc), a notification tag can be enabled to signal to the user that something requires attention.

Side panel floating button notification

Code

Use it together with <si-accordion> and <si-collapsible-panel> as shown in the example. If the accordion behavior of having only one open panel is not desired, simply use <si-collapsible-panel> without wrapping them in an <si-accordion>.

Usage

Within a module

import { SiSidePanelModule } from '@siemens/element-ng/side-panel';
import { SiAccordionModule } from '@siemens/element-ng/accordion';

@NgModule({
  imports: [SiAccordionModule, SiSidePanelModule, ...]
})

or as a standalone component

import { SiSidePanelComponent, SiSidePanelContentComponent } from '@siemens/element-ng/side-panel';
import { SiAccordionComponent, SiCollapsiblePanelComponent } from '@siemens/element-ng/accordion';

@Component({
  imports: [
    SiSidePanelComponent,
    SiSidePanelContentComponent
    SiAccordionComponent,
    SiCollapsiblePanelComponent,
  ]
})

All content that should be shown in the side panel needs to be wrapped in a <si-side-panel-content>.

The standard way to provide content for the side panel is by placing the <si-side-panel-content> element directly inside the <si-side-panel>:

Side panel with inner navigation

Use the siSidePanelBackButton directive to navigate from a detail view back to the previous view within the side panel:

Flexible content injection via cdkPortal and SiSidePanelService

A more flexible way is to use the cdkPortal directive from the Angular CDK Portal combined with the SiSidePanelService which allows to control the content of the side panel from anywhere within the application:

Collapsible side panel with various options

The side panel supports a mode where it collapses into a vertical bar instead of getting completely hidden. This mode can be enabled by setting [collapsible]="true" as demonstrated in the example below. There are also many other options that can be enabled on the <si-side-panel-content> like showing a search box, content actions, or status indicators.

SiSidePanelComponent API Documentation

selector
si-side-panel

Input Properties

Name Type Default Description
breakpoints
Breakpoints Specifies custom breakpoints to automatically switch mode.
The smMinimum specifies the breakpoint for the mobile view.
The lgMinimum specifies the breakpoint to allow scroll mode
(below automatically uses over mode).
The xlMinimum specifies the breakpoint to allow scroll mode
with wide size (below automatically uses over mode).
collapsed
boolean Default state of navigation
collapsible
boolean false
disableBackdrop
boolean false Whether to disable backdrop when side panel is open in over mode. When false (default), the backdrop prevents interaction with background content while preserving visual context.
enableMobile
boolean false Enable mobile drawer for small screen sizes. Should not be used in conjunction with the vertical navbar.
mode
SidePanelMode 'over' Mode of side panel (ignored below a certain width)
size
SidePanelSize 'regular' Size of side-panel
toggleItemLabel
TranslatableString $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle` Toggle icon aria-label, required for a11y

Output Properties

Name Type Description
closed
void Emits when the panel is closed
collapsedChange
boolean Default state of navigation
contentResize
ElementDimensions Emits whenever the content is resized due to opening and closing or parent resize.

Attributes and Methods

Name Type Default Description
toggleSidePanel()
() => void Toggle whether the side panel is expanded or not.

SiSidePanelContentComponent API Documentation

selector
si-side-panel-content

Input Properties

Name Type Default Description
closeButtonLabel
TranslatableString $localize`:@@SI_SIDE_PANEL.CLOSE:Close` Aria label for close button. Needed for a11y
displayMode
SidePanelDisplayMode Display mode for side panel - enables navigate or overlay functionality
enterFullscreenLabel
TranslatableString $localize`:@@SI_SIDE_PANEL.ENTER_FULLSCREEN:Full screen` Enter fullscreen aria-label, required for a11y
exitFullscreenLabel
TranslatableString $localize`:@@SI_SIDE_PANEL.EXIT_FULLSCREEN:Exit full screen` Exit fullscreen aria-label, required for a11y
heading
TranslatableString '' Header of side panel
navigateConfig
SidePanelNavigateConfig Configuration for navigate mode
primaryActions
(MenuItem | ContentActionBarMainItem)[] [] Input list of primary action items
searchable
boolean false Toggles search bar
searchPlaceholder
TranslatableString $localize`:@@SI_SIDE_PANEL.SEARCH_PLACEHOLDER:Search…` Placeholder text for search
secondaryActions
(MenuItem | MenuItem)[] [] Input list of secondary action items.
showMobileDrawerBadge
boolean false Show a badge on the mobile drawer indicating a new alert or notification
toggleItemLabel
TranslatableString $localize`:@@SI_SIDE_PANEL.TOGGLE:Toggle` Toggle icon aria-label, required for a11y
collapsible
Deprecated
boolean undefined Deprecated: This input is no longer used. The collapsible state is managed by the SiSidePanelService. This input will be removed in a future major version.
statusActions
Deprecated
StatusItem[] [] Status icons/actions

Deprecated: Use the SiSidePanelActionsComponent instead:

<​si-side-panel-content​> <​si-side-panel-actions​> <​button type="button" si-side-panel-action icon="element-alarm-background-filled" iconColor="status-danger" stackedIcon="element-alarm-tick" stackedIconColor="text-primary" (click)="action()" ​> Action <​/button​> <​/si-side-panel-actions​> <​/si-side-panel-content​>

Output Properties

Name Type Description
searchEvent
string Output for search bar input

Attributes and Methods

Name Type Default Description
toggleFullscreen()
() => void Toggle fullscreen overlay mode

SiSidePanelService API Documentation

provided in root
✓

Attributes and Methods

Name Type Default Description
close()
() => void Close side panel.
hideTemporaryContent()
() => boolean Hide side panel temporary content, reverting to state before showing temporary content.
isFullscreen()
() => boolean Indicate if side panel is in fullscreen overlay mode.
(readonly) isFullscreen$
Observable<boolean> ... Emits when fullscreen overlay mode is toggled.
isOpen()
() => boolean Indicate is side panel open.
(readonly) isOpen$
Observable<boolean> this.openSubject.asObservable() Emits on side panel is open or close.
isTemporaryOpen()
() => boolean Indicate that the side panel is open with temporary content.
open()
() => void Open side panel.
releaseBodyScrollLock()
() => void Release body scroll lock. Restores scroll when no more locks exist.
requestBodyScrollLock()
() => void Request body scroll lock. Uses reference counting to handle multiple panels.
setFullscreen(...)
(fullscreen: boolean) => void Set fullscreen overlay mode.

Parameters
setSidePanelContent(...)
(portal: (Portal<any> | undefined)) => void Set or update displayed content.

Parameters
showTemporaryContent(...)
(portal: (Portal<any> | undefined)) => Observable<void> Show side panel temporary content, opening the side panel when necessary.

Parameters
toggle()
() => void Toggle side panel open/close.
toggleFullscreen()
() => void Toggle fullscreen overlay mode.

Types Documentation

Properties
lgMinimum: number
mdMinimum: number
smMinimum: number
xlMinimum: number
xxlMinimum: number
("scroll" | "over")
Side panel mode options. - scroll: pushes content when side panel opens/closes, - over: Opens as an overlay on existing content. Just like modal.
("regular" | "wide" | "extended")
Side panel size options. - regular: 390px, - wide: 500px, - extended: responsive width that adapts to screen size. Full width on small/medium screens, scales from 480px to 912px (max) on larger screens for optimal content display
Represents a translatable string. This can either be a translation key, e.g. ACTIONS.EDIT that will be automatically translated when displayed on the UI or a pre-translated string, e.g. Edit . Equivalent to a normal string in usage and functionality.
Properties
height: number
width: number
("navigate" | "overlay")
Side panel display mode options. - navigate: allows navigation to dedicated page - overlay: allows full-screen overlay toggle
Configuration for side panel navigation.
An extension of MenuItem to support combined icons.

Deprecated: Use the SiSidePanelActionsComponent instead:

<si-side-panel-content>
  <si-side-panel-actions>
      <button
        type="button"
        si-side-panel-action
        icon="element-alarm-background-filled"
        iconColor="status-danger"
        stackedIcon="element-alarm-tick"
        stackedIconColor="text-primary"
        (click)="action()"
      >
        Action
      </button>
  </si-side-panel-actions>
</si-side-panel-content>
Properties
A function that will be invoked when clicking on the menu item. When passed as a string, use together with SiLinkActionService to receive events. This is meant for repetitive things in lists/tables/etc.
action?: (string | (param: any) => any) from MenuItemLegacy.action
Defines the content of the optional badge. Should be a number or something like "100+". if undefined or empty string, no badge is displayed
badge?: (string | number) from MenuItemLegacy.badge
Defines the background color of the badge. Default is specific to Element flavour.
badgeColor?: string from MenuItemLegacy.badgeColor
Show a dot badge without content?
badgeDot?: boolean from MenuItemLegacy.badgeDot
Defines the badge style
badgeStyle?: ("" | "inline" | "dot") from MenuItemLegacy.badgeStyle
Defines if custom content is chosen in account dropdown (otherwise accountItems are used)
customContent?: boolean from MenuItemLegacy.customContent
A boolean that lets the link know whether it is disabled or not.
disabled?: boolean from MenuItemLegacy.disabled
Whether the menu items sub-menu should open upwards instead of downwards.
dropUpwards?: boolean from MenuItemLegacy.dropUpwards
If the menu item has children you can specify if they are visible or not.
expanded?: boolean from MenuItemLegacy.expanded
Defines a href URI that the menu item will be linked to. Will be used to set the href attribute of the a element. Will only be used if link and function is not set.
href?: string from MenuItemLegacy.href
The web font icon class name (e.g. element-settings-outline).
icon?: string from MenuItemLegacy.icon
Defines if only the icon is shown in the default navigation bar.
iconOnly?: boolean from MenuItemLegacy.iconOnly
An optional id to uniquely identify the menu item.
id?: string from MenuItemLegacy.id
The value for an image src tag. Maybe a relative or absolute link to an jpg or gif image.
image?: string from MenuItemLegacy.image
A boolean that lets the link know whether it is active or not. It is useful when action() is executed instead of link route.
isActive?: boolean from MenuItemLegacy.isActive
Whether the menu item should be displayed as a heading/title, will also disable links and actions.
isHeading?: boolean from MenuItemLegacy.isHeading
A navigation bar item can have a sub-menu, if these items are set. They define the sub-menu content.
items?: MenuItem[] from MenuItemLegacy.items
The navigation extras provide additional routing options when using the router link.
navigationExtras?: NavigationExtras from MenuItemLegacy.navigationExtras
overlayIcon?: string
For single/multi choice items: the kind of icon to show.
selectionState?: ("" | "check" | "radio") from MenuItemLegacy.selectionState
The target attribute specifies where to open the linked document. If no target is specified, the link will open in the current tab.
target?: string from MenuItemLegacy.target
The title of the menu item. Can be either the title to be displayed or the translation key.
title?: TranslatableString from MenuItemLegacy.title
The optional tooltip of the link. Can be either the text to be displayed or the translation key.
tooltip?: TranslatableString from MenuItemLegacy.tooltip
Type to distinguish between check and radio menu items. Needs to be set for correct interaction and used for a11y.
type?: ("check" | "radio") from MenuItemLegacy.type
Properties
Action that called when the item is triggered. A function will be called, a string will be dispatched to the SiMenuActionService .
action: (string | (actionParam: any, source: this) => void)
Badge that is rendered after the label.
badge?: (string | number) from badge
Color of the badge (not iconBadge).
badgeColor?: string from badgeColor
Whether the menu item id disabled.
disabled?: boolean from disabled
Optional icon that will be rendered before the label.
icon?: string from icon
Badge (always red) that is attached to the icon. If value===true, an empty red dot will be rendered.
iconBadge?: (string | number | boolean) from iconBadge
ID that will be attached to the DOM node.
id?: string from id
Label that is shown to the user.
label: TranslatableString from label
type: "action"
Properties
Action that called when the item is triggered. A function will be called, a string will be dispatched to the SiMenuActionService .
action: (string | (actionParam: any, source: this) => void)
Badge that is rendered after the label.
badge?: (string | number) from badge
Color of the badge (not iconBadge).
badgeColor?: string from badgeColor
Whether the checkbox is checked.
checked: boolean
Whether the menu item id disabled.
disabled?: boolean from disabled
Optional icon that will be rendered before the label.
icon?: string from icon
Badge (always red) that is attached to the icon. If value===true, an empty red dot will be rendered.
iconBadge?: (string | number | boolean) from iconBadge
ID that will be attached to the DOM node.
id?: string from id
Label that is shown to the user.
label: TranslatableString from label
type: "checkbox"
Properties
Badge that is rendered after the label.
badge?: (string | number) from badge
Color of the badge (not iconBadge).
badgeColor?: string from badgeColor
Submenu items for this menu item.
children: MenuItem[]
Whether the menu item id disabled.
disabled?: boolean from disabled
Optional icon that will be rendered before the label.
icon?: string from icon
Badge (always red) that is attached to the icon. If value===true, an empty red dot will be rendered.
iconBadge?: (string | number | boolean) from iconBadge
ID that will be attached to the DOM node.
id?: string from id
Label that is shown to the user.
label: TranslatableString from label
type: "group"
Properties
Items that are part of the radio group.
children: [ MenuItemHeader, ...(MenuItemRadio | MenuItemHeader | MenuDivider)[] ]
type: "radio-group"
Properties
Action that called when the item is triggered. A function will be called, a string will be dispatched to the SiMenuActionService .
action: (string | (actionParam: any, source: this) => void)
Badge that is rendered after the label.
badge?: (string | number) from badge
Color of the badge (not iconBadge).
badgeColor?: string from badgeColor
Whether the radio is checked.
checked: boolean
Whether the menu item id disabled.
disabled?: boolean from disabled
Optional icon that will be rendered before the label.
icon?: string from icon
Badge (always red) that is attached to the icon. If value===true, an empty red dot will be rendered.
iconBadge?: (string | number | boolean) from iconBadge
ID that will be attached to the DOM node.
id?: string from id
Label that is shown to the user.
label: TranslatableString from label
type: "radio"
Properties
The label of the header.
label: string
type: "header"
Properties
type: "divider"
Properties
Badge that is rendered after the label.
badge?: (string | number)
Color of the badge (not iconBadge).
badgeColor?: string
Whether the menu item id disabled.
disabled?: boolean
Optional icon that will be rendered before the label.
icon?: string
Badge (always red) that is attached to the icon. If value===true, an empty red dot will be rendered.
iconBadge?: (string | number | boolean)
ID that will be attached to the DOM node.
id?: string
Label that is shown to the user.
label: TranslatableString
Implement and provide this to an SiMenuFactoryComponent to receive trigger events.
Constructor
() => {}
Methods
Will be called by SiMenuFactoryComponent if an action is defined with a string instead of a function.
Parameters
item: (MenuItemAction | MenuItemCheckbox | MenuItemRadio)
actionParam?: any
Used in events emitted from SiLinkActionService
Properties
param: any
Creates an actions container for the side-panel. This action will remain visible if the side-panel is collapsed.

Example:
<si-side-panel-content>
  <si-side-panel-actions>
      <button
        type="button"
        si-side-panel-action
        icon="element-alarm-background-filled"
        iconColor="status-danger"
        stackedIcon="element-alarm-tick"
        stackedIconColor="text-primary"
        (click)="action()"
      >
        Action
      </button>
  </si-side-panel-actions>
</si-side-panel-content>
Constructor
() => {}
Constructor
() => {}
Properties
Parameter passed to triggered menu item actions.
actionParam: InputSignal<unknown> = ...
Menu items to render. Supports legacy and current menu item models.
items: InputSignal<(readonly (MenuItem | MenuItem)[] | undefined)> = ...
linkActionService: (SiLinkActionService | null) = ...
menuActionService: (SiMenuActionService | null) = ...
Methods
Parameters
item: (MenuItem | MenuItem)
(item: (MenuItem | MenuItem)) => item is MenuItem
Parameters
item: (MenuItem | MenuItem)
Parameters
item: MenuItem
Parameters
item: (MenuItemAction | MenuItemCheckbox | MenuItemRadio)
(index: number, item: (MenuItem | MenuItem)) => (string | number)
Parameters
index: number
item: (MenuItem | MenuItem)
Constructor
() => {}
Properties
Observable which emits the link and param to run the action on.
action$: Observable<LinkAction> = this.actionSubject.asObservable()
actionSubject: Subject<LinkAction> = ...
Methods
(link: Link, param: any) => void
Emit a new link and param pair to run the action on.
Parameters
param: any

Except where otherwise noted, content on this site is licensed under MIT License.