Skip to content

feat(docs-app,ui-buttons): add auto-generated prop playground#2657

Open
balzss wants to merge 1 commit into
masterfrom
docs/visual-prop-editor
Open

feat(docs-app,ui-buttons): add auto-generated prop playground#2657
balzss wants to merge 1 commit into
masterfrom
docs/visual-prop-editor

Conversation

@balzss

@balzss balzss commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add internal PropEditor docs component that reads a component's react-docgen metadata at runtime and auto-generates prop controls (enum selects, boolean toggle, text/number inputs) with a live preview and generated JSX.
  • Register PropEditor as a docs global so it can be embedded in any README via a type: embed block; supports an optional config for per-component tuning (include/exclude, control overrides, sample children).
  • Wire it into the Button v2 README as a proof of concept.

Test Plan

  • On the Button docs page, scroll to the new "Playground" section: confirm controls are auto-generated and editing them updates the preview and code live.
  • Verify complex/function props (as, margin, cursor, renderIcon, onClick) show under "Not editable here" and are not rendered as controls.
  • Switch docs theme/version and confirm the preview re-themes and metadata still loads.

Fixes INSTUI-5128

🤖 Generated with Claude Code

Introduce an internal `PropEditor` docs component that reads a component's
react-docgen metadata at runtime and generates a form of editable prop
controls (selects for string-literal unions, a toggle for booleans, text and
number inputs) with a live preview and the equivalent JSX. It lets non-devs
experiment with components without editing code.

The editor is registered as a docs global so it can be dropped into any README
via a `type: embed` block, and accepts an optional `config` for per-component
adjustments (include/exclude, control overrides, sample children). Wire it up
as a proof of concept in the Button v2 README.

Preview and code generation reuse the existing Preview/compileAndRenderExample
pipeline; theme and version come from AppContext.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@balzss balzss self-assigned this Jul 24, 2026
@balzss
balzss requested review from adamlobler and hajnaldo July 24, 2026 08:41
@github-actions

Copy link
Copy Markdown
PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://instructure.design/pr-preview/pr-2657/

Built to branch gh-pages at 2026-07-24 08:44 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

@github-actions

Copy link
Copy Markdown

Visual regression report

No changes.

Status Count
Unchanged 32
Changed 0
New 0
Removed 0

📊 View full report

Baselines come from the visual-baselines branch. They refresh on every merge to master.

github-actions Bot pushed a commit that referenced this pull request Jul 24, 2026

@adamlobler adamlobler left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the quick work, this is exactly what I had in mind! 🔥

I would only adjust the layout a bit because the prop selectors are very wide, while the preview is quite small. I think a layout where the component preview and the prop selectors are next to each other would work better. Right now, if a component has a lot of props, you can’t see the preview without scrolling.

Also, if it’s possible, it would be great to be able to change the theme locally within this view. It’s a small UX improvement, but it’s something we do a lot. Currently, you have to scroll back up, change the theme, wait for the page to reload, and then set the props again, which is a lot of effort for a quick check that we do a lot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants