Component
Vue Toggle Button Component
<DomToggleButton>A pressable form button for boolean choices, using aria-pressed and v-model.
Playground
Try every prop live
Toggle button playground
Use a toggle button when a boolean setting should feel like a compact action.
Properties
Control props
Optional button label shown while pressed.
Optional button label shown while not pressed.
Button size.
Field props
Optional ID override. By default parent forms derive the input ID from the field path using underscores.
Local field name. Parent forms derive the full field path and native HTML name from the form hierarchy.
Visible field label.
Optional helper copy below the field.
Placeholder shown when the control is empty.
Validation errors for this field.
Validators
No validators yet.
Validators attached to this field. Use functions in Vue code, or serializable records such as { name: "minLength", props: { min: 2 } } in generated schemas.
Render default field chrome, or hide chrome while keeping form state wiring.
npm install @getdom/studio<script setup>
import '@getdom/studio/style.css';
import { reactive } from 'vue';
import { DomToggleButton } from '@getdom/studio';
const data = reactive({
"modelValue": false,
"id": "",
"name": "",
"label": "Pinned state",
"description": "",
"placeholder": "",
"required": false,
"disabled": false,
"readOnly": false,
"invalid": false,
"errors": [],
"visible": true,
"validators": [],
"validateOnBlur": true,
"chrome": "field",
"pressedLabel": "Pinned",
"unpressedLabel": "Pin item",
"size": "md"
});
</script>
<template>
<DomToggleButton
v-bind="data"
@update:modelValue="data.modelValue = $event"
/>
</template>Demo
Boolean action
The button uses aria-pressed and still writes through v-model.
Pinned: false
npm install @getdom/studio<script setup>
import '@getdom/studio/style.css';
import { ref } from 'vue';
import { DomToggleButton } from '@getdom/studio';
const pinned = ref(false);
</script>
<template>
<div class="space-y-3">
<DomToggleButton
v-model="pinned"
label="Pinned state"
pressed-label="Pinned"
unpressed-label="Pin item"
description="Use this for compact boolean actions that should read like buttons."
/>
<p class="text-xs text-muted-fg">Pinned: <code class="text-canvas-fg">{{ pinned }}</code></p>
</div>
</template>
Reference
Props
Control props
| Name | Type | TS | Default | Description |
|---|---|---|---|---|
modelValue | boolean | boolean | false | Pressed state. |
pressedLabel | string | string | '' | Optional button label shown while pressed. |
unpressedLabel | string | string | '' | Optional button label shown while not pressed. |
size | 'sm' | 'md' | 'lg' | string | 'md' | Button size. |
Field props
| Name | Type | TS | Default | Description |
|---|---|---|---|---|
id | string | string | '' | Optional ID override. By default parent forms derive the input ID from the field path using underscores. |
name | string | string | '' | Local field name. Parent forms derive the full field path and native HTML name from the form hierarchy. |
label | string | string | '' | Visible field label. |
description | string | string | '' | Optional helper copy below the field. |
placeholder | string | string | '' | Placeholder shown when the control is empty. |
required | boolean | boolean | false | Mark the field as required. |
disabled | boolean | boolean | false | Disable field interaction. |
readOnly | boolean | boolean | false | Show the value but prevent editing. |
invalid | boolean | boolean | false | Mark the field invalid. |
errorsts | array | object | string | Array< | [] | Validation errors for this field. |
visible | boolean | boolean | true | Show or hide the field. |
validators | array | Array<unknown> | [] | Validators attached to this field. Use functions in Vue code, or serializable records such as { name: "minLength", props: { min: 2 } } in generated schemas. |
validateOnBlur | boolean | boolean | true | Run validators when the field loses focus. |
chrome | 'field' | 'none' | false | string | 'field' | Render default field chrome, or hide chrome while keeping form state wiring. |
Auto-generated from Toggle button.props and inline _edit hints.
Events
| Name | Payload | Description |
|---|---|---|
| @update:modelValue | ( | Emitted when pressed changes. |
| @focus | — | — |
| @blur | — | — |
Names auto-detected from defineEmits and source emit() calls; payload and description from __doc.events when present.