Skip to content

@vibe-labs/design-vue-toggles

Vue 3 toggle switch component for the Vibe Design System.

Installation

ts
import { VibeToggle } from "@vibe-labs/design-vue-toggles";

Requires the CSS layer from @vibe-labs/design-components-toggles.

Component

VibeToggle

Toggle switch with label support, native form submission, and proper role="switch" ARIA semantics.

Usage

vue
<!-- Basic -->
<VibeToggle v-model="enabled" label="Enable notifications" />

<!-- Without label -->
<VibeToggle v-model="darkMode" aria-label="Dark mode" />

<!-- Label on the left -->
<VibeToggle v-model="active" label="Active" label-position="left" />

<!-- Sizes -->
<VibeToggle v-model="val" size="sm" label="Small" />
<VibeToggle v-model="val" size="md" label="Medium" />
<VibeToggle v-model="val" size="lg" label="Large" />

<!-- Disabled -->
<VibeToggle v-model="locked" label="Locked setting" disabled />

<!-- In a form (native submission) -->
<form @submit="onSubmit">
  <VibeToggle v-model="agreed" name="terms" value="accepted" label="I agree to the terms" required />
</form>

<!-- External label -->
<label id="my-label">WiFi</label>
<VibeToggle v-model="wifi" aria-labelledby="my-label" />

<!-- With description -->
<VibeToggle v-model="sync" label="Auto-sync" aria-describedby="sync-desc" />
<p id="sync-desc">Automatically sync changes every 5 minutes.</p>

Props

PropTypeDefaultDescription
modelValuebooleanfalseChecked state (v-model)
sizeToggleSize"md"sm · md · lg
disabledbooleanfalseDisabled state
labelstringLabel text beside the toggle
labelPosition"left" | "right""right"Label placement
namestringForm field name
valuestring"on"Submitted value when checked
requiredbooleanfalseRequired field
idstringautoInput element ID
ariaLabelstringAccessible label (when no visible label)
ariaLabelledbystringExternal label element ID
ariaDescribedbystringDescribing element ID

Events

EventPayloadDescription
update:modelValuebooleanToggle state changed
changebooleanToggle state changed

Accessibility

Uses role="switch" with aria-checked — the correct ARIA pattern for toggle switches (not just a styled checkbox). The hidden <input type="checkbox"> provides native form semantics and keyboard activation (Space to toggle).

Dependencies

PackagePurpose
@vibe-labs/design-components-togglesCSS tokens + generated styles

Build

bash
npm run build

Built with Vite + vite-plugin-dts. Outputs ES module with TypeScript declarations.