Component
Playground
<DemoInspector>A live inspector. Click a component on the stage, edit its properties in the form, watch the change land instantly.
Demo
Single component
Button
Inspector
Live properties
Layers
Selected
Button
Click Pick in the inspector, then click the button on the stage to select it. Edit variant, size, or label — the stage updates live.
Auto-schema
Schema inferred from the component's props
Button (no schema declared)
Inspector
Live properties
Layers
Selected
Button (auto)
The HTML element or component to render. Use 'router-link' or 'a' to render a link.
Visual style — pick the role this button plays in the layout.
Three balanced sizes.
Any utility classes — applied to the rendered element.
Same component, but the spec doesn't declare a schema. The inspector walks DomButton.props, looks up registry hints (variant + size), and adds a Tailwind classes editor at the end — automatically.
Demo
Nested arrangement
Pricing card
Pro
$149 once · forever yours
Inspector
Live properties
Layers
Selected
Card
This node has no editable properties.
Multiple selectable nodes — pick any layer in the stage or use the layer list to drill in.
Studio
Build full layouts with the Studio
The dedicated Studio page gives you a full-width canvas with a palette of every component, drag-and-drop with drop indicators, a Data / HTML / Renderer tab bar, and lossless round-trip through <DomRenderer>.
Spec
Author a playground in a few lines
const cardSpec = {
id: 'card',
label: 'Card',
component: 'div',
props: { class: 'rounded-3xl border bg-background p-7 …' },
children: [
{
id: 'title',
label: 'Title',
component: 'h3',
text: 'Pro',
schema: [{ key: 'text', target: 'text', type: 'string' }],
},
{
id: 'cta',
label: 'CTA Button',
component: DomButton,
props: { variant: 'primary', size: 'md' },
text: 'Get access',
schema: [
{ key: 'variant', type: 'select',
options: ['primary', 'secondary', 'ghost', 'danger'] },
{ key: 'size', type: 'select', options: ['sm', 'md', 'lg'] },
{ key: 'text', target: 'text', type: 'string' },
],
},
],
};Usage
Vue
<script setup>
import DemoInspector from '@getdom/inspector';
import { DomButton } from '@getdom/studio/vue';
import { markRaw } from 'vue';
const spec = {
id: 'btn',
label: 'Button',
component: markRaw(DomButton),
props: { variant: 'primary', size: 'md' },
text: 'Click me',
schema: [
{ key: 'variant', type: 'select', options: ['primary', 'secondary'] },
{ key: 'size', type: 'select', options: ['sm', 'md', 'lg'] },
{ key: 'text', target: 'text', type: 'string' },
],
};
</script>
<template>
<DemoInspector :spec="spec" title="Button playground" />
</template>Field types
stringSingle-line text input.
textMulti-line textarea.
numberNumeric input with optional min/max/step.
booleanRenders the DomToggle switch.
selectPill group of options.
colorNative color picker plus hex input.