feat(KB-074): add quick task creation with QuickEntryBox and NewTaskModal

- Add QuickEntryBox component for inline quick task entry in columns
- Add NewTaskModal component with full-featured task creation UI
- Integrate quick create flow through Column → Board → App component hierarchy
- Add comprehensive tests for both new components and updated existing tests
- Add CSS styles for modal, form inputs, and quick entry UI
- Include changeset for @dustinbyrne/kb package release
This commit is contained in:
gsxdsm
2026-03-29 22:40:04 -07:00
parent 2e94b78bb9
commit 8c46ef3cc6
11 changed files with 1379 additions and 35 deletions

View File

@@ -10,9 +10,7 @@ interface BoardProps {
onMoveTask: (id: string, column: ColumnType) => Promise<Task>;
onOpenDetail: (task: TaskDetail) => void;
addToast: (message: string, type?: ToastType) => void;
isCreating: boolean;
onCancelCreate: () => void;
onCreateTask: (input: TaskCreateInput) => Promise<Task>;
onQuickCreate?: (description: string) => Promise<void>;
onNewTask: () => void;
autoMerge: boolean;
onToggleAutoMerge: () => void;
@@ -25,7 +23,7 @@ interface BoardProps {
onUnarchiveTask?: (id: string) => Promise<Task>;
}
export function Board({ tasks, maxConcurrent, onMoveTask, onOpenDetail, addToast, isCreating, onCancelCreate, onCreateTask, onNewTask, autoMerge, onToggleAutoMerge, globalPaused, onUpdateTask, onArchiveTask, onUnarchiveTask }: BoardProps) {
export function Board({ tasks, maxConcurrent, onMoveTask, onOpenDetail, addToast, onQuickCreate, onNewTask, autoMerge, onToggleAutoMerge, globalPaused, onUpdateTask, onArchiveTask, onUnarchiveTask }: BoardProps) {
const [archivedCollapsed, setArchivedCollapsed] = useState(true);
return (
@@ -55,7 +53,7 @@ export function Board({ tasks, maxConcurrent, onMoveTask, onOpenDetail, addToast
onUpdateTask={onUpdateTask}
onArchiveTask={onArchiveTask}
onUnarchiveTask={onUnarchiveTask}
{...(col === "triage" ? { isCreating, onCancelCreate, onCreateTask, onNewTask } : {})}
{...(col === "triage" ? { onQuickCreate, onNewTask } : {})}
{...(col === "in-review" ? { autoMerge, onToggleAutoMerge } : {})}
{...(col === "archived" ? { collapsed: archivedCollapsed, onToggleCollapse: () => setArchivedCollapsed(!archivedCollapsed) } : {})}
/>