Getting started with the EJ2 TypeScript Kanban control
21 Jul 202624 minutes to read
This section explains how to create and configure the Kanban component in TypeScript using a Vite project with the Essential® JS 2 Kanban package.
Prerequisites
Before you begin, make sure your environment meets the following requirements:
- Node.js 16+ and npm 8+ installed.
- A modern browser with ES6+ support (latest Chrome, Edge, Firefox, or Safari).
- A code editor such as Visual Studio Code.
- Basic familiarity with the command line and TypeScript.
Supported themes and versions
The examples in this document use the Tailwind 3 theme. Other built-in themes that ship with the Kanban package are listed below; substitute tailwind3 in any @import path with one of these names to switch themes.
| Theme | CSS file |
|---|---|
| Tailwind 3 (default) | tailwind3.css |
| Material 3 | material3.css |
| Bootstrap 5 | bootstrap5.css |
| Fluent 2 | fluent2.css |
| High Contrast | highcontrast.css |
Refer to the themes documentation for the full list and CSS reference paths for individual controls.
Dependencies
The following list of dependencies is required to use the Kanban component in your application:
|-- @syncfusion/ej2-kanban
|-- @syncfusion/ej2-base
|-- @syncfusion/ej2-buttons
|-- @syncfusion/ej2-data
|-- @syncfusion/ej2-dropdowns
|-- @syncfusion/ej2-icons
|-- @syncfusion/ej2-inputs
|-- @syncfusion/ej2-layouts
|-- @syncfusion/ej2-lists
|-- @syncfusion/ej2-navigations
|-- @syncfusion/ej2-popups
|-- @syncfusion/ej2-splitbuttonsSet up the development environment
Use the following commands to scaffold a new TypeScript Vite application and start the development server:
npm create vite@latest my-app -- --template vanilla-ts
cd my-app
npm install
npm run devThe Vite dev server prints a local URL (for example, http://localhost:5173) — open it in a browser to view the app.
Add Syncfusion® JavaScript packages
All Essential® JS 2 packages are published to the Syncfusion npm registry. To install the Kanban component, use the following command:
npm install @syncfusion/ej2-kanban
This installs the Kanban package and its required peer dependencies.
Import the Syncfusion® CSS styles
Themes for Syncfusion® Kanban component can be applied using CSS files provided through npm theme packages. For available themes, refer to the Themes documentation.
Install the Tailwind 3 theme package using the following command:
npm install @syncfusion/ej2-tailwind3-themeThen add the following CSS reference to the src/App.css file:
@import "../node_modules/@syncfusion/ej2-tailwind3-theme/styles/kanban/index.css";Initialize the Kanban
Add an HTML div element with an id attribute to index.html to serve as the host element for the Kanban control. The host element must have a defined height, otherwise the Kanban will not be visible.
[index.html]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Kanban Typescript Component</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<meta name="description" content="Essential JS 2" />
<meta name="author" content="Syncfusion" />
<link rel="shortcut icon" href="resources/favicon.ico" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<!--Element where the Kanban will be rendered-->
<div id="Kanban" style="height: 600px;"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>Import the Kanban component into your src/main.ts file and initialize it on the element whose id is Kanban in index.html.
[src/main.ts]
import './style.css';
import { Kanban } from '@syncfusion/ej2-kanban';
const kanbanObj: Kanban = new Kanban({
columns: [
{ headerText: 'Backlog', keyField: 'Open' },
{ headerText: 'In Progress', keyField: 'InProgress' },
{ headerText: 'Testing', keyField: 'Testing' },
{ headerText: 'Done', keyField: 'Close' }
]
});
kanbanObj.appendTo('#Kanban');Now, run the application in the browser with the following command:
npm run devVite prints a local URL (for example, http://localhost:5173). Open it in a browser to view the empty Kanban. The complete runnable sample is also available here:
import { Kanban } from '@syncfusion/ej2-kanban';
const kanbanObj: Kanban = new Kanban({
columns: [
{ headerText: 'Backlog', keyField: 'Open' },
{ headerText: 'In Progress', keyField: 'InProgress' },
{ headerText: 'Testing', keyField: 'Testing' },
{ headerText: 'Done', keyField: 'Close' }
],
});
kanbanObj.appendTo('#Kanban');<!DOCTYPE html>
<html lang="en">
<head>
<title>Kanban Columns Header</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Kanban Columns Header" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-layouts/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-kanban/styles/tailwind3.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js" type="text/javascript"></script>
<script src="systemjs.config.js" type="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container'>
<div class="content-wrapper">
<div id="Kanban"></div>
</div>
</div>
</body>
</html>Populating cards
Each card is rendered into a column based on the value of its Status field, which must match the keyField of the target column. To populate the empty Kanban with cards, define local JSON data or remote data using the dataSource property. The data items must include fields relevant to the configured keyField. The example below uses the default fields Id, Summary, and Status.
The expected dataSource JSON shape is:
[
{
Id: 'Task 1',
Summary: 'Analyze the new requirements gathered from the customer.',
Status: 'Open'
},
{
Id: 'Task 2',
Summary: 'Improve application performance.',
Status: 'InProgress'
},
{
Id: 'Task 3',
Summary: 'Arrange a web meeting with the customer to get new requirements.',
Status: 'Testing'
},
{
Id: 'Task 4',
Summary: 'Fix the issues reported in the IE browser.',
Status: 'Close'
}
]The full set of default card fields recognized by the Kanban control is:
| Field | Purpose |
|---|---|
Id |
Unique identifier for the card |
Summary |
Card title shown on the card |
Status |
Column key (must match a columns[].keyField) |
Title |
Optional secondary heading |
Description |
Optional body text |
Assignee |
Used for swimlane grouping and avatar |
Tags |
Comma-separated labels rendered on the card |
Priority |
Used by the priority feature |
DueDate |
Used by the due-date feature |
To customize which fields appear on a card, use the cardSettings property; to add remote data fetching, see the dataSource configuration.
import { Kanban } from '@syncfusion/ej2-kanban';
import { kanbanData } from './datasource.ts';
const kanbanObj: Kanban = new Kanban({
dataSource: kanbanData,
keyField: 'Status',
columns: [
{ headerText: 'Backlog', keyField: 'Open' },
{ headerText: 'In Progress', keyField: 'InProgress' },
{ headerText: 'Testing', keyField: 'Testing' },
{ headerText: 'Done', keyField: 'Close' }
],
cardSettings: {
contentField: 'Summary',
headerField: 'Id',
}
});
kanbanObj.appendTo('#Kanban');<!DOCTYPE html>
<html lang="en">
<head>
<title>Kanban Cards</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Kanban Cards" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-layouts/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-kanban/styles/tailwind3.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js" type="text/javascript"></script>
<script src="systemjs.config.js" type="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container'>
<div class="content-wrapper">
<div id="Kanban"></div>
</div>
</div>
</body>
</html>export const kanbanData: Object[] = [
{
'Id': 1,
'Status': 'Open',
'Summary': 'Analyze the new requirements gathered from the customer.',
'Type': 'Story',
'Priority': 'Low',
'Tags': 'Analyze,Customer',
'Estimate': 3.5,
'Assignee': 'Nancy Davloio',
'RankId': 1
},
{
'Id': 2,
'Status': 'InProgress',
'Summary': 'Improve application performance',
'Type': 'Improvement',
'Priority': 'Normal',
'Tags': 'Improvement',
'Estimate': 6,
'Assignee': 'Andrew Fuller',
'RankId': 1
},
{
'Id': 3,
'Status': 'Open',
'Summary': 'Arrange a web meeting with the customer to get new requirements.',
'Type': 'Others',
'Priority': 'Critical',
'Tags': 'Meeting',
'Estimate': 5.5,
'Assignee': 'Janet Leverling',
'RankId': 2
},
{
'Id': 4,
'Status': 'InProgress',
'Summary': 'Fix the issues reported in the IE browser.',
'Type': 'Bug',
'Priority': 'Release Breaker',
'Tags': 'IE',
'Estimate': 2.5,
'Assignee': 'Janet Leverling',
'RankId': 2
},
{
'Id': 5,
'Status': 'Testing',
'Summary': 'Fix the issues reported by the customer.',
'Type': 'Bug',
'Priority': 'Low',
'Tags': 'Customer',
'Estimate': '3.5',
'Assignee': 'Steven walker',
'RankId': 1
},
{
'Id': 6,
'Status': 'Close',
'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
'Type': 'Others',
'Priority': 'Low',
'Tags': 'Meeting',
'Estimate': 2,
'Assignee': 'Michael Suyama',
'RankId': 1
},
{
'Id': 7,
'Status': 'Validate',
'Summary': 'Validate new requirements',
'Type': 'Improvement',
'Priority': 'Low',
'Tags': 'Validation',
'Estimate': 1.5,
'Assignee': 'Robert King',
'RankId': 1
},
{
'Id': 8,
'Status': 'Close',
'Summary': 'Login page validation',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Validation,Fix',
'Estimate': 2.5,
'Assignee': 'Laura Callahan',
'RankId': 2
},
{
'Id': 9,
'Status': 'Testing',
'Summary': 'Fix the issues reported in Safari browser.',
'Type': 'Bug',
'Priority': 'Release Breaker',
'Tags': 'Fix,Safari',
'Estimate': 1.5,
'Assignee': 'Nancy Davloio',
'RankId': 2
},
{
'Id': 10,
'Status': 'Close',
'Summary': 'Test the application in the IE browser.',
'Type': 'Story',
'Priority': 'Low',
'Tags': 'Testing,IE',
'Estimate': 5.5,
'Assignee': 'Margaret hamilt',
'RankId': 3
},
{
'Id': 11,
'Status': 'Validate',
'Summary': 'Validate the issues reported by the customer.',
'Type': 'Story',
'Priority': 'High',
'Tags': 'Validation,Fix',
'Estimate': 1,
'Assignee': 'Steven walker',
'RankId': 1
},
{
'Id': 12,
'Status': 'Testing',
'Summary': 'Check Login page validation.',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Testing',
'Estimate': 0.5,
'Assignee': 'Michael Suyama',
'RankId': 3
},
{
'Id': 13,
'Status': 'Open',
'Summary': 'API improvements.',
'Type': 'Improvement',
'Priority': 'High',
'Tags': 'Grid,API',
'Estimate': 3.5,
'Assignee': 'Robert King',
'RankId': 3
},
{
'Id': 14,
'Status': 'InProgress',
'Summary': 'Add responsive support to application',
'Type': 'Epic',
'Priority': 'Critical',
'Tags': 'Responsive',
'Estimate': 6,
'Assignee': 'Laura Callahan',
'RankId': 3
},
{
'Id': 15,
'Status': 'Open',
'Summary': 'Show the retrieved data from the server in grid control.',
'Type': 'Story',
'Priority': 'High',
'Tags': 'Database,SQL',
'Estimate': 5.5,
'Assignee': 'Margaret hamilt',
'RankId': 4
},
{
'Id': 16,
'Status': 'InProgress',
'Summary': 'Fix cannot open user’s default database SQL error.',
'Priority': 'Critical',
'Type': 'Bug',
'Tags': 'Database,Sql2008',
'Estimate': 2.5,
'Assignee': 'Janet Leverling',
'RankId': 4
},
{
'Id': 17,
'Status': 'Testing',
'Summary': 'Fix the issues reported in data binding.',
'Type': 'Story',
'Priority': 'Normal',
'Tags': 'Databinding',
'Estimate': '3.5',
'Assignee': 'Janet Leverling',
'RankId': 4
},
{
'Id': 18,
'Status': 'Close',
'Summary': 'Analyze SQL server 2008 connection.',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Grid,Sql',
'Estimate': 2,
'Assignee': 'Andrew Fuller',
'RankId': 4
},
{
'Id': 19,
'Status': 'Validate',
'Summary': 'Validate databinding issues.',
'Type': 'Story',
'Priority': 'Low',
'Tags': 'Validation',
'Estimate': 1.5,
'Assignee': 'Margaret hamilt',
'RankId': 1
},
{
'Id': 20,
'Status': 'Close',
'Summary': 'Analyze grid control.',
'Type': 'Story',
'Priority': 'High',
'Tags': 'Analyze',
'Estimate': 2.5,
'Assignee': 'Margaret hamilt',
'RankId': 5
},
{
'Id': 21,
'Status': 'Close',
'Summary': 'Stored procedure for initial data binding of the grid.',
'Type': 'Others',
'Priority': 'Release Breaker',
'Tags': 'Databinding',
'Estimate': 1.5,
'Assignee': 'Steven walker',
'RankId': 6
},
{
'Id': 22,
'Status': 'Close',
'Summary': 'Analyze stored procedures.',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Procedures',
'Estimate': 5.5,
'Assignee': 'Janet Leverling',
'RankId': 7
},
{
'Id': 23,
'Status': 'Validate',
'Summary': 'Validate editing issues.',
'Type': 'Story',
'Priority': 'Critical',
'Tags': 'Editing',
'Estimate': 1,
'Assignee': 'Nancy Davloio',
'RankId': 1
},
{
'Id': 24,
'Status': 'Testing',
'Summary': 'Test editing functionality.',
'Type': 'Story',
'Priority': 'Normal',
'Tags': 'Editing,Test',
'Estimate': 0.5,
'Assignee': 'Nancy Davloio',
'RankId': 5
},
{
'Id': 25,
'Status': 'Open',
'Summary': 'Enhance editing functionality.',
'Type': 'Improvement',
'Priority': 'Low',
'Tags': 'Editing',
'Estimate': 3.5,
'Assignee': 'Andrew Fuller',
'RankId': 5
}
];Enable swimlane
Swimlanes are enabled by mapping the swimlaneSettings.keyField property to a column name that exists in the dataSource (for example, Assignee). Cards are then grouped by the values in the mapped column. The mapped field must be present in every record of the dataSource; otherwise, those records fall into an empty swimlane.
The expected dataSource JSON shape when swimlanes are enabled is:
[
{ Id: 'Task 1', Summary: 'Analyze requirements', Status: 'Open', Assignee: 'Andrew Fuller' },
{ Id: 'Task 2', Summary: 'Improve performance', Status: 'InProgress', Assignee: 'Janet Leverling' },
{ Id: 'Task 3', Summary: 'Web meeting', Status: 'Testing', Assignee: 'Andrew Fuller' }
]The commonly used swimlaneSettings options are:
| Option | Purpose |
|---|---|
keyField |
Data field used to group cards into swimlanes |
textField |
Optional field used to render the swimlane header text |
allowDragAndDrop |
Enables dragging cards across swimlanes (default true) |
showItemCount |
Shows the count of cards in each swimlane |
sortDirection |
Orders swimlanes (Ascending or Descending) |
Refer to the swimlane configuration for the complete list of options.
import { Kanban } from '@syncfusion/ej2-kanban';
import { kanbanData } from './datasource.ts';
const kanbanObj: Kanban = new Kanban({
dataSource: kanbanData,
keyField: 'Status',
columns: [
{ headerText: 'Backlog', keyField: 'Open' },
{ headerText: 'In Progress', keyField: 'InProgress' },
{ headerText: 'Testing', keyField: 'Testing' },
{ headerText: 'Done', keyField: 'Close' }
],
cardSettings: {
contentField: 'Summary',
headerField: 'Id',
},
swimlaneSettings: {
keyField: 'Assignee'
}
});
kanbanObj.appendTo('#Kanban');<!DOCTYPE html>
<html lang="en">
<head>
<title>Kanban with Swimlane Rows</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Kanban swimlane rows" />
<meta name="author" content="Syncfusion" />
<link href="index.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-layouts/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-kanban/styles/tailwind3.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js" type="text/javascript"></script>
<script src="systemjs.config.js" type="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container'>
<div class="content-wrapper">
<div id="Kanban"></div>
</div>
</div>
</body>
</html>export const kanbanData: Object[] = [
{
'Id': 1,
'Status': 'Open',
'Summary': 'Analyze the new requirements gathered from the customer.',
'Type': 'Story',
'Priority': 'Low',
'Tags': 'Analyze,Customer',
'Estimate': 3.5,
'Assignee': 'Nancy Davloio',
'RankId': 1
},
{
'Id': 2,
'Status': 'InProgress',
'Summary': 'Improve application performance',
'Type': 'Improvement',
'Priority': 'Normal',
'Tags': 'Improvement',
'Estimate': 6,
'Assignee': 'Andrew Fuller',
'RankId': 1
},
{
'Id': 3,
'Status': 'Open',
'Summary': 'Arrange a web meeting with the customer to get new requirements.',
'Type': 'Others',
'Priority': 'Critical',
'Tags': 'Meeting',
'Estimate': 5.5,
'Assignee': 'Janet Leverling',
'RankId': 2
},
{
'Id': 4,
'Status': 'InProgress',
'Summary': 'Fix the issues reported in the IE browser.',
'Type': 'Bug',
'Priority': 'Release Breaker',
'Tags': 'IE',
'Estimate': 2.5,
'Assignee': 'Janet Leverling',
'RankId': 2
},
{
'Id': 5,
'Status': 'Testing',
'Summary': 'Fix the issues reported by the customer.',
'Type': 'Bug',
'Priority': 'Low',
'Tags': 'Customer',
'Estimate': '3.5',
'Assignee': 'Steven walker',
'RankId': 1
},
{
'Id': 6,
'Status': 'Close',
'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
'Type': 'Others',
'Priority': 'Low',
'Tags': 'Meeting',
'Estimate': 2,
'Assignee': 'Michael Suyama',
'RankId': 1
},
{
'Id': 7,
'Status': 'Validate',
'Summary': 'Validate new requirements',
'Type': 'Improvement',
'Priority': 'Low',
'Tags': 'Validation',
'Estimate': 1.5,
'Assignee': 'Robert King',
'RankId': 1
},
{
'Id': 8,
'Status': 'Close',
'Summary': 'Login page validation',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Validation,Fix',
'Estimate': 2.5,
'Assignee': 'Laura Callahan',
'RankId': 2
},
{
'Id': 9,
'Status': 'Testing',
'Summary': 'Fix the issues reported in Safari browser.',
'Type': 'Bug',
'Priority': 'Release Breaker',
'Tags': 'Fix,Safari',
'Estimate': 1.5,
'Assignee': 'Nancy Davloio',
'RankId': 2
},
{
'Id': 10,
'Status': 'Close',
'Summary': 'Test the application in the IE browser.',
'Type': 'Story',
'Priority': 'Low',
'Tags': 'Testing,IE',
'Estimate': 5.5,
'Assignee': 'Margaret hamilt',
'RankId': 3
},
{
'Id': 11,
'Status': 'Validate',
'Summary': 'Validate the issues reported by the customer.',
'Type': 'Story',
'Priority': 'High',
'Tags': 'Validation,Fix',
'Estimate': 1,
'Assignee': 'Steven walker',
'RankId': 1
},
{
'Id': 12,
'Status': 'Testing',
'Summary': 'Check Login page validation.',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Testing',
'Estimate': 0.5,
'Assignee': 'Michael Suyama',
'RankId': 3
},
{
'Id': 13,
'Status': 'Open',
'Summary': 'API improvements.',
'Type': 'Improvement',
'Priority': 'High',
'Tags': 'Grid,API',
'Estimate': 3.5,
'Assignee': 'Robert King',
'RankId': 3
},
{
'Id': 14,
'Status': 'InProgress',
'Summary': 'Add responsive support to application',
'Type': 'Epic',
'Priority': 'Critical',
'Tags': 'Responsive',
'Estimate': 6,
'Assignee': 'Laura Callahan',
'RankId': 3
},
{
'Id': 15,
'Status': 'Open',
'Summary': 'Show the retrieved data from the server in grid control.',
'Type': 'Story',
'Priority': 'High',
'Tags': 'Database,SQL',
'Estimate': 5.5,
'Assignee': 'Margaret hamilt',
'RankId': 4
},
{
'Id': 16,
'Status': 'InProgress',
'Summary': 'Fix cannot open user’s default database SQL error.',
'Priority': 'Critical',
'Type': 'Bug',
'Tags': 'Database,Sql2008',
'Estimate': 2.5,
'Assignee': 'Janet Leverling',
'RankId': 4
},
{
'Id': 17,
'Status': 'Testing',
'Summary': 'Fix the issues reported in data binding.',
'Type': 'Story',
'Priority': 'Normal',
'Tags': 'Databinding',
'Estimate': '3.5',
'Assignee': 'Janet Leverling',
'RankId': 4
},
{
'Id': 18,
'Status': 'Close',
'Summary': 'Analyze SQL server 2008 connection.',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Grid,Sql',
'Estimate': 2,
'Assignee': 'Andrew Fuller',
'RankId': 4
},
{
'Id': 19,
'Status': 'Validate',
'Summary': 'Validate databinding issues.',
'Type': 'Story',
'Priority': 'Low',
'Tags': 'Validation',
'Estimate': 1.5,
'Assignee': 'Margaret hamilt',
'RankId': 1
},
{
'Id': 20,
'Status': 'Close',
'Summary': 'Analyze grid control.',
'Type': 'Story',
'Priority': 'High',
'Tags': 'Analyze',
'Estimate': 2.5,
'Assignee': 'Margaret hamilt',
'RankId': 5
},
{
'Id': 21,
'Status': 'Close',
'Summary': 'Stored procedure for initial data binding of the grid.',
'Type': 'Others',
'Priority': 'Release Breaker',
'Tags': 'Databinding',
'Estimate': 1.5,
'Assignee': 'Steven walker',
'RankId': 6
},
{
'Id': 22,
'Status': 'Close',
'Summary': 'Analyze stored procedures.',
'Type': 'Story',
'Priority': 'Release Breaker',
'Tags': 'Procedures',
'Estimate': 5.5,
'Assignee': 'Janet Leverling',
'RankId': 7
},
{
'Id': 23,
'Status': 'Validate',
'Summary': 'Validate editing issues.',
'Type': 'Story',
'Priority': 'Critical',
'Tags': 'Editing',
'Estimate': 1,
'Assignee': 'Nancy Davloio',
'RankId': 1
},
{
'Id': 24,
'Status': 'Testing',
'Summary': 'Test editing functionality.',
'Type': 'Story',
'Priority': 'Normal',
'Tags': 'Editing,Test',
'Estimate': 0.5,
'Assignee': 'Nancy Davloio',
'RankId': 5
},
{
'Id': 25,
'Status': 'Open',
'Summary': 'Enhance editing functionality.',
'Type': 'Improvement',
'Priority': 'Low',
'Tags': 'Editing',
'Estimate': 3.5,
'Assignee': 'Andrew Fuller',
'RankId': 5
}
];Troubleshooting
| Issue | Cause | Fix |
|---|---|---|
| Page loads but the Kanban is invisible | The <div id="Kanban"> has no defined height |
Add inline CSS such as style="height: 600px;" on the host element |
Cannot find module '@syncfusion/ej2-kanban' |
Package was not installed or node_modules is stale |
Run npm install @syncfusion/ej2-kanban and restart the dev server |
| Styles are not being applied |
style.css is not imported into main.ts
|
Add import './style.css'; at the top of src/main.ts
|
Port 5173 already in use |
Another Vite or local server is bound to the port | Stop the other process, or run Vite on a different port: npm run dev -- --port 3000
|
npm create vite@latest prompts for input |
Running in an interactive terminal without flags | Pass -- --template vanilla-ts to skip prompts, as shown in Set up the development environment
|