Sheet is a content container intended for focused, fleeting workflows or tasks.
Overview
Sheet provides an ephemeral container for focused workflows and tasks. By default, it prevents interaction with the main application content through the use of a page-blocking Scrim. Set modal to true to allow interaction with the main application content while the Sheet is open.
Sample
Usage
- Display focused, ephemeral content to a user
- Present short dialogues or choice sets to a user
- Contain navigation and menu regions, administrative or platform settings
Component comparison
Sheet, Dialog, and Shell Panel provide containers for workflows, but differ in how long they remain open, where they appear, and whether users can interact with the main application content.
modalDisabled to allow interaction.modal to block interaction.Best practices
Use Sheet for short-lived interactions that users dismiss when finished. For persistent tools that users need alongside the main application content, use Shell Panel. For complex, multi-step workflows that require more space, consider Dialog.
Avoid opening multiple Sheets at once or opening another Sheet from within an open Sheet.
Recommendations
Position
On a narrow viewport, such as a mobile device, use Sheet with the position property set to "block-end". For larger viewport widths, consider setting position to either "inline-start" or "inline-end".
To limit the height of the component while position is "block-start" or "block-end", use the --calcite-sheet-height, --calcite-sheet-min-height, and --calcite-sheet-max-height CSS variables.
Conversely, to limit the width while position is "inline-start" or "inline-end", use the --calcite-sheet-width, --calcite-sheet-min-width, and --calcite-sheet-max-width CSS variables.


Non-modal behavior
Sheet is modal by default. This is appropriate when users must finish or dismiss a task before returning to the main application content.
Set modal to true, to remove the page-blocking Scrim and allow interaction with the main application content while the Sheet remains open. Use this for brief interactions that benefit from access to the surrounding application, such as adjusting filters while inspecting a map.


Accessibility
For modal Sheets, keep focus trapping enabled (focus is false by default). With focus trapping enabled, tabbing forward or backward cycles through the component's interactive elements instead of focus proceeding outside the component. Focus trapping ensures that when a modal Sheet is open, only its contents and interactive elements are focusable, which is the expected default behavior for keyboard navigation.
For non-modal Sheets, ensure users can navigate between the Sheet and the main application content with a keyboard. Provide an accessible label and a clear way to dismiss the Sheet.
Keyboard navigation
| Key | Function |
|---|---|
Tab | Moves focus to next focusable element. If the current focus is the last element and focus is false, focus will cycle to the first element. |
Tab and Shift | Moves focus to previous focusable element. If the current focus is the first element and focus is false, focus will cycle to the last element. |
Esc | If escape is false, closes the component. |
API reference
Properties
| Property | Attribute | Description | Type | Default |
|---|---|---|---|---|
| beforeClose | Passes a function to run before the component closes. | ((el: Sheet) => Promise<void>) | undefined | ||
| displayMode | display-mode | Specifies the display mode - | DisplayMode | "overlay" |
| escapeDisabled | escape-disabled | When | boolean | false |
| focusTrapDisabled | focus-trap-disabled | When | boolean | false |
| focusTrapOptions | Specifies custom focus trap configuration on the component.
| Partial<FocusTrapOptions> | undefined | ||
| height | height | Specifies the component's height. | Height | undefined | |
| heightScale | height-scale | height property instead.When | Scale | "m" |
| label | label | Specifies an accessible label for the component. | string | |
| messageOverrides | Replace localized message strings with your own strings. Note: Individual message keys may change between releases. | Record<string, unknown> | undefined | ||
| modalDisabled | modal-disabled | When | boolean | false |
| open | open | When | boolean | false |
| outsideCloseDisabled | outside-close-disabled | When | boolean | false |
| position | position | Determines where the component will be positioned. | LogicalFlowPosition | "inline-start" |
| resizable | resizable | When | boolean | false |
| topLayerDisabled | top-layer-disabled | When | boolean | false |
| width | width | Specifies the component's width. | Extract<Width, Scale> | undefined | |
| widthScale | width-scale | width property instead.When | Scale | "m" |
Slots
| Name | Description |
|---|---|
| default (unnamed) | A slot for adding custom content. |
Styles
| Name | Description |
|---|---|
| --calcite-sheet-background-color | Specifies the component's background color. |
| --calcite-sheet-corner-radius | Specifies the component's corner radius. |
| --calcite-sheet-shadow | Specifies the component's shadow. |
| --calcite-sheet-text-color | Specifies the component's text color. |
| --calcite-sheet-resize-background-color | Specifies the resize handle's background color. |
| --calcite-sheet-resize-icon-color | Specifies the resize handle's text color. |
| --calcite-sheet-scrim-background | Specifies the background color of the component's scrim. |
| --calcite-sheet-width | When |
| --calcite-sheet-max-width | When |
| --calcite-sheet-min-width | When |
| --calcite-sheet-height | When |
| --calcite-sheet-max-height | When |
| --calcite-sheet-min-height | When |
Events
| Name | Description | Behavior |
|---|---|---|
| calciteSheetBeforeClose | Fires when the component is requested to be closed and before the closing transition begins. | |
| calciteSheetBeforeOpen | Fires when the component is added to the DOM but not rendered, and before the opening transition begins. | |
| calciteSheetClose | Fires when the component is closed and animation is complete. | |
| calciteSheetOpen | Fires when the component is open and animation is complete. |
Methods
| Name | Description | Signature |
|---|---|---|
| componentOnReady | Creates a promise that resolves once the component is fully loaded. | componentOnReady(): Promise<this> |
| setFocus | Sets focus on the component's "close" button - the first focusable item. | setFocus(options?: FocusOptions): Promise<void> |
| updateFocusTrapElements | Updates the element(s) that are included in the component's focus-trap. | updateFocusTrapElements(extraContainers?:
FocusTrapOptions["extraContainers"]): Promise<void> |
| updateSize | Updates the component's size by setting its inline and/or block dimensions. Use this method to programmatically override the component's width (inline) and/or height (block).
Pass | updateSize(size: {
inline?: number | null;
block?: number | null;
}): Promise<void> |