shadcn.io is not affiliated with official shadcn/ui
Team Workload Dashboard Block for React
Six people as capacity bars in a list, each with a word when over capacity, and beside it the chosen person's tasks with a Move to select that offers only people with room and re-derives both bars.
Installation
Overview
Rebalance a sprint by moving tasks instead of sorting a table, with this team workload panel for React with Base UI. A hairline frame with a plus mark on each corner holds six Evenhand teammates in a list at the start, each with a capacity bar (points assigned over points they can take) and a word when they are over, such as "Over capacity by 3". Beside it, the chosen person's tasks each carry a Native Select named "Move to" that offers only the people with room for that task's points ("Dara, 3 points free"). Moving a task re-derives both people's bars, the header sentence and the count of people over capacity. Shine Button saves the plan and Button discards it. It's built from Native Select, Empty, Button, Shine Button and Guides. For planning meetings and team leads.
FAQ
How do I fill it with my own team?
Edit PEOPLE for each person's name, role and capacity in points, and TASKS for each task's title, points and starting owner. Every bar, the free points in each select option, the over-capacity words and the header sentence are worked out from those two lists and the moves made so far.
Why does a task not offer everyone?
A person appears in a task's select only if their free points are at least the task's points, so a move can never push someone over capacity. When nobody has room the select is disabled and says "No one has room". To allow overbooking, drop the freeOf(person) >= task.points test in choicesOf.
How do I use it with the keyboard?
Tab to the people and press one to show their tasks. Each task's select is a native one, so Space or Enter opens it on every target and the arrow keys pick a person. After a move the focus goes to the person's heading, and the status line says who got the task and how many moves are unsaved.