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.
Paragraph
The Paragraph component renders a block of text with appropriate spacing between sibling paragraphs. Use it for body copy, descriptions, and any multi-sentence content. It supports font size, weight, style, and text overflow control through its typography props.
For inline text within a sentence, use Text. For titles, use Heading.
Supported targets
- admin.
abandoned-checkout-details. action. render - admin.
abandoned-checkout-details. block. render - admin.
catalog-details. action. render - admin.
catalog-details. block. render - admin.
collection-details. action. render - admin.
collection-details. block. render - admin.
collection-index. action. render - admin.
company-details. action. render - admin.
company-details. block. render - admin.
company-location-details. block. render - admin.
customer-details. action. render - admin.
customer-details. block. render - admin.
customer-index. action. render - admin.
customer-index. selection-action. render - admin.
customer-segment-details. action. render - admin.
discount-details. action. render - admin.
discount-details. function-settings. render - admin.
discount-index. action. render - admin.
draft-order-details. action. render - admin.
draft-order-details. block. render - admin.
draft-order-index. action. render - admin.
draft-order-index. selection-action. render - admin.
gift-card-details. action. render - admin.
gift-card-details. block. render - admin.
order-details. action. render - admin.
order-details. block. render - admin.
order-details. print-action. render - admin.
order-fulfilled-card. action. render - admin.
order-index. action. render - admin.
order-index. selection-action. render - admin.
order-index. selection-print-action. render - admin.
product-details. action. render - admin.
product-details. block. render - admin.
product-details. configuration. render - admin.
product-details. print-action. render - admin.
product-details. reorder. render - admin.
product-index. action. render - admin.
product-index. selection-action. render - admin.
product-index. selection-print-action. render - admin.
product-purchase-option. action. render - admin.
product-variant-details. action. render - admin.
product-variant-details. block. render - admin.
product-variant-details. configuration. render - admin.
product-variant-purchase-option. action. render - admin.
settings. order-routing-rule. render - admin.
settings. validation. render
Supported targets
- admin.
abandoned-checkout-details. action. render - admin.
abandoned-checkout-details. block. render - admin.
catalog-details. action. render - admin.
catalog-details. block. render - admin.
collection-details. action. render - admin.
collection-details. block. render - admin.
collection-index. action. render - admin.
company-details. action. render - admin.
company-details. block. render - admin.
company-location-details. block. render - admin.
customer-details. action. render - admin.
customer-details. block. render - admin.
customer-index. action. render - admin.
customer-index. selection-action. render - admin.
customer-segment-details. action. render - admin.
discount-details. action. render - admin.
discount-details. function-settings. render - admin.
discount-index. action. render - admin.
draft-order-details. action. render - admin.
draft-order-details. block. render - admin.
draft-order-index. action. render - admin.
draft-order-index. selection-action. render - admin.
gift-card-details. action. render - admin.
gift-card-details. block. render - admin.
order-details. action. render - admin.
order-details. block. render - admin.
order-details. print-action. render - admin.
order-fulfilled-card. action. render - admin.
order-index. action. render - admin.
order-index. selection-action. render - admin.
order-index. selection-print-action. render - admin.
product-details. action. render - admin.
product-details. block. render - admin.
product-details. configuration. render - admin.
product-details. print-action. render - admin.
product-details. reorder. render - admin.
product-index. action. render - admin.
product-index. selection-action. render - admin.
product-index. selection-print-action. render - admin.
product-purchase-option. action. render - admin.
product-variant-details. action. render - admin.
product-variant-details. block. render - admin.
product-variant-details. configuration. render - admin.
product-variant-purchase-option. action. render - admin.
settings. order-routing-rule. render - admin.
settings. validation. render
Anchor to PropertiesProperties
Props for the Paragraph component, which renders a block of text as a distinct paragraph. Use Paragraph to structure your content into readable sections with appropriate spacing.
- Anchor to childrenchildrenchildrenanyany
The content to render inside the paragraph. You can pass plain text or other inline components such as Text or Link.
- Anchor to fontSizefontSizefontSizeSizeScaleSizeScale
The font size, using the design-system size scale. Values range from
small-300(smallest) throughbase(default) tolarge-300(largest). Prefer semantic heading components for page headings rather than manually increasing font size.- Anchor to fontStylefontStylefontStyleFontStyleFontStyle
The font style. Use
italicto emphasize a word or group of words, or to indicate a title, foreign phrase, or other conventionally italicized text.Learn more about the font-style property.
- Anchor to fontWeightfontWeightfontWeightFontWeightFontWeight
The weight (thickness) of the font. Use bolder weights to create visual emphasis or hierarchy. Values range from
light-300(thinnest) throughbase(default) tobold-300(heaviest).Learn more about the font-weight property.
- Anchor to idididstringstring
A unique identifier for the element.
- Anchor to textOverflowtextOverflowtextOverflowTextOverflowTextOverflow
The behavior for signaling text that overflows its container to users. Currently supports only
ellipsis, which truncates the text and appends an ellipsis (…). The element must also constrain its size (such as through) for truncation to take effect.Learn more about the text-overflow property.
SizeScale
A relative size scale used for typography sizing. Values range from smallest to largest: - `small-300`: The smallest available size. - `small-200`: Smaller than small-100. - `small-100`: Slightly below the base size. - `base`: The default size. - `large-100`: Slightly above the base size. - `large-200`: Larger than large-100. - `large-300`: The largest available size.
'small-300' | 'small-200' | 'small-100' | 'base' | 'large-100' | 'large-200' | 'large-300'FontStyle
Controls the styling of the font's letter forms. - `italic`: Renders text in an italic typeface, typically used for emphasis. - `normal`: Renders text in the upright, default typeface. Learn more about the [font-style](https://developer.mozilla.org/en-US/docs/Web/CSS/font-style) property.
'italic' | 'normal'FontWeight
Controls the thickness (weight) of the font. Values range from lightest to heaviest. Some values are convenience aliases. - `light-300`: The lightest available weight. - `light-200`: Lighter than light-100. - `light-100`: Slightly below base weight. - `light`: An alias for `light-100`. - `base`: The default font weight. - `normal`: An alias for `base`. - `bold`: An alias for `bold-100`. - `bold-100`: Slightly above base weight; used for emphasis. - `bold-200`: Heavier than bold-100. - `bold-300`: The heaviest available weight. Learn more about the [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) property.
'light-300' | 'light-200' | 'light-100' | 'light' | 'base' | 'normal' | 'bold' | 'bold-100' | 'bold-200' | 'bold-300'TextOverflow
Controls how overflowing text content is signaled to the user when it doesn't fit within its container. - `ellipsis`: Truncates the text and displays an ellipsis (`…`) character at the point of truncation.
'ellipsis'Anchor to ExamplesExamples
Anchor to Display product sync summaryDisplay product sync summary
Show a sync status message with bolded key figures like the completion time and field count. This example nests Text with fontWeight props inside a Paragraph to emphasize specific details within a sentence.
Display product sync summary
 with `fontWeight` props inside a `Paragraph` to emphasize specific details within a sentence.](https://cdn.shopify.com/shopifycloud/shopify-dev/production/assets/assets/images/templated-apis-screenshots/admin-extensions/2025-07/paragraph-default-pdq9osPJ.png)
Display product sync summary
React
import {reactExtension, Paragraph, Text, BlockStack} from '@shopify/ui-extensions-react/admin';
function App() {
return (
<BlockStack>
<Paragraph>
<Text>Last sync completed at </Text>
<Text fontWeight="bold">2:45 PM EST</Text>
<Text>
. All product tags and metafields were successfully pushed to the
warehouse management system.{' '}
</Text>
<Text fontWeight="bold">24 fields</Text>
<Text> updated across 3 variants.</Text>
</Paragraph>
</BlockStack>
);
}
export default reactExtension(
'admin.product-details.block.render',
() => <App />,
);TS
import {extension, Paragraph, Text, BlockStack} from '@shopify/ui-extensions/admin';
export default extension(
'admin.product-details.block.render',
(root) => {
const stack = root.createComponent(BlockStack);
const paragraph = root.createComponent(Paragraph);
const intro = root.createComponent(
Text,
{},
'Last sync completed at ',
);
const time = root.createComponent(
Text,
{fontWeight: 'bold'},
'2:45 PM EST',
);
const detail = root.createComponent(
Text,
{},
'. All product tags and metafields were successfully pushed to the warehouse management system. ',
);
const count = root.createComponent(
Text,
{fontWeight: 'bold'},
'24 fields',
);
const suffix = root.createComponent(
Text,
{},
' updated across 3 variants.',
);
paragraph.appendChild(intro);
paragraph.appendChild(time);
paragraph.appendChild(detail);
paragraph.appendChild(count);
paragraph.appendChild(suffix);
stack.appendChild(paragraph);
root.appendChild(stack);
},
);Anchor to Embed inline links in help textEmbed inline links in help text
Present fulfillment instructions that include an inline Link to external documentation. This example shows how to nest interactive elements inside a paragraph to provide contextual help alongside instructional text.
Embed inline links in help text
React
import {reactExtension, Paragraph, Text, Link, BlockStack} from '@shopify/ui-extensions-react/admin';
function App() {
return (
<BlockStack>
<Paragraph>
<Text>
This product requires special handling during fulfillment. Review the{' '}
</Text>
<Link
href="https://help.shopify.com/manual/fulfillment"
target="_blank"
>
fulfillment guidelines
</Link>
<Text>
{' '}for packaging requirements and carrier restrictions before
processing orders.
</Text>
</Paragraph>
</BlockStack>
);
}
export default reactExtension(
'admin.product-details.block.render',
() => <App />,
);TS
import {extension, Paragraph, Text, Link, BlockStack} from '@shopify/ui-extensions/admin';
export default extension(
'admin.product-details.block.render',
(root) => {
const stack = root.createComponent(BlockStack);
const paragraph = root.createComponent(Paragraph);
const intro = root.createComponent(
Text,
{},
'This product requires special handling during fulfillment. Review the ',
);
const link = root.createComponent(
Link,
{
href: 'https://help.shopify.com/manual/fulfillment',
target: '_blank',
},
'fulfillment guidelines',
);
const suffix = root.createComponent(
Text,
{},
' for packaging requirements and carrier restrictions before processing orders.',
);
paragraph.appendChild(intro);
paragraph.appendChild(link);
paragraph.appendChild(suffix);
stack.appendChild(paragraph);
root.appendChild(stack);
},
);Anchor to Show conditional help textShow conditional help text
Show or hide guidance based on product status retrieved from the GraphQL Admin API. This example queries the product status and conditionally renders a paragraph with publishing instructions when the product is in draft, helping merchants understand what steps remain.
Show conditional help text
React
import {useState, useEffect} from 'react';
import {reactExtension, useApi, Paragraph, Text, BlockStack} from '@shopify/ui-extensions-react/admin';
function App() {
const {data, query} = useApi('admin.product-details.block.render');
const productId = data.selected[0]?.id;
const [product, setProduct] = useState(null);
useEffect(() => {
query(
`query Product($id: ID!) {
product(id: $id) {
status
title
}
}`,
{variables: {id: productId}},
).then((result) => setProduct(result?.data?.product));
}, [productId, query]);
if (!product || product.status !== 'DRAFT') return null;
return (
<BlockStack>
<Paragraph>
<Text>
"{product.title}" is currently in draft status. Complete the product
description, add at least one image, and set pricing before publishing
to your storefront.
</Text>
</Paragraph>
</BlockStack>
);
}
export default reactExtension(
'admin.product-details.block.render',
() => <App />,
);TS
import {extension, Paragraph, Text, BlockStack} from '@shopify/ui-extensions/admin';
export default extension(
'admin.product-details.block.render',
async (root, api) => {
const {data, query} = api;
const productId = data.selected[0]?.id;
const stack = root.createComponent(BlockStack);
const result = await query(
`query Product($id: ID!) {
product(id: $id) {
status
title
}
}`,
{variables: {id: productId}},
);
const product = result?.data?.product;
if (product?.status === 'DRAFT') {
const helpText = root.createComponent(Paragraph);
const message = root.createComponent(
Text,
{},
`"${product.title}" is currently in draft status. Complete the product description, add at least one image, and set pricing before publishing to your storefront.`,
);
helpText.appendChild(message);
stack.appendChild(helpText);
}
root.appendChild(stack);
},
);Anchor to Best practicesBest practices
- Keep paragraphs focused: Each paragraph should convey a single idea or piece of information. Short, focused paragraphs are easier for merchants to scan.
- Nest Text inside Paragraph for inline formatting: To add emphasis, bold, or other inline styling within a paragraph, nest Text components inside the Paragraph. This preserves the block-level layout while giving you typographic control.
- Pair with Heading for structure: Place a Heading before a group of paragraphs to give the section a clear title that helps merchants navigate the content.
Anchor to LimitationsLimitations
- Paragraph doesn't support color or tone props. Text inside a Paragraph always renders in the default body text color.
- The
textOverflowprop takes effect only when the parent container constrains width. Without a width constraint, text will wrap normally rather than truncate. - Paragraph doesn't support alignment (center, right). Text always renders with the default start alignment for the current locale direction.