Skip to content
Dark

Modal

Modal interrupts the screen with a decision that has to be made before anything else continues.

Preview

A dialog that interrupts and asks for a decision. One primary action, one secondary, a close. If the answer can wait, or there is no decision, this is the wrong component.

Modal, Title and Slot
340 x 344, radius 32 32 0 0, padding 24 20 20
Title of Modal
Slot, 300 x 140
ButtonButton

Three parts at gap 16: a 32 title row, the 140 slot, a 96 button column. Height hugs inside 24 of top padding and 20 at the bottom. The stroke sits outside and costs no size. The title fills the row, the 32 close takes what it needs. Radius is 32 on the top two corners, 0 on the bottom two, on a component the file calls a centred dialog.

Slot

The middle block is a real Figma slot, a hole with no fill and no content of its own. Everything above and below is fixed; the slot is the only thing a decision changes.

Slot filled with copy
300 x 140, buttons 44 at gap 8
Delete this file?
Whatever the decision needs: a line of copy, a list, a form, a preview.
DeleteCancel

The pink marks an empty slot in the docs, not something the component ships. The buttons are a Brand Filled and a Brand Link at md, stacked, not side by side, so a long label never truncates.

Modal Sheet

A separate component for the other kind of interruption: the bottom sheet, for secondary flows and pickers. The default overlay on both platforms, a sheet with detents on iOS, a ModalBottomSheet on Android.

Modal Sheet, no properties
340 x 34, back sheet 260 x 11, front sheet 340 x 23

The hatch is this page's ground. The sheet is white on glass, so a white stage leaves nothing to see and nothing for the blur to act on. Only the top edge ships: 11 of a second sheet behind, then 23 of the front one. The Drag Handle sits at y 34 inside a 34 tall frame that clips, so it never draws. liquidGlass/mid uses refraction and dispersion CSS cannot express, so this runs a 72 percent fill with a 15px blur, an approximation, not a match.

Properties

Neither component is a variant set. Modal has two properties, Modal Sheet has none.

Property
Type
Default
Title
Text, on Modal
Title of Modal
Slot
Slot, on Modal
empty, 300 x 140

No State axis, no size axis, no boolean. The two buttons are Button instances with their own properties: a destructive dialog swaps the first to Type Error on the instance, not here. The close is a Compact Button at Style Transparent. A modal with no decision is a Toast or an Alert.

Tokens

Every value the two components read, resolved to their primitive.

Token
Light
Dark
Applied to
bg/white-0
#FFFFFF
#0E0E0F
Modal surface, sheet front
border/soft-100
#E9E9EA
#2F2F31
1px outside stroke on the modal
text/strong-950
#0E0E0F
#FFFFFF
Title
fg/soft-500
#8E8E93
#AEAEB2
Close glyph
brand/base
#155DFC
#2B7FFF
Filled button, link label
static/static-white-0
#FFFFFF
#FFFFFF
Filled button label
bg/glass
white 72%
#242426 72%
Sheet ground
alpha/white/alpha-24
white 24%
white 24%
Back sheet, one value both modes
alpha/black/alpha-16
black 16%
black 16%
Drag handle, one value both modes

The last two are single mode primitives: the back sheet stays white 24 percent and the drag handle black 16 percent even on a dark sheet, though the handle never renders. Geometry runs on radius/3xl 32, spacing/6 24, spacing/5 20, spacing/4 16 and spacing/2 8, icon stroke 2 and 2.5 on the close.

Guidelines

Do
Discard draft?
DiscardKeep editing

Put the decision in the title and the verb on the button. Discard and Keep editing say what happens; OK and Cancel make the user re-read the title.

Don't
Are you sure?
OKCancel

Do not ask a question the buttons cannot answer. Sure about what, and what does OK agree to?

One modal at a time, never one opened from another. The close button and the secondary action do the same job here, so give the secondary a real label, not a second dismiss. Reach for Modal Sheet when the content is a list or a picker: a sheet is easier to reach with a thumb and easier to leave.