ObsiViewer/docs/KANBAN/KANBAN_BOARD_REFACTORING.md
Bruno Charest 5e8cddf92e ```
docs: remove outdated implementation documentation files

- Deleted AI_TOOLS_IMPLEMENTATION.md (296 lines) - outdated AI tools integration guide
- Deleted ALIGN_INDENT_COLUMNS_FIX.md (557 lines) - obsolete column alignment fix documentation
- Deleted BLOCK_COMMENTS_IMPLEMENTATION.md (400 lines) - superseded block comments implementation notes
- Deleted DRAG_DROP_COLUMNS_IMPLEMENTATION.md (500 lines) - outdated drag-and-drop columns guide
- Deleted INLINE_TOOLBAR_IMPLEMENTATION.md (350 lines) - obsol
2025-11-17 10:09:25 -05:00

429 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kanban Board Refactoring - FuseBase Style
## Complete Implementation Guide
## 📊 Status
### ✅ Completed Files (11 files)
1. **Types & Models**
- `src/app/blocks/kanban/models/kanban.types.ts`
2. **Services (7 services)**
- `src/app/blocks/kanban/services/kanban-board.service.ts`
- `src/app/blocks/kanban/services/kanban-task.service.ts`
- `src/app/blocks/kanban/services/labels.service.ts`
- `src/app/blocks/kanban/services/attachments.service.ts`
- `src/app/blocks/kanban/services/time-tracking.service.ts`
- `src/app/blocks/kanban/services/date.service.ts`
3. **Main Board Component**
- `src/app/blocks/kanban/kanban-board.component.ts`
- `src/app/blocks/kanban/kanban-board.component.html`
- `src/app/blocks/kanban/kanban-board.component.css`
4. **Column Component**
- `src/app/blocks/kanban/components/kanban-column/kanban-column.component.ts`
- `src/app/blocks/kanban/components/kanban-column/kanban-column.component.html`
- `src/app/blocks/kanban/components/kanban-column/kanban-column.component.css`
---
## 🚧 Remaining Files to Create (25+ files)
### Phase 1: Core Components (5 components)
#### 1. Task Card Component
**Files:**
- `src/app/blocks/kanban/components/kanban-task-card/kanban-task-card.component.ts`
- `src/app/blocks/kanban/components/kanban-task-card/kanban-task-card.component.html`
- `src/app/blocks/kanban/components/kanban-task-card/kanban-task-card.component.css`
**Features:**
- Checkbox (completion toggle)
- Task title
- Labels display (pills)
- Due date with icon
- Estimated time icon + text
- Actual time icon + text
- Attachments count/thumbnail
- Selected state (blue border)
- Hover effects
#### 2. Task Detail Panel
**Files:**
- `src/app/blocks/kanban/components/task-detail-panel/task-detail-panel.component.ts`
- `src/app/blocks/kanban/components/task-detail-panel/task-detail-panel.component.html`
- `src/app/blocks/kanban/components/task-detail-panel/task-detail-panel.component.css`
**Features:**
- Header with navigation (back/forward)
- Mark Complete button
- Close button
- Editable title
- Description editor (multiline)
- Created by section
- Action buttons: Assignee, Labels, Date, Attach, Estimated time, Time
- Comments section with avatar
- Attachment preview grid
- Slide-in animation from right
#### 3. Column Context Menu
**Files:**
- `src/app/blocks/kanban/components/column-context-menu/column-context-menu.component.ts`
- `src/app/blocks/kanban/components/column-context-menu/column-context-menu.component.html`
- `src/app/blocks/kanban/components/column-context-menu/column-context-menu.component.css`
**Menu Options:**
- ✏️ Rename
- ☑️ Complete all
- 📋 Convert to Task list
- 📄 Duplicate
- ⬅️ Add column left
- ➡️ Add column right
- 🗑️ Delete
#### 4. Task Context Menu
**Files:**
- `src/app/blocks/kanban/components/task-context-menu/task-context-menu.component.ts`
- `src/app/blocks/kanban/components/task-context-menu/task-context-menu.component.html`
- `src/app/blocks/kanban/components/task-context-menu/task-context-menu.component.css`
**Menu Options:**
- 📋 Copy task
- 🔗 Copy link to task
- 📄 Duplicate task
- Add new task
- 🗑️ Delete task
---
### Phase 2: Dialog Components (5 dialogs)
#### 5. Labels Dialog
**Files:**
- `src/app/blocks/kanban/components/labels-dialog/labels-dialog.component.ts`
- `src/app/blocks/kanban/components/labels-dialog/labels-dialog.component.html`
- `src/app/blocks/kanban/components/labels-dialog/labels-dialog.component.css`
**Features:**
- Input field "Type label name"
- Create on Enter
- Label pills with X button
- Color-coded (from LABEL_COLORS)
- Overlay backdrop
- Click outside to close
#### 6. Date Picker Dialog
**Files:**
- `src/app/blocks/kanban/components/date-picker-dialog/date-picker-dialog.component.ts`
- `src/app/blocks/kanban/components/date-picker-dialog/date-picker-dialog.component.html`
- `src/app/blocks/kanban/components/date-picker-dialog/date-picker-dialog.component.css`
**Features:**
- Calendar grid (month view)
- Time picker (hours:minutes wheel)
- "Show time" toggle
- Alert dropdown (None, 5min, 10min, 15min, 30min, 1hour, 1day)
- Cancel / Done buttons
- Animated time wheel (FuseBase style)
#### 7. Estimated Time Dialog
**Files:**
- `src/app/blocks/kanban/components/estimated-time-dialog/estimated-time-dialog.component.ts`
- `src/app/blocks/kanban/components/estimated-time-dialog/estimated-time-dialog.component.html`
- `src/app/blocks/kanban/components/estimated-time-dialog/estimated-time-dialog.component.css`
**Features:**
- 3 wheels: days (d), hours (h), minutes (m)
- Scroll picker style
- Cancel / Save buttons
- Blue highlight on selected value
#### 8. Actual Time Dialog
**Files:**
- `src/app/blocks/kanban/components/actual-time-dialog/actual-time-dialog.component.ts`
- `src/app/blocks/kanban/components/actual-time-dialog/actual-time-dialog.component.html`
- `src/app/blocks/kanban/components/actual-time-dialog/actual-time-dialog.component.css`
**Features:**
- 3 wheels: days (d), hours (h), minutes (m)
- Work type section (chips)
- Editable work type tags (development, design, etc.)
- Work description textarea
- Billable toggle
- Cancel / Save buttons
#### 9. Assignee Dialog
**Files:**
- `src/app/blocks/kanban/components/assignee-dialog/assignee-dialog.component.ts`
- `src/app/blocks/kanban/components/assignee-dialog/assignee-dialog.component.html`
- `src/app/blocks/kanban/components/assignee-dialog/assignee-dialog.component.css`
**Features:**
- User search input
- User list with avatars
- Selected state
- "Unassign" option
---
### Phase 3: Utility Components (3 components)
#### 10. Time Wheel Picker
**Files:**
- `src/app/blocks/kanban/components/time-wheel-picker/time-wheel-picker.component.ts`
- `src/app/blocks/kanban/components/time-wheel-picker/time-wheel-picker.component.html`
- `src/app/blocks/kanban/components/time-wheel-picker/time-wheel-picker.component.css`
**Features:**
- Reusable scroll wheel
- Configurable range (0-23 for hours, 0-59 for minutes, etc.)
- Center highlight
- Smooth scrolling
- Snap to value
#### 11. Calendar Grid
**Files:**
- `src/app/blocks/kanban/components/calendar-grid/calendar-grid.component.ts`
- `src/app/blocks/kanban/components/calendar-grid/calendar-grid.component.html`
- `src/app/blocks/kanban/components/calendar-grid/calendar-grid.component.css`
**Features:**
- Month/year navigation
- 7-column grid (S M T W T F S)
- Selected date highlight (blue circle)
- Today indicator
- Previous/next month days (grayed out)
#### 12. Attachment Preview
**Files:**
- `src/app/blocks/kanban/components/attachment-preview/attachment-preview.component.ts`
- `src/app/blocks/kanban/components/attachment-preview/attachment-preview.component.html`
- `src/app/blocks/kanban/components/attachment-preview/attachment-preview.component.css`
**Features:**
- Image thumbnail
- PDF icon with filename
- File size display
- Remove button (X)
- Download button
- Grid layout
---
## 🔧 Integration with BlockHostComponent
### File to Modify
`src/app/editor/components/block/block-host.component.ts`
### Changes Required
1. **Import Kanban Component**
```typescript
import { KanbanBoardComponent } from '../../../blocks/kanban/kanban-board.component';
```
2. **Add to Switch Case**
```typescript
case 'kanban':
this.dynamicComponentRef = viewContainerRef.createComponent(KanbanBoardComponent);
this.dynamicComponentRef.setInput('blockId', this.block.id);
if (this.block.data) {
this.dynamicComponentRef.setInput('initialData', JSON.parse(this.block.data));
}
break;
```
3. **Update onMenuAction Method**
Add case for 'kanban' block type to handle save/export.
---
## 📐 Architecture Summary
### Services Layer
```
KanbanBoardService
├─ Board state management
├─ Column operations
└─ Serialization
KanbanTaskService
├─ Task CRUD
├─ Selection state
└─ Task operations
LabelsService
├─ Label creation
└─ Color assignment
AttachmentsService
├─ File upload
├─ Thumbnail generation
└─ File type detection
TimeTrackingService
├─ Time formatting
├─ Time calculations
└─ Work type management
DateService
├─ Date formatting
├─ Relative dates
└─ Alert scheduling
```
### Component Hierarchy
```
KanbanBoardComponent (Main)
├─ KanbanColumnComponent (Multiple)
│ ├─ KanbanTaskCardComponent (Multiple)
│ └─ ColumnContextMenuComponent
├─ TaskDetailPanelComponent
│ ├─ LabelsDialog
│ ├─ DatePickerDialog
│ ├─ EstimatedTimeDialog
│ ├─ ActualTimeDialog
│ ├─ AssigneeDialog
│ └─ AttachmentPreview
└─ TaskContextMenuComponent
```
### Data Flow
```
User Action
Component Event
Service Method
Signal Update
UI Re-render (OnPush)
```
---
## 🎨 Styling Guide
### Color Palette (Dark Theme)
```css
Background: #2b2b2b
Column Header: #404040
Column Body: #3a3a3a
Card Background: #353535
Border: #555555
Text Primary: #ffffff
Text Secondary: #a0a0a0
Accent Blue: #4a9eff
Hover: #4a4a4a
```
### Color Palette (Light Theme)
```css
Background: #f5f5f5
Column Header: #e0e0e0
Column Body: #f9f9f9
Card Background: #ffffff
Border: #d0d0d0
Text Primary: #1a1a1a
Text Secondary: #666666
Accent Blue: #2563eb
Hover: #eeeeee
```
### Key Measurements
- Column width: 320px (w-80)
- Card min-height: 60px
- Gap between cards: 8px (space-y-2)
- Border radius: 12px (rounded-xl)
- Task card padding: 12px (p-3)
---
## ✅ Implementation Checklist
### Phase 1: Core Components
- [x] Types & Interfaces
- [x] All 7 Services
- [x] Main Board Component
- [x] Column Component
- [ ] Task Card Component
- [ ] Task Detail Panel
- [ ] Column Context Menu
- [ ] Task Context Menu
### Phase 2: Dialogs
- [ ] Labels Dialog
- [ ] Date Picker Dialog
- [ ] Estimated Time Dialog
- [ ] Actual Time Dialog
- [ ] Assignee Dialog
### Phase 3: Utilities
- [ ] Time Wheel Picker
- [ ] Calendar Grid
- [ ] Attachment Preview
### Phase 4: Integration
- [ ] Integrate with BlockHostComponent
- [ ] Add block type 'kanban' to menu
- [ ] Persistence (save/load from note frontmatter)
### Phase 5: Testing
- [ ] Create new kanban block
- [ ] Add columns
- [ ] Add tasks
- [ ] Test drag & drop
- [ ] Test all dialogs
- [ ] Test context menus
- [ ] Test time tracking
- [ ] Test attachments
---
## 🚀 Next Steps
1. **Create remaining 25+ component files** (Task Card, Detail Panel, Dialogs, Menus)
2. **Implement drag & drop** (already scaffolded with Angular CDK)
3. **Add persistence layer** (save board state to block.data)
4. **Test all interactions** following the 10 images provided
5. **Polish animations & transitions**
6. **Add keyboard shortcuts**
7. **Mobile responsiveness**
---
## 📦 Dependencies
Already available in project:
- Angular 20 ✅
- Tailwind CSS 3.4 ✅
- Angular CDK Drag-Drop ✅
- Angular CDK Overlay ✅
- Angular Signals ✅
---
## 🎯 Result
A fully functional Kanban board identical to FuseBase with:
- ✅ Columns (add, rename, delete, reorder)
- ✅ Tasks (create, edit, complete, duplicate, delete)
- ✅ Labels (create, assign, colored pills)
- ✅ Due dates (calendar + time picker + alerts)
- ✅ Estimated time (d/h/m picker)
- ✅ Actual time tracking (with work types)
- ✅ Attachments (upload, preview, thumbnails)
- ✅ Comments
- ✅ Drag & drop (tasks + columns)
- ✅ Detail panel (slide-in from right)
- ✅ Context menus (column + task)
- ✅ Smooth animations (FuseBase style)
**Total Files:** 40+ files
**Total Lines:** ~6000+ lines
**Effort:** 2-3 days for full implementation