From 90d1d37113f7add8f3d6a31487408e49efcef66e Mon Sep 17 00:00:00 2001
From: rcoenen <753704+rcoenen@users.noreply.github.com>
Date: Sat, 1 Aug 2026 09:57:32 -0400
Subject: [PATCH] fix(design-jsx): accept inline SVG attributes (#445)
- Validate inline SVG roots against their supported root props
- Leave descendant SVG markup to the SVG renderer instead of Design JSX validation
- Keep warnings for unsupported root props and cover both paths
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
---
CHANGELOG.md | 1 +
packages/core/src/design-jsx/render.ts | 9 ++++++++-
tests/engine/tools/create.test.ts | 14 ++++++++++++++
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2062b8309..e935b5590 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@
### Fixed
+- Stop warning AI agents that supported inline SVG attributes were ignored. (#445)
- Help AI agents discover every shape supported by `create_shape`. (#448)
- Keep `fill="none"` and `stroke="none"` SVG paths transparent when rendering inline artwork. (#446)
- Match regional browser languages to supported locales without selecting a secondary language. (#417)
diff --git a/packages/core/src/design-jsx/render.ts b/packages/core/src/design-jsx/render.ts
index 8427b4a68..155e72d20 100644
--- a/packages/core/src/design-jsx/render.ts
+++ b/packages/core/src/design-jsx/render.ts
@@ -140,12 +140,19 @@ function unsupportedPropWarnings(tree: TreeNode): string[] {
return warnings
}
+const SVG_ROOT_PROPS = new Set([...SUPPORTED_PROPS, 'viewBox', 'body'])
+
function collectUnsupportedPropWarnings(tree: TreeNode, warnings: string[]): void {
+ const supportedProps = tree.type === 'svg' ? SVG_ROOT_PROPS : SUPPORTED_PROPS
for (const key of Object.keys(tree.props)) {
- if (!SUPPORTED_PROPS.has(key)) {
+ if (!supportedProps.has(key)) {
warnings.push(`Unsupported prop "${key}" on <${tree.type}> is ignored.`)
}
}
+
+ // SVG descendants are parsed as markup by renderSvgNode, not as Design JSX nodes.
+ if (tree.type === 'svg') return
+
for (const child of tree.children) {
if (isTreeNode(child)) collectUnsupportedPropWarnings(child, warnings)
}
diff --git a/tests/engine/tools/create.test.ts b/tests/engine/tools/create.test.ts
index 820dd89f9..e1c80a087 100644
--- a/tests/engine/tools/create.test.ts
+++ b/tests/engine/tools/create.test.ts
@@ -85,6 +85,20 @@ describe('render', () => {
expect(result.warnings).toEqual(['Unsupported prop "mt" on is ignored.'])
})
+ test('accepts SVG markup attributes without hiding invalid root props', async () => {
+ const { figma } = setupToolTest()
+ const render = getTool('render')
+ const valid = (await render.execute(figma, {
+ jsx: ''
+ })) as ToolResult
+ const invalid = (await render.execute(figma, {
+ jsx: ''
+ })) as ToolResult
+
+ expect(valid.warnings).toBeUndefined()
+ expect(invalid.warnings).toEqual(['Unsupported prop "mt" on