mcpField
S
syncfusion-vue-kanban

syncfusion-vue-kanban

github.com/syncfusionDevelopment063 installsUpdated 1w ago
Repository

About syncfusion-vue-kanban

syncfusion-vue-kanban is an implementation guide for building task and sprint boards in Vue with Syncfusion. It covers data binding, drag-and-drop, swimlanes, WIP limits, and virtualization for large datasets.

Key features

  1. 01Group task cards by status columns
  2. 02Drag cards and reorder columns
  3. 03Group cards into field-based swimlanes
  4. 04Set column-level WIP limits
  5. 05Virtualize large datasets
  6. 06Customize card templates and styles

Use cases

  1. 01Build a task or sprint board
  2. 02Load cards from REST APIs or OData
  3. 03Group tasks by assignee or team
  4. 04Set minimum and maximum column counts

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/syncfusion/vue-ui-components-skills --skill syncfusion-vue-kanban

After installing, type/syncfusion-vue-kanbanin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
accessibility.md
cards.md
columns.md
customization-and-troubleshooting.md
data-binding.md
dialog.md
dimensions.md
drag-and-drop.md
events.md
getting-started.md
how-to.md
localization.md
methods.md
overview.md
persistence.md
priority-and-sort.md
properties.md
responsive-mode.md
style.md
swimlane.md
tooltip.md
validation.md
virtual-scrolling.md

Details

From the project README

Implementing Syncfusion Vue Kanban

A column-based task board that groups cards by a status field, supports drag-and-drop reordering, swimlane row grouping, column validation (WIP limits), and virtual scrolling for large datasets.

When to Use This Skill

  • User needs a Kanban / sprint board with status columns (To Do, In Progress, Done, etc.)
  • User wants drag-and-drop card movement between columns or across swimlane rows
  • User needs to bind Kanban to a REST API, OData, or local JSON dataset
  • User wants to group cards by assignee, team, or any field (swimlanes)
  • User needs WIP limits (min/max card counts per column)
  • User wants virtual scrolling for 1000+ cards without performance issues
  • User wants to customize card layout with a template or apply custom CSS

Component Overview

ConceptWhat it does
keyFieldBoard-level field that maps data records to columns (e.g. "Status")
cardSettingsSpecifies headerField (unique ID) and contentField (body text)
<e-columns>Declare each board column; keyField on column matches data values
swimlaneSettingsGroups cards into horizontal rows by a data field
allowDragAndDropEnables/disables card drag between columns (default: true)
enableVirtualizationEnables virtual scrolling for large datasets

Documentation and Navigation Guide

Component Overview

📄 Read: references/overview.md

  • Full feature list with descriptions (drag-and-drop, swimlanes, WIP, virtual scrolling, etc.)
  • When-to-use decision table matching user needs to features
  • Package installation and all required CSS imports
  • Minimal working example
Accessibility

📄 Read: references/accessibility.md

  • WCAG 2.2 and Section 508 compliance summary
  • All WAI-ARIA attributes (aria-label, aria-expanded, aria-selected, aria-grabbed, etc.)
  • Full keyboard shortcut reference
  • Disabling keyboard interaction (allowKeyboard: false)
  • Screen reader support details
  • RTL accessibility with enableRtl
  • Testing with axe-core and accessibility checker tools
Getting Started

📄 Read: references/getting-started.md

  • Vite + Vue 3 project setup
  • Package installation (@syncfusion/ej2-vue-kanban)
  • CSS imports (tailwind3 theme)
  • Minimal Kanban with columns
  • Populating cards from a local data array
  • Enabling swimlanes on first render
Data Binding

📄 Read: references/data-binding.md

  • Binding local JSON arrays
  • Remote data with DataManager + ODataAdaptor / ODataV4Adaptor
  • Web API binding with WebApiAdaptor
  • CRUD operations with UrlAdaptor (insertUrl, updateUrl, removeUrl)
  • Custom adaptor by extending ODataAdaptor
  • Sending extra query parameters with Query.addParams
  • Loading data dynamically via Ajax
  • Handling HTTP errors with actionFailure
Cards

📄 Read: references/cards.md

  • headerField (mandatory unique ID) and contentField
  • Hiding the card header with showHeader: false
  • Custom card layout using Vue component template
  • Card selection: None / Single / Multiple (selectionType)
  • Multi-select with Ctrl+click / Shift+click
Columns

📄 Read: references/columns.md

  • Single-key and multi-key column mapping
  • Column header text and header templates
  • Toggle columns (expand/collapse) with allowToggle
  • Rendering a column initially collapsed (isExpanded: false)
  • Stacked headers grouping multiple columns
  • Column-level drag-and-drop reordering (allowColumnDragAndDrop)
Dialog (Add / Edit / Delete Cards)

📄 Read: references/dialog.md

  • Default built-in dialog (double-click to open)
  • Custom dialog fields with dialogSettings.fields
  • Custom field labels and field types
  • Field validation with validationRules
  • Full dialog template using Vue component
  • Preventing dialog open with dialogOpen event
  • Programmatic openDialog() and closeDialog()
Dimensions (Height and Width)

📄 Read: references/dimensions.md

  • Auto height/width (default)
  • Pixel dimensions (height="550px", :width="650")
  • Percentage dimensions (width="100%", height="100%")
  • When to use each mode
Events

📄 Read: references/events.md

  • Action events: actionBegin, actionComplete, actionFailure
  • Card events: cardClick, cardDoubleClick, cardRendered
  • Column drag events: columnDragStart, columnDrag, columnDrop
  • Data events: dataBinding, dataBound, dataSourceChanged, dataStateChange
  • Dialog events: dialogOpen, dialogClose
  • Card drag events: dragStart, drag, dragStop
  • Lifecycle: created, queryCellInfo
Swimlanes

📄 Read: references/swimlane.md

  • Rendering swimlane rows with swimlaneSettings.keyField
  • Custom row label text with textField
  • Custom swimlane header template
  • Sorting rows (Ascending / Descending)
  • Cross-row drag-and-drop (allowDragAndDrop: true in swimlaneSettings)
  • Empty row display (showEmptyRow)
  • Card count badge (showItemCount)
  • Frozen swimlane header while scrolling (enableFrozenRows)
Drag and Drop

📄 Read: references/drag-and-drop.md

  • Disabling drag-and-drop globally (allowDragAndDrop: false)
  • Per-column drag/drop control (allowDrag, allowDrop)
  • Cross-swimlane drag-and-drop
  • Kanban-to-Kanban drag-and-drop (externalDropId, dragStop, addCard, deleteCard)
  • Kanban to TreeView drag-and-drop
  • Kanban to Scheduler drag-and-drop
Localization and RTL

📄 Read: references/localization.md

  • All locale keys reference table
  • Loading translations with L10n.load()
  • Setting locale prop on the board
  • Right-to-left (RTL) mode with enableRtl
Public Methods

📄 Read: references/methods.md

  • Card CRUD: addCard, updateCard, deleteCard, getCardDetails
  • Column methods: addColumn, deleteColumn, showColumn, hideColumn, getColumnData
  • Dialog: openDialog, closeDialog
  • Data: getSwimlaneData
  • Selection: getSelectedCards
  • UI: refreshHeader, refreshUI, showSpinner, hideSpinner, destroy
State Persistence

📄 Read: references/persistence.md

  • Enabling enablePersistence to save state in localStorage
  • Persisted state: data source, column expand/collapse, swimlane expand/collapse
  • Setting a unique id to avoid key collisions
  • Clearing persisted state
Priority and Sort Settings

📄 Read: references/priority-and-sort.md

  • cardSettings.priority for rank-based card positioning
  • sortSettings.sortBy: 'Index', 'DataSourceOrder', 'Custom'
  • sortSettings.field for field-mapped ordering
  • sortSettings.direction: 'Ascending' / 'Descending'
Responsive Mode

📄 Read: references/responsive-mode.md

  • Mobile layout: column sizing, swipe navigation, tap-and-hold drag
  • Swimlane popup menu on mobile
  • Single and multiple card selection on touch devices
Tooltip

📄 Read: references/tooltip.md

  • Enabling default card tooltip (enableTooltip)
  • e-tooltip-text class for custom element tooltips
  • Custom tooltip template via tooltipTemplate
Customization and Troubleshooting

📄 Read: references/customization-and-troubleshooting.md

  • CSS class reference table
  • Sticky/fixed column headers
  • Column WIP validation (minCount, maxCount, constraintType)
  • WAI-ARIA attributes
  • Full keyboard shortcut reference
  • Theme Studio
Virtual Scrolling

📄 Read: references/virtual-scrolling.md

  • Enabling virtualization (enableVirtualization: true)
  • Setting cardHeight in pixels
  • Remote data service configuration for virtual scrolling
  • Known limitations (swimlane + virtualization, card position, % height)
How-To Recipes

📄 Read: references/how-to.md

  • Dynamically change column properties at runtime
  • Replace all columns at runtime
  • Filter cards with a Query
  • Search cards by text with Query.search()
  • Handle column header double-click
Properties Reference

📄 Read: references/properties.md

  • Complete root-level prop table (all types, defaults, descriptions)
  • cardSettings sub-properties (headerField, contentField, selectionType, priority, etc.)
  • columns sub-properties (keyField, allowToggle, minCount, maxCount, transitionColumns, etc.)
  • dialogSettings and DialogFieldsModel fields
  • sortSettings, swimlaneSettings, stackedHeaders interfaces
  • All enum values: SelectionType, ConstraintType, SortOrderBy, SortDirection
Style and CSS Customization

📄 Read: references/style.md

  • Full CSS class reference table for header cells and WIP limit indicators
  • CSS classes for card elements (header, content, footer, tags, color stripe)
  • Swimlane row and cell CSS selectors
  • Compact table-scoped selector variants
  • Fixed / sticky Kanban header (height-based and position: sticky)
  • Theme Studio for generating custom themes
Validation (WIP Limits)

📄 Read: references/validation.md

  • minCount — minimum cards required per column/cell
  • maxCount — maximum cards allowed per column/cell
  • constraintType: 'Column' (default) vs 'Swimlane' scope
  • Visual feedback: highlight colors when limits are violated
  • CSS classes to customize validation highlight colors

Quick Start

<template>
  <div id="app">
    <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData" :cardSettings="cardSettings">
      <e-columns>
        <e-column headerText="To Do"       keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing"     keyField="Testing"></e-column>
        <e-column headerText="Done"        keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script setup>
import { KanbanComponent as EjsKanban, ColumnDirective as EColumn, ColumnsDirective as EColumns }
  from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';

const rawData = [
  { Id: 1, Status: 'Open',       Summary: 'Analyze requirements', Assignee: 'Nancy' },
  { Id: 2, Status: 'InProgress', Summary: 'Improve performance',  Assignee: 'Andrew' },
  { Id: 3, Status: 'Testing',    Summary: 'Fix IE browser bug',   Assignee: 'Janet' },
  { Id: 4, Status: 'Close',      Summary: 'Deploy to production', Assignee: 'Nancy' },
];

const kanbanData = extend([], rawData, null, true);
const cardSettings = { contentField: 'Summary', headerField: 'Id' };
</script>

<style>
@import '../node_modules/@syncfusion/ej2-base/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/tailwind3.css';
</style>

Common Patterns

Add swimlanes (group by assignee)
<ejs-kanban keyField="Status" :dataSource="kanbanData"
  :cardSettings="cardSettings" :swimlaneSettings="swimlaneSettings">
  ...columns...
</ejs-kanban>

<script setup>
const swimlaneSettings = { keyField: 'Assignee' };
</script>
Bind to remote OData service
<script setup>
import { DataManager, ODataAdaptor } from '@syncfusion/ej2-data';

const kanbanData = new DataManager({
  url: 'https://your-api.com/api/Tasks',
  adaptor: new ODataAdaptor(),
  crossDomain: true
});
</script>
Enable WIP limits on a column
<e-column headerText="In Progress" keyField="InProgress" :maxCount="5" :minCount="1"></e-column>
Enable virtual scrolling for large data
<ejs-kanban :enableVirtualization="true" keyField="Status" :dataSource="largeDataset"
  :cardSettings="{ headerField: 'Id', contentField: 'Summary' }">
  ...
</ejs-kanban>

Key Props Reference

PropTypePurpose
keyFieldStringData field that maps records to columns
dataSourceArray / DataManagerCards data source
cardSettingsObjectheaderField (required), contentField, template, selectionType
swimlaneSettingsObjectkeyField, textField, allowDragAndDrop, showEmptyRow, enableFrozenRows
allowDragAndDropBooleanBoard-level card drag-and-drop (default: true)
allowColumnDragAndDropBooleanReorder columns by dragging headers
enableVirtualizationBooleanVirtual scrolling for large datasets
enableTooltipBooleanShow tooltip on card hover
constraintTypeString'Column' or 'Swimlane' for WIP validation

Comments

Markdown supported