Vue kanban board
Features & characteristics:
- Customizable card content
- Customizable board lanes
- Users that can be added to items
Example
The card content can be provided as a slot, content in the example above is not included in the library.
Install & basic usage
npm install @salamander.be/vue-kanban-board
<template>
<div id="app">
<board :items="items" :lanes="lanes" :hasUsers="true" :users="users" v-on:item-updated="handleItemUpdated" v-on:item-clicked="handleItemClicked" v-on:item-created="handleItemCreated">
<template scope="props">
<div class="kb-card-header">
<p class="kb-card-title">{{ props.data.summary }}</p>
<img class="kb-card-image" src="./assets/logo.jpg">
</div>
<p class="kb-card-description">{{ props.data.description }}</p>
<div class="kb-card-footer">
<span class="left"><img src="/check.svg">2/5</span>
<span class="left"><img src="/bubble.svg">5</span>
<span class="right"><img src="/clock.svg">Tomorrow</span>
</div>
</template>
</board>
</div>
</template>
<script>
import Board from './components/kanban-board.vue'
export default {
name: 'app',
components: {
Board
},
data() {
return {
lanes: [{ name: 'Todo', slug: 'todo' }, { name: 'In progress', slug: 'in-progress' }, { name: 'Done', slug: 'done' }],
items: [
{ status: 'todo', summary: 'This is a TODO task', description: 'Quisque non tellus orci ac auctor augue mauris augue neque. Vitae tortor condimentum lacinia quis vel.' },
{ status: 'todo', summary: 'This is a longer TODO task', description: 'Quisque non tellus orci ac auctor augue mauris augue neque. Vitae tortor condimentum lacinia quis vel.' },
{ status: 'todo', summary: 'This is an even longer TODO task', description: 'Quisque non tellus orci ac auctor augue mauris augue neque. Vitae tortor condimentum lacinia quis vel.' }
],
users: [{ id: 1, image: '/logo.jpg', name: 'Default user 1' }, { id: 2, image: '/logo.jpg', name: 'Default user 2' }, { id: 3, image: '/logo.jpg', name: 'Default user 3' }]
}
}
}
</script>
Configuration
Props
lanes: [
{
name: 'Lane name',
slug: 'lane-slug',
hidden: true
}
]
items: [{ status: 'lane-slug' }]
placeholder: 'Add a new task... '
gap: 30
hasUsers: true
users: [{ id: 1, image: '...', name: '...' }]
autoAdd: true
Events
<template>
<kanban-board v-on:item-updated="handleItemUpdated" v-on:item-clicked="handleItemClicked" v-on:item-created="handleItemCreated"><kanban-board>
</template>
<script>
export default {
methods: {
handleItemUpdated(itemId, status, index) {
// Update code
},
handleItemClicked(item) {
// Clicked code
},
handleItemCreated(item) {
// Created code
}
}
}
</script>