npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

vue-kanban-board-kit

v1.0.1

Published

Vue 3 Enterprise Kanban Board Kit: ATS candidate pipelines, succession planning 9-box grids, VIP referral workflows, and agile task management with smooth drag-and-drop.

Readme

vue-kanban-board-kit

An enterprise-grade, lightweight, and customizable Vue 3 Kanban Board Kit built specifically for ATS Recruitment Pipelines, Succession Planning (9-Box Grid Integration), VIP Referrals Management, and Agile Task Boards with native drag-and-drop.

vue-kanban-board-kit preview

Features

  • ATS & Recruitment Pipeline: Track candidates from inbound sourcing to offers with referral tags, years of experience, and interview counts.
  • Succession Planning & 9-Box Grid: Native badge support for 9-Box matrix categories (Top Talent, High Potential, Star, Core Talent, etc.).
  • VIP Referral Highlighting: Special VIP badges and filtering for executive/high-priority employee referrals.
  • Agile Task Management: Due dates, assignees, avatars, tag chips, attachments, and comment indicators.
  • HTML5 Drag & Drop: Smooth native drag-and-drop between columns with full reorder payload events.
  • Composable Architecture: useKanban composable provides reactive filtering, searching, and state mutations out-of-the-box.
  • Customizable & Headless Ready: Pre-styled modern UI with slots for custom cards, column headers, and toolbar actions.
  • Zero Heavy Dependencies: Lightweight and fully typed in TypeScript.

Installation

npm install vue-kanban-board-kit

Quick Start

Import the container component, composable, and CSS styles:

<template>
  <KanbanBoardContainer
    :columns="kanban.columns.value"
    :cards-map="kanban.columnCardsMap.value"
    :search="kanban.searchQuery.value"
    :filter-vip-only="kanban.filterVipOnly.value"
    :filter-nine-box="kanban.filterNineBox.value"
    @update:search="kanban.searchQuery.value = $event"
    @update:filter-vip-only="kanban.filterVipOnly.value = $event"
    @update:filter-nine-box="kanban.filterNineBox.value = $event"
    @toggle-collapse="kanban.toggleColumnCollapse"
    @card-drag-start="kanban.onDragStart"
    @card-drag-end="kanban.onDragEnd"
    @card-drop="kanban.onDrop"
    @card-click="onCardClick"
  />
</template>

<script setup lang="ts">
import { KanbanBoardContainer, useKanban, type KanbanColumn, type KanbanCard } from 'vue-kanban-board-kit'
import 'vue-kanban-board-kit/style.css'

const columns: KanbanColumn[] = [
  { id: 'sourcing', title: 'Sourcing & Inbound', color: '#3b82f6' },
  { id: 'screening', title: 'HR Screening', color: '#8b5cf6' },
  { id: 'interview', title: 'Technical Interview', color: '#f59e0b' },
  { id: 'offer', title: 'Offer & Contract', color: '#10b981' },
]

const cards: KanbanCard[] = [
  {
    id: 'c1',
    columnId: 'sourcing',
    title: 'Dr. Sarah Jenkins',
    appliedRole: 'Staff ML Engineer',
    referralName: 'VP of AI Research',
    isVip: true,
    experience: '8+ yrs exp',
    tags: ['Python', 'PyTorch'],
    commentsCount: 5,
    attachmentsCount: 2,
  },
  {
    id: 'c2',
    columnId: 'interview',
    title: 'Marcus Sterling',
    appliedRole: 'Engineering Manager',
    nineBox: 'top-talent',
    isVip: false,
    experience: '7 yrs exp',
    tags: ['Leadership', 'System Design'],
    commentsCount: 12,
  },
]

const kanban = useKanban({
  columns,
  cards,
  onCardMove: (payload) => {
    console.log('Card moved to new column / index:', payload)
  },
})

function onCardClick(card: KanbanCard) {
  console.log('Card selected:', card)
}
</script>

Required Keys & Data Types

The package enforces clear payload contracts and validates required fields:

Column Contract (REQUIRED_KEYS.column = ['id', 'title'])

interface KanbanColumn {
  id: string | number
  title: string
  color?: string
  limit?: number
  collapsed?: boolean
  headerBadge?: string | number
}

Card Contract (REQUIRED_KEYS.card = ['id', 'title', 'columnId'])

interface KanbanCard {
  id: string | number
  columnId: string | number
  title: string
  subtitle?: string
  description?: string
  avatar?: string
  assignee?: string
  priority?: 'urgent' | 'high' | 'medium' | 'low'
  tags?: (string | { label: string; color?: string; bg?: string })[]
  dueDate?: string | Date
  nineBox?: 'top-talent' | 'high-potential' | 'star' | 'core-talent' | string
  isVip?: boolean
  referralName?: string
  appliedRole?: string
  department?: string
  experience?: string
  commentsCount?: number
  attachmentsCount?: number
  meta?: Record<string, any>
}

Custom Card Slot Example

<KanbanBoardContainer
  :columns="kanban.columns.value"
  :cards-map="kanban.columnCardsMap.value"
  @card-drop="kanban.onDrop"
>
  <template #card="{ card }">
    <div class="my-custom-card">
      <h4>{{ card.title }}</h4>
      <p>{{ card.description }}</p>
    </div>
  </template>
</KanbanBoardContainer>

License

MIT License © 2026 Muhammad Ferasat Ali