Make your Vue components draggable. 🤏
Supports Vue 2 and Vue 3! Comes with a 🔋 batteries included component / directive / composable or
for users who want more control a simple abstraction over drag events with the core, wich is also available
as a component / directive / composable.
Based on React Draggable.
Check the Docs 📔 for an in-depth explanation and
the Demo 🪄 to see Revue Draggable in action.
Table of Contents
🛠 Setup
$ npm i --save @braks/revue-draggable
$ yarn add @braks/revue-draggable
$ pnpm add @braks/revue-draggable
For Vue2 add the composition-api to your dependencies (if you're using Vue < 2.7).
$ yarn add @braks/revue-draggable @vue/composition-api
$ npm i --save @braks/revue-draggable @vue/composition-api
Using the components
Webpack (Vue2)
resolve: {
alias: {
vue: 'vue/dist/vue.js'
}
}
export default {
alias: {
vue: 'vue/dist/vue.js'
}
}
🔌 Registering Revue Draggable
import { createApp } from 'vue';
import Draggable, { DraggablePlugin, DraggableDirective } from '@braks/revue-draggable';
const app = createApp();
app.use(DraggablePlugin);
app.directive('draggable', DraggableDirective)
app.component('Draggable', Draggable);
app.mount('#root');
import Vue from 'vue';
import { DraggablePlugin, DraggableDirective } from '@braks/revue-draggable';
Vue.use(DraggablePlugin)
Vue.directive('draggable', DraggableDirective)
Vue.component('Draggable', Draggable)
🎮 Quickstart
The easiest way to make your elements draggable is by using the DraggableDirective which will handle everything for you
with no configuration necessary.
<div v-draggable="/* Pass DraggableProps as binding value here */" class="box">I use a directive to make myself draggable</div>
Or use the component wrapper.
(In Vue2 make sure to include the full-build, runtime-build only works for Vue3.)
<Draggable>
<div class="box">I use a wrapper</div>
</Draggable>
Check the example file for more in-detail examples like dropping elements, setting boundaries or syncing states.
🧪 Development
This project uses Vite for development and Rollup to create a distribution.
$ pnpm dev
$ pnpm build
$ pnpm serve
$ pnpm build:dist
🐛 Debugging
Set the environment variable DRAGGABLE_DEBUG
to enable logs on drag handlers.
🕵🏻♂️ Tests
Testing is done with Cypress.
You can find the specs in the cypress directory;
$ pnpm ci