Skip to main content

Sheet

Requires configuration of the Customer Privacy capability to be rendered.

The Sheet component displays essential information for customers at the bottom of the screen, appearing above other elements. Use it sparingly to avoid distracting customers during checkout. This component requires access to Customer Privacy API to be rendered.

The library automatically applies the WAI-ARIA Dialog pattern to both the activator and the sheet content.

Anchor to accessibilityLabel
accessibilityLabel
string

A label to describe the purpose of the sheet that is announced by screen readers. If not set, it will use the value of heading.

Anchor to defaultOpen
defaultOpen
boolean

Indicates whether the sheet should be open by default.

This property is necessary in some cases, but its usage is generally discouraged due to potential negative impacts on user experience.

Developers should:

  • Only set this property to true when there are vitally important behaviors of the application that depend on the user interacting with the sheet.
  • Make every effort to conditionally hide the sheet based on the state of checkout. An explicit example is custom privacy consent, where the sheet should only be displayed when consent is necessary and has not yet been explicitly given by the user.

This property is useful for when the Sheet needs to be rendered on the page load and not triggered by a user action. The property should only take effect when the Sheet is rendered for the first time.

Anchor to heading
heading
string

A heading rendered at the top of the sheet.

string

A unique identifier for the component.

Anchor to onHide
onHide
() => void

Callback fired when the sheet is closed.

Anchor to onShow
onShow
() => void

Callback fired when the sheet is opened.

Anchor to primaryAction
primaryAction
RemoteFragment

The primary action to perform, provided as a Button component. The property allows up to two buttons to be rendered.

Anchor to secondaryAction
secondaryAction
RemoteFragment

The secondary action to perform, provided as a Button component. The property allows only one button to be rendered.

Examples
import {
reactExtension,
Link,
Sheet,
TextBlock,
} from '@shopify/ui-extensions-react/checkout';

// This component requires access to Customer Privacy API to be rendered.

export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);

function Extension() {
return (
<Link
overlay={
<Sheet
id="basic-sheet"
heading="Basic Sheet"
accessibilityLabel="A sheet with text content"
>
<TextBlock>
Basic Sheet Content
</TextBlock>
</Sheet>
}
>
Open sheet
</Link>
);
}

Preview

Anchor to shopify-controlled-surfacesShopify-controlled surfaces

To prevent disruptions during checkout, we maintain strict design control over key areas of the Sheet component. These Shopify-controlled elements include:

Locations of elements

The Sheet elements (header, content, action buttons, and dismiss button) are strategically positioned and sized to present vital information upfront.


Padding and spacing


Maximum height

To balance customer attention and task completion, a maximum height is set for the Sheet component.

When content pushes the sheet to exceed this limit, the following UI behaviors are triggered:


Heading and content are scrollable


Expand pill appears to allow customers to view the entire content


Actions slot and dismiss button remain fixed

Content

For the best customer experience, ensure content is brief and to the point.

Various strategies can be employed to avoid content scrolling.


Use short content


Use small text size


Remove the header


Actions slot

The actions slots allows customers to make decisions and is split into primary and secondary sections.


Primary section

Contains primary actions for customer decisions on the sheet’s prompt. Up to two buttons are allowed. Keep the button’s content brief so that it doesn’t wrap to more than one line.


Secondary section

Contains action that is unrelated to the sheet’s prompt. Only one button is allowed. A modal can be activated when engaging with the secondary action. Keep the button’s content brief so that it doesn’t wrap to more than one line.


Consent, denial of consent, and sheet dismissal

Consent

When a customer expresses consent by pressing the acceptance button, cookies will load and the sheet should not re-appear on refresh.


Denial of consent

When a customer expresses denial of consent by pressing the rejection button, cookies will not load and the sheet will not re-appear on refresh.


Sheet dismissal

When a customer neither grants nor denies consent by pressing the dismiss button, cookies will not load and the sheet will re-appear on refresh.

Was this page helpful?