canvas-component-utils
Use utility components to render formatted text and media correctly. Use when (1) Rendering HTML text content from props, (2) Displaying images, (3) Working with formatted text or media. Covers FormattedText and Image utilities.
How do I install this agent skill?
npx skills add https://github.com/drupal-canvas/skills --skill canvas-component-utilsIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides instructions for using utility components from the drupal-canvas package to render HTML text and images. While these are standard tools, the rendering of external HTML content represents an indirect prompt injection surface.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerpass
1 file scanned · No issues
- ZeroLeakspass
Score: 93/100 · 2 sections analyzed
What does this agent skill do?
Project type
Before applying this skill, check package.json for a dependency named
@drupal-canvas/headless or starting with @drupal-canvas/headless-. If one is
present, this is a Canvas Headless codebase — read
canvas-headless first. Portable React
components can use FormattedText and Image at their existing public import
paths; FormattedText requires trusted or sanitized HTML. Native Vue, Astro and
Angular components use framework-native alternatives instead of React utilities.
If no such dependency is present, this is a Canvas-rendered React codebase:
components are React (index.jsx/.tsx) and everything in this skill applies
as written. These are the only two project types.
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
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/drupal-canvas/skills/canvas-component-utils">View canvas-component-utils on skillZs</a>