Kanban
Organize work, edit cards, and save changes together.
Live TypeScript example
Try the component here, then use the source below in your application.
- JavaScript
- 11.0 KiB
- Component CSS
- 3.3 KiB
- Shared theme CSS
- 5.5 KiBonce per application
How sizes are measured
The JavaScript figure includes this component’s required helpers. CSS includes its styling dependencies. Each entry is bundled separately for ES2022, minified, then compressed with gzip level 9. Your bundler may share helpers across components. Images, fonts, examples and application code are excluded.
Before compression: JavaScript 33.0 KiB; component CSS 12.2 KiB. These figures describe browser assets, not the complete package download.
View all component measurements →Create or edit a card, then save. This example stores changes in this browser.
import '@blukavantui/community/theme.css'
import {createKanban} from '@blukavantui/pro/kanban';
import '@blukavantui/pro/kanban.css';
export function mount(host: HTMLElement) {
const board = createKanban(
host,
{
Resources:[{Key:"maya",Name:"Maya Chen",Position:"Design lead",Color:"Purple"}],
ShowFilters:true,
Columns: [
{ Key: "todo", Label: "To do", Color: "Primary" },
{ Key: "done", Label: "Done", Color: "Success" },
],
Cards: [
{ Key: "task-1", ColumnKey: "todo", Title: "Build the first page",ResourceKey:"maya",CardType:"Design",EstimatePoints:5,EstimateHours:8,ProjectTag:"Launch" },
],
AllowEditing: true,
EnableBulkSave: true,
AllowReorder: true,
},
{
SaveRequested: (requestId, cards) => {
// Runnable local example. Replace this with an awaited request to your own backend.
try {
localStorage.setItem("bluui-starter-cards", JSON.stringify(cards));
board.update({
SaveResultRequestId: requestId,
SaveResultSuccess: true,
SaveResultCards: cards,
SaveResultMessage: "Saved in this browser.",
});
} catch {
board.update({
SaveResultRequestId: requestId,
SaveResultSuccess: false,
SaveResultMessage: "Saving failed. Your draft remains available.",
});
}
},
},
);
return board;
}
const instance = mount(document.getElementById('example')!)
// When this page or framework component is removed:
// instance.destroy()
Install the library and add the host element
npm install https://blukavantui.blutekmedia.com/downloads/blukavantui-community-0.4.0.tgz
# Install your licensed Pro archive alongside Community
npm install ./blukavantui-pro-0.2.1.tgz<div id="example"></div>Community components use @blukavantui/community. The ten Pro components use the separate @blukavantui/pro add-on alongside Community. Your application handles persistence and authentication through its typed callbacks. Choose the matching edition when installing the example.
createKanban
Supply Resources and card ResourceKey, CardType, ProjectTag, Milestone, EstimatePoints and EstimateHours. Built-in filters narrow by resource, type and project; the card editor retains this metadata. Handle CardsChanged and acknowledge SaveRequested using the same SaveResultRequestId. Failed saves retain drafts. Resource names and avatars are display data; enforce access and identity in your application.
import { createKanban } from '@blukavantui/pro/kanban';
import '@blukavantui/pro/kanban.css';Load @blukavantui/community/theme.css once in your app shell.createKanban(host: HTMLElement, options: T.KanbanOptions, events?: T.KanbanEvents)Reference for @blukavantui/pro 0.2.1. Required and optional follow the shipped TypeScript declarations; optional does not imply a particular default. Pass typed arrays and objects directly where shown.
Options
15| Name | Type / requirement | Usage |
|---|---|---|
Resources | BluResource[]Optional | People with Key, Name, ImageUrl, Color and Position. Card.ResourceKey identifies the assigned person. |
ShowFilters | booleanOptional | Show resource, card type and project filters. |
Columns | KanbanColumn[]Required | |
Cards | KanbanCard[]Required | |
AllowReorder | booleanOptional | |
AllowEditing | booleanOptional | |
EnableBulkSave | booleanOptional | |
ShowSearch | booleanOptional | |
IsDisabled | booleanOptional | Disables interaction with this component. |
EmptyText | stringOptional | |
ResetKey | stringOptional | |
SaveResultRequestId | stringOptional | |
SaveResultSuccess | booleanOptional | |
SaveResultMessage | stringOptional | |
SaveResultCards | KanbanCard[]Optional |
Callbacks
6| Name | Type / requirement | Usage |
|---|---|---|
FiltersChanged | (resourceKey: string, cardType: string, projectTag: string) => void | Promise<void>Optional | Reports ResourceKey, CardType and ProjectTag. |
CardsChanged | (cards: T.KanbanCard[], key: string, from: string, to: string, position: number) => void | Promise<void>Optional | |
CardClick | (key: string) => void | Promise<void>Optional | |
DirtyChanged | (count: number, changes: T.KanbanChange[]) => void | Promise<void>Optional | |
SaveRequested | (requestId: string, cards: T.KanbanCard[], changes: T.KanbanChange[]) => void | Promise<void>Optional | |
Error | (message: string) => void | Promise<void>Optional |
Instance methods & properties
3| Name | Signature / type | Usage |
|---|---|---|
element | HTMLElement | Root owned by this instance. Dispose before removing its host. |
update | (patch: Partial<T.KanbanOptions>) => void | Apply a partial options update to this instance. |
destroy | () => void | Dispose the instance and its listeners when the view is removed. |
Related data types
Expand a type for its fields and allowed values.
BluResource
interface BluResource {
/** Stable application-owned person/resource key. */
Key: string;
Name: string;
ImageUrl?: string;
Color?: ComponentColor;
/** Role, title or position displayed next to the person. */
Position?: string;
}KanbanCard
interface KanbanCard {
ResourceKey?: string;
CardType?: string;
ProjectTag?: string;
Milestone?: string;
EstimatePoints?: number;
EstimateHours?: number;
Key: string;
ColumnKey: string;
Title: string;
Description?: string;
Tag?: string;
Assignee?: string;
IsDisabled?: boolean;
}KanbanChange
interface KanbanChange {
Key: string;
Kind: "Created" | "Updated";
Before: KanbanCard | null;
After: KanbanCard;
BeforePosition: number;
Position: number;
}KanbanColumn
interface KanbanColumn {
Key: string;
Label: string;
Color?: ComponentColor;
WipLimit?: number;
IsDisabled?: boolean;
}Use these inputs, events, actions and structures in Service Studio. Names and data bindings are specific to the native Blocks.
One of ten Pro components on Web and OutSystems. Commercial license required. View OutSystems editions →
Open OutSystems showcase ↗- Web runtime
- Supported
- TypeScript
- Supported
- OutSystems
- Supported
Statuses describe the component’s rendered code and interactions. Supply accessible content and follow the component guidance when integrating it.
Accessibility guidance →Purpose and use
Use a board to make the stage of work visible. Column limits communicate capacity; the Move dialog gives every card an alternative to dragging.
Keyboard design guidance
Use labelled card actions to edit or move. Dialogs support keyboard navigation and Escape. Save failure preserves the draft for retry.
See the support status above for review coverage and any limitations.
In your application
Provide useful labels, preserve visible focus, and test the component with your actual content. Use text alongside status colors and check contrast in each state.
Events0No events yet.
Interact with an example to see its events.