Skip to main content
Migrate to Polaris

Version 2025-07 is the last API version to support React-based UI components. Later versions use web components, native UI elements with built-in accessibility, better performance, and consistent styling with Shopify's design system. Check out the migration guide to upgrade your extension.

Disclosure

Disclosure is an optionally controlled component used to put long sections of information under content blocks that users can expand or collapse by pressing an activator. The activator can be specified as children using an action component (Button, Link or Pressable) or a form control (Checkbox or Switch) component. The content blocks can be specified as children inside a structure component (View, InlineLayout, BlockStack, Grid, etc.).

The library automatically applies the WAI-ARIA Accordion pattern to both the activator and the toggled content.

Support
Targets (50)

Supported targets


Basic Disclosure

Example

Basic Disclosure

import {
reactExtension,
Disclosure,
Button,
View,
} from '@shopify/ui-extensions-react/checkout';

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

function Extension() {
return (
<Disclosure>
<Button toggles="one">Toggle</Button>
<View id="one">Content</View>
</Disclosure>
);
}
import {
extension,
Button,
View,
Disclosure,
} from '@shopify/ui-extensions/checkout';

export default extension('purchase.checkout.block.render', (root) => {
const disclosure = root.createComponent(Disclosure, {}, [
root.createComponent(Button, {toggles: 'one'}, 'Toggle'),
root.createComponent(
View,
{border: 'base', padding: 'base', id: 'one'},
'Content',
),
]);

root.appendChild(disclosure);
});

Anchor to Strategies for simplifying layout and aligning content using Disclosure and Inline/Block Layout components.Strategies for simplifying layout and aligning content using Disclosure and Inline/Block Layout components.

Use the Disclosure component to simplify the user experience and reveal interfaces only when the buyer requests it. It also demonstrates how a combination of inline and block layout components can improve the readability of information. By employing these strategies, users can easily scan and comprehend the content, making for a better user experience overall.

Strategies for simplifying layout and aligning content using Disclosure and Inline/Block Layout components.

Use the Disclosure component to simplify the user experience and reveal interfaces only when the buyer requests it. It also demonstrates how a combination of inline and block layout components can improve the readability of information. By employing these strategies, users can easily scan and comprehend the content, making for a better user experience overall.

Strategies for simplifying layout and aligning content using Disclosure and Inline/Block Layout components.

import {
reactExtension,
View,
Image,
Icon,
Pressable,
Disclosure,
InlineLayout,
BlockStack,
Text,
Form,
TextField,
Button,
Divider,
InlineStack,
} from '@shopify/ui-extensions-react/checkout';

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

export const DisclosureAndAlignment = () => {
const openIds = ['one'];
return (
<View
maxInlineSize={400}
cornerRadius="large"
border="base"
>
<BlockStack spacing="none">
<Disclosure
defaultOpen="one"
onToggle={(open) =>
console.log('onToggle event', open)
}
>
<Pressable toggles="one" padding="base">
<InlineLayout
blockAlignment="center"
spacing="base"
columns={['auto', 'fill', 'auto']}
>
<Icon
source="gift"
appearance="subdued"
/>
Gift message
<Icon
source={
openIds.includes('one')
? 'chevronUp'
: 'chevronDown'
}
appearance="subdued"
/>
</InlineLayout>
</Pressable>
<View
id="one"
padding={[
'none',
'base',
'base',
'base',
]}
>
<Form
onSubmit={() =>
console.log('onSubmit event')
}
>
<BlockStack>
<InlineLayout
columns={['fill', 'fill']}
spacing="base"
>
<TextField
label="From"
name="from0"
id="from0"
/>
<TextField
label="To"
name="to0"
id="to0"
/>
</InlineLayout>
<TextField
label="Message"
name="message0"
id="message0"
/>
<View>
<Button
accessibilityRole="submit"
kind="secondary"
>
Save
</Button>
</View>
</BlockStack>
</Form>
</View>
</Disclosure>
<Divider />
<InlineLayout
blockAlignment="baseline"
spacing="base"
columns={['auto', 'fill', 'auto']}
padding="base"
>
<Icon
source="profile"
appearance="subdued"
/>
<BlockStack spacing="none">
<InlineStack blockAlignment="center">
<Text>Verify with</Text>
<Image source="https://via.placeholder.com/50x15" />
</InlineStack>
<Text
appearance="subdued"
size="small"
>
15% savings for students and
military
</Text>
</BlockStack>
<Pressable to="https://www.shopify.com">
<Icon
source="external"
appearance="subdued"
/>
</Pressable>
</InlineLayout>
</BlockStack>
</View>
);
};
import {
extension,
BlockStack,
View,
InlineLayout,
InlineStack,
Image,
Pressable,
Icon,
Text,
TextField,
Form,
Button,
Disclosure,
Divider,
} from '@shopify/ui-extensions/checkout';

export default extension(
'purchase.checkout.block.render',
(root) => {
const openIds = ['one'];

const pressable = root.createComponent(
Pressable,
{
toggles: 'one',
padding: 'base',
},
[
root.createComponent(
InlineLayout,
{
blockAlignment: 'center',
spacing: 'base',
columns: ['auto', 'fill', 'auto'],
},

Anchor to defaultOpen
defaultOpen
< | undefined>

For uncontrolled disclosure components, the default open state on the initial render.

It's possible to specify a boolean value, a string value, or an array of string values:

  • true will expand all content
  • false will collapse all content
  • string will expand the content with the matching id
  • string[] will expand the content with the matching ids
Anchor to onToggle
onToggle
(open: string[]) => void

A callback fired when the open state of the disclosure changes.

For controlled disclosure components, the open state. The open prop should be used along with onToggle to create a controlled disclosure component.

Anchor to transition
transition
'none'

Set to 'none' to disable the default transition animation.


  • Disclosures should be initiated by the buyer.

  • Use disclosures to hide content until they are relevant to the buyer.

  • Avoid hiding critical information that buyers need to complete their checkout.

  • Keep content inside disclosures concise.

  • Avoid nesting of disclosures.

  • Keep the activator and the content it toggles in close proximity to each other.


Was this page helpful?