1. Make parent cards draggable with all subtasks
- Parent cards can now be dragged between columns
- All descendants are automatically moved with the parent
- Added isParent flag to drag/drop dataTransfer
2. Add Expand All / Collapse All buttons to Kanban view
- Added global expandedCards state management
- New buttons in Kanban header with ChevronsDown/Up icons
- Allows quick expansion/collapse of all parent cards
3. Add description field to tasks
- Added description textarea to TaskForm component
- Added description edit option to TaskMenu component
- Description displays in both TreeView and KanbanView
- Shows below metadata in italic gray text
- Backend already supported description field
Features:
1. Enhanced Task Creation Forms:
- New TaskForm component with all metadata fields
- Title, tags (comma-separated), time estimate (hours + minutes), flag color
- Used in TreeView (root tasks and subtasks) and KanbanView (all columns)
- Replace simple title-only inputs with full metadata forms
2. Time Format Changes:
- Display: "1h 30m" instead of "1.5h"
- Input: Separate hours and minutes fields
- Storage: Still integer minutes in backend
- Updated formatTime() utility
- Updated TaskMenu time editor with hours/minutes inputs
3. Leaf-Based Time Calculation:
- Leaf tasks (no subtasks): Show user-entered estimate
- Parent tasks (has subtasks): Show sum of all descendant LEAF tasks
- Exception: Parent with no leaf estimates shows own estimate as fallback
- New functions: calculateLeafTime(), calculateLeafTimeFlat()
- Replaces old aggregation that summed all tasks including parents
This allows accurate project planning where parent estimates are calculated from leaf tasks,
preventing double-counting when both parent and children have estimates.