vue-toggles
Version: 
A highly customizable and accessible toggle component for Vue.js 3
111 lines (80 loc) • 4.39 kB
Markdown
<h1 align="center">Vue Toggles</h1>
<p align="center">
A highly customizable and accessible toggle component for Vue 3.
</p>
<p align="center">
<a href="https://www.npmjs.com/package/vue-toggles"><img src="https://img.shields.io/npm/v/vue-toggles.svg?style=flat-square"/> <img src="https://img.shields.io/npm/dt/vue-toggles.svg?style=flat-square"/></a> <a href="https://vuejs.org/"><img src="https://img.shields.io/badge/vue-3.x-brightgreen.svg?style=flat-square"/></a>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/juliandreas/vue-toggles/refs/heads/master/dev/public/vue-toggles.jpg" alt="Vue Toggles Logo"/>
</p>
## Introduction
Vue Toggles comes out of the box with accessibility support for:
- `aria-checked` depending on state
- `aria-readonly` if the toggle is disabled
- `prefers-reduced-motion` if the user has requested any type of motion reduction [[prefers-reduced-motion](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion)]
### Accessibility
What's left for you, when it comes to accessibility, is labeling the toggle correctly. This is either done by:
- A `<label for="example-id">Toggle description</label>` followed by the toggle component `<VueToggles id="example-id" />`
- Or an `aria-label`, for example `<VueToggles aria-label="Toggle description" />`. Remember, you still need a visual text description of what the toggle does
The focus-style is also left up to you - which you shouldn't remove. If you think the default is ugly, style it yourself!
## Installation
```
npm i vue-toggles
```
### Import component
```javascript
import { VueToggles } from "vue-toggles";
```
### Import types
```javascript
import type { VueTogglesProps } from "vue-toggles";
```
```javascript
import VueToggles, { type VueTogglesProps } from "vue-toggles";
```
## Usage
The toggle is very easy to use out of the box. The bare minimum for it to work is a `@click`-function and a `:value`-prop.
```html
<VueToggles :value="isChecked" @click="isChecked = !isChecked" />
```
Or if you prefer the `v-model`-syntax:
```html
<VueToggles v-model="isChecked" />
```
## Options
You can also add more props to customize things like color and width/height.
```html
<VueToggles
  :value="value"
  :height="30"
  :width="90"
  checkedText="On"
  uncheckedText="Off"
  checkedBg="#b4d455"
  uncheckedBg="lightgrey"
  @click="value = !value"
/>
```
## Properties
| Name               | Type    | Default   | Description                                       |
| ------------------ | ------- | --------- | ------------------------------------------------- |
| value              | Boolean | `false`   | Initial state of the toggle button                |
| disabled           | Boolean | `false`   | Toggle does not react on mouse or keyboard events |
| reverse            | Boolean | `false`   | Reverse toggle to Right to Left                   |
| width              | Number  | `75`      | Width of the toggle in `px`                       |
| height             | Number  | `25`      | Height of the toggle in `px`                      |
| dotColor           | String  | `#ffffff` | Color of the toggle dot                           |
| dotSize            | Number  | `0`       | Dot size in `px`                                  |
| checkedBg          | String  | `#5850ec` | Background color when the toggle is checked       |
| uncheckedBg        | String  | `#939393` | Background color when the toggle is unchecked     |
| checkedTextColor   | String  | `#ffffff` | Text color when the toggle is checked             |
| uncheckedTextColor | String  | `#ffffff` | Text color when the toggle is unchecked           |
| uncheckedText      | String  | `""`      | Optional text when the toggle is unchecked        |
| checkedText        | String  | `""`      | Optional text when the toggle is checked          |
| fontSize           | Number  | `12`      | Font size in `px`                                 |
| fontWeight         | String  | `normal`  | Font weight                                       |
## Vue 2 support
If you're looking for Vue 2 support, the `1.1.4`version is available [here](https://www.npmjs.com/package/vue-toggles/v/1.1.4).
## License
[MIT](http://opensource.org/licenses/MIT)