Panel
Panel widget is a general purpose container which may be used to contain child items or html.
const panel = new Panel({ appendTo : targetElement, width : '40em', header : { title : 'Panel header', iconCls : 'fa fa-users' }, tools : { destroy : { cls : 'fa fa-times', // 'up.' means look in owning widgets. // Implemented on the Panel handler : 'up.onPanelCloseClick', tooltip : 'Close this Panel' } }, tbar : { items : { save : { icon : 'fa fa-save', tooltip : 'Save content' }, remove : { icon : 'fa fa-trash', tooltip : 'Delete content' }, change : { icon : 'fa fa-arrow-left', tooltip : 'Move toolbar', onClick : 'up.onChangeButtonClick' } } }, bbar : { items : { myButtonRef : { text : 'Button in bottom toolbar', rendition : 'filled' } } }, html : `Bacon ipsum dolor amet flank ribeye ham hock rump, alcatra pork belly pancetta leberkas bacon shoulder meatloaf ball tip pig. Tongue jerky meatloaf pancetta pork sirloin. Hamburger corned beef ball tip cupim sirloin frankfurter tri-tip. Swine kevin ham hock, drumstick flank pig shoulder shankle. Tri-tip pork chop fatback turducken pork salami. Tongue boudin salami flank bacon sirloin`, // Close Tool's handler resolved here onPanelCloseClick(e, panel) { panel.destroy(); }, // Change button's onClick handler resolved here onChangeButtonClick({ source : button }) { const dock = { t : 'left', r : 'top', b : 'right', l : 'bottom' }[this.tbar.dock[0]]; this.tbar.dock = dock; button.icon = `fa-arrow-${dock === 'bottom' ? 'right' : 'left'}`; } }); A Panel may also dock a header and footer either at top/bottom or left/right:
const panel = new Panel({
items : {
customerName : { type : 'text', placeholder: 'Text' },
},
header : {
title : 'Customer Details'
}
});
Toolbars with buttons and other widgets
The Panel has two built-in toolbars, tbar and bbar, which are toolbars docked to the top and bottom of the panel. You can easily add any widgets to them using the code below:
const panel = new Panel({
title : 'A Test Panel',
items : {
customerName : {
type : 'text', placeholder: 'Text'
},
},
bbar : {
items : {
proceedButton : {
text : 'Proceed',
onClick : () => {
alert('Proceeding!');
}
}
}
});
Panel with a form
You can use a Panel to create forms containing any Bryntum widgets. The Panel can load data into its field from a record since it subclasses the Container which has a record config.
//<code-header> CSSHelper.insertRule('.b-panel { --b-panel-header-background : var(--b-primary-40); --b-toolbar-background : transparent; }', targetElement); CSSHelper.insertRule('.user-panel header { height:6em; }', targetElement); CSSHelper.insertRule('.user-panel header.b-panel-header, .user-panel .b-panel-header .b-header-title { overflow:visible; }', targetElement); CSSHelper.insertRule('.user-panel .b-panel-content { padding-top:0; }', targetElement); CSSHelper.insertRule('.user-panel .b-has-label .b-label { font-weight:600; }', targetElement); CSSHelper.insertRule(`.verified-badge { position: absolute; font-weight: 400; top: 7.5em; inset-inline-end: .25em; color: rgb(255, 255, 255); background: rgb(34, 150, 243); border-radius: 50%; display: flex; align-items: center; justify-content: center; width: 1.25em; height: 1.25em; }`, targetElement); CSSHelper.insertRule(`.avatar { margin-inline-start: 1em; border-radius: 50%; width: 6em; outline: 3px solid var(--b-panel-background); position: relative; top: 3em; background-color : var(--b-primary-90); }`, targetElement); //</code-header> const userPanel = new Panel({ appendTo : targetElement, // Panel CSS class applied to the panel element cls : 'user-panel', // Optional: set a width or layout if needed width : 600, header : { height : '5em', title : `<div> <img src="data/Grid/images/transparent-users/emilia.png" alt="Emilia" class="avatar"/> <span data-btip="Verified user" class="verified-badge">✓</span> </div>` }, // A top toolbar with quick actions (Copy link, View profile) tbar : [ '->', { type : 'button', text : 'Copy link', cls : 'b-transparent', icon : 'fa fa-link', onAction : () => { // Handler for copying the user’s profile link to clipboard Toast.show('Copy link clicked'); } }, { type : 'button', text : 'View profile', cls : 'b-transparent', icon : 'fa fa-user', onAction : () => { // Handler for viewing user profile Toast.show('View profile clicked'); } } ], items : { // Container for the form fields (name, email, username) userForm : { type : 'container', labelPosition : 'align-before', cls : 'user-form-container', items : { header : { type : 'widget', style : 'flex-direction: column; grid-column : span 4', html : ` <h2>Emilia Baker</h2> <div>Regional Sales</div> ` }, firstName : { type : 'text', label : 'First name', name : 'firstName', value : 'Emilia' }, lastName : { type : 'text', label : 'Last name', name : 'lastName', value : 'Baker' }, email : { type : 'text', label : 'Email address', name : 'email', value : 'emilia@bigcorp.com', span : 3 }, username : { type : 'text', label : 'Username', name : 'username', value : 'emilia.baker', span : 3 } } } }, // Bottom toolbar with Delete, Cancel, and Save bbar : { items : { deleteUser : { type : 'button', text : 'Delete user', cls : 'delete-user-btn', color : 'b-red', style : 'margin-inline-end: auto;', // push to the left onAction() { // Handler for deleting the user Toast.show('Delete user clicked'); } }, cancel : { type : 'button', text : 'Cancel', onAction() { // Cancel changes Toast.show('Cancel clicked'); } }, save : { type : 'button', rendition : 'filled', text : 'Save changes', onAction() { // Save form changes const htmlFormatted = Object.entries(userPanel.values) .map(([key, value]) => `<b>${key}:</b> ${value}<br>`) .join(''); Toast.show(`Save changes clicked<br>${htmlFormatted}`); } } } } }); Collapsible Panel
Panels can also be collapsible. The collapsible panel can be collapsed and expanded by clicking the icon on the far-right end of the header.
// Description: This file is an example of the Panel widget with collapsible feature. const invoicePanel = new Panel({ appendTo : targetElement, cls : 'invoice-panel', title : 'Create Invoice', labelPosition : 'align-before', revealed : true, collapsible : { direction : 'up' }, width : 600, items : { invoiceNumber : { type : 'textfield', label : 'Invoice Number', value : '01020304' }, fiscalYear : { type : 'combo', label : 'Fiscal Year', items : ['2022', '2023', '2024', '2025'], value : '2023', editable : false }, invoiceStatus : { type : 'combo', label : 'Status', items : ['Draft', 'Received', 'Paid'], value : 'Received', editable : false }, invoiceType : { type : 'combo', label : 'Type', items : ['Invoice', 'Credit Note', 'Receipt'], value : 'Invoice', editable : false }, amount : { type : 'numberfield', label : 'Amount', ref : 'amount', value : '10,000.00', step : 1000, format : { style : 'currency', currency : 'USD' }, labelWidth : '50%' }, invoiceDate : { type : 'datefield', label : 'Invoice Date', ref : 'invoiceDate', // Note: month is 0-based, so (2022, 1, 1) is 01 Feb 2022 value : new Date(2022, 1, 1) }, invoiceNote : { type : 'textarea', label : 'Note', emptyText : 'Add your note here...', span : 4, height : 100 } }, bbar : { items : { save : { type : 'button', text : 'Save', onAction : () => { // Gather field values from the panel const wm = invoicePanel.widgetMap, data = { invoiceNumber : wm.invoiceNumber.value, fiscalYear : wm.fiscalYear.value, invoiceStatus : wm.invoiceStatus.value, invoiceType : wm.invoiceType.value, amount : wm.amount.value, invoiceDate : wm.invoiceDate.value, invoiceNote : wm.invoiceNote.value }, htmlFormattedData = Object.entries(data) .map(([key, value]) => `<b>${key}:</b> ${value}<br>`) .join(''); Toast.show(`Invoice saved!<br>${htmlFormattedData}`); } } } } }); Panel as a drawer
Panels can be used as drawers which slide out from the side of the viewport, by using the drawer config:
const button = new Button({ appendTo : targetElement, text : 'Show drawer', ref : 'showButton', onClick() { const panel = this.panel || (this.panel = new Panel({ drawer : { side : 'end', autoClose : { // Close on click outside, but *not* when clicking // on our show button mousedown : ':not(button[data-ref="showButton"])' } }, title : 'Settings', rootElement : document.body, width : 400, labelPosition : 'align-before', items : { name : { type : 'text', label : 'Name' }, email : { type : 'text', label : 'Email' }, phone : { type : 'text', label : 'Phone' }, address : { type : 'text', label : 'Address' } }, bbar : { items : { close : { text : 'Close', icon : 'fa fa-times', style : 'margin-inline-start: auto', onClick : () => { panel.hide(); } } } } })); panel.show(); } }); Panel with strips
Panels can have strips docked to the top, right, bottom, or left. Strips are widgets that are docked to the panel's sides. The higher the weight assigned to a widget, the closer that widget will be to the panel body.
This is useful for adding slide-out containers to the panel. For example, a settings panel shown on the right as seen below (click the hamburger icon to show the settings panel).
//<code-header> CSSHelper.insertRule('.strips-panel .b-sidebar .b-panel-body-wrap { background : var(--b-neutral-97)}', targetElement); CSSHelper.insertRule('strong { font-weight : 600 !important; }', targetElement); //</code-header> // This example show the Panel widget using the strips feature. const invoicePanel = new Panel({ appendTo : targetElement, cls : 'strips-panel', title : 'Application Form', width : 700, height : 270, labelPosition : 'align-before', items : { name : { type : 'textfield', label : 'Name', value : 'Johnny Coder' }, skills : { type : 'combo', label : 'Skills', multiSelect : true, items : ['Coding', 'UX', 'Design', 'Database'], value : ['Coding', 'UX'], editable : false }, framework : { type : 'radiogroup', label : 'Favorite JS Framework', value : 'D', inline : true, options : { A : 'React', B : 'Angular', C : 'Vue', D : 'Svelte' } }, jsOrTs : { type : 'radiogroup', label : 'JS or TS', hidden : true, value : 'B', name : 'jsOrTs', inline : true, options : { A : 'JS', B : 'TS' } }, tabsOrSpaces : { type : 'radiogroup', label : 'Tabs or Spaces', hidden : true, value : 'A', name : 'tabsOrSpaces', inline : true, options : { A : 'Tabs', B : 'Spaces' } } }, strips : { right : { type : 'panel', dock : 'right', collapsible : true, width : '15em', header : false, cls : 'b-sidebar', collapsed : true, layout : 'vbox', labelPosition : 'before', items : { label : { tag : 'strong', html : 'Settings' }, toughQuestion : { type : 'slidetoggle', label : 'Show tough questions', onChange : 'up.onShowToughQuestionsChange' } } } }, tools : [ { cls : 'fa fa-bars', onClick : 'up.onToggleSettingsClick' } ], onToggleSettingsClick() { this.strips.right.toggleCollapsed(); }, onShowToughQuestionsChange({ value }) { this.widgetMap.jsOrTs.hidden = !value; this.widgetMap.tabsOrSpaces.hidden = !value; } }); Configs
Configs are options you supply in a configuration object when creating an instance of this class-
This config is used with PanelCollapserOverlay to programmatically control the visibility of the panel's body. In this mode of collapse, the body of a collapsed panel is a floating overlay. Setting this config to
truewill show this element, whilefalsewill hide it. -
Set
trueto add a border to this container's element. -
The CSS class(es) to add when HTML content is being applied to this widget.
-
An optional CSS class to add to child items of this container.
-
Custom style spec to add to element
Has a corresponding runtime style property.
-
Update fields if the record changes
-
Can be set to
trueto make a focus of a focusable encapsulating element relay focus down into a focusable child. This is normallyfalseto allow mousedown to begin text selection in Popups. -
Number of columns to use in a grid layout. Applied as
grid-template-columns: repeat(n, auto). Also applies theb-columnsCSS class to the container.Has a corresponding runtime gridColumns property.
-
Specify
trueto isolate record changes to this container and its ancestors. Prevents record updates from propagating up from here and also prevents record updates from parent from propagating down to us. -
A config object containing default settings to apply to all child widgets.
-
By default, tabbing within a Panel is not contained, ie you can TAB out of the Panel forwards or backwards. Configure this as
trueto disallow tabbing out of the Panel, and make tabbing circular within this Panel. -
The HTML content that coexists with sibling elements which may have been added to the contentElement by plugins and features. When specifying html, this widget's element will also have the htmlCls class added to its classList, to allow targeted styling.
Has a corresponding runtime content property.
-
Object to apply to elements dataset (each key will be used as a data-attribute on the element)
Has a corresponding runtime dataset property.
-
A createElement config object or HTML string from which to create the Widget's element.
Has a corresponding runtime element property.
-
Widget id, if not specified one will be generated. Also used for lookups through Widget.getById
Has a corresponding runtime id property.
-
Element (or element id) to insert this widget before. If provided, appendTo config is ignored.
Has a corresponding runtime insertBefore property.
-
Element (or element id) to append this widget element to, as a first child. If provided, appendTo config is ignored.
Has a corresponding runtime insertFirst property.
-
The tag name of this Widget's root element
-
Internal listeners, that cannot be removed by the user.
-
Only valid if this Widget is floating. Set to
trueto centre the Widget in browser viewport space. -
Only valid if this Widget is floating or positioned. Element, Widget or Rectangle to which this Widget is constrained.
-
Set to
trueto move the widget out of the document flow and position it absolutely in browser viewport space. -
Defines what to do if document is scrolled while Widget is visible (only relevant when floating is set to
true). Valid values: ´null´: do nothing, ´hide´: hide the widget or ´realign´: realign to the target if possible. -
When this widget is a child of a Container, it will by default be participating in a flexbox layout. This config allows you to set this widget's align-self style.
Has a corresponding runtime alignSelf property.
-
Controls whether the panel is collapsed (the body of the panel is hidden while only the header is visible). Only valid if the panel is collapsible.
Has a corresponding runtime collapsed property.
-
When this widget is a child of a Container, it will by default be participating in a flexbox layout. This config allows you to set this widget's flex style. This may be configured as a single number or a
<flex-grow> <flex-shrink> <flex-basis>format string. numeric-only values are interpreted as theflex-growvalue.Has a corresponding runtime flex property.
-
Widget's height, used to set element
style.height. Either specify a valid height string or a number, which will get 'px' appended. We recommend using CSS as the primary way to control height, but in some cases this config is convenient.Has a corresponding runtime height property.
-
Widget's margin. This may be configured as a single number or a
TRBLformat string. numeric-only values are interpreted as pixels.Has a corresponding runtime margin property.
-
A widgets weight determines its position among siblings when added to a Container. Higher weights go further down.
-
Widget's width, used to set element
style.width. Either specify a valid width string or a number, which will get 'px' appended. We recommend using CSS as the primary way to control width, but in some cases this config is convenient.Has a corresponding runtime width property.
-
When this Widget configuration is used in the Grid's RowExpander feature's
widgetconfig, provide the field on the expanded record to use for populating this widget's store (if applicable) -
Event that should be considered the default action of the widget. When that event is triggered the widget is also expected to trigger an
actionevent. Purpose is to allow reacting to most widgets in a coherent way. -
The name of the property to set when a single value is to be applied to this Widget. Such as when used in a grid WidgetColumn, this is the property to which the column's
fieldis applied. -
Set to
falseto disable localization of this object. -
Set to
trueto apply the default mask to the widget. Alternatively, this can be the mask message or a Mask config object. -
Prevent tooltip from being displayed on touch devices. Useful for example for buttons that display a menu on click etc, since the tooltip would be displayed at the same time.
-
If you are rendering this widget to a shadow root inside a web component, set this config to the shadowRoot. If not inside a web component, set it to
document.body -
Set to
falseto not show the tooltip when this widget is disabled -
Update assigned record automatically on field changes
-
Specify
trueto match fields by theirnameproperty only when assigning a record, without falling back toref.Has a corresponding runtime strictRecordMapping property.
-
The class to instantiate to use as the scrollable. Defaults to Scroller.
-
The
bottomCSS absolute position for this widget. If specified, the widget is implicitly configured as positionable. -
Programmatic control over which column to start in when used in a grid layout.
Has a corresponding runtime column property.
-
The
inset-inline-startCSS absolute position for this widget. If specified, the widget is implicitly configured as positionable. -
Set this config to
falseto disable batching DOM updates on animation frames for this widget. This has the effect of synchronously updating the DOM when configs affecting the rendered DOM are modified. Depending on the situation, this could simplify code while increasing time spent updating the DOM. -
The
inset-inline-endCSS absolute position for this widget. If specified, the widget is implicitly configured as positionable. -
Programmatic control over how many columns to span when used in a grid layout.
Has a corresponding runtime span property.
-
The
topCSS absolute position for this widget. If specified, the widget is implicitly configured as positionable.
Properties
Properties are getters/setters or publicly accessible variables on this class-
Identifies an object as an instance of Delayable class, or subclass thereof.
-
Identifies an object as an instance of Events class, or subclass thereof.
-
Identifies an object as an instance of KeyMap class, or subclass thereof.
-
Identifies an object as an instance of Localizable class, or subclass thereof.
-
Identifies an object as an instance of Panel class, or subclass thereof.
-
Identifies an object as an instance of RTL class, or subclass thereof.
-
Identifies an object as an instance of State class, or subclass thereof.
-
Identifies an object as an instance of Toolable class, or subclass thereof.
-
A class property getter for the default values of internal properties for this class.
-
Returns an array containing all existing Widgets. The returned array is generated by this call and is not an internal structure.
-
This property yields
trueif the currently focused element has been reached through other means than mouse click. If theactiveElementmatches:focus-visible. -
Get/set the recomposeAsync config for all widgets. Setting this value will set the config for all existing widgets and will be the default value for newly created widgets. Set this value to
nullto disable the default setting for new widgets while leaving existing widgets unaffected.Has a corresponding recomposeAsync config.
-
An empty array that can be used as a default value.
-
An empty object that can be used as a default value.
-
Identifies an object as an instance of Container class, or subclass thereof.
-
Identifies an object as an instance of Panel class, or subclass thereof.
-
Identifies an object as an instance of Widget class, or subclass thereof.
-
Returns the first widget in this Container.
-
Number of columns to use in a grid layout. Applied as
grid-template-columns: repeat(n, auto). Also applies theb-columnsCSS class to the container.Has a corresponding gridColumns config.
-
This property is
trueuntil the container's initialitemsconfig has been processed. This property is set tofalseby theupdateItemsmethod. -
Returns
trueif currently setting values. Allow fields to change highlighting to distinguishing between initially setting values and later on changing values. -
Returns
trueif all contained fields are valid, otherwisefalse -
Returns the last widget in this Container.
-
Set HTML content safely, without disturbing sibling elements which may have been added to the contentElement by plugins and features. When specifying html, this widget's element will also have the htmlCls added to its classList, to allow targeted styling.
Has a corresponding content config.
-
Get widgets elements dataset or assign to it
Has a corresponding dataset config.
-
Get this widget's encapsulating HTMLElement, which is created along with the widget but added to DOM at render time.
Has a corresponding element config.
-
Get this widget's primary focus holding element if this widget is itself focusable, or contains focusable widgets.
-
Returns an object describing the focus and keyboard navigation aspects of this widget's focusElement.
-
Returns this widget's focusElement if that element can currently be given focus (e.g., this widget is not disabled, or hidden).
-
This property is set to
trueafter processing the initial paint for the widget. It remainsfalseduring the initial paint. The intended use for this flag is to avoid processing that will be handled by the first paint (similar to not firing events during the widget's initial configuration). If this field istrue, the initial paint has already taken place, otherwise, it has yet to run. This field differs fromisPaintedwhich checks that the widget's element is attached to the DOM. -
Get/set widgets id
Has a corresponding id config.
-
Element (or element id) to insert this widget before. If provided, appendTo config is ignored.
Has a corresponding insertBefore config.
-
Element (or element id) to append this widget element to, as a first child. If provided, appendTo config is ignored.
Has a corresponding insertFirst config.
-
The child element which scrolls if any. This means the element used by the scrollable.
-
Returns the
DomClassListfor this widget's class. This object should not be mutated. -
Get/set widgets elements style. The setter accepts a cssText string or a style config object, the getter always returns a CSSStyleDeclaration
Has a corresponding style config.
-
Override to attach the keyMap keydown event listener to something else than this.element
-
Override to make keyMap resolve subcomponent actions to something else than this.features.
-
Get/set this widget's
align-selfflexbox setting. This may be set to modify how this widget is aligned within the cross axis of a flexbox layout container.Has a corresponding alignSelf config.
-
Controls whether the panel is collapsed (the body of the panel is hidden while only the header is visible). Only valid if the panel is collapsible.
Has a corresponding collapsed config.
-
This property is
trueif the panel is currently collapsing. -
This property is
trueif the panel is currently either collapsing or expanding. -
This property is
trueif the panel is currently expanding. -
Get element's
offsetHeightor sets itsstyle.height, or specified height if element no created yet.Has a corresponding height config.
-
Get element's margin property. This may be configured as a single number or a
TRBLformat string. numeric-only values are interpreted as pixels.Has a corresponding margin config.
-
Accessor to the Scroller which can be used to both set and read scroll information.
Has a corresponding scrollable config.
-
Get elements
offsetWidthor sets itsstyle.width, or specified width if element not created yet.Has a corresponding width config.
-
Returns a copy of the full configuration which was used to configure this object.
-
This property is set to
truebefore theconstructorreturns. -
This property is set to
trueon entry to the destroy method. It remains on the objects after returning fromdestroy(). If isDestroyed istrue, this property will also betrue, so there is no need to test for both (for example,comp.isDestroying || comp.isDestroyed). -
Get id assigned by user (not generated id)
-
Get/set element's disabled state. Set to
'inert'to also set theinertDOM attribute.Has a corresponding disabled config.
-
true if no id was set, will use generated id instead (widget1, ...). Toggle automatically on creation
-
Get the global LocaleHelper
-
Get the global LocaleManager
-
Specify
trueto match fields by theirnameproperty only when assigning a record, without falling back toref.Has a corresponding strictRecordMapping config.
-
Returns
trueif this instance implements the State interface. -
Returns
trueif this instance is ready to participate in state activities. -
Gets or sets a component's state
-
Returns an object whose truthy keys are the config properties to include in this object's state.
-
Determines visibility by checking if the Widget is hidden, or any ancestor is hidden and that it has an element which is visible in the DOM
-
Programmatic control over which column to start in when used in a grid layout.
Has a corresponding column config.
-
Returns
trueif this class usescompose()to render itself. -
This widget's twin that is placed in an overflow menu when this widget has been hidden by its owner, typically a Toolbar due to overflow. The
overflowTwinis created lazily by ensureOverflowTwin. -
Programmatic control over how many columns to span when used in a grid layout.
Has a corresponding span config.
-
Get this Widget's next sibling in the parent Container, or, if not in a Container, the next sibling widget in the same parentElement.
-
Get this Widget's parent when used as a child in a Container,
-
Get this Widget's previous sibling in the parent Container, or, if not in a Container, the previous sibling widget in the same parentElement.
-
The number of visible child items shown in this Container.
-
An object which contains a map of descendant widgets keyed by their ref. All descendant widgets will be available in the
widgetMap.
Functions
Functions are methods available for calling on the class-
This optional class method is called when a class is mixed in using the mixin() method.
-
Collapse the panel.
-
Expand the panel.
-
Clear caches, forces all calls to fromCache to requery dom. Called on render/rerender.
-
Internal function used to hook destroy() calls when using thisObj
-
Internal function used restore hooked destroy() calls when using thisObj
-
Auto detaches listeners registered from start, if set as detachable
-
Internal function used to run a callback function after an event is triggered
-
Removes all listeners registered to this object by the application.
-
Only valid for floating Widgets. Moves to the front of the visual stacking order.
-
Called on keyMapElement keyDown
-
Called by the Base constructor after all configs have been applied.
-
This method is called following an update to the widget's rendered DOM.
-
Disable the widget
-
Enable the widget
-
Unmask the widget
Events
Events are triggered for certain actions in this class and can be listened for to react to those actions in your code-
This event is fired after a widget's elements have been synchronized due to a direct or indirect call to recompose, if this results in some change to the widget's rendered DOM elements.
Event handlers
Event handlers are callbacks called as a result of certain actions in this class-
This event is called after a widget's elements have been synchronized due to a direct or indirect call to recompose, if this results in some change to the widget's rendered DOM elements.
Type definitions
CSS variables
CSS variables that can be set to adjust appearance| Name | Description |
|---|---|
| --b-default-panel-transition | The default set of transitions which applies to the panel's encapulating element Subclasses may add their own using this variable followed by their own transitions. |
| --b-panel-background | Panel background-color |
| --b-panel-border | Panel border |
| --b-panel-bottom-toolbar-background | Bottom toolbar background |
| --b-panel-bottom-toolbar-padding | Bottom toolbar padding |
| --b-panel-drawer-box-shadow | Box-shadow for drawer panels |
| --b-panel-gap | Gap between items in the panel |
| --b-panel-header-background | Header background |
| --b-panel-header-border-bottom | Header bottom border |
| --b-panel-header-color | Header color |
| --b-panel-header-font-size | Header font-size |
| --b-panel-header-font-weight | Header font-weight |
| --b-panel-header-gap | Gap between the header's different parts |
| --b-panel-header-padding | Header padding |
| --b-panel-header-text-align | Header text-align |
| --b-panel-overlay-border | Panel border when overlaid |
| --b-panel-overlay-box-shadow | Box-shadow for overlaid panel |
| --b-panel-padding | Panel padding |
| --b-panel-top-toolbar-border-radius | Top toolbar border-radius (only applies when there is a header) |
| --b-panel-top-toolbar-margin-inline | Top toolbar margin-inline (only applies when there is no header) |
| --b-panel-with-header-padding | Panel padding when there is a header |