Popover
Popovers are similar to tooltips. They are small overlays that open on demand after a user interaction. The difference is that the popover can contain more content, without cluttering the page. They must be specified inside the overlay prop of an activator component (Button, Link or Pressable).
The library takes care of applying the WAI-ARIA Popover Widget pattern automatically for the activator and the popover content.
Anchor to popoverpropsPopoverProps
- Anchor to positionpositionpositionPopoverPositionPopoverPositionDefault: 'blockStart'Default: 'blockStart'
Position the Popover relative to the activator.
- Anchor to alignmentalignmentalignmentAlignmentAlignmentDefault: 'center'Default: 'center'
Align the Popover in the axis determined by the position.
- Anchor to onOpenonOpenonOpen() => void() => void
Callback to run when the Popover is opened
- Anchor to onCloseonCloseonClose() => void() => void
Callback to run when the Popover is closed
- Anchor to idididstringstring
A unique identifier for the component.
- Anchor to maxInlineSizemaxInlineSizemaxInlineSizeMaybeResponsiveConditionalStyle< number | `${number}%` | 'fill' >MaybeResponsiveConditionalStyle< number | `${number}%` | 'fill' >
Adjust the maximum inline size.
number: size in pixels.`${number}%`: size in percentages.fill: takes all the available space.- Anchor to minInlineSizeminInlineSizeminInlineSizeMaybeResponsiveConditionalStyle< number | `${number}%` | 'fill' >MaybeResponsiveConditionalStyle< number | `${number}%` | 'fill' >
Adjust the minimum inline size.
number: size in pixels.`${number}%`: size in percentages.fill: takes all the available space.- Anchor to paddingpaddingpaddingMaybeResponsiveConditionalStyle<MaybeShorthandProperty<Spacing>>MaybeResponsiveConditionalStyle<MaybeShorthandProperty<Spacing>>
Adjust the padding.
To shorten the code, it is possible to specify all the padding properties in one property.
Examples:
basemeans blockStart, inlineEnd, blockEnd and inlineStart paddings arebase[
base,none] means blockStart and blockEnd paddings arebase, inlineStart and inlineEnd paddings arenone[
base,none,large200,small200] means blockStart padding isbase, inlineEnd padding isnone, blockEnd padding islarge200and blockStart padding issmall200
PopoverPosition
'inlineStart' | 'inlineEnd' | 'blockStart' | 'blockEnd'Alignment
'start' | 'center' | 'end'MaybeResponsiveConditionalStyle
A type that represents a value that can be a conditional style. The conditions are based on the viewport size. We highly recommend using the `Style` helper which simplifies the creation of conditional styles. To learn more check out the [conditional styles](/api/checkout-ui-extensions/components/utilities/stylehelper) documentation.
T | ConditionalStyle<T, ViewportSizeCondition>ConditionalStyle
- default
The default value applied when none of the conditional values specified in `conditionals` are met.
T - conditionals
An array of conditional values.
ConditionalValue<T, AcceptedConditions>[]
ConditionalValue
- conditions
The conditions that must be met for the value to be applied. At least one condition must be specified.
AcceptedConditions - value
The value that will be applied if the conditions are met.
T
ViewportSizeCondition
- viewportInlineSize
{ min: ViewportInlineSize; }
ViewportInlineSize
'small' | 'medium' | 'large'MaybeShorthandProperty
T | ShorthandProperty<T>ShorthandProperty
[T, T] | [T, T, T, T]Spacing
'none' | 'small500' | 'small400' | 'small300' | 'small200' | 'small100' | 'base' | 'large100' | 'large200' | 'large300' | 'large400' | 'large500' | SpacingDeprecatedSpacingDeprecated
'extraTight' | 'tight' | 'loose' | 'extraLoose'Preview

Examples
Basic Popover
React
import { reactExtension, Pressable, Popover, View, TextBlock, } from '@shopify/ui-extensions-react/checkout'; export default reactExtension( 'purchase.checkout.block.render', () => <Extension />, ); function Extension() { return ( <Pressable overlay={ <Popover> <View maxInlineSize={200} padding="base" > <TextBlock> A thoughtful way to pay </TextBlock> <TextBlock>Tap don’t type</TextBlock> <TextBlock> Shop Pay remembers your important details, so you can fill carts, not forms. And everything is encrypted so you can speed safely through checkout. </TextBlock> </View> </Popover> } > More info </Pressable> ); }JS
import { extension, Pressable, Popover, View, TextBlock, } from '@shopify/ui-extensions/checkout'; export default extension('purchase.checkout.block.render', (root) => { const popoverFragment = root.createFragment(); const popover = root.createComponent(Popover, {}, [ root.createComponent(View, {maxInlineSize: 200, padding: 'base'}, [ root.createComponent(TextBlock, {}, 'A thoughtful way to pay'), root.createComponent(TextBlock, {}, 'Tap don’t type'), root.createComponent( TextBlock, {}, 'Shop Pay remembers your important details, so you can fill carts, not forms. And everything is encrypted so you can speed safely through checkout.', ), ]), ]); popoverFragment.appendChild(popover); const pressable = root.createComponent( Pressable, {overlay: popoverFragment}, 'More info', ); root.appendChild(pressable); });
Anchor to best-practicesBest Practices
Use popovers if:
The intent is to ask the customer for information.
It’s possible to use at most two rows of input fields to get the information.