shadcn.io is not affiliated with official shadcn/ui
Multi-Project Kanban Block for Ark UI
A portfolio swimlane board of five projects by Planning, Active and Complete, with a progress bar per row, a Sort lanes button and a switch that hides finished projects.
Installation
Overview
Watch a whole portfolio at once with this multi-project kanban for React with Ark UI. A hairline frame with a plus mark on each corner holds one row per project (five of them) and three stages that share their lines: Planning, Active and Complete, with eighteen tasks. Every row head draws a thin progress bar and says "3 of 4 done", both worked out from the cards. A Native Select chooses how to order the rows (name, progress or most active work) and "Sort lanes" applies it when pressed; a Switch hides the projects that are at 100%. The rows never re-order under a drag or a move, and the status line says "Lane order: by progress. Press Sort lanes to refresh after moves". A card moves by dragging its grip, by Space, the arrow keys and Space again (Escape cancels), or from its Dropdown Menu with "Move to". The frame is ruled by Guides. On a phone the rows scroll in one named region. For a project office, a quarterly review and any portfolio with a few big efforts.
FAQ
How do I fill it with my own projects?
Edit LANES, STAGES and START. A task has an id, a title, an owner's name and a column that names its cell, such as portal|active. Progress is the tasks in the complete stage over all of a project's tasks, so the bar, the words and the header sentence are always calculated from the cards.
Why don't the rows re-order when I move a card?
A row that jumps while you are dragging into it is hard to hit, so the order only changes when you press "Sort lanes". Choosing another sort key only tells you to press it. Hiding finished projects works the same way: the rows that are hidden are the ones that were finished when you flipped the switch or pressed Sort.
How do I move a card without a mouse?
Tab to the grip at the start of a card, named "Move" with the task's title. Space or Enter picks it up, the arrow keys move it (left and right change the stage, up and down reorder and then cross into the row above or below; they swap in right-to-left languages), Space drops it and Escape puts it back. Each step is announced in the status line in the foot.
Is there a way to move without dragging?
Yes: the menu at the end of each card lists every project and stage with the current one ticked, so one click moves the card, focus lands on it in its new place and the status line says so. This is the route for a single pointer and for touch.
What stays in the demo?
Everything. The moves, the order and the hidden rows live in the component's state, nothing is saved or sent, and a reload or Reset brings back the starting board. The product, the people and the cards are made up. To keep a change, call your API from put, the one function every finished move goes through, and update the cards from the response.