跳到主要内容

Kanban Phase 4 - Advanced Customization and Collaboration

Advanced features based on vibe-kanban, adapted for Viben Design System


Overview​

AttributeValue
Module IDM-KANBAN-PHASE4
Dependencieskanban-features (Phase 1-3)
PriorityP1
Status📝 Specification

Feature List​

P0 - Board Customization​

#FeatureDescriptionvibe-kanban Reference
F24Board Display SettingsColumn reordering, colors, visibilityKanbanDisplaySettingsContainer
F25Column Configuration PanelColumn name editing, color selection, WIP limitsColumnSettings
F26User Preference PersistenceSave collapsed state, sort preferenceslocalStorage/preferences

P1 - Collaboration Features​

#FeatureDescriptionvibe-kanban Reference
F27Comment SystemRich text comments, emoji reactionsIssueCommentsSection
F28Activity TimelineTask change history recordsActivityFeed
F29Notification SystemComments, status change notificationsNotificationTypes

P2 - Enhanced Features​

#FeatureDescriptionvibe-kanban Reference
F30Advanced List ViewCollapsible groups, dedicated drag handlesIssueListView
F31View Navigation TabsDynamic tabs, URL deep linkingViewNavTabs
F32Drag EnhancementPortal preview, multi-select dragDnD enhancements
F33Board TemplatesPreset templates, quick creationBoardTemplates

F24: Board Display Settings​

Feature Description​

Provide visual interface to configure board column display and order.

Component Design​

BoardSettingsDialog - Board settings dialog:

interface BoardSettingsDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
columns: ColumnConfig[];
onColumnsChange: (columns: ColumnConfig[]) => void;
}

interface ColumnConfig {
id: string;
name: string;
color: string;
visible: boolean;
wipLimit?: number;
order: number;
}

Interaction Design​

  • Drag to reorder columns
  • Click color block to select color
  • Toggle visibility switch
  • Edit column name (double-click or pencil icon)

F25: Column Configuration Panel​

Component Design​

ColumnSettingsPanel:

interface ColumnSettingsPanelProps {
column: ColumnConfig;
onChange: (column: ColumnConfig) => void;
onDelete?: () => void;
canDelete?: boolean;
}

// Color presets
const COLUMN_COLORS = [
{ name: "Gray", value: "hsl(var(--muted))" },
{ name: "Blue", value: "hsl(var(--primary))" },
{ name: "Yellow", value: "hsl(var(--warning))" },
{ name: "Green", value: "hsl(var(--success))" },
{ name: "Red", value: "hsl(var(--destructive))" },
{ name: "Purple", value: "hsl(280 60% 50%)" },
{ name: "Orange", value: "hsl(25 90% 50%)" },
{ name: "Cyan", value: "hsl(180 60% 45%)" },
];

F26: User Preference Persistence​

Hook Design​

useKanbanPreferences:

interface KanbanPreferences {
// View preferences
viewMode: ViewMode;
sortMode: SortMode;
sortDirection: SortDirection;

// Column state
collapsedColumns: string[];
columnOrder: string[];
hiddenColumns: string[];

// Panel state
detailPanelWidth: number;
showStats: boolean;

// Filters
savedFilters: KanbanFilter[];
}

interface UseKanbanPreferencesOptions {
projectId: string;
storageKey?: string;
}

function useKanbanPreferences(options: UseKanbanPreferencesOptions): {
preferences: KanbanPreferences;
updatePreference: <K extends keyof KanbanPreferences>(
key: K,
value: KanbanPreferences[K]
) => void;
resetPreferences: () => void;
};

F27: Comment System​

Feature Description​

  • Rich text comment input
  • Emoji reactions (thumbs up, heart, celebration, etc.)
  • Comment edit/delete
  • Relative time display

Component Design​

CommentList + CommentItem + CommentInput:

interface Comment {
id: string;
content: string;
author: {
id: string;
name: string;
avatar?: string;
};
createdAt: string;
updatedAt?: string;
reactions: CommentReaction[];
}

interface CommentReaction {
emoji: string;
users: { id: string; name: string }[];
count: number;
}

interface CommentListProps {
taskId: string;
comments: Comment[];
onAddComment: (content: string) => void;
onEditComment: (id: string, content: string) => void;
onDeleteComment: (id: string) => void;
onToggleReaction: (commentId: string, emoji: string) => void;
}

Emoji Reaction Presets​

const REACTION_EMOJIS = ["👍", "👎", "❤️", "🎉", "😄", "🤔", "👀", "🚀"];

F28: Activity Timeline​

Feature Description​

Record all change history for tasks.

Component Design​

ActivityFeed:

interface ActivityEvent {
id: string;
type: ActivityType;
actor: { id: string; name: string; avatar?: string };
timestamp: string;
data: Record<string, unknown>;
}

type ActivityType =
| "created"
| "status_changed"
| "priority_changed"
| "assignee_changed"
| "title_changed"
| "description_changed"
| "tag_added"
| "tag_removed"
| "due_date_changed"
| "comment_added";

interface ActivityFeedProps {
events: ActivityEvent[];
className?: string;
}

F30: Advanced List View​

Feature Description​

  • Group by status, collapsible
  • Dedicated drag handles
  • Relative time format

Component Design​

GroupedListView:

interface ListGroup {
id: string;
name: string;
color: string;
count: number;
collapsed?: boolean;
}

interface GroupedListViewProps<T> {
items: T[];
groups: ListGroup[];
groupBy: (item: T) => string;
collapsedGroups: Set<string>;
onToggleGroup: (groupId: string) => void;
renderItem: (item: T) => React.ReactNode;
onDragEnd: (event: DragEndEvent) => void;
}

F32: Drag Enhancement​

Feature Description​

  • Portal drag preview (prevent clipping)
  • Multi-select drag support
  • Animation optimization

Hook Design​

useDragPreview:

interface UseDragPreviewOptions {
enabled?: boolean;
renderPreview: (ids: string[]) => React.ReactNode;
}

function useDragPreview(options: UseDragPreviewOptions): {
DragOverlay: React.FC;
isDragging: boolean;
draggedIds: string[];
};

Implementation Order​

Phase 4A (Parallel)​

Task IDFeatureDependencies
T24Board Display SettingsNone
T25Column Configuration PanelNone
T26User Preference PersistenceNone
T27Comment System TypesNone

Phase 4B (Parallel, depends on 4A)​

Task IDFeatureDependencies
T28Comment Component ImplementationT27
T29Activity TimelineNone
T30Advanced List ViewNone
T31Drag EnhancementNone

Phase 4C (depends on 4B)​

Task IDFeatureDependencies
T32Desktop IntegrationT24-T31

Acceptance Criteria​

F24: Board Display Settings​

  • Can drag to reorder columns
  • Color picker works correctly
  • Visibility toggle takes effect
  • Settings persist after refresh

F25: Column Configuration Panel​

  • Double-click to edit column name
  • Color preset selection
  • WIP limit configurable
  • Warning when deleting column with tasks

F26: User Preference Persistence​

  • Collapsed state persists
  • Sort preferences persist
  • Persists across sessions

F27: Comment System​

  • Can add comments
  • Can add emoji reactions
  • Can edit/delete own comments
  • Shows relative time

Last Updated: 2026-02-07 Version: 1.0.0 Status: 📝 Specification