Logo

Sheet

Edge-mounted dialog panels with sides, headers, descriptions, footers, scrollable content, programmatic opening, and RTL support.

Preview

Usage

TS

import { FrButtonModule } from '@frame-ui-ng/components/button';
import { FrInputModule } from '@frame-ui-ng/components/input';
import { FrSheetModule } from '@frame-ui-ng/components/sheet';

HTML

<button frButton type="button" [frSheetTrigger]="sheet">
  <span frButtonLabel>Open sheet</span>
</button>

<ng-template #sheet="frSheetContent" frSheetContent aria-label="Workspace settings">
  <div frSheetPanel>
    <div frSheetHeader>
      <h2 frSheetTitle>Workspace settings</h2>
      <p frSheetDescription>Keep related controls close without leaving the page.</p>
    </div>

    <div frSheetBody>
      <label>
        <span>Workspace name</span>
        <input frInput value="Component library" />
      </label>
    </div>

    <div frSheetFooter>
      <button frButton appearance="outline" type="button" frSheetClose>
        <span frButtonLabel>Cancel</span>
      </button>
      <button frButton type="button" [frSheetClose]="'saved'">
        <span frButtonLabel>Save changes</span>
      </button>
    </div>
  </div>
</ng-template>

Examples

Basic

Use a sheet for contextual controls that should appear beside the current page instead of replacing it.

Side

Use the side input to choose whether the sheet enters from the top, right, bottom, or left edge.

No Close Button

Hide the default close icon when the flow should resolve through explicit footer actions.

Scrollable

Set scrollable when a sheet contains long content but should keep the panel dimensions stable.

Programmatic

Open a sheet from code and let FrSheetConfig provide the shell title, description, footer actions, side, and body component inputs.

RTL

Pass the CDK direction through the sheet content and use logical placement for RTL layouts.

Custom Styling

Override sheet tokens on a trigger, the panel, or an ancestor to tune the sheet surface, size, border, shadow, and spacing.

Token Inspector

Open the sheet, then hover the trigger, panel, header, title, description, body, or footer to inspect the tokens behind each part.

Design Tokens

Use these CSS custom properties to tune sheet backdrop, surface, sizing, spacing, close button states, and overlay layering.

SCSS

--frame-sheet-backdrop-blur: 2px;
--frame-sheet-backdrop-bg: rgb(0 0 0 / 0.5);
--frame-sheet-bg: var(--frame-background, #fff);
--frame-sheet-border: var(--frame-border, #e5e7eb);
--frame-sheet-color: var(--frame-foreground, #09090b);
--frame-sheet-muted-color: var(--frame-muted-foreground, #71717a);
--frame-sheet-shadow: 0 24px 80px rgb(0 0 0 / 0.2), 0 8px 24px rgb(0 0 0 / 0.14);
--frame-sheet-padding: 1.5rem;
--frame-sheet-gap: 1rem;
--frame-sheet-inline-size: min(100vw, 28rem);
--frame-sheet-block-size: min(100dvh, 28rem);
--frame-sheet-close-bg: transparent;
--frame-sheet-close-color: var(--frame-muted-foreground, #71717a);
--frame-sheet-close-hover-bg: var(--frame-muted, #f4f4f5);
--frame-sheet-close-hover-color: var(--frame-foreground, #09090b);
--frame-sheet-z-index: 1000;