canvas-component-utils
Import utilities from the drupal-canvas package:
import { FormattedText, Image } from 'drupal-canvas';
FormattedText
Use FormattedText to render HTML content from props. This is required for any
prop with contentMediaType: text/html in component.yml.
# component.yml
props:
properties:
text:
title: Text
type: string
contentMediaType: text/html
x-formatting-context: block
examples:
- <p>This is <strong>formatted</strong> text.</p>
import { FormattedText } from 'drupal-canvas';
const Text = ({ text, className }) => (
<FormattedText className={className}>{text}</FormattedText>
);
When to use FormattedText:
- Props that accept rich text/HTML content
- Any prop with
contentMediaType: text/html - Content that may contain
<p>,<strong>,<em>,<a>, or other HTML tags
Do NOT use FormattedText for:
- Plain text props (type: string without contentMediaType)
- Headings or titles (use regular elements)
Image
Use Image for responsive image rendering. It handles responsive behavior and
optimization automatically. The component contract should accept a single image
object prop that matches $ref: json-schema-definitions://canvas.module/image;
do not split that data into separate imageUrl/imageAlt props.
# component.yml
props:
properties:
image:
title: Image
type: object
$ref: json-schema-definitions://canvas.module/image
examples:
- src: https://example.com/photo.jpg
alt: Description of image
width: 800
height: 600
import { Image } from 'drupal-canvas';
const Card = ({ image }) => {
if (!image?.src) return null;
const { src, alt, width, height } = image;
return (
<Image
src={src}
alt={alt}
width={width}
height={height}
className="w-full rounded-lg object-cover"
/>
);
};
Image props:
src- Image URL (required)alt- Alt text for accessibility (required)width- Original image widthheight- Original image heightclassName- Tailwind classes for styling
More from drupal-canvas/skills
canvas-component-definition
Start here for any React component task to enforce the canonical Canvas
90canvas-component-metadata
Define valid component.yml metadata for Canvas components, including props,
88canvas-data-fetching
Fetch and render Drupal content in Canvas components with JSON:API and SWR
75canvas-component-composability
Design Canvas-ready React components with slots and decomposition-first
72canvas-styling-conventions
Style Canvas components with Tailwind CSS 4 theme tokens and approved utility
72canvas-component-push
Push validated Canvas component changes to Drupal Canvas and recover from
47