{"version":3,"sources":["../src/views/KanbanViewAdapter.tsx","../../../node_modules/@dnd-kit/utilities/src/execution-context/canUseDOM.ts","../../../node_modules/@dnd-kit/utilities/src/css.ts","../src/utils/cn.ts","../src/utils/positioning.ts","../src/utils/performance.ts","../src/utils/retry.ts","../src/utils/logger.ts","../src/utils/export.ts","../src/utils/import.ts","../src/components/Gantt/GanttThemeContext.tsx","../src/components/Board/KanbanThemeContext.tsx","../src/components/Portal/Portal.tsx","../src/components/Card/PrioritySelector.tsx","../src/components/Card/DateRangePicker.tsx","../src/components/Card/UserAssignmentSelector.tsx","../src/components/Card/DependenciesSelector.tsx","../src/components/Card/Card.tsx","../src/components/Column/ColumnMenu.tsx","../src/components/Column/Column.tsx","../src/components/Column/EditableColumnTitle.tsx","../src/hooks/useDragState.ts","../src/components/Board/Board.tsx","../src/components/CoverImage/CoverImageManager.tsx","../src/components/ErrorBoundary/ErrorBoundary.tsx","../src/components/CommandPalette/CommandPalette.tsx","../src/components/Attachments/AttachmentUploader.tsx","../src/components/CardDetailModal/CardDetailModal.tsx","../src/components/CardDetailModal/CardDetailModalV2.tsx","../src/components/Charts/VelocityChart.tsx","../src/components/Charts/BurnDownChart.tsx","../src/components/Charts/DistributionCharts.tsx","../src/components/BulkOperations/BulkOperationsToolbar.tsx","../src/components/Swimlanes/SwimlaneBoardView.tsx","../src/components/Swimlanes/GroupBySelector.tsx","../src/hooks/keyboard/useKeyboardShortcuts.ts","../src/components/KeyboardShortcuts/KeyboardShortcutsHelp.tsx","../src/components/Templates/CardTemplateSelector.tsx","../src/components/ExportImport/ExportImportModal.tsx","../src/components/FilterBar/FilterBar.tsx","../src/components/ConfigMenu/ConfigMenu.tsx","../src/theme/themes.ts","../src/theme/ThemeProvider.tsx","../src/components/ThemeModal/ThemeModal.tsx","../src/components/Gantt/themes.ts","../src/components/Gantt/deriveThemeFromCSS.ts","../src/components/Gantt/i18n.ts","../src/components/Gantt/GanttI18nContext.tsx","../src/components/Gantt/GanttToolbar.tsx","../src/components/Gantt/ColumnManager.tsx","../src/components/Gantt/ContextMenu.tsx","../src/components/Gantt/useGanttKeyboard.ts","../src/components/Gantt/useGanttSelection.ts","../src/components/Gantt/hierarchyUtils.ts","../src/components/Card/StatusSelector.tsx","../src/components/Gantt/TaskGrid.tsx","../src/components/Gantt/hooks/useDragState.ts","../src/components/Gantt/TaskBar.tsx","../src/components/Gantt/DependencyLine.tsx","../src/components/Gantt/Milestone.tsx","../src/components/Gantt/ganttUtils.ts","../src/components/Gantt/Timeline.tsx","../src/components/Gantt/ColorPicker.tsx","../src/components/Gantt/TaskFormModal.tsx","../src/components/Gantt/GanttAIAssistant.tsx","../src/components/Gantt/useUndoRedo.ts","../src/components/Gantt/useGanttUndoRedoKeys.ts","../src/components/Gantt/defaultTemplates.ts","../src/components/Gantt/GanttBoard.tsx","../src/components/Gantt/aiCommandParser.ts","../src/components/Gantt/adapters.ts","../src/components/ListView/i18n.ts","../src/components/ListView/ListView.tsx","../src/components/ListView/themes.ts","../src/components/Calendar/i18n.ts","../src/components/Calendar/CalendarBoard.tsx","../src/components/Calendar/themes.ts","../src/components/CardStack/CardStack.tsx","../src/types/card-history.ts","../src/components/CardHistory/CardHistoryTimeline.tsx","../src/components/CardHistory/CardHistoryReplay.tsx","../src/types/card-relationships.ts","../src/components/CardRelationships/CardRelationshipsGraph.tsx","../src/components/AI/GeneratePlanModal.tsx","../src/lib/ai/config.ts","../src/lib/ai/costs.ts","../src/components/AI/AIUsageDashboard.tsx","../src/components/AI/GenerateGanttTasksDialog.tsx","../src/hooks/useKanbanState.ts","../src/hooks/useBoard.ts","../src/hooks/useFilters.ts","../src/hooks/useAI.ts","../src/hooks/useSelectionState.ts","../src/hooks/useMultiSelect.ts","../src/types/card-stack.ts","../src/hooks/useCardStacking.ts","../src/adapters/react/BoardProvider.tsx","../src/adapters/react/useBoard.ts","../src/adapters/react/useFilteredCards.ts","../src/plugins/PluginManager.ts","../src/components/VirtualList/VirtualList.tsx","../src/components/VirtualGrid/VirtualGrid.tsx","../src/tokens/design-tokens.ts","../src/tokens/css-generator.ts","../src/theme/ThemeSwitcher.tsx"],"names":["CSS","Object","freeze","Translate","toString","transform","x","y","Math","round","Scale","scaleX","scaleY","Transform","join","Transition","_ref","property","duration","easing","cn","inputs","twMerge","clsx","calculatePosition","before","after","generateInitialPositions","count","_","i","calculateDropPosition","columnCards","dropIndex","shouldVirtualize","itemCount","threshold","defaultShouldRetry","error","status","calculateDelay","attempt","initialDelay","backoffMultiplier","maxDelay","delay","jitter","retryWithBackoff","fn","options","maxAttempts","shouldRetry","onRetry","lastError","attempts","callbackError","resolve","retrySyncOperation","createRetryWrapper","args","CircuitBreaker","resetTimeout","result","LogLevel","_Logger","entry","timestamp","level","message","component","rest","prefix","hasContext","isDev","componentName","context","action","Timer","Logger","onEnd","enabled","logger","exportToJSON","board","_options","data","exportToCSV","headers","rows","card","column","col","escapeCSV","row","exportToPDF","boardElement","element","boardEl","canvas","html2canvas","imgData","pdfWidth","pdfHeight","imgAspect","imgWidth","imgHeight","doc","jsPDF","xOffset","yPosition","lines","metadata","dates","value","exportBoard","format","downloadExport","content","filename","defaultFilename","finalFilename","mimeTypes","blob","url","link","importFromJSON","jsonString","importFromCSV","csvString","parseCSVLine","cards","columnsMap","errors","values","cardData","header","index","columnTitle","line","current","inQuotes","char","nextChar","importBoard","readFile","file","reject","reader","event","GanttThemeContext","createContext","useGanttTheme","useContext","KanbanThemeContext","KanbanThemeProvider","children","themeName","jsx","useKanbanTheme","Portal","container","mounted","setMounted","useState","ganttTheme","kanbanTheme","useEffect","target","theme","themeStyles","createPortal","PRIORITY_CONFIG","CLEAR_COLOR","PriorityIcon","color","jsxs","PrioritySelector","priority","onChange","className","isOpen","setIsOpen","menuPosition","setMenuPosition","menuRef","useRef","buttonRef","rect","handleClickOutside","handleEscape","e","handleSelect","newPriority","currentConfig","flagColor","key","config","QUICK_OPTIONS","DateRangePicker","startDate","endDate","isDark","handleQuickSelect","days","now","formatLocalDate","date","year","month","day","todayStr","endStr","formatDateRange","parseLocalDate","dateStr","parts","p","start","end","monthNames","hasDateSet","overdue","today","option","UserAssignmentSelector","assignedUsers","availableUsers","maxVisibleAvatars","searchQuery","setSearchQuery","handleToggleUser","user","isAssigned","u","filteredUsers","visibleUsers","overflowCount","wouldCreateCircularDependency","allCards","fromCardId","toCardId","dependencyMap","deps","d","depObj","existingDeps","visited","recStack","hasCycle","cardId","depId","DependenciesSelector","currentCardId","dependencies","availableTasks","validateCircular","onCircularDependencyError","hasDependencies","setHasDependencies","circularError","setCircularError","handleToggleDependency","taskId","isDependency","targetTask","t","newDeps","id","errorMsg","handleToggleHasDependencies","newValue","filteredTasks","task","linkColor","Fragment","Card","memo","render","onClick","isSelected","disableDrag","onUpdate","attributes","listeners","setNodeRef","transition","isDragging","useSortable","style","users","label","prevProps","nextProps","ColumnMenu","onRename","isRenaming","setIsRenaming","newTitle","setNewTitle","inputRef","handleRenameClick","handleRenameSubmit","trimmedTitle","handleRenameKeyDown","Column","renderColumn","renderCard","renderHeader","renderEmptyState","onCardClick","onCardUpdate","enableVirtualization","cardHeight","isCollapsed","onToggleCollapse","onColumnRename","isOver","useDroppable","parentRef","useVirtualization","virtualizer","useVirtualizer","wipStatus","percentage","isOverWipLimit","getWipBadgeClasses","SortableContext","verticalListSortingStrategy","virtualItem","EditableColumnTitle","title","onSave","isEditing","setIsEditing","editValue","setEditValue","handleSave","trimmed","handleKeyDown","useDragState","state","setState","dragStore","newState","setDragState","useCallback","KanbanBoard","callbacks","renderProps","isLoading","dragState","themeClass","handleCardUpdate","updates","handleColumnRename","columnId","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","cardsByColumn","useMemo","map","a","b","handleDragStart","active","c","handleDragOver","over","targetColumnId","handleDragEnd","activeCard","targetPosition","targetColumnCards","overCard","overIndex","targetColumn","handleCardClick","LoadingSkeleton","DndContext","closestCorners","DragOverlay","columnCount","KanbanViewAdapter","BaseViewAdapter","createRoot","cell","createKanbanView","MAX_FILE_SIZE","RECENT_UPLOADS_KEY","MAX_RECENT_UPLOADS","CoverImageManager","coverImage","onUpload","onRemove","unsplashAccessKey","maxFileSize","showRecentUploads","activeTab","setActiveTab","isUploading","setIsUploading","uploadProgress","setUploadProgress","urlInput","setUrlInput","unsplashQuery","setUnsplashQuery","unsplashResults","setUnsplashResults","isSearching","setIsSearching","recentUploads","setRecentUploads","repositionMode","setRepositionMode","repositionOffset","setRepositionOffset","setError","fileInputRef","saved","uploads","err","saveRecentUpload","thumbnail","newUpload","prev","sorted","updated","handleFileUpload","fileToDataURL","getRootProps","getInputProps","isDragActive","isDragReject","useDropzone","acceptedFiles","handlePaste","items","item","handleUrlSubmit","searchUnsplash","query","response","handleUnsplashSelect","photo","RepositionIcon","ChangeIcon","RemoveIcon","UploadIcon","LinkIcon","UnsplashIcon","AnimatePresence","motion","upload","size","ErrorBoundary","Component","props","errorInfo","onError","handlerError","hasError","fallback","withErrorBoundary","errorBoundaryProps","WrappedComponent","CommandPalette","onCreateCard","onNavigateToCard","onSearch","onChangePriority","onAssignUser","onGeneratePlan","onPredictRisks","onOpenAIUsage","shortcut","search","setSearch","page","setPage","selectedColumn","setSelectedColumn","selectedCard","setSelectedCard","open","handleClose","handleSelectCommand","param","handleCreateCard","Command","formatFileSize","bytes","k","sizes","getFileIcon","type","isImage","AttachmentUploader","attachments","onDelete","maxSizeMB","allowedTypes","maxFiles","setIsDragging","validateFiles","files","valid","handleUpload","handleDragEnter","handleDragLeave","handleDrop","handleFileInputChange","handleClick","handleDelete","attachmentId","attachment","CardDetailModal","onClose","comments","activities","aiInsights","onAddComment","onDeleteComment","onUploadAttachments","onDeleteAttachment","onSuggestAssignee","onGenerateSubtasks","onEstimateEffort","currentUserId","editedCard","setEditedCard","newComment","setNewComment","aiLoading","setAiLoading","aiSuggestions","setAiSuggestions","handleAddComment","handleSuggestAssignee","suggestions","handleGenerateSubtasks","subtasks","handleEstimateEffort","effort","currentCard","selected","dep","comment","author","activity","suggestion","subtask","insight","PRIORITY_OPTIONS","STATUS_OPTIONS","CardDetailModalV2","_onDelete","_onDeleteComment","currentUser","_onAIGenerateDescription","_onAICreateSubtasks","_onAIFindSimilar","availableColumns","availableLabels","onUploadCoverImage","onSubtasksChange","localCard","setLocalCard","isEditingDescription","setIsEditingDescription","setSubtasks","isAddingSubtask","setIsAddingSubtask","newSubtaskTitle","setNewSubtaskTitle","commentText","setCommentText","activityFilter","setActivityFilter","showCoverManager","setShowCoverManager","showStatusMenu","setShowStatusMenu","showPriorityMenu","setShowPriorityMenu","showAssigneeMenu","setShowAssigneeMenu","showLabelMenu","setShowLabelMenu","showDatePicker","setShowDatePicker","showTimePicker","setShowTimePicker","titleRef","descriptionRef","commentRef","statusMenuRef","priorityMenuRef","assigneeMenuRef","labelMenuRef","datePickerRef","isTyping","isMod","handleTitleChange","handleTitleKeyDown","handleDescriptionBlur","handleStatusChange","handlePriorityChange","handleToggleAssignee","userId","currentAssignees","newAssignees","handleToggleLabel","currentLabels","newLabels","l","handleDateChange","newDate","handleTimeChange","hours","handleAddSubtask","newSubtask","updatedSubtasks","handleToggleSubtask","st","handleDeleteSubtask","handleSendComment","handleCommentKeyDown","handleCoverImageChange","handleCoverImageRemove","renderMarkdown","text","ReactMarkdown","remarkGfm","rehypeSanitize","node","filteredActivity","displayCard","completedSubtasksCount","s","CustomTooltip","payload","VelocityChart","height","showAverage","showPlanned","dataWithAverage","point","sum","ResponsiveContainer","LineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Line","BurnDownChart","totalTasks","useArea","total","currentRemaining","idealRemaining","progress","isOnTrack","AreaChart","Area","PRIORITY_COLORS","DEFAULT_COLORS","renderPieLabel","cx","cy","midAngle","innerRadius","outerRadius","percent","radius","DistributionCharts","showPercentages","dataWithTotal","colors","PieChart","Pie","Cell","legendEntry","BarChart","Bar","max","BulkOperationsToolbar","selectedCards","onClearSelection","columns","showMoveMenu","setShowMoveMenu","showUserMenu","setShowUserMenu","cardIds","handleUpdatePriority","handleMove","handleAssignUsers","userIds","handleAddLabels","labels","existingLabels","allLabels","generateSwimlanes","groupBy","laneMap","groupValue","laneId","laneTitle","laneColor","laneIcon","assignedUserIds","SwimlaneBoardView","swimlaneConfig","collapsedLanes","setCollapsedLanes","swimlanes","toggleLaneCollapse","next","lane","laneCards","laneBoard","GROUP_BY_OPTIONS","GroupBySelector","currentOption","opt","DEFAULT_SHORTCUTS","matchesShortcut","modifiers","ctrlMatch","shiftMatch","altMatch","metaMatch","useKeyboardShortcuts","shortcuts","preventDefault","shortcutsRef","enabledRef","registerShortcut","unregisterShortcut","customEvent","formatKey","formatModifiers","isMac","getShortcutDisplay","keys","groupShortcuts","groups","KeyboardShortcutsHelp","isMounted","setIsMounted","category","categoryShortcuts","DEFAULT_TEMPLATES","CardTemplateSelector","templates","onSelectTemplate","template","groupedTemplates","acc","categoryTemplates","ExportImportModal","onImport","boardElementRef","selectedFormat","setSelectedFormat","importResult","setImportResult","handleExport","handleFileSelect","SORT_OPTIONS","GROUPBY_OPTIONS","FilterBar","filters","sort","onFiltersChange","onSortChange","onReset","onFilterMyTasks","onFilterOverdue","onFilterHighPriority","_availableColumns","showQuickFilters","compact","onGroupByChange","setIsCollapsed","handleSearchChange","handleDateFilterChange","handleSortChange","handleSortOrderToggle","hasActiveFilters","ConfigMenu","onOpenExport","onOpenThemes","onOpenShortcuts","viewMode","onExportGanttPDF","onExportGanttExcel","onExportGanttPNG","onExportGanttCSV","handleItemClick","darkTheme","lightTheme","neutralTheme","themes","defaultTheme","ThemeContext","STORAGE_KEY","ThemeProvider","initialTheme","storageKey","setThemeState","stored","setTheme","newTheme","root","currentTheme","camelToKebab","themeKey","cssVar","useTheme","str","ThemeModal","themeData","deriveThemeFromCSS","styles","getVar","varName","en","es","translations","getTranslations","locale","mergeTranslations","customTranslations","base","GanttI18nContext","useGanttI18n","ExportDropdown","onExportPNG","onExportPDF","onExportExcel","onExportCSV","onExportJSON","onExportMSProject","isExporting","setIsExporting","dropdownRef","exportOptions","FileImage","FileText","FileSpreadsheet","FileJson","FolderKanban","handler","Download","ChevronDown","SegmentedControl","layoutId","isActive","MinimalTabs","DensityDropdown","densityOptions","currentLabel","Rows3","Check","GanttToolbar","timeScale","onTimeScaleChange","zoom","onZoomChange","onThemeChange","rowDensity","onRowDensityChange","showThemeSelector","showCreateTaskButton","createTaskLabel","onCreateTask","hasExport","timeScaleOptions","themeOptions","Moon","Sun","Palette","val","ZoomOut","ZoomIn","Plus","ColumnManager","onToggleColumn","ContextMenu","ChevronRight","MenuIcons","Edit3","Pencil","Trash2","Minus","Link2","BarChart3","ArrowUpDown","ArrowUp","ArrowDown","EyeOff","Eye","Settings","Scissors","Circle","PlayCircle","CheckCircle2","useGanttKeyboard","tasks","selectedTaskIds","onTaskSelect","onTaskCreate","onTaskDelete","onTaskDuplicate","onTaskMove","onTaskIndent","onTaskOutdent","onTaskRename","onTaskToggleExpand","onOpenTaskModal","enableKeyboard","isEditingRef","editing","flattenTasks","traverse","getFirstSelectedTask","flatTasks","handleNavigation","direction","multiSelect","selectedTask","currentIndex","nextIndex","nextTask","ctrlOrCmd","selectedIds","useGanttSelection","setSelectedTaskIds","lastSelectedId","setLastSelectedId","selectTask","toggleTaskSelection","selectTaskRange","flatTaskIds","lastIndex","rangeIds","handleTaskClick","shift","handleKeyboardSelection","clearSelection","isTaskSelected","parentId","findParentTask","childId","found","indentTasks","taskIds","firstTaskId","taskIndex","targetParent","removeTasks","ids","removed","addAsChildren","idsSet","filtered","outdentTasks","parent","grandparent","removeFromParent","insertAfterTask","afterId","moveTasks","moveInArray","newIndex","deleteTasks","filterTasks","duplicateTasks","duplicateTask","original","copy","duplicateSubtasks","createTask","afterTaskId","weekFromNow","newTask","insertTask","insertIndex","renameTask","newName","toggleTaskExpansion","createSubtask","parentTaskId","findParent","parentTask","addSubtask","STATUS_CONFIG","StatusIcon","icon","StatusSelector","newStatus","statusColor","TaskGrid","ROW_HEIGHT","_templates","onTaskClick","onTaskDblClick","onTaskContextMenu","onTaskToggle","_scrollTop","onColumnResize","onTaskUpdate","onMultiTaskDelete","onCreateSubtask","hoveredTaskId","setHoveredTaskId","showKeyboardHelp","setShowKeyboardHelp","editingTaskId","setEditingTaskId","editingTaskName","setEditingTaskName","keyboardHelpRef","editInputRef","resizingColumn","setResizingColumn","resizeStartX","setResizeStartX","resizeStartWidth","setResizeStartWidth","contextMenu","setContextMenu","handleMouseMove","deltaX","newWidth","handleMouseUp","handleSelectionClick","handleRenameStart","HEADER_HEIGHT","getDuration","handleRenameSave","handleRenameCancel","handleCreateSubtaskClick","renderCellContent","isHovered","startDateValue","endDateValue","taskAssignedUsers","getHeaderContextMenuItems","getTaskContextMenuItems","visibleColumns","colIndex","Keyboard","initialX","initialWidth","dragMode","setDragMode","dragOffset","setDragOffset","ghostX","setGhostX","ghostWidth","setGhostWidth","connectionLine","setConnectionLine","activeZone","setActiveZone","draggedSegmentIndex","setDraggedSegmentIndex","draggedSegmentStartX","setDraggedSegmentStartX","segmentDragOffsetX","setSegmentDragOffsetX","hoveredSegmentIndex","setHoveredSegmentIndex","setIsHovered","width","TaskBar","dayWidth","onDoubleClick","onContextMenu","onDateChange","onDependencyCreate","allTaskPositions","onDragMove","svgRef","isResizing","isConnecting","resetDragState","borderRadius","isOverdue","isAtRisk","isNeutralTheme","RESIZE_ZONE","barWidth","isSmallBar","isVerySmallBar","formatDate","snapToDay","pixelX","pixelToDate","findTaskAtPoint","pointX","pointY","taskPos","padding","handleMouseDown","mode","segmentX","svgElement","svgPoint","effectiveX","actualMode","relativeX","targetTaskId","rawNewX","snappedX","daysDelta","segmentOffset","rawNewStart","snappedStart","rawNewEnd","taskDuration","newStartDate","newEndDate","isValid","dayOffset","updatedSegments","seg","idx","newSegStart","newSegEnd","allDates","newTaskStart","newTaskEnd","handleGlobalMouseMove","handleGlobalMouseUp","displayX","displayWidth","tooltipContent","tooltipText","customClass","segment","segmentStartX","segmentWidth","isThisSegmentDragging","isThisSegmentHovered","displaySegmentX","labelText","truncated","DependencyLine","x1","y1","x2","y2","dx","dy","midX","path","arrowSize","angle","arrowX","arrowY","arrowX2","arrowY2","lineColor","Milestone","ganttUtils","durationDays","diffMs","dayOfWeek","workingDays","daysAdded","fromTaskId","toTaskId","buildMap","taskList","flatten","parents","currentId","json","parsed","flat","dateString","tasksWithDates","task1","task2","ascending","diff","newId","autoTable","XLSX","worksheet","columnWidths","workbook","projectName","taskUIDMap","formatMSDate","projectStart","projectEnd","xmlTasks","uid","predecessorLinks","xml","earlyDates","calculateEarlyDates","depTask","depEF","ef","lateDates","calculateLateDates","successors","lf","successor","succLS","ls","criticalPath","early","late","slack","dependents","daysToEnd","earliestDepStart","changedTaskId","changedTask","updatedTasks","dependent","updateTaskRec","draggedTaskId","timelineStartDate","scaledDayWidth","rowHeight","headerHeight","previews","rangeStart","msPerDay","draggedTask","getAffectedTasks","parentDelta","rowIndex","taskStart","originalX","previewX","splitDate","gapDays","firstSegmentEnd","secondSegmentStart","segments","tasksList","Timeline","onTaskDateChange","onDependencyDelete","cascadePreviews","setCascadePreviews","totalDays","timelineWidth","getWeekNumber","dayNum","yearStart","isWeekend","handleTimelineClick","clickedDate","calculateParentDates","subtasksWithDates","startDates","endDates","earliestStart","latestEnd","tasksWithCalculatedDates","getTaskPosition","taskEnd","daysFromStart","minWidth","taskPositions","handleTaskDragMove","weekNum","todayX","contentHeight","nextX","isWeekendDay","hasTaskBar","toIndex","fromIndex","fromPos","toPos","isContainer","preview","TASK_COLORS","ColorPicker","disabled","TaskFormModal","onSubmit","themeColors","inputStyle","labelStyle","formData","setFormData","setErrors","validate","newErrors","handleSubmit","handleChange","field","progressValue","X","AlertCircle","Calendar","Clock","MilestoneIcon","Users","n","DEFAULT_SUGGESTIONS","AIIcon","SendIcon","CloseIcon","MinimizeIcon","LoadingDots","GanttAIAssistant","_onTasksUpdate","isMinimized","setIsMinimized","messages","setMessages","inputValue","setInputValue","setIsLoading","showSuggestions","setShowSuggestions","messagesEndRef","chatContainerRef","placeholder","position","onCommand","maxHistory","applyCommandResult","handleSendCommand","command","userMessage","loadingMessage","withoutLoading","m","assistantMessage","handleSuggestionClick","positionClasses","useUndoRedo","initialState","maxHistorySize","history","setHistory","isApplyingHistory","newStateOrUpdater","addToHistory","currentHistory","resolvedNewState","newPast","undo","previous","redo","newFuture","clearHistory","useGanttUndoRedoKeys","canUndo","canRedo","ctrlKey","defaultTemplates","assigneeNames","classes","mergeTemplates","userTemplates","getRowHeight","density","GanttBoard","forwardRef","onTasksChange","ref","initialTimeScale","initialRowDensity","showExportButton","enableAutoCriticalPath","aiAssistant","onProgressChange","onTaskEdit","onTaskAddSubtask","onTaskMarkIncomplete","onTaskSetInProgress","onBeforeTaskAdd","onAfterTaskAdd","onBeforeTaskUpdate","onAfterTaskUpdate","onBeforeTaskDelete","onAfterTaskDelete","globalTheme","setCurrentTheme","setTimeScale","setRowDensity","setZoom","scrollTop","setScrollTop","setIsResizing","gridWidthOverride","setGridWidthOverride","editingTask","setEditingTask","handleThemeChange","localTasks","setLocalTasks","prevTasksRef","isInitialMount","prevJson","currentJson","getDefaultColumns","setColumns","calculatedGridWidth","gridWidth","gridScrollRef","timelineScrollRef","ganttContainerRef","ganttThemeContextValue","mergedTemplates","tasksWithCriticalPath","criticalPathIds","markCritical","useImperativeHandle","addToParent","update","remove","newTasks","expand","collapse","expandAll","collapseAll","imported","handleToggleColumn","handleColumnResize","minW","maxW","clampedWidth","handleTaskToggle","handleTaskUpdate","oldProgress","updateTask","updatedTask","handleTaskIndent","handleTaskOutdent","handleTaskMove","handleMultiTaskDelete","allowedTaskIds","handleTaskDuplicate","handleTaskCreate","handleTaskRename","handleCreateSubtask","handleTaskDateChange","newStart","newEnd","updateTaskDates","handleTaskContextMenu","handleSplitTask","handleTaskDblClickInternal","handleDependencyCreate","fromTask","updateTaskDependencies","handleDependencyDelete","dependencyId","removeTaskDependency","minDate","maxDate","handleExportPNG","handleExportPDF","handleExportExcel","handleExportCSV","csv","handleExportJSON","handleExportMSProject","timelineScroll","gridContainer","taskGridContent","handleTimelineScroll","scrollY","containerLeft","maxWidth","startTime","endTime","midTime","GANTT_AI_SYSTEM_PROMPT","generateTasksContext","findTaskByName","name","normalizedName","exact","partial","words","taskName","word","parseNaturalDate","referenceDate","normalized","dayMatch","targetDay","currentDay","daysToAdd","inMatch","amount","unit","dateMatch","spanishMonths","spanishDateMatch","englishMonths","englishDateMatch","parseNaturalDuration","match","parseProgress","parseStatus","parseLocalCommand","moveMatch","dateText","extendMatch","durationText","progressMatch","progressText","renameMatch","oldName","linkMatch","fromName","toName","toTask","deleteMatch","validateAIResponse","r","mapCardStatusToTaskStatus","mapTaskStatusToCardStatus","cardToGanttTask","assignees","parseDate","isMilestone","ganttTaskToCardUpdate","assignee","cardsToGanttTasks","listViewTranslations","getListViewTranslations","mergeListViewTranslations","flattenTasksWithLevel","ListView","showSearch","showHierarchy","expandedTasks","setExpandedTasks","sortField","setSortField","sortOrder","setSortOrder","parentIds","findParents","toggleExpand","handleSort","displayTasks","visibleTasks","isVisible","aVal","bVal","List","Search","isExpanded","listViewThemes","getListViewTheme","calendarTranslations","getCalendarTranslations","mergeCalendarTranslations","getMonthNames","getWeekdayNames","firstDayOfWeek","short","weekdays","isDateInTaskRange","dateOnly","startOnly","endOnly","CalendarBoard","initialDate","currentDate","setCurrentDate","setSelectedTask","goToPreviousMonth","goToNextMonth","goToToday","calendarDays","firstDayOfMonth","lastDayOfMonth","startDay","daysInMonth","flatTaskList","prevMonthDays","prevMonthLastDay","isToday","remainingDays","dayNames","monthName","newProgress","ChevronLeft","calendarThemes","getCalendarTheme","CardStack","stack","onToggleExpand","onUnstack","onDeleteStack","stackCards","stats","totalCards","uniqueAssignees","priorities","handleToggle","DEFAULT_TIMELINE_CONFIG","formatEventDescription","getEventIcon","getEventColor","CardHistoryTimeline","events","filter","onFilterChange","onClearFilter","onEventClick","selectedEventId","customConfig","expandedEvents","setExpandedEvents","timelineRef","groupedEvents","dateKey","group","uniqueUsers","uniqueTypes","types","toggleEvent","eventId","formatRelativeTime","diffMins","diffHours","diffDays","activeFilterCount","eventIndex","eventColor","change","CardHistoryReplay","replayState","onStartReplay","onStopReplay","onTogglePlayback","onPrevious","onNext","onGoToEvent","onSpeedChange","speeds","currentEvent","speed","getRelationshipColor","getRelationshipLabel","getRelationshipIcon","isDirectionalRelationship","runForceSimulation","nodes","edges","iterations","simNodes","nodeMap","iter","alpha","centerX","centerY","other","distance","force","edge","source","CardRelationshipsGraph","_filter","_onFilterChange","onInteraction","simulatedNodes","setSimulatedNodes","draggingNode","setDraggingNode","hoveredNode","setHoveredNode","hoveredEdge","setHoveredEdge","pan","setPan","simulated","handleNodeMouseDown","nodeId","handleNodeClick","handleEdgeClick","getNodePosition","getNodeColor","z","sourcePos","targetPos","isDirectional","isCritical","GeneratePlanModal","onPlanGenerated","externalLoading","prompt","setPrompt","isGenerating","setIsGenerating","generatedPlan","setGeneratedPlan","handleGenerate","plan","handleApplyPlan","example","AI_MODELS","RATE_LIMITS","AI_FEATURES","calculateCost","model","inputTokens","outputTokens","modelInfo","inputCost","outputCost","formatCost","cost","AIUsageTracker","operation","fullOperation","listener","timeRange","operations","op","totalOperations","totalCost","totalInputTokens","totalOutputTokens","successfulOps","totalDuration","operationsByFeature","costsByFeature","limit","planTier","period","periodOperations","remaining","percentUsed","aiUsageTracker","AIUsageDashboard","setStats","setLimit","interval","recentOps","feature","GenerateGanttTasksDialog","onTasksGenerated","onGenerateTasks","setStartDate","setEndDate","generatedTasks","setGeneratedTasks","responseMetadata","setResponseMetadata","handleApplyTasks","similarity","useKanbanState","initialBoard","onPersist","setBoard","persistBoard","updatedBoard","handleCardMove","sourceColumnId","updatedCard","updatedCards","updatedColumns","targetCards","handleCardCreate","newCardId","newCard","handleCardDelete","handleColumnCreate","newColumnId","newColumn","handleColumnUpdate","handleColumnDelete","addCard","addColumn","clearBoard","useBoard","initialData","helpers","utils","maxPosition","DEFAULT_FILTERS","DEFAULT_SORT","useFilters","initialFilters","initialSort","setFiltersState","setSortState","setFilters","newFilters","setSort","newSort","resetFilters","filterMyTasks","filterOverdue","filterHighPriority","applyFilters","todayString","dueDate","dueDateString","todayDate","cardDueDate","due","comparison","aCreated","bCreated","priorityOrder","aPriority","bPriority","aDue","bDue","aTime","bTime","aEst","bEst","generateObject","generateText","aiSDK","useAI","isAvailable","_boardState","useSelectionState","selectionStore","setSelectionState","useMultiSelect","selectionState","isCardSelected","selectCard","isCtrlOrCmd","isShift","lastCard","startIndex","endIndex","minIndex","maxIndex","rangeCardIds","newSelection","deselectCard","selectAll","toggleCard","getSelectedCards","DEFAULT_STACKING_CONFIG","useCardStacking","userConfig","aiService","stacks","setStacks","createStack","strategy","newStack","deleteStack","stackId","toggleStack","addToStack","removeFromStack","newCardIds","getStacksForColumn","getSuggestions","byLabels","byAssignee","byPriority","priorityEmoji","highSimilarity","avgConfidence","applySuggestion","topSuggestion","BoardContext","BoardProvider","onStateChange","storeRef","cardsMap","colData","Board","BoardStore","store","_event","useBoardStore","setCards","updateBoard","changes","columnData","updateColumn","deleteColumn","getColumn","updateCard","deleteCard","moveCard","toColumnId","newPosition","getCard","getCardsByColumn","useFilteredCards","matchesTitle","matchesDesc","useSortedCards","sortBy","PluginManager","plugin","pluginId","hookName","defaultValue","hook","hookResult","promises","pluginManager","VirtualList","estimateSize","renderItem","overscan","horizontal","gap","getItemKey","virtualItems","containerStyle","innerStyle","itemStyle","useVirtualList","VirtualGrid","estimateColumnWidth","columnVirtualizer","virtualColumns","virtualColumn","columnStyle","useVirtualGrid","shouldVirtualizeGrid","spacing","fontSize","fontWeight","lineHeight","zIndex","shadows","opacity","kanban","gantt","designTokens","getToken","tokens","flattenTokens","obj","newKey","formatCSSValue","generateCSSVariables","flatTokens","cssVars","varValue","generateThemeVariables","flatColors","generateCompleteCSS","tokenVars","themeVars","exportTokensToCSS","ThemeIcon","ThemeSwitcher","showLabels"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\r\n * KanbanViewAdapter - ViewAdapter implementation for Kanban board\r\n * @module views/KanbanViewAdapter\r\n *\r\n * Implements the ViewAdapter interface from @libxai/core to enable\r\n * the Kanban board to work with AsakaaRuntime and ViewRegistry.\r\n */\r\n\r\nimport { createRoot, type Root } from 'react-dom/client'\r\nimport { BaseViewAdapter, type ViewBoardData, type ViewOptions, type ExportFormat } from '@libxai/core'\r\nimport { KanbanBoard } from '../components/Board'\r\nimport type { KanbanBoardProps } from '../types'\r\nimport type { Card, Column } from '../types'\r\n\r\n/**\r\n * Kanban view configuration\r\n */\r\nexport interface KanbanViewConfig {\r\n  /**\r\n   * Board callbacks\r\n   */\r\n  callbacks?: KanbanBoardProps['callbacks']\r\n\r\n  /**\r\n   * Card click handler\r\n   */\r\n  onCardClick?: KanbanBoardProps['onCardClick']\r\n\r\n  /**\r\n   * Custom render props\r\n   */\r\n  renderProps?: KanbanBoardProps['renderProps']\r\n\r\n  /**\r\n   * Board configuration\r\n   */\r\n  config?: KanbanBoardProps['config']\r\n\r\n  /**\r\n   * Available users for assignment\r\n   */\r\n  availableUsers?: KanbanBoardProps['availableUsers']\r\n\r\n  /**\r\n   * Custom class name\r\n   */\r\n  className?: string\r\n\r\n  /**\r\n   * Custom inline styles (React.CSSProperties)\r\n   */\r\n  style?: React.CSSProperties\r\n\r\n  /**\r\n   * View options\r\n   */\r\n  viewOptions?: ViewOptions\r\n}\r\n\r\n/**\r\n * KanbanViewAdapter\r\n *\r\n * React-based ViewAdapter implementation that wraps the KanbanBoard component.\r\n * This allows the Kanban board to be used as a view in the ViewRegistry and\r\n * work seamlessly with AsakaaRuntime.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { KanbanViewAdapter } from '@libxai/board'\r\n * import { ViewRegistry } from '@libxai/core'\r\n *\r\n * const registry = new ViewRegistry()\r\n * const kanbanView = new KanbanViewAdapter({\r\n *   callbacks: {\r\n *     onCardMove: (cardId, columnId) => { ... },\r\n *     onCardUpdate: (cardId, updates) => { ... }\r\n *   }\r\n * })\r\n *\r\n * registry.register(kanbanView)\r\n * await registry.activate('kanban', container, data)\r\n * ```\r\n */\r\nexport class KanbanViewAdapter extends BaseViewAdapter<ViewBoardData> {\r\n  readonly id = 'kanban'\r\n  readonly name = 'Kanban Board'\r\n  readonly version = '1.0.0'\r\n  readonly description = ''\r\n  readonly icon = ''\r\n  readonly supportedExports: ExportFormat[] = ['json', 'csv', 'pdf', 'png']\r\n\r\n  private root: Root | null = null\r\n  private kanbanConfig: KanbanViewConfig\r\n\r\n  constructor(config: KanbanViewConfig = {}) {\r\n    super()\r\n\r\n    // Set description and icon after construction\r\n    ;(this as any).description = 'Interactive Kanban board with drag & drop, filters, and real-time updates'\r\n    ;(this as any).icon = '📋'\r\n\r\n    this.kanbanConfig = config\r\n    this.options = {\r\n      animations: config.viewOptions?.animations ?? true,\r\n      virtualScrolling: config.viewOptions?.virtualScrolling ?? false,\r\n      theme: config.viewOptions?.theme ?? 'dark',\r\n      readonly: config.viewOptions?.readonly ?? false,\r\n    }\r\n  }\r\n\r\n  // ========================================================================\r\n  // LIFECYCLE\r\n  // ========================================================================\r\n\r\n  /**\r\n   * Mount the Kanban view\r\n   *\r\n   * @param container - DOM element to mount into\r\n   * @param data - Initial board data\r\n   */\r\n  mount(container: HTMLElement, data: ViewBoardData): void {\r\n    if (this.isMounted()) {\r\n      console.warn('[KanbanViewAdapter] Already mounted, unmounting first')\r\n      this.unmount()\r\n    }\r\n\r\n    // Store references\r\n    this.container = container\r\n    this.data = data\r\n\r\n    // Create React root\r\n    this.root = createRoot(container)\r\n\r\n    // Render Kanban board\r\n    this.render()\r\n\r\n    // Emit mounted event\r\n    this.emit('view:mounted', { viewId: this.id, timestamp: Date.now() })\r\n  }\r\n\r\n  /**\r\n   * Unmount the Kanban view\r\n   */\r\n  unmount(): void {\r\n    if (!this.isMounted()) {\r\n      return\r\n    }\r\n\r\n    // Emit unmounted event BEFORE cleanup\r\n    this.emit('view:unmounted', { viewId: this.id, timestamp: Date.now() })\r\n\r\n    // Unmount React\r\n    if (this.root) {\r\n      this.root.unmount()\r\n      this.root = null\r\n    }\r\n\r\n    // Clear references\r\n    if (this.container) {\r\n      this.container.innerHTML = ''\r\n      this.container = null\r\n    }\r\n\r\n    this.data = null\r\n  }\r\n\r\n  /**\r\n   * Update the view with new data\r\n   *\r\n   * @param data - New board data\r\n   */\r\n  update(data: ViewBoardData): void {\r\n    if (!this.isMounted()) {\r\n      console.warn('[KanbanViewAdapter] Not mounted, cannot update')\r\n      return\r\n    }\r\n\r\n    this.data = data\r\n    this.render()\r\n\r\n    this.emit('view:updated', { viewId: this.id, data })\r\n  }\r\n\r\n  /**\r\n   * Configure the view\r\n   *\r\n   * @param options - View options\r\n   */\r\n  configure(options: ViewOptions): void {\r\n    this.options = { ...this.options, ...options }\r\n\r\n    // Re-render if mounted\r\n    if (this.isMounted()) {\r\n      this.render()\r\n    }\r\n  }\r\n\r\n  // ========================================================================\r\n  // EXPORT\r\n  // ========================================================================\r\n\r\n  /**\r\n   * Export the view to a specific format\r\n   *\r\n   * @param format - Export format\r\n   * @returns Promise resolving to exported data\r\n   */\r\n  async export(format: 'json' | 'csv' | 'pdf' | 'png'): Promise<string | Blob> {\r\n    if (!this.data) {\r\n      throw new Error('No data to export')\r\n    }\r\n\r\n    switch (format) {\r\n      case 'json':\r\n        return JSON.stringify(this.data, null, 2)\r\n\r\n      case 'csv':\r\n        return this.exportToCSV()\r\n\r\n      case 'pdf':\r\n        return this.exportToPDF()\r\n\r\n      case 'png':\r\n        return this.exportToPNG()\r\n\r\n      default:\r\n        throw new Error(`Unsupported export format: ${format}`)\r\n    }\r\n  }\r\n\r\n  // ========================================================================\r\n  // PRIVATE METHODS\r\n  // ========================================================================\r\n\r\n  /**\r\n   * Render the Kanban board\r\n   */\r\n  private render(): void {\r\n    if (!this.root || !this.data) {\r\n      return\r\n    }\r\n\r\n    // Convert ViewBoardData to KanbanBoard props format\r\n    const board = {\r\n      id: this.data.board?.id || 'board-1',\r\n      title: this.data.board?.title || 'Untitled Board',\r\n      columns: this.data.columns,\r\n      cards: this.data.cards,\r\n    }\r\n\r\n    // Render React component\r\n    this.root.render(\r\n      <KanbanBoard\r\n        board={board}\r\n        callbacks={this.kanbanConfig.callbacks || {}}\r\n        onCardClick={this.kanbanConfig.onCardClick}\r\n        renderProps={this.kanbanConfig.renderProps}\r\n        config={this.kanbanConfig.config}\r\n        availableUsers={this.kanbanConfig.availableUsers}\r\n        className={this.kanbanConfig.className}\r\n        style={this.kanbanConfig.style}\r\n      />\r\n    )\r\n  }\r\n\r\n  /**\r\n   * Export board data to CSV format\r\n   */\r\n  private exportToCSV(): string {\r\n    if (!this.data) return ''\r\n\r\n    const rows: string[][] = [\r\n      ['Card ID', 'Title', 'Column', 'Description', 'Labels', 'Assignees', 'Due Date', 'Position'],\r\n    ]\r\n\r\n    this.data.cards.forEach((card: Card) => {\r\n      const column = this.data!.columns.find((col: Column) => col.id === card.columnId)\r\n      rows.push([\r\n        card.id,\r\n        card.title,\r\n        column?.title || '',\r\n        card.description || '',\r\n        card.labels?.join(', ') || '',\r\n        card.assignedUserIds?.join(', ') || card.assigneeId || '',\r\n        card.dueDate?.toString() || '',\r\n        card.position.toString(),\r\n      ])\r\n    })\r\n\r\n    return rows.map((row) => row.map((cell) => `\"${cell}\"`).join(',')).join('\\n')\r\n  }\r\n\r\n  /**\r\n   * Export board to PDF\r\n   * Uses the PDF export functionality from the Board component\r\n   */\r\n  private async exportToPDF(): Promise<Blob> {\r\n    // TODO: Integrate with PDF export from CardDetailModal/PDFExport\r\n    // For now, return a simple PDF placeholder\r\n    throw new Error('PDF export not yet implemented in ViewAdapter')\r\n  }\r\n\r\n  /**\r\n   * Export board to PNG image\r\n   * Uses html2canvas to capture the board\r\n   */\r\n  private async exportToPNG(): Promise<Blob> {\r\n    if (!this.container) {\r\n      throw new Error('View not mounted')\r\n    }\r\n\r\n    // Dynamic import to avoid bundling if not used\r\n    const html2canvas = await import('html2canvas')\r\n\r\n    const canvas = await html2canvas.default(this.container, {\r\n      backgroundColor: this.options.theme === 'dark' ? '#1a1a1a' : '#ffffff',\r\n      scale: 2, // Higher resolution\r\n    })\r\n\r\n    return new Promise((resolve, reject) => {\r\n      canvas.toBlob((blob) => {\r\n        if (blob) {\r\n          resolve(blob)\r\n        } else {\r\n          reject(new Error('Failed to create PNG blob'))\r\n        }\r\n      }, 'image/png')\r\n    })\r\n  }\r\n}\r\n\r\n// ========================================================================\r\n// FACTORY FUNCTION\r\n// ========================================================================\r\n\r\n/**\r\n * Create a new Kanban view adapter\r\n *\r\n * @param config - View configuration\r\n * @returns KanbanViewAdapter instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const kanbanView = createKanbanView({\r\n *   callbacks: {\r\n *     onCardMove: (cardId, columnId) => console.log('Card moved'),\r\n *   },\r\n *   theme: 'dark',\r\n * })\r\n * ```\r\n */\r\nexport function createKanbanView(config: KanbanViewConfig = {}): KanbanViewAdapter {\r\n  return new KanbanViewAdapter(config)\r\n}\r\n","// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n  typeof window !== 'undefined' &&\n  typeof window.document !== 'undefined' &&\n  typeof window.document.createElement !== 'undefined';\n","export type Transform = {\n  x: number;\n  y: number;\n  scaleX: number;\n  scaleY: number;\n};\n\nexport interface Transition {\n  property: string;\n  easing: string;\n  duration: number;\n}\n\nexport const CSS = Object.freeze({\n  Translate: {\n    toString(transform: Transform | null) {\n      if (!transform) {\n        return;\n      }\n\n      const {x, y} = transform;\n\n      return `translate3d(${x ? Math.round(x) : 0}px, ${\n        y ? Math.round(y) : 0\n      }px, 0)`;\n    },\n  },\n  Scale: {\n    toString(transform: Transform | null) {\n      if (!transform) {\n        return;\n      }\n\n      const {scaleX, scaleY} = transform;\n\n      return `scaleX(${scaleX}) scaleY(${scaleY})`;\n    },\n  },\n  Transform: {\n    toString(transform: Transform | null) {\n      if (!transform) {\n        return;\n      }\n\n      return [\n        CSS.Translate.toString(transform),\n        CSS.Scale.toString(transform),\n      ].join(' ');\n    },\n  },\n  Transition: {\n    toString({property, duration, easing}: Transition) {\n      return `${property} ${duration}ms ${easing}`;\n    },\n  },\n});\n","/**\r\n * Class name utility (cn)\r\n * Combines clsx and tailwind-merge for optimal Tailwind class handling\r\n */\r\n\r\nimport { type ClassValue, clsx } from 'clsx'\r\nimport { twMerge } from 'tailwind-merge'\r\n\r\n/**\r\n * Merge class names intelligently\r\n * Handles Tailwind class conflicts properly\r\n *\r\n * @example\r\n * cn('px-2 py-1', 'px-4') // => 'py-1 px-4'\r\n * cn('text-red-500', condition && 'text-blue-500') // => 'text-blue-500' if condition is true\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n  return twMerge(clsx(inputs))\r\n}\r\n","/**\r\n * Lexicographic positioning utilities\r\n * Uses fractional indexing for efficient reordering without touching all items\r\n * @module utils/positioning\r\n */\r\n\r\n/**\r\n * Calculate position between two items\r\n * Uses lexicographic ordering (fractional indexing)\r\n *\r\n * @param before - Position of item before (or null if first)\r\n * @param after - Position of item after (or null if last)\r\n * @returns New position value\r\n *\r\n * @example\r\n * calculatePosition(null, 1000) // => 500 (before first item)\r\n * calculatePosition(1000, 2000) // => 1500 (between two items)\r\n * calculatePosition(1000, null) // => 2000 (after last item)\r\n */\r\nexport function calculatePosition(\r\n  before: number | null,\r\n  after: number | null\r\n): number {\r\n  // First item\r\n  if (before === null && after === null) {\r\n    return 1000\r\n  }\r\n\r\n  // Insert at beginning\r\n  if (before === null && after !== null) {\r\n    return after / 2\r\n  }\r\n\r\n  // Insert at end\r\n  if (before !== null && after === null) {\r\n    return before + 1000\r\n  }\r\n\r\n  // Insert between\r\n  if (before !== null && after !== null) {\r\n    return (before + after) / 2\r\n  }\r\n\r\n  return 1000\r\n}\r\n\r\n/**\r\n * Generate initial positions for an array of items\r\n * Spaces them 1000 apart for room to insert\r\n *\r\n * @param count - Number of items\r\n * @returns Array of position values\r\n */\r\nexport function generateInitialPositions(count: number): number[] {\r\n  return Array.from({ length: count }, (_, i) => (i + 1) * 1000)\r\n}\r\n\r\n/**\r\n * Rebalance positions when they get too close\r\n * Call this periodically to maintain clean spacing\r\n *\r\n * @param positions - Current positions (sorted)\r\n * @returns Rebalanced positions\r\n */\r\nexport function rebalancePositions(positions: number[]): number[] {\r\n  if (positions.length === 0) return []\r\n  if (positions.length === 1) return [1000]\r\n\r\n  const sorted = [...positions].sort((a, b) => a - b)\r\n  return sorted.map((_, i) => (i + 1) * 1000)\r\n}\r\n\r\n/**\r\n * Check if positions need rebalancing\r\n * Returns true if any two positions are < 1 apart\r\n */\r\nexport function needsRebalancing(positions: number[]): boolean {\r\n  const sorted = [...positions].sort((a, b) => a - b)\r\n\r\n  for (let i = 0; i < sorted.length - 1; i++) {\r\n    if (sorted[i + 1]! - sorted[i]! < 1) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  return false\r\n}\r\n\r\n/**\r\n * Find position for dropping a card\r\n *\r\n * @param columnCards - Cards in target column (sorted by position)\r\n * @param dropIndex - Index where card is dropped\r\n * @returns New position value\r\n */\r\nexport function calculateDropPosition(\r\n  columnCards: { position: number }[],\r\n  dropIndex: number\r\n): number {\r\n  // Empty column\r\n  if (columnCards.length === 0) {\r\n    return 1000\r\n  }\r\n\r\n  // Drop at beginning\r\n  if (dropIndex === 0) {\r\n    return calculatePosition(null, columnCards[0]!.position)\r\n  }\r\n\r\n  // Drop at end\r\n  if (dropIndex >= columnCards.length) {\r\n    return calculatePosition(\r\n      columnCards[columnCards.length - 1]!.position,\r\n      null\r\n    )\r\n  }\r\n\r\n  // Drop between items\r\n  return calculatePosition(\r\n    columnCards[dropIndex - 1]!.position,\r\n    columnCards[dropIndex]!.position\r\n  )\r\n}\r\n","/**\r\n * Performance utilities\r\n * @module utils/performance\r\n */\r\n\r\nimport { useEffect, useRef } from 'react'\r\n\r\n/**\r\n * Debounce function calls\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n  func: T,\r\n  wait: number\r\n): (...args: Parameters<T>) => void {\r\n  let timeout: ReturnType<typeof setTimeout> | null = null\r\n\r\n  return function executedFunction(...args: Parameters<T>) {\r\n    const later = () => {\r\n      timeout = null\r\n      func(...args)\r\n    }\r\n\r\n    if (timeout) {\r\n      clearTimeout(timeout)\r\n    }\r\n    timeout = setTimeout(later, wait)\r\n  }\r\n}\r\n\r\n/**\r\n * Throttle function calls\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n  func: T,\r\n  limit: number\r\n): (...args: Parameters<T>) => void {\r\n  let inThrottle: boolean\r\n  let lastResult: ReturnType<T>\r\n\r\n  return function executedFunction(...args: Parameters<T>) {\r\n    if (!inThrottle) {\r\n      inThrottle = true\r\n      setTimeout(() => (inThrottle = false), limit)\r\n      lastResult = func(...args)\r\n    }\r\n    return lastResult\r\n  }\r\n}\r\n\r\n/**\r\n * Custom hook for measuring render performance\r\n * Only active in development\r\n */\r\nexport function useRenderPerformance(componentName: string) {\r\n  const renderCount = useRef(0)\r\n  const lastRenderTime = useRef<number>(0)\r\n\r\n  if (process.env.NODE_ENV === 'development') {\r\n    const start = performance.now()\r\n\r\n    useEffect(() => {\r\n      const end = performance.now()\r\n      renderCount.current++\r\n      const renderTime = end - start\r\n\r\n      if (renderTime > 16) {\r\n        // > 1 frame at 60fps\r\n        console.warn(\r\n          `[Performance] ${componentName} render #${renderCount.current} took ${renderTime.toFixed(2)}ms`\r\n        )\r\n      }\r\n\r\n      lastRenderTime.current = renderTime\r\n    })\r\n  }\r\n}\r\n\r\n/**\r\n * Check if virtualization should be enabled\r\n */\r\nexport function shouldVirtualize(itemCount: number, threshold = 100): boolean {\r\n  return itemCount > threshold\r\n}\r\n\r\n/**\r\n * Request idle callback wrapper with fallback\r\n */\r\nexport const requestIdleCallback =\r\n  typeof window !== 'undefined' && 'requestIdleCallback' in window\r\n    ? window.requestIdleCallback\r\n    : (cb: IdleRequestCallback) => setTimeout(cb, 1)\r\n\r\n/**\r\n * Cancel idle callback wrapper with fallback\r\n */\r\nexport const cancelIdleCallback =\r\n  typeof window !== 'undefined' && 'cancelIdleCallback' in window\r\n    ? window.cancelIdleCallback\r\n    : (id: number) => clearTimeout(id)\r\n\r\n/**\r\n * Memoization helper for expensive computations\r\n */\r\nexport function memoize<T extends (...args: any[]) => any>(fn: T): T {\r\n  const cache = new Map<string, ReturnType<T>>()\r\n\r\n  return ((...args: Parameters<T>) => {\r\n    const key = JSON.stringify(args)\r\n    if (cache.has(key)) {\r\n      return cache.get(key)!\r\n    }\r\n    const result = fn(...args)\r\n    cache.set(key, result)\r\n    return result\r\n  }) as T\r\n}\r\n","/**\r\n * Retry utilities with exponential backoff\r\n * For resilient API calls and persistence operations\r\n * @module utils/retry\r\n */\r\n\r\nexport interface RetryOptions {\r\n  /** Maximum number of retry attempts (default: 3) */\r\n  maxAttempts?: number\r\n  /** Initial delay in ms (default: 1000) */\r\n  initialDelay?: number\r\n  /** Multiplier for exponential backoff (default: 2) */\r\n  backoffMultiplier?: number\r\n  /** Maximum delay in ms (default: 10000) */\r\n  maxDelay?: number\r\n  /** Function to determine if error should be retried */\r\n  shouldRetry?: (error: Error, attempt: number) => boolean\r\n  /** Callback when retry is attempted */\r\n  onRetry?: (error: Error, attempt: number, delay: number) => void\r\n}\r\n\r\nexport interface RetryResult<T> {\r\n  data?: T\r\n  error?: Error\r\n  attempts: number\r\n  success: boolean\r\n}\r\n\r\n/**\r\n * Default retry logic - retries on network errors\r\n */\r\nconst defaultShouldRetry = (error: Error): boolean => {\r\n  // Retry on network errors\r\n  if (error.message.includes('network') || error.message.includes('fetch')) {\r\n    return true\r\n  }\r\n\r\n  // Retry on specific error codes\r\n  if ('status' in error) {\r\n    const status = (error as any).status\r\n    // Retry on server errors (5xx) and rate limiting (429)\r\n    return status >= 500 || status === 429\r\n  }\r\n\r\n  return false\r\n}\r\n\r\n/**\r\n * Calculate delay with exponential backoff\r\n */\r\nfunction calculateDelay(\r\n  attempt: number,\r\n  initialDelay: number,\r\n  backoffMultiplier: number,\r\n  maxDelay: number\r\n): number {\r\n  const delay = initialDelay * Math.pow(backoffMultiplier, attempt - 1)\r\n  // Add jitter (random variation) to prevent thundering herd\r\n  const jitter = delay * 0.2 * Math.random()\r\n  return Math.min(delay + jitter, maxDelay)\r\n}\r\n\r\n/**\r\n * Retry a function with exponential backoff\r\n *\r\n * @example\r\n * ```ts\r\n * const result = await retryWithBackoff(\r\n *   () => api.updateBoard(board),\r\n *   {\r\n *     maxAttempts: 3,\r\n *     onRetry: (error, attempt) => {\r\n *       console.log(`Retry attempt ${attempt}: ${error.message}`)\r\n *     }\r\n *   }\r\n * )\r\n * ```\r\n */\r\nexport async function retryWithBackoff<T>(\r\n  fn: () => Promise<T>,\r\n  options: RetryOptions = {}\r\n): Promise<RetryResult<T>> {\r\n  const {\r\n    maxAttempts = 3,\r\n    initialDelay = 1000,\r\n    backoffMultiplier = 2,\r\n    maxDelay = 10000,\r\n    shouldRetry = defaultShouldRetry,\r\n    onRetry,\r\n  } = options\r\n\r\n  let lastError: Error | undefined\r\n  let attempts = 0\r\n\r\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\r\n    attempts = attempt\r\n\r\n    try {\r\n      const data = await fn()\r\n      return {\r\n        data,\r\n        attempts,\r\n        success: true,\r\n      }\r\n    } catch (error) {\r\n      lastError = error as Error\r\n\r\n      // Check if we should retry\r\n      const isLastAttempt = attempt === maxAttempts\r\n      if (isLastAttempt || !shouldRetry(lastError, attempt)) {\r\n        return {\r\n          error: lastError,\r\n          attempts,\r\n          success: false,\r\n        }\r\n      }\r\n\r\n      // Calculate delay for next attempt\r\n      const delay = calculateDelay(attempt, initialDelay, backoffMultiplier, maxDelay)\r\n\r\n      // Call retry callback\r\n      if (onRetry) {\r\n        try {\r\n          onRetry(lastError, attempt, delay)\r\n        } catch (callbackError) {\r\n          console.error('Error in retry callback:', callbackError)\r\n        }\r\n      }\r\n\r\n      // Wait before retrying\r\n      await new Promise((resolve) => setTimeout(resolve, delay))\r\n    }\r\n  }\r\n\r\n  // This should never be reached, but TypeScript doesn't know that\r\n  return {\r\n    error: lastError || new Error('Unknown error'),\r\n    attempts,\r\n    success: false,\r\n  }\r\n}\r\n\r\n/**\r\n * Retry a function synchronously (for non-async operations)\r\n * No backoff, just immediate retries\r\n */\r\nexport function retrySyncOperation<T>(\r\n  fn: () => T,\r\n  maxAttempts: number = 3\r\n): { data?: T; error?: Error; success: boolean } {\r\n  let lastError: Error | undefined\r\n\r\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\r\n    try {\r\n      const data = fn()\r\n      return { data, success: true }\r\n    } catch (error) {\r\n      lastError = error as Error\r\n\r\n      if (attempt === maxAttempts) {\r\n        return { error: lastError, success: false }\r\n      }\r\n    }\r\n  }\r\n\r\n  return { error: lastError || new Error('Unknown error'), success: false }\r\n}\r\n\r\n/**\r\n * Create a retry wrapper function\r\n * Returns a function that automatically retries on failure\r\n *\r\n * @example\r\n * ```ts\r\n * const saveBoard = createRetryWrapper(\r\n *   api.saveBoard,\r\n *   { maxAttempts: 3 }\r\n * )\r\n *\r\n * const result = await saveBoard(boardData)\r\n * ```\r\n */\r\nexport function createRetryWrapper<TArgs extends any[], TReturn>(\r\n  fn: (...args: TArgs) => Promise<TReturn>,\r\n  options: RetryOptions = {}\r\n): (...args: TArgs) => Promise<RetryResult<TReturn>> {\r\n  return async (...args: TArgs) => {\r\n    return retryWithBackoff(() => fn(...args), options)\r\n  }\r\n}\r\n\r\n/**\r\n * Retry with circuit breaker pattern\r\n * Stops retrying if too many failures occur\r\n */\r\nexport class CircuitBreaker {\r\n  private failures: number = 0\r\n  private lastFailureTime: number = 0\r\n  private isOpen: boolean = false\r\n\r\n  constructor(\r\n    private threshold: number = 5,\r\n    private resetTimeout: number = 60000 // 1 minute\r\n  ) {}\r\n\r\n  async execute<T>(fn: () => Promise<T>): Promise<T> {\r\n    // Check if circuit is open\r\n    if (this.isOpen) {\r\n      const timeSinceLastFailure = Date.now() - this.lastFailureTime\r\n\r\n      // Try to close circuit after reset timeout\r\n      if (timeSinceLastFailure >= this.resetTimeout) {\r\n        this.reset()\r\n      } else {\r\n        throw new Error('Circuit breaker is open - too many failures')\r\n      }\r\n    }\r\n\r\n    try {\r\n      const result = await fn()\r\n      this.onSuccess()\r\n      return result\r\n    } catch (error) {\r\n      this.onFailure()\r\n      throw error\r\n    }\r\n  }\r\n\r\n  private onSuccess(): void {\r\n    this.failures = 0\r\n    this.isOpen = false\r\n  }\r\n\r\n  private onFailure(): void {\r\n    this.failures++\r\n    this.lastFailureTime = Date.now()\r\n\r\n    if (this.failures >= this.threshold) {\r\n      this.isOpen = true\r\n    }\r\n  }\r\n\r\n  private reset(): void {\r\n    this.failures = 0\r\n    this.isOpen = false\r\n  }\r\n\r\n  getStatus(): { failures: number; isOpen: boolean } {\r\n    return {\r\n      failures: this.failures,\r\n      isOpen: this.isOpen,\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Structured Logger for ASAKAA\r\n * Lightweight, browser-compatible logging system\r\n * @module utils/logger\r\n */\r\n\r\nexport enum LogLevel {\r\n  DEBUG = 0,\r\n  INFO = 1,\r\n  WARN = 2,\r\n  ERROR = 3,\r\n  NONE = 4,\r\n}\r\n\r\nexport interface LogContext {\r\n  [key: string]: any\r\n}\r\n\r\nexport interface LogEntry {\r\n  timestamp: string\r\n  level: string\r\n  message: string\r\n  context?: LogContext\r\n  component?: string\r\n  action?: string\r\n  duration?: number\r\n  error?: {\r\n    message: string\r\n    stack?: string\r\n    name: string\r\n  }\r\n}\r\n\r\nexport interface LoggerOptions {\r\n  /** Minimum log level (default: INFO in production, DEBUG in development) */\r\n  minLevel?: LogLevel\r\n  /** Enable/disable logging (default: true) */\r\n  enabled?: boolean\r\n  /** Custom log handler for sending logs to external service */\r\n  onLog?: (entry: LogEntry) => void\r\n  /** Enable performance timing (default: true) */\r\n  enableTiming?: boolean\r\n  /** Component name prefix */\r\n  componentName?: string\r\n}\r\n\r\n/**\r\n * Structured Logger Class\r\n *\r\n * @example\r\n * ```ts\r\n * const logger = new Logger({ componentName: 'KanbanBoard' })\r\n *\r\n * logger.info('Board loaded', { boardId: 'abc-123', cardCount: 42 })\r\n * logger.warn('Slow operation detected', { duration: 1500 })\r\n * logger.error('Failed to save', { error: err })\r\n *\r\n * // With timing\r\n * const timer = logger.startTimer('drag-operation')\r\n * // ... do work\r\n * timer.end({ cardId: 'card-1' })\r\n * ```\r\n */\r\nexport class Logger {\r\n  private options: Required<LoggerOptions>\r\n  private static globalOptions: Partial<LoggerOptions> = {}\r\n\r\n  constructor(options: LoggerOptions = {}) {\r\n    const isDev = process.env.NODE_ENV === 'development'\r\n\r\n    this.options = {\r\n      minLevel: options.minLevel ?? (isDev ? LogLevel.DEBUG : LogLevel.INFO),\r\n      enabled: options.enabled ?? true,\r\n      onLog: options.onLog ?? this.defaultLogHandler,\r\n      enableTiming: options.enableTiming ?? true,\r\n      componentName: options.componentName ?? 'ASAKAA',\r\n      ...Logger.globalOptions,\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set global logger configuration\r\n   * Applies to all logger instances\r\n   */\r\n  static configure(options: Partial<LoggerOptions>): void {\r\n    Logger.globalOptions = { ...Logger.globalOptions, ...options }\r\n  }\r\n\r\n  /**\r\n   * Create child logger with component name\r\n   */\r\n  child(componentName: string): Logger {\r\n    return new Logger({\r\n      ...this.options,\r\n      componentName: `${this.options.componentName}:${componentName}`,\r\n    })\r\n  }\r\n\r\n  /**\r\n   * Log debug message\r\n   */\r\n  debug(message: string, context?: LogContext): void {\r\n    this.log(LogLevel.DEBUG, message, context)\r\n  }\r\n\r\n  /**\r\n   * Log info message\r\n   */\r\n  info(message: string, context?: LogContext): void {\r\n    this.log(LogLevel.INFO, message, context)\r\n  }\r\n\r\n  /**\r\n   * Log warning message\r\n   */\r\n  warn(message: string, context?: LogContext): void {\r\n    this.log(LogLevel.WARN, message, context)\r\n  }\r\n\r\n  /**\r\n   * Log error message\r\n   */\r\n  error(message: string, error?: Error, context?: LogContext): void {\r\n    this.log(LogLevel.ERROR, message, {\r\n      ...context,\r\n      error: error\r\n        ? {\r\n            message: error.message,\r\n            stack: error.stack,\r\n            name: error.name,\r\n          }\r\n        : undefined,\r\n    })\r\n  }\r\n\r\n  /**\r\n   * Start a timer for performance tracking\r\n   */\r\n  startTimer(action: string): Timer {\r\n    if (!this.options.enableTiming) {\r\n      return new Timer(() => {}, false)\r\n    }\r\n\r\n    return new Timer(\r\n      (duration: number, context?: LogContext) => {\r\n        this.log(LogLevel.DEBUG, `${action} completed`, {\r\n          ...context,\r\n          action,\r\n          duration,\r\n        })\r\n      },\r\n      true\r\n    )\r\n  }\r\n\r\n  /**\r\n   * Core logging method\r\n   */\r\n  private log(level: LogLevel, message: string, context?: LogContext): void {\r\n    if (!this.options.enabled || level < this.options.minLevel) {\r\n      return\r\n    }\r\n\r\n    const entry: LogEntry = {\r\n      timestamp: new Date().toISOString(),\r\n      level: LogLevel[level],\r\n      message,\r\n      component: this.options.componentName,\r\n      ...context,\r\n    }\r\n\r\n    this.options.onLog(entry)\r\n  }\r\n\r\n  /**\r\n   * Default log handler (console)\r\n   */\r\n  private defaultLogHandler = (entry: LogEntry): void => {\r\n    const { timestamp, level, message, component, ...rest } = entry\r\n\r\n    const prefix = `[${timestamp}] [${level}] [${component}]`\r\n    const hasContext = Object.keys(rest).length > 0\r\n\r\n    switch (level) {\r\n      case 'DEBUG':\r\n        console.debug(prefix, message, hasContext ? rest : '')\r\n        break\r\n      case 'INFO':\r\n        console.info(prefix, message, hasContext ? rest : '')\r\n        break\r\n      case 'WARN':\r\n        console.warn(prefix, message, hasContext ? rest : '')\r\n        break\r\n      case 'ERROR':\r\n        console.error(prefix, message, hasContext ? rest : '')\r\n        if (entry.error?.stack) {\r\n          console.error(entry.error.stack)\r\n        }\r\n        break\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Timer for performance tracking\r\n */\r\nclass Timer {\r\n  private startTime: number\r\n\r\n  constructor(\r\n    private onEnd: (duration: number, context?: LogContext) => void,\r\n    private enabled: boolean\r\n  ) {\r\n    this.startTime = enabled ? performance.now() : 0\r\n  }\r\n\r\n  /**\r\n   * End timer and log duration\r\n   */\r\n  end(context?: LogContext): number {\r\n    if (!this.enabled) {\r\n      return 0\r\n    }\r\n\r\n    const duration = Math.round(performance.now() - this.startTime)\r\n    this.onEnd(duration, context)\r\n    return duration\r\n  }\r\n\r\n  /**\r\n   * Get elapsed time without ending timer\r\n   */\r\n  elapsed(): number {\r\n    if (!this.enabled) {\r\n      return 0\r\n    }\r\n    return Math.round(performance.now() - this.startTime)\r\n  }\r\n}\r\n\r\n/**\r\n * Global logger instance\r\n */\r\nexport const logger = new Logger()\r\n\r\n/**\r\n * Create a scoped logger for a component\r\n */\r\nexport function createLogger(componentName: string, options?: LoggerOptions): Logger {\r\n  return new Logger({\r\n    ...options,\r\n    componentName,\r\n  })\r\n}\r\n","import { jsPDF } from 'jspdf'\r\nimport html2canvas from 'html2canvas'\r\nimport type { Board, ExportOptions, ExportFormat } from '../types'\r\n\r\nexport function exportToJSON(board: Board, _options?: ExportOptions): string {\r\n  const data = {\r\n    board: {\r\n      id: board.id,\r\n      title: board.title,\r\n      metadata: board.metadata,\r\n      exportedAt: new Date().toISOString(),\r\n    },\r\n    columns: board.columns,\r\n    cards: board.cards,\r\n    options: _options,\r\n  }\r\n\r\n  return JSON.stringify(data, null, 2)\r\n}\r\n\r\nexport function exportToCSV(board: Board, _options?: ExportOptions): string {\r\n  const headers = [\r\n    'Card ID',\r\n    'Title',\r\n    'Description',\r\n    'Column',\r\n    'Priority',\r\n    'Labels',\r\n    'Assigned Users',\r\n    'Start Date',\r\n    'End Date',\r\n    'Created At',\r\n    'Updated At',\r\n  ]\r\n\r\n  const rows = board.cards.map((card) => {\r\n    const column = board.columns.find((col) => col.id === card.columnId)\r\n\r\n    return [\r\n      card.id,\r\n      escapeCSV(card.title),\r\n      escapeCSV(card.description || ''),\r\n      escapeCSV(column?.title || ''),\r\n      card.priority || '',\r\n      (card.labels || []).join(';'),\r\n      (card.assignedUserIds || []).join(';'),\r\n      card.startDate || '',\r\n      card.endDate || '',\r\n      card.createdAt || '',\r\n      card.updatedAt || '',\r\n    ]\r\n  })\r\n\r\n  const csvContent = [\r\n    headers.join(','),\r\n    ...rows.map((row) => row.join(',')),\r\n  ].join('\\n')\r\n\r\n  return csvContent\r\n}\r\n\r\nexport async function exportToPDF(\r\n  board: Board,\r\n  boardElement?: HTMLElement,\r\n  _options?: ExportOptions\r\n): Promise<jsPDF> {\r\n  // Try to find board element automatically if not provided\r\n  let element = boardElement\r\n\r\n  if (!element) {\r\n    // Look for the board element in the DOM\r\n    const boardEl = document.querySelector<HTMLElement>('.asakaa-board')\r\n    if (boardEl) {\r\n      element = boardEl.parentElement || boardEl\r\n    }\r\n  }\r\n\r\n  // If board element is available, capture it visually\r\n  if (element) {\r\n    try {\r\n      const canvas = await html2canvas(element, {\r\n        backgroundColor: '#0a0a0a',\r\n        scale: 1.5, // Balance between quality and performance\r\n        logging: false,\r\n        useCORS: true,\r\n        allowTaint: true,\r\n        windowWidth: element.scrollWidth,\r\n        windowHeight: element.scrollHeight,\r\n      })\r\n\r\n      const imgData = canvas.toDataURL('image/png')\r\n\r\n      // Calculate dimensions for landscape PDF\r\n      const pdfWidth = 297 // A4 landscape width in mm\r\n      const pdfHeight = 210 // A4 landscape height in mm\r\n      const imgAspect = canvas.width / canvas.height\r\n\r\n      let imgWidth = pdfWidth - 20 // margins\r\n      let imgHeight = imgWidth / imgAspect\r\n\r\n      // If image is too tall, scale to fit height\r\n      if (imgHeight > pdfHeight - 20) {\r\n        imgHeight = pdfHeight - 20\r\n        imgWidth = imgHeight * imgAspect\r\n      }\r\n\r\n      const doc = new jsPDF({\r\n        orientation: 'landscape',\r\n        unit: 'mm',\r\n        format: 'a4',\r\n      })\r\n\r\n      // Add title\r\n      doc.setFontSize(16)\r\n      doc.setTextColor(255, 255, 255)\r\n      doc.setFillColor(10, 10, 10)\r\n      doc.rect(0, 0, pdfWidth, 15, 'F')\r\n      doc.text(board.title || 'Kanban Board', 10, 10)\r\n\r\n      // Add board image\r\n      const xOffset = (pdfWidth - imgWidth) / 2\r\n      doc.addImage(imgData, 'PNG', xOffset, 20, imgWidth, imgHeight)\r\n\r\n      return doc\r\n    } catch (error) {\r\n      console.error('Error capturing board:', error)\r\n      // Fall back to text-based export\r\n    }\r\n  }\r\n\r\n  // Fallback: Text-based PDF export\r\n  const doc = new jsPDF()\r\n  let yPosition = 20\r\n\r\n  doc.setFontSize(20)\r\n  doc.text(board.title || 'Kanban Board', 20, yPosition)\r\n  yPosition += 10\r\n\r\n  doc.setFontSize(10)\r\n  doc.setTextColor(128, 128, 128)\r\n  doc.text(`Exported on ${new Date().toLocaleString()}`, 20, yPosition)\r\n  yPosition += 15\r\n\r\n  doc.setTextColor(0, 0, 0)\r\n\r\n  board.columns.forEach((column) => {\r\n    const columnCards = board.cards.filter((card) => card.columnId === column.id)\r\n\r\n    if (yPosition > 250) {\r\n      doc.addPage()\r\n      yPosition = 20\r\n    }\r\n\r\n    doc.setFontSize(16)\r\n    doc.setFont('helvetica', 'bold')\r\n    doc.text(column.title, 20, yPosition)\r\n    yPosition += 8\r\n\r\n    if (columnCards.length === 0) {\r\n      doc.setFontSize(10)\r\n      doc.setFont('helvetica', 'italic')\r\n      doc.setTextColor(128, 128, 128)\r\n      doc.text('No cards in this column', 20, yPosition)\r\n      doc.setTextColor(0, 0, 0)\r\n      yPosition += 10\r\n    } else {\r\n      columnCards.forEach((card) => {\r\n        if (yPosition > 260) {\r\n          doc.addPage()\r\n          yPosition = 20\r\n        }\r\n\r\n        doc.setFontSize(12)\r\n        doc.setFont('helvetica', 'bold')\r\n        doc.text(card.title, 25, yPosition)\r\n        yPosition += 6\r\n\r\n        if (card.description) {\r\n          doc.setFontSize(9)\r\n          doc.setFont('helvetica', 'normal')\r\n          const lines = doc.splitTextToSize(card.description, 160)\r\n          doc.text(lines, 25, yPosition)\r\n          yPosition += lines.length * 5\r\n        }\r\n\r\n        const metadata: string[] = []\r\n        if (card.priority) metadata.push(`Priority: ${card.priority}`)\r\n        if (card.labels && card.labels.length > 0) {\r\n          metadata.push(`Labels: ${card.labels.join(', ')}`)\r\n        }\r\n        if (card.assignedUserIds && card.assignedUserIds.length > 0) {\r\n          metadata.push(`Assigned: ${card.assignedUserIds.length} user(s)`)\r\n        }\r\n        if (card.startDate || card.endDate) {\r\n          const dates = []\r\n          if (card.startDate) dates.push(`Start: ${card.startDate}`)\r\n          if (card.endDate) dates.push(`End: ${card.endDate}`)\r\n          metadata.push(dates.join(' → '))\r\n        }\r\n\r\n        if (metadata.length > 0) {\r\n          doc.setFontSize(8)\r\n          doc.setTextColor(100, 100, 100)\r\n          doc.text(metadata.join(' • '), 25, yPosition)\r\n          doc.setTextColor(0, 0, 0)\r\n          yPosition += 5\r\n        }\r\n\r\n        yPosition += 5\r\n      })\r\n    }\r\n\r\n    yPosition += 5\r\n  })\r\n\r\n  return doc\r\n}\r\n\r\nfunction escapeCSV(value: string): string {\r\n  if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\r\n    return `\"${value.replace(/\"/g, '\"\"')}\"`\r\n  }\r\n  return value\r\n}\r\n\r\nexport async function exportBoard(\r\n  board: Board,\r\n  format: ExportFormat,\r\n  boardElement?: HTMLElement,\r\n  options?: ExportOptions\r\n): Promise<string | jsPDF> {\r\n  switch (format) {\r\n    case 'json':\r\n      return exportToJSON(board, options)\r\n    case 'csv':\r\n      return exportToCSV(board, options)\r\n    case 'pdf':\r\n      return await exportToPDF(board, boardElement, options)\r\n    default:\r\n      throw new Error(`Unsupported export format: ${format}`)\r\n  }\r\n}\r\n\r\nexport function downloadExport(\r\n  content: string | jsPDF,\r\n  format: ExportFormat,\r\n  filename?: string\r\n): void {\r\n  const defaultFilename = `board-export-${new Date().getTime()}`\r\n\r\n  // Check if content is a jsPDF object by checking for the save method\r\n  if (format === 'pdf' && typeof content === 'object' && content !== null && 'save' in content) {\r\n    const finalFilename = filename || `${defaultFilename}.pdf`\r\n    ;(content as jsPDF).save(finalFilename)\r\n    return\r\n  }\r\n\r\n  if (typeof content !== 'string') {\r\n    throw new Error('Invalid content type for non-PDF export')\r\n  }\r\n\r\n  const extensions: Record<ExportFormat, string> = {\r\n    json: 'json',\r\n    csv: 'csv',\r\n    pdf: 'pdf',\r\n  }\r\n\r\n  const finalFilename = filename || `${defaultFilename}.${extensions[format]}`\r\n\r\n  const mimeTypes: Record<ExportFormat, string> = {\r\n    json: 'application/json',\r\n    csv: 'text/csv',\r\n    pdf: 'application/pdf',\r\n  }\r\n\r\n  const blob = new Blob([content], { type: mimeTypes[format] })\r\n  const url = URL.createObjectURL(blob)\r\n  const link = document.createElement('a')\r\n  link.href = url\r\n  link.download = finalFilename\r\n  document.body.appendChild(link)\r\n  link.click()\r\n  document.body.removeChild(link)\r\n  URL.revokeObjectURL(url)\r\n}\r\n","/**\r\n * Import utility functions\r\n * @module utils/import\r\n */\r\n\r\nimport type { Board, Card, Column, ImportResult } from '../types'\r\n\r\n/**\r\n * Import board from JSON format\r\n */\r\nexport function importFromJSON(jsonString: string): ImportResult {\r\n  try {\r\n    const data = JSON.parse(jsonString)\r\n\r\n    if (!data.board || !data.columns || !data.cards) {\r\n      return {\r\n        success: false,\r\n        errors: ['Invalid JSON format: missing required fields (board, columns, cards)'],\r\n      }\r\n    }\r\n\r\n    const board: Board = {\r\n      id: data.board.id,\r\n      title: data.board.title,\r\n      columns: data.columns,\r\n      cards: data.cards,\r\n      metadata: data.board.metadata,\r\n    }\r\n\r\n    return {\r\n      success: true,\r\n      cardsImported: board.cards.length,\r\n      columnsImported: board.columns.length,\r\n    }\r\n  } catch (error) {\r\n    return {\r\n      success: false,\r\n      errors: [`Failed to parse JSON: ${error instanceof Error ? error.message : 'Unknown error'}`],\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Import board from CSV format\r\n */\r\nexport function importFromCSV(csvString: string): ImportResult {\r\n  try {\r\n    const lines = csvString.trim().split('\\n')\r\n\r\n    if (lines.length < 1 || !lines[0]) {\r\n      return {\r\n        success: false,\r\n        errors: ['CSV file is empty or invalid'],\r\n      }\r\n    }\r\n\r\n    const headers = parseCSVLine(lines[0])\r\n    const cards: Card[] = []\r\n    const columnsMap = new Map<string, Column>()\r\n    const errors: string[] = []\r\n\r\n    for (let i = 1; i < lines.length; i++) {\r\n      try {\r\n        const values = parseCSVLine(lines[i] || '')\r\n\r\n        if (values.length > headers.length) {\r\n          errors.push(`Line ${i + 1}: Too many columns`)\r\n          continue\r\n        }\r\n\r\n        // If missing more than 3 columns, likely a malformed row\r\n        const missingColumns = headers.length - values.length\r\n        if (missingColumns > 3) {\r\n          errors.push(`Line ${i + 1}: Column count mismatch (expected ${headers.length}, got ${values.length})`)\r\n          continue\r\n        }\r\n\r\n        // Pad trailing empty columns\r\n        while (values.length < headers.length) {\r\n          values.push('')\r\n        }\r\n\r\n        const cardData: Record<string, string> = {}\r\n        headers.forEach((header, index) => {\r\n          cardData[header] = values[index] || ''\r\n        })\r\n\r\n        // Create column if it doesn't exist\r\n        const columnTitle = cardData['Column'] || 'Unnamed'\r\n        if (!columnsMap.has(columnTitle)) {\r\n          columnsMap.set(columnTitle, {\r\n            id: `col-${columnsMap.size + 1}`,\r\n            title: columnTitle,\r\n            position: columnsMap.size + 1,\r\n            cardIds: [],\r\n          })\r\n        }\r\n\r\n        const column = columnsMap.get(columnTitle)!\r\n\r\n        const card: Card = {\r\n          id: cardData['Card ID'] || `card-${i}`,\r\n          title: cardData['Title'] || 'Untitled',\r\n          description: cardData['Description'] ? cardData['Description'] : undefined,\r\n          columnId: column.id,\r\n          position: column.cardIds.length + 1,\r\n          priority: (cardData['Priority'] as any) || undefined,\r\n          labels: cardData['Labels'] ? cardData['Labels'].split(';').filter(Boolean) : undefined,\r\n          assignedUserIds: cardData['Assigned Users']\r\n            ? cardData['Assigned Users'].split(';').filter(Boolean)\r\n            : undefined,\r\n          startDate: cardData['Start Date'] ? (cardData['Start Date'] as any) : undefined,\r\n          endDate: cardData['End Date'] ? (cardData['End Date'] as any) : undefined,\r\n          createdAt: cardData['Created At'] ? (cardData['Created At'] as any) : undefined,\r\n          updatedAt: cardData['Updated At'] ? (cardData['Updated At'] as any) : undefined,\r\n        }\r\n\r\n        cards.push(card)\r\n        column.cardIds.push(card.id)\r\n      } catch (error) {\r\n        errors.push(\r\n          `Line ${i + 1}: ${error instanceof Error ? error.message : 'Unknown error'}`\r\n        )\r\n      }\r\n    }\r\n\r\n    if (cards.length === 0) {\r\n      return {\r\n        success: false,\r\n        errors: ['No valid cards found in CSV', ...errors],\r\n      }\r\n    }\r\n\r\n    return {\r\n      success: true,\r\n      cardsImported: cards.length,\r\n      columnsImported: columnsMap.size,\r\n      errors: errors.length > 0 ? errors : undefined,\r\n    }\r\n  } catch (error) {\r\n    return {\r\n      success: false,\r\n      errors: [`Failed to parse CSV: ${error instanceof Error ? error.message : 'Unknown error'}`],\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Parse a CSV line with proper quote handling\r\n */\r\nfunction parseCSVLine(line: string): string[] {\r\n  const result: string[] = []\r\n  let current = ''\r\n  let inQuotes = false\r\n\r\n  for (let i = 0; i < line.length; i++) {\r\n    const char = line[i]\r\n    const nextChar = line[i + 1]\r\n\r\n    if (char === '\"' && inQuotes && nextChar === '\"') {\r\n      current += '\"'\r\n      i++ // Skip next quote\r\n    } else if (char === '\"') {\r\n      inQuotes = !inQuotes\r\n    } else if (char === ',' && !inQuotes) {\r\n      result.push(current)\r\n      current = ''\r\n    } else {\r\n      current += char\r\n    }\r\n  }\r\n\r\n  result.push(current)\r\n  return result\r\n}\r\n\r\n/**\r\n * Main import function\r\n */\r\nexport function importBoard(content: string, format: 'json' | 'csv'): ImportResult {\r\n  switch (format) {\r\n    case 'json':\r\n      return importFromJSON(content)\r\n    case 'csv':\r\n      return importFromCSV(content)\r\n    default:\r\n      return {\r\n        success: false,\r\n        errors: [`Unsupported import format: ${format}`],\r\n      }\r\n  }\r\n}\r\n\r\n/**\r\n * Read file content\r\n */\r\nexport function readFile(file: File): Promise<string> {\r\n  return new Promise((resolve, reject) => {\r\n    const reader = new FileReader()\r\n    reader.onload = (event) => {\r\n      if (event.target?.result) {\r\n        resolve(event.target.result as string)\r\n      } else {\r\n        reject(new Error('Failed to read file'))\r\n      }\r\n    }\r\n    reader.onerror = () => reject(new Error('Failed to read file'))\r\n    reader.readAsText(file)\r\n  })\r\n}\r\n","/**\r\n * Gantt Theme Context\r\n * Provides derived theme to Portal components for consistent styling\r\n * @module components/Gantt/GanttThemeContext\r\n */\r\n\r\nimport { createContext, useContext } from 'react'\r\nimport type { GanttTheme } from './types'\r\n\r\nexport interface GanttThemeContextValue {\r\n  theme: GanttTheme\r\n  themeName: 'dark' | 'light' | 'neutral'\r\n}\r\n\r\nexport const GanttThemeContext = createContext<GanttThemeContextValue | null>(null)\r\n\r\n/**\r\n * Hook to access the Gantt theme context\r\n * Returns null if not within a GanttBoard\r\n */\r\nexport function useGanttTheme() {\r\n  return useContext(GanttThemeContext)\r\n}\r\n","/**\r\n * Kanban Theme Context\r\n * Provides theme information to Portal components within KanbanBoard\r\n */\r\n\r\nimport { createContext, useContext, type ReactNode } from 'react'\r\n\r\nexport interface KanbanThemeContextValue {\r\n  themeName: 'dark' | 'light' | 'neutral'\r\n}\r\n\r\nexport const KanbanThemeContext = createContext<KanbanThemeContextValue | null>(null)\r\n\r\nexport interface KanbanThemeProviderProps {\r\n  children: ReactNode\r\n  themeName: 'dark' | 'light' | 'neutral'\r\n}\r\n\r\nexport function KanbanThemeProvider({ children, themeName }: KanbanThemeProviderProps) {\r\n  return (\r\n    <KanbanThemeContext.Provider value={{ themeName }}>\r\n      {children}\r\n    </KanbanThemeContext.Provider>\r\n  )\r\n}\r\n\r\nexport function useKanbanTheme(): KanbanThemeContextValue | null {\r\n  return useContext(KanbanThemeContext)\r\n}\r\n","/**\r\n * Portal Component\r\n * Renders children outside the parent DOM hierarchy\r\n * Solves z-index stacking context issues\r\n */\r\n\r\nimport { useEffect, useState, type ReactNode, type CSSProperties } from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { useGanttTheme } from '../Gantt/GanttThemeContext'\r\nimport { useKanbanTheme } from '../Board/KanbanThemeContext'\r\n\r\nexport interface PortalProps {\r\n  children: ReactNode\r\n  /** Element to portal into (defaults to document.body) */\r\n  container?: HTMLElement\r\n}\r\n\r\n/**\r\n * Portal component that renders children at the root level\r\n * Perfect for modals, tooltips, dropdowns that need to escape stacking context\r\n * Automatically applies Gantt or Kanban theme when used within their respective boards\r\n */\r\nexport function Portal({ children, container }: PortalProps) {\r\n  const [mounted, setMounted] = useState(false)\r\n  const ganttTheme = useGanttTheme()\r\n  const kanbanTheme = useKanbanTheme()\r\n\r\n  useEffect(() => {\r\n    setMounted(true)\r\n    return () => setMounted(false)\r\n  }, [])\r\n\r\n  if (!mounted) {\r\n    return null\r\n  }\r\n\r\n  const target = container || (typeof document !== 'undefined' ? document.body : null)\r\n\r\n  if (!target) {\r\n    return null\r\n  }\r\n\r\n  // If we have a Gantt theme, wrap children in a themed container\r\n  if (ganttTheme) {\r\n    const { theme, themeName } = ganttTheme\r\n\r\n    // Generate CSS variables from the theme\r\n    const themeStyles: CSSProperties & Record<string, string> = {\r\n      // Background variables\r\n      '--asakaa-color-background-primary': theme.bgPrimary,\r\n      '--asakaa-color-background-secondary': theme.bgSecondary,\r\n      '--asakaa-color-background-card': theme.bgGrid,\r\n      '--asakaa-color-background-hover': theme.hoverBg,\r\n\r\n      // Text variables\r\n      '--asakaa-color-text-primary': theme.textPrimary,\r\n      '--asakaa-color-text-secondary': theme.textSecondary,\r\n      '--asakaa-color-text-tertiary': theme.textTertiary,\r\n      '--asakaa-color-text-inverse': theme.taskBarHandle || '#FFFFFF',\r\n\r\n      // Border variables\r\n      '--asakaa-color-border-default': theme.border,\r\n      '--asakaa-color-border-hover': theme.borderLight,\r\n      '--asakaa-color-border-subtle': theme.borderLight,\r\n\r\n      // Interactive variables\r\n      '--asakaa-color-interactive-primary': theme.accent,\r\n      '--asakaa-color-interactive-primaryHover': theme.accentHover,\r\n      '--asakaa-color-interactive-primaryBorder': `${theme.accent}4D`, // 30% opacity\r\n      '--asakaa-color-interactive-primaryBackground': `${theme.accent}1A`, // 10% opacity\r\n      '--asakaa-color-interactive-primaryBackgroundHover': `${theme.accent}33`, // 20% opacity\r\n\r\n      // Status colors\r\n      '--asakaa-color-status-success': theme.statusCompleted,\r\n      '--asakaa-color-status-warning': theme.milestone,\r\n      '--asakaa-color-status-error': theme.criticalPath,\r\n      '--asakaa-color-danger': theme.criticalPath,\r\n      '--asakaa-color-danger-border': `${theme.criticalPath}4D`,\r\n      '--asakaa-color-danger-background': `${theme.criticalPath}14`,\r\n      '--asakaa-color-danger-backgroundHover': `${theme.criticalPath}26`,\r\n    }\r\n\r\n    return createPortal(\r\n      <div\r\n        data-theme={themeName}\r\n        data-gantt-portal=\"true\"\r\n        style={themeStyles}\r\n      >\r\n        {children}\r\n      </div>,\r\n      target\r\n    )\r\n  }\r\n\r\n  // If we have a Kanban theme, wrap children with data-theme attribute\r\n  if (kanbanTheme) {\r\n    return createPortal(\r\n      <div\r\n        data-theme={kanbanTheme.themeName}\r\n        data-kanban-portal=\"true\"\r\n      >\r\n        {children}\r\n      </div>,\r\n      target\r\n    )\r\n  }\r\n\r\n  return createPortal(children, target)\r\n}\r\n","import { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\nimport type { Priority } from '../../types'\r\n\r\nexport interface PrioritySelectorProps {\r\n  priority?: Priority\r\n  onChange: (priority?: Priority) => void\r\n  className?: string\r\n}\r\n\r\nconst PRIORITY_CONFIG = {\r\n  URGENT: { label: 'Urgent', color: '#E74C3C' },\r\n  HIGH: { label: 'High', color: '#E67E22' },\r\n  MEDIUM: { label: 'Normal', color: '#F1C40F' },\r\n  LOW: { label: 'Low', color: '#2ECC71' },\r\n} as const\r\n\r\nconst CLEAR_COLOR = '#BDC3C7'\r\n\r\nconst PriorityIcon = ({ color }: { color: string }) => (\r\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <circle cx=\"8\" cy=\"8\" r=\"6\" fill={color} opacity=\"0.9\" />\r\n    <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color} strokeWidth=\"1.5\" opacity=\"0.3\" />\r\n  </svg>\r\n)\r\n\r\nexport function PrioritySelector({\r\n  priority,\r\n  onChange,\r\n  className,\r\n}: PrioritySelectorProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n\r\n  useEffect(() => {\r\n    if (isOpen && buttonRef.current) {\r\n      const rect = buttonRef.current.getBoundingClientRect()\r\n      setMenuPosition({\r\n        top: rect.bottom + window.scrollY + 8,\r\n        left: rect.left + window.scrollX,\r\n      })\r\n    }\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        !buttonRef.current?.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') setIsOpen(false)\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleSelect = (newPriority?: Priority) => {\r\n    onChange(newPriority)\r\n    setIsOpen(false)\r\n  }\r\n\r\n  const currentConfig = priority ? PRIORITY_CONFIG[priority] : null\r\n  const flagColor = currentConfig?.color || CLEAR_COLOR\r\n\r\n  return (\r\n    <div className={`relative ${className || ''}`}>\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center justify-center w-8 h-8 rounded-lg transition-all hover:bg-white/15 hover:scale-110 active:scale-95\"\r\n        style={{\r\n          background: priority ? `${flagColor}10` : 'transparent',\r\n          boxShadow: priority ? `0 0 0 2px ${flagColor}30 inset` : 'none',\r\n        }}\r\n        title={currentConfig?.label || 'Set priority'}\r\n      >\r\n        <svg\r\n          width=\"20\"\r\n          height=\"20\"\r\n          viewBox=\"0 0 16 16\"\r\n          fill=\"none\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n        >\r\n          <path\r\n            d=\"M3 2L3 14M3 2L13 6L3 8V2Z\"\r\n            stroke={flagColor}\r\n            strokeWidth=\"1.5\"\r\n            strokeLinecap=\"round\"\r\n            strokeLinejoin=\"round\"\r\n            fill={flagColor}\r\n            fillOpacity={priority ? \"0.6\" : \"0.4\"}\r\n          />\r\n        </svg>\r\n      </button>\r\n\r\n      {isOpen && (\r\n        <Portal>\r\n          <div\r\n            ref={menuRef}\r\n            className=\"priority-selector-menu\"\r\n            style={{\r\n              position: 'absolute',\r\n              top: `${menuPosition.top}px`,\r\n              left: `${menuPosition.left}px`,\r\n              zIndex: 99999,\r\n              minWidth: '160px',\r\n              borderRadius: '8px',\r\n              background: 'var(--modal-v2-bg, #1f1f1f)',\r\n              border: '1px solid var(--modal-v2-border, rgba(255, 255, 255, 0.15))',\r\n              boxShadow: '0 10px 40px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n            }}\r\n          >\r\n          <div\r\n            className=\"px-3 py-1.5 border-b\"\r\n            style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.1))' }}\r\n          >\r\n            <span\r\n              className=\"text-[10px] font-bold uppercase tracking-wider\"\r\n              style={{ color: 'var(--modal-v2-text-secondary, rgba(255, 255, 255, 0.7))' }}\r\n            >\r\n              Priority\r\n            </span>\r\n          </div>\r\n\r\n          <div className=\"py-1\">\r\n            {(Object.entries(PRIORITY_CONFIG) as [Priority, typeof PRIORITY_CONFIG[Priority]][]).map(\r\n              ([key, config]) => (\r\n                <button\r\n                  key={key}\r\n                  onClick={() => handleSelect(key)}\r\n                  className=\"w-full px-3 py-1.5 flex items-center gap-2 text-xs font-medium transition-all active:scale-[0.98] priority-option\"\r\n                  style={{\r\n                    color: config.color,\r\n                    background: 'transparent'\r\n                  }}\r\n                  onMouseEnter={(e) => {\r\n                    e.currentTarget.style.background = 'var(--modal-v2-bg-tertiary, rgba(255, 255, 255, 0.15))'\r\n                  }}\r\n                  onMouseLeave={(e) => {\r\n                    e.currentTarget.style.background = 'transparent'\r\n                  }}\r\n                >\r\n                  <PriorityIcon color={config.color} />\r\n                  <span className=\"font-semibold text-sm\">{config.label}</span>\r\n                  {priority === key && (\r\n                    <svg className=\"ml-auto\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                      <path d=\"M13.5 4.5L6 12L2.5 8.5\" stroke=\"#3B82F6\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n                    </svg>\r\n                  )}\r\n                </button>\r\n              )\r\n            )}\r\n\r\n            <div\r\n              className=\"mt-0.5 pt-0.5 border-t\"\r\n              style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.1))' }}\r\n            >\r\n              <button\r\n                onClick={() => handleSelect(undefined)}\r\n                className=\"w-full px-3 py-1.5 flex items-center gap-2 text-xs font-medium transition-all active:scale-[0.98]\"\r\n                style={{\r\n                  color: 'var(--modal-v2-text-primary, #e5e5e5)',\r\n                  background: 'transparent'\r\n                }}\r\n                onMouseEnter={(e) => {\r\n                  e.currentTarget.style.background = 'var(--modal-v2-bg-tertiary, rgba(255, 255, 255, 0.15))'\r\n                }}\r\n                onMouseLeave={(e) => {\r\n                  e.currentTarget.style.background = 'transparent'\r\n                }}\r\n              >\r\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                  <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"#9CA3AF\" strokeWidth=\"1.5\" strokeDasharray=\"2 2\" opacity=\"0.6\" />\r\n                </svg>\r\n                <span className=\"font-semibold text-sm\">Clear</span>\r\n                {!priority && (\r\n                  <svg className=\"ml-auto\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                    <path d=\"M13.5 4.5L6 12L2.5 8.5\" stroke=\"#3B82F6\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n                  </svg>\r\n                )}\r\n              </button>\r\n            </div>\r\n          </div>\r\n          </div>\r\n        </Portal>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Date Range Picker Component\r\n * Quick selection buttons + interactive calendar\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\nimport { useKanbanTheme } from '../Board/KanbanThemeContext'\r\n\r\nexport interface DateRangePickerProps {\r\n  startDate?: string\r\n  endDate?: string\r\n  onChange: (startDate?: string, endDate?: string) => void\r\n  className?: string\r\n}\r\n\r\nconst QUICK_OPTIONS = [\r\n  { label: 'Today', days: 0 },\r\n  { label: 'Tomorrow', days: 1 },\r\n  { label: 'Next Week', days: 7 },\r\n  { label: '2 Weeks', days: 14 },\r\n  { label: '4 Weeks', days: 28 },\r\n  { label: '8 Weeks', days: 56 },\r\n]\r\n\r\nexport function DateRangePicker({\r\n  startDate,\r\n  endDate,\r\n  onChange,\r\n  className,\r\n}: DateRangePickerProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n  const kanbanTheme = useKanbanTheme()\r\n  const themeName = kanbanTheme?.themeName || 'dark'\r\n  // Only 'dark' theme uses dark colors, 'light' and 'neutral' use light colors\r\n  const isDark = themeName === 'dark'\r\n\r\n  useEffect(() => {\r\n    if (isOpen && buttonRef.current) {\r\n      const rect = buttonRef.current.getBoundingClientRect()\r\n      setMenuPosition({\r\n        top: rect.bottom + window.scrollY + 8,\r\n        left: rect.left + window.scrollX,\r\n      })\r\n    }\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        !buttonRef.current?.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleQuickSelect = (days: number) => {\r\n    const now = new Date()\r\n\r\n    const formatLocalDate = (date: Date) => {\r\n      const year = date.getFullYear()\r\n      const month = String(date.getMonth() + 1).padStart(2, '0')\r\n      const day = String(date.getDate()).padStart(2, '0')\r\n      return `${year}-${month}-${day}`\r\n    }\r\n\r\n    const todayStr = formatLocalDate(now)\r\n\r\n    const endDate = new Date(now)\r\n    endDate.setDate(endDate.getDate() + days)\r\n    const endStr = formatLocalDate(endDate)\r\n\r\n    onChange(todayStr, endStr)\r\n    setIsOpen(false)\r\n  }\r\n\r\n  const formatDateRange = () => {\r\n    if (!startDate || !endDate) return 'Set date'\r\n\r\n    const parseLocalDate = (dateStr: string | Date) => {\r\n      if (dateStr instanceof Date) return dateStr\r\n      if (typeof dateStr !== 'string' || !dateStr.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\r\n        return null\r\n      }\r\n      const parts = dateStr.split('-').map(Number)\r\n      if (parts.length !== 3 || parts.some(p => isNaN(p))) {\r\n        return null\r\n      }\r\n      const year = parts[0]\r\n      const month = parts[1]\r\n      const day = parts[2]\r\n      if (year === undefined || month === undefined || day === undefined) {\r\n        return null\r\n      }\r\n      return new Date(year, month - 1, day)\r\n    }\r\n\r\n    const start = parseLocalDate(startDate)\r\n    const end = parseLocalDate(endDate)\r\n\r\n    if (!start || !end || isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n      return 'Set date'\r\n    }\r\n\r\n    const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\n    return `${monthNames[start.getMonth()]} ${start.getDate()} – ${monthNames[end.getMonth()]} ${end.getDate()}`\r\n  }\r\n\r\n  const hasDateSet = startDate && endDate\r\n\r\n  const isOverdue = () => {\r\n    if (!endDate) return false\r\n    const end = typeof endDate === 'string' ? new Date(endDate) : endDate\r\n    const today = new Date()\r\n    today.setHours(0, 0, 0, 0)\r\n    return end < today\r\n  }\r\n\r\n  const overdue = isOverdue()\r\n\r\n  return (\r\n    <div className={`relative ${className || ''}`}>\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className={`flex items-center gap-1.5 px-2 py-1 rounded-md text-xs transition-all hover:bg-white/5 ${\r\n          overdue ? 'asakaa-date-overdue' : 'asakaa-date'\r\n        }`}\r\n        title={hasDateSet ? `${formatDateRange()}` : 'Set date range'}\r\n      >\r\n        <svg\r\n          width=\"14\"\r\n          height=\"14\"\r\n          viewBox=\"0 0 16 16\"\r\n          fill=\"none\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n        >\r\n          <rect\r\n            x=\"2\"\r\n            y=\"3\"\r\n            width=\"12\"\r\n            height=\"11\"\r\n            rx=\"2\"\r\n            stroke=\"currentColor\"\r\n            strokeWidth=\"1.5\"\r\n          />\r\n          <path d=\"M2 6H14\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\r\n          <path d=\"M5 2V4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n          <path d=\"M11 2V4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n        </svg>\r\n        {startDate && endDate && (\r\n          <span className=\"whitespace-nowrap\">{formatDateRange()}</span>\r\n        )}\r\n      </button>\r\n\r\n      {isOpen && (\r\n        <Portal>\r\n          <div\r\n            ref={menuRef}\r\n            className=\"date-picker-menu absolute rounded-xl shadow-2xl border min-w-[320px]\"\r\n            style={{\r\n              top: `${menuPosition.top}px`,\r\n              left: `${menuPosition.left}px`,\r\n              background: isDark ? '#1A1D25' : '#FFFFFF',\r\n              border: `1px solid ${isDark ? 'rgba(255, 255, 255, 0.15)' : 'rgba(0, 0, 0, 0.12)'}`,\r\n              boxShadow: isDark\r\n                ? '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)'\r\n                : '0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.08)',\r\n              zIndex: 99999,\r\n            }}\r\n          >\r\n            <div className=\"p-4 border-b\" style={{ borderColor: isDark ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.08)' }}>\r\n              <span\r\n                className=\"text-xs font-bold uppercase tracking-wider block mb-3\"\r\n                style={{ color: isDark ? 'rgba(255, 255, 255, 0.85)' : 'rgba(0, 0, 0, 0.7)' }}\r\n              >\r\n                Quick Select\r\n              </span>\r\n              <div className=\"grid grid-cols-2 gap-2\">\r\n                {QUICK_OPTIONS.map((option) => (\r\n                  <button\r\n                    key={option.label}\r\n                    onClick={() => handleQuickSelect(option.days)}\r\n                    className=\"px-3 py-2.5 rounded-lg text-xs font-semibold transition-all active:scale-95\"\r\n                    style={{\r\n                      color: isDark ? 'rgba(255, 255, 255, 0.95)' : 'rgba(0, 0, 0, 0.85)',\r\n                      border: `1px solid ${isDark ? 'rgba(255, 255, 255, 0.25)' : 'rgba(0, 0, 0, 0.15)'}`,\r\n                      backgroundColor: isDark ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.05)',\r\n                    }}\r\n                    onMouseEnter={(e) => {\r\n                      e.currentTarget.style.backgroundColor = isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.1)'\r\n                      e.currentTarget.style.border = `1px solid ${isDark ? 'rgba(255, 255, 255, 0.4)' : 'rgba(0, 0, 0, 0.25)'}`\r\n                    }}\r\n                    onMouseLeave={(e) => {\r\n                      e.currentTarget.style.backgroundColor = isDark ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.05)'\r\n                      e.currentTarget.style.border = `1px solid ${isDark ? 'rgba(255, 255, 255, 0.25)' : 'rgba(0, 0, 0, 0.15)'}`\r\n                    }}\r\n                  >\r\n                    {option.label}\r\n                  </button>\r\n                ))}\r\n              </div>\r\n            </div>\r\n\r\n            <div className=\"p-4\">\r\n              <span\r\n                className=\"text-xs font-bold uppercase tracking-wider block mb-3\"\r\n                style={{ color: isDark ? 'rgba(255, 255, 255, 0.85)' : 'rgba(0, 0, 0, 0.7)' }}\r\n              >\r\n                Custom Range\r\n              </span>\r\n              <div className=\"space-y-3\">\r\n                <input\r\n                  type=\"date\"\r\n                  value={startDate || ''}\r\n                  onChange={(e) => onChange(e.target.value, endDate)}\r\n                  className=\"w-full px-3 py-2.5 rounded-lg text-sm border focus:outline-none transition-all\"\r\n                  style={{\r\n                    background: isDark ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.05)',\r\n                    borderColor: isDark ? 'rgba(255, 255, 255, 0.25)' : 'rgba(0, 0, 0, 0.15)',\r\n                    color: isDark ? 'rgba(255, 255, 255, 0.95)' : 'rgba(0, 0, 0, 0.85)',\r\n                    colorScheme: isDark ? 'dark' : 'light',\r\n                  }}\r\n                />\r\n                <input\r\n                  type=\"date\"\r\n                  value={endDate || ''}\r\n                  onChange={(e) => onChange(startDate, e.target.value)}\r\n                  className=\"w-full px-3 py-2.5 rounded-lg text-sm border focus:outline-none transition-all\"\r\n                  style={{\r\n                    background: isDark ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.05)',\r\n                    borderColor: isDark ? 'rgba(255, 255, 255, 0.25)' : 'rgba(0, 0, 0, 0.15)',\r\n                    color: isDark ? 'rgba(255, 255, 255, 0.95)' : 'rgba(0, 0, 0, 0.85)',\r\n                    colorScheme: isDark ? 'dark' : 'light',\r\n                  }}\r\n                />\r\n              </div>\r\n\r\n              {(startDate || endDate) && (\r\n                <button\r\n                  onClick={() => {\r\n                    onChange(undefined, undefined)\r\n                    setIsOpen(false)\r\n                  }}\r\n                  className=\"mt-4 w-full px-3 py-2.5 rounded-lg text-sm font-semibold transition-all active:scale-95 border\"\r\n                  style={{\r\n                    color: '#ef4444',\r\n                    borderColor: 'rgba(239, 68, 68, 0.3)',\r\n                    background: 'rgba(239, 68, 68, 0.1)',\r\n                  }}\r\n                  onMouseEnter={(e) => {\r\n                    e.currentTarget.style.background = 'rgba(239, 68, 68, 0.2)'\r\n                  }}\r\n                  onMouseLeave={(e) => {\r\n                    e.currentTarget.style.background = 'rgba(239, 68, 68, 0.1)'\r\n                  }}\r\n                >\r\n                  Clear Dates\r\n                </button>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </Portal>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * User Assignment Selector Component\r\n * Multi-select user assignment with avatar display\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\n\r\nexport interface User {\r\n  id: string\r\n  name: string\r\n  avatar?: string\r\n  initials: string\r\n  color: string\r\n}\r\n\r\nexport interface UserAssignmentSelectorProps {\r\n  assignedUsers?: User[]\r\n  availableUsers: User[]\r\n  onChange: (users: User[]) => void\r\n  className?: string\r\n  maxVisibleAvatars?: number\r\n}\r\n\r\nexport function UserAssignmentSelector({\r\n  assignedUsers = [],\r\n  availableUsers,\r\n  onChange,\r\n  className,\r\n  maxVisibleAvatars = 3,\r\n}: UserAssignmentSelectorProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [searchQuery, setSearchQuery] = useState('')\r\n  const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n\r\n  useEffect(() => {\r\n    if (isOpen && buttonRef.current) {\r\n      const rect = buttonRef.current.getBoundingClientRect()\r\n      setMenuPosition({\r\n        top: rect.bottom + window.scrollY + 8,\r\n        left: rect.left + window.scrollX,\r\n      })\r\n    }\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        !buttonRef.current?.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n        setSearchQuery('')\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') {\r\n        setIsOpen(false)\r\n        setSearchQuery('')\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleToggleUser = (user: User) => {\r\n    const isAssigned = assignedUsers.some((u) => u.id === user.id)\r\n\r\n    if (isAssigned) {\r\n      onChange(assignedUsers.filter((u) => u.id !== user.id))\r\n    } else {\r\n      onChange([...assignedUsers, user])\r\n    }\r\n  }\r\n\r\n  const filteredUsers = availableUsers.filter((user) =>\r\n    user.name.toLowerCase().includes(searchQuery.toLowerCase())\r\n  )\r\n\r\n  const visibleUsers = assignedUsers.slice(0, maxVisibleAvatars)\r\n  const overflowCount = assignedUsers.length - maxVisibleAvatars\r\n\r\n  return (\r\n    <div className={`relative ${className || ''}`}>\r\n      {/* Avatar display or add button */}\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center gap-1 p-0.5 rounded transition-all hover:bg-white/10 hover:scale-105 active:scale-95\"\r\n        title={assignedUsers.length > 0 ? `${assignedUsers.length} assigned` : 'Assign users'}\r\n      >\r\n        {assignedUsers.length > 0 ? (\r\n          <div className=\"asakaa-avatar-group\">\r\n            {visibleUsers.map((user) => (\r\n              <div\r\n                key={user.id}\r\n                className=\"asakaa-avatar\"\r\n                title={user.name}\r\n              >\r\n                {user.avatar ? (\r\n                  <img\r\n                    src={user.avatar}\r\n                    alt={user.name}\r\n                    className=\"asakaa-avatar-img\"\r\n                  />\r\n                ) : (\r\n                  user.initials\r\n                )}\r\n              </div>\r\n            ))}\r\n            {overflowCount > 0 && (\r\n              <div className=\"asakaa-avatar\">\r\n                +{overflowCount}\r\n              </div>\r\n            )}\r\n          </div>\r\n        ) : (\r\n          <div\r\n            className=\"w-7 h-7 rounded-full flex items-center justify-center transition-all\"\r\n            style={{\r\n              background: 'rgba(96, 165, 250, 0.15)',\r\n              border: '1.5px solid rgba(96, 165, 250, 0.4)',\r\n              color: '#60a5fa',\r\n            }}\r\n          >\r\n            <svg\r\n              width=\"16\"\r\n              height=\"16\"\r\n              viewBox=\"0 0 16 16\"\r\n              fill=\"none\"\r\n              xmlns=\"http://www.w3.org/2000/svg\"\r\n            >\r\n              <path\r\n                d=\"M8 8a3 3 0 100-6 3 3 0 000 6zM4 14c0-2.21 1.79-4 4-4s4 1.79 4 4\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"1.5\"\r\n                strokeLinecap=\"round\"\r\n              />\r\n              <line\r\n                x1=\"13\"\r\n                y1=\"5\"\r\n                x2=\"13\"\r\n                y2=\"9\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"1.5\"\r\n                strokeLinecap=\"round\"\r\n              />\r\n              <line\r\n                x1=\"11\"\r\n                y1=\"7\"\r\n                x2=\"15\"\r\n                y2=\"7\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"1.5\"\r\n                strokeLinecap=\"round\"\r\n              />\r\n            </svg>\r\n          </div>\r\n        )}\r\n      </button>\r\n\r\n      {/* User selection menu - Using Portal to escape stacking context */}\r\n      {isOpen && (\r\n        <Portal>\r\n          <div\r\n            ref={menuRef}\r\n            className=\"user-selector-menu absolute rounded-xl shadow-2xl border min-w-[300px]\"\r\n            style={{\r\n              top: `${menuPosition.top}px`,\r\n              left: `${menuPosition.left}px`,\r\n              background: 'var(--modal-v2-bg, #1f1f1f)',\r\n              border: '1px solid var(--modal-v2-border, rgba(255, 255, 255, 0.15))',\r\n              boxShadow: '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n              zIndex: 99999,\r\n            }}\r\n          >\r\n          {/* Header */}\r\n          <div className=\"px-4 py-3 border-b\" style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.1))' }}>\r\n            <span className=\"text-xs font-bold uppercase tracking-wider\" style={{ color: 'var(--modal-v2-text-secondary, rgba(255, 255, 255, 0.8))' }}>\r\n              Assign Users\r\n            </span>\r\n          </div>\r\n\r\n          {/* Search input */}\r\n          <div className=\"px-3 py-3 border-b\" style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.1))' }}>\r\n            <input\r\n              type=\"text\"\r\n              value={searchQuery}\r\n              onChange={(e) => setSearchQuery(e.target.value)}\r\n              placeholder=\"Search users...\"\r\n              className=\"w-full px-3 py-2.5 rounded-lg text-sm border outline-none transition-all\"\r\n              style={{\r\n                background: 'var(--modal-v2-bg-secondary, rgba(255, 255, 255, 0.05))',\r\n                borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.2))',\r\n                color: 'var(--modal-v2-text-primary, #ffffff)',\r\n              }}\r\n              autoFocus\r\n            />\r\n          </div>\r\n\r\n          {/* User list */}\r\n          <div className=\"py-2 max-h-[300px] overflow-y-auto\">\r\n            {filteredUsers.length === 0 ? (\r\n              <div className=\"px-4 py-3 text-sm text-center\" style={{ color: 'var(--modal-v2-text-tertiary, rgba(255, 255, 255, 0.6))' }}>\r\n                No users found\r\n              </div>\r\n            ) : (\r\n              filteredUsers.map((user) => {\r\n                const isAssigned = assignedUsers.some((u) => u.id === user.id)\r\n\r\n                return (\r\n                  <button\r\n                    key={user.id}\r\n                    onClick={() => handleToggleUser(user)}\r\n                    className=\"w-full px-4 py-2.5 flex items-center gap-3 text-sm transition-all active:scale-98\"\r\n                    style={{ background: 'transparent' }}\r\n                    onMouseEnter={(e) => {\r\n                      e.currentTarget.style.background = 'var(--modal-v2-bg-tertiary, rgba(255, 255, 255, 0.1))'\r\n                    }}\r\n                    onMouseLeave={(e) => {\r\n                      e.currentTarget.style.background = 'transparent'\r\n                    }}\r\n                  >\r\n                    {/* Avatar */}\r\n                    <div\r\n                      className=\"w-7 h-7 rounded-full flex items-center justify-center text-[11px] font-bold flex-shrink-0 shadow-sm\"\r\n                      style={{\r\n                        backgroundColor: user.color,\r\n                        color: '#fff',\r\n                      }}\r\n                    >\r\n                      {user.avatar ? (\r\n                        <img\r\n                          src={user.avatar}\r\n                          alt={user.name}\r\n                          className=\"w-full h-full rounded-full object-cover\"\r\n                        />\r\n                      ) : (\r\n                        user.initials\r\n                      )}\r\n                    </div>\r\n\r\n                    {/* Name */}\r\n                    <span className=\"font-semibold flex-1 text-left\" style={{ color: 'var(--modal-v2-text-primary, rgba(255, 255, 255, 0.95))' }}>\r\n                      {user.name}\r\n                    </span>\r\n\r\n                    {/* Checkmark */}\r\n                    {isAssigned && (\r\n                      <span className=\"text-lg\" style={{ color: '#3b82f6' }}>✓</span>\r\n                    )}\r\n                  </button>\r\n                )\r\n              })\r\n            )}\r\n          </div>\r\n\r\n          {/* Clear button */}\r\n          {assignedUsers.length > 0 && (\r\n            <div className=\"px-3 py-3 border-t border-white/10\">\r\n              <button\r\n                onClick={() => {\r\n                  onChange([])\r\n                  setIsOpen(false)\r\n                }}\r\n                className=\"w-full px-3 py-2.5 rounded-lg text-sm font-semibold transition-all hover:bg-red-600/30 active:scale-95 border\"\r\n                style={{\r\n                  color: '#f87171',\r\n                  borderColor: 'rgba(248, 113, 113, 0.3)',\r\n                  background: 'rgba(248, 113, 113, 0.08)',\r\n                }}\r\n              >\r\n                Clear All\r\n              </button>\r\n            </div>\r\n          )}\r\n          </div>\r\n        </Portal>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Dependencies Selector Component\r\n * Select task dependencies with link icon\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\nimport type { Card } from '../../types'\r\n\r\n/**\r\n * Validate if adding a dependency would create a circular reference\r\n * Uses Depth-First Search (DFS) algorithm\r\n * @param allCards - All cards in the board\r\n * @param fromCardId - The card that would become a dependency (the task being depended on)\r\n * @param toCardId - The card that would depend on fromCardId\r\n * @returns True if adding this dependency would create a circular reference\r\n */\r\nexport function wouldCreateCircularDependency(\r\n  allCards: Card[],\r\n  fromCardId: string,\r\n  toCardId: string\r\n): boolean {\r\n  // Build dependency map from all cards\r\n  const dependencyMap = new Map<string, string[]>()\r\n  allCards.forEach((card) => {\r\n    if (card.dependencies && Array.isArray(card.dependencies)) {\r\n      // Handle both string[] and Dependency[] formats\r\n      // Dependency from @libxai/core has 'taskId', not 'targetId'\r\n      const deps = card.dependencies.map((d) => {\r\n        if (typeof d === 'string') return d\r\n        // Handle both possible formats\r\n        const depObj = d as { taskId?: string; targetId?: string }\r\n        return depObj.taskId || depObj.targetId || ''\r\n      }).filter(Boolean)\r\n      dependencyMap.set(card.id, deps)\r\n    }\r\n  })\r\n\r\n  // Simulate adding the new dependency (toCardId depends on fromCardId)\r\n  const existingDeps = dependencyMap.get(toCardId) || []\r\n  dependencyMap.set(toCardId, [...existingDeps, fromCardId])\r\n\r\n  // DFS to detect cycle\r\n  const visited = new Set<string>()\r\n  const recStack = new Set<string>()\r\n\r\n  const hasCycle = (cardId: string): boolean => {\r\n    if (!visited.has(cardId)) {\r\n      visited.add(cardId)\r\n      recStack.add(cardId)\r\n\r\n      const deps = dependencyMap.get(cardId) || []\r\n      for (const depId of deps) {\r\n        if (!visited.has(depId) && hasCycle(depId)) {\r\n          return true\r\n        } else if (recStack.has(depId)) {\r\n          return true\r\n        }\r\n      }\r\n    }\r\n    recStack.delete(cardId)\r\n    return false\r\n  }\r\n\r\n  return hasCycle(toCardId)\r\n}\r\n\r\nexport interface DependenciesSelectorProps {\r\n  /** Current card (to exclude from dependencies) */\r\n  currentCardId: string\r\n  /** Currently selected dependencies */\r\n  dependencies?: string[]\r\n  /** All available tasks */\r\n  availableTasks: Card[]\r\n  /** Change handler */\r\n  onChange: (dependencies: string[]) => void\r\n  /** Custom className */\r\n  className?: string\r\n  /** Enable circular dependency validation (default: true) */\r\n  validateCircular?: boolean\r\n  /** Callback when circular dependency is detected */\r\n  onCircularDependencyError?: (targetCardId: string, targetCardTitle: string) => void\r\n}\r\n\r\nexport function DependenciesSelector({\r\n  currentCardId,\r\n  dependencies = [],\r\n  availableTasks,\r\n  onChange,\r\n  className,\r\n  validateCircular = true,\r\n  onCircularDependencyError,\r\n}: DependenciesSelectorProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [searchQuery, setSearchQuery] = useState('')\r\n  const [hasDependencies, setHasDependencies] = useState(dependencies.length > 0)\r\n  const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\r\n  const [circularError, setCircularError] = useState<string | null>(null)\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n\r\n  useEffect(() => {\r\n    if (isOpen && buttonRef.current) {\r\n      const rect = buttonRef.current.getBoundingClientRect()\r\n      setMenuPosition({\r\n        top: rect.bottom + window.scrollY + 8,\r\n        left: rect.left + window.scrollX,\r\n      })\r\n    }\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        !buttonRef.current?.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n        setSearchQuery('')\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') {\r\n        setIsOpen(false)\r\n        setSearchQuery('')\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleToggleDependency = (taskId: string) => {\r\n    const isDependency = dependencies.includes(taskId)\r\n    const targetTask = availableTasks.find((t) => t.id === taskId)\r\n\r\n    // Clear any previous error\r\n    setCircularError(null)\r\n\r\n    if (isDependency) {\r\n      // Removing dependency - always allowed\r\n      const newDeps = dependencies.filter((id) => id !== taskId)\r\n      onChange(newDeps)\r\n      if (newDeps.length === 0) {\r\n        setHasDependencies(false)\r\n      }\r\n    } else {\r\n      // Adding dependency - validate for circular references\r\n      if (validateCircular) {\r\n        const wouldBeCircular = wouldCreateCircularDependency(\r\n          availableTasks,\r\n          taskId,\r\n          currentCardId\r\n        )\r\n\r\n        if (wouldBeCircular) {\r\n          const errorMsg = `Cannot add \"${targetTask?.title || taskId}\" as dependency - would create circular reference`\r\n          setCircularError(errorMsg)\r\n          onCircularDependencyError?.(taskId, targetTask?.title || taskId)\r\n          // Auto-clear error after 3 seconds\r\n          setTimeout(() => setCircularError(null), 3000)\r\n          return // Don't add the dependency\r\n        }\r\n      }\r\n\r\n      onChange([...dependencies, taskId])\r\n      setHasDependencies(true)\r\n    }\r\n  }\r\n\r\n  const handleToggleHasDependencies = () => {\r\n    const newValue = !hasDependencies\r\n    setHasDependencies(newValue)\r\n\r\n    if (!newValue) {\r\n      // Clear all dependencies\r\n      onChange([])\r\n    }\r\n  }\r\n\r\n  // Filter out current card and apply search\r\n  const filteredTasks = availableTasks\r\n    .filter((task) => task.id !== currentCardId)\r\n    .filter(\r\n      (task) =>\r\n        task.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\r\n        task.id.toLowerCase().includes(searchQuery.toLowerCase())\r\n    )\r\n\r\n  const linkColor = dependencies.length > 0 ? '#3B82F6' : '#BDC3C7'\r\n\r\n  return (\r\n    <div className={`relative ${className || ''}`}>\r\n      {/* Link icon button */}\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center gap-1 px-2 py-1 rounded transition-all hover:bg-white/5\"\r\n        title={\r\n          dependencies.length > 0\r\n            ? `${dependencies.length} dependencies`\r\n            : 'Add dependencies'\r\n        }\r\n      >\r\n        <svg\r\n          width=\"16\"\r\n          height=\"16\"\r\n          viewBox=\"0 0 16 16\"\r\n          fill=\"none\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n        >\r\n          <path\r\n            d=\"M7 9L9 7M11.5 3.5L10 2C8.89543 0.89543 7.10457 0.89543 6 2C4.89543 3.10457 4.89543 4.89543 6 6L7.5 7.5M4.5 12.5L6 14C7.10457 15.1046 8.89543 15.1046 10 14C11.1046 12.8954 11.1046 11.1046 10 10L8.5 8.5\"\r\n            stroke={linkColor}\r\n            strokeWidth=\"1.5\"\r\n            strokeLinecap=\"round\"\r\n            strokeLinejoin=\"round\"\r\n          />\r\n        </svg>\r\n        {dependencies.length > 0 && (\r\n          <span className=\"text-xs font-medium\" style={{ color: linkColor }}>\r\n            {dependencies.length}\r\n          </span>\r\n        )}\r\n      </button>\r\n\r\n      {/* Dependencies menu - Using Portal to escape stacking context */}\r\n      {isOpen && (\r\n        <Portal>\r\n          <div\r\n            ref={menuRef}\r\n            className=\"dependencies-selector-menu absolute rounded-xl shadow-2xl border min-w-[300px]\"\r\n            style={{\r\n              top: `${menuPosition.top}px`,\r\n              left: `${menuPosition.left}px`,\r\n              background: 'var(--modal-v2-bg, #1f1f1f)',\r\n              border: '1px solid var(--modal-v2-border, rgba(255, 255, 255, 0.15))',\r\n              boxShadow: '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n              zIndex: 99999,\r\n            }}\r\n          >\r\n          {/* Circular dependency error */}\r\n          {circularError && (\r\n            <div\r\n              className=\"px-4 py-3 flex items-center gap-2\"\r\n              style={{\r\n                background: 'rgba(239, 68, 68, 0.15)',\r\n                borderBottom: '1px solid rgba(239, 68, 68, 0.3)',\r\n              }}\r\n            >\r\n              <svg\r\n                width=\"16\"\r\n                height=\"16\"\r\n                viewBox=\"0 0 16 16\"\r\n                fill=\"none\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n              >\r\n                <path\r\n                  d=\"M8 5V8M8 11H8.01M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8Z\"\r\n                  stroke=\"#ef4444\"\r\n                  strokeWidth=\"1.5\"\r\n                  strokeLinecap=\"round\"\r\n                  strokeLinejoin=\"round\"\r\n                />\r\n              </svg>\r\n              <span className=\"text-xs font-medium\" style={{ color: '#ef4444' }}>\r\n                {circularError}\r\n              </span>\r\n            </div>\r\n          )}\r\n\r\n          {/* Header */}\r\n          <div className=\"px-4 py-2 border-b\" style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.05))' }}>\r\n            <span className=\"text-xs font-semibold uppercase tracking-wide\" style={{ color: 'var(--modal-v2-text-secondary, rgba(255, 255, 255, 0.7))' }}>\r\n              Task Dependencies\r\n            </span>\r\n          </div>\r\n\r\n          {/* Has dependencies checkbox */}\r\n          <div className=\"px-4 py-3 border-b\" style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.05))' }}>\r\n            <label\r\n              className=\"flex items-center gap-2 cursor-pointer group\"\r\n              onClick={handleToggleHasDependencies}\r\n            >\r\n              <div\r\n                className=\"w-4 h-4 rounded border-2 flex items-center justify-center transition-all\"\r\n                style={{\r\n                  background: hasDependencies ? '#3b82f6' : 'transparent',\r\n                  borderColor: hasDependencies ? '#3b82f6' : 'var(--modal-v2-border, rgba(255, 255, 255, 0.3))',\r\n                }}\r\n              >\r\n                {hasDependencies && (\r\n                  <svg\r\n                    width=\"12\"\r\n                    height=\"12\"\r\n                    viewBox=\"0 0 12 12\"\r\n                    fill=\"none\"\r\n                    xmlns=\"http://www.w3.org/2000/svg\"\r\n                  >\r\n                    <path\r\n                      d=\"M2 6L5 9L10 3\"\r\n                      stroke=\"white\"\r\n                      strokeWidth=\"2\"\r\n                      strokeLinecap=\"round\"\r\n                      strokeLinejoin=\"round\"\r\n                    />\r\n                  </svg>\r\n                )}\r\n              </div>\r\n              <span className=\"text-sm font-medium\" style={{ color: 'var(--modal-v2-text-primary, rgba(255, 255, 255, 0.8))' }}>\r\n                Has dependencies\r\n              </span>\r\n            </label>\r\n          </div>\r\n\r\n          {/* Task selection (only if hasDependencies is true) */}\r\n          {hasDependencies && (\r\n            <>\r\n              {/* Search input */}\r\n              <div className=\"px-3 py-2 border-b\" style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.05))' }}>\r\n                <input\r\n                  type=\"text\"\r\n                  value={searchQuery}\r\n                  onChange={(e) => setSearchQuery(e.target.value)}\r\n                  placeholder=\"Search by name or ID...\"\r\n                  className=\"w-full px-3 py-2 rounded-md text-xs border outline-none transition-all\"\r\n                  style={{\r\n                    background: 'var(--modal-v2-bg-secondary, rgba(255, 255, 255, 0.05))',\r\n                    borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.1))',\r\n                    color: 'var(--modal-v2-text-primary, #ffffff)',\r\n                  }}\r\n                  autoFocus\r\n                />\r\n              </div>\r\n\r\n              {/* Task list */}\r\n              <div className=\"py-2 max-h-[280px] overflow-y-auto\">\r\n                {filteredTasks.length === 0 ? (\r\n                  <div className=\"px-4 py-3 text-xs text-center\" style={{ color: 'var(--modal-v2-text-tertiary, rgba(255, 255, 255, 0.5))' }}>\r\n                    No tasks found\r\n                  </div>\r\n                ) : (\r\n                  filteredTasks.map((task) => {\r\n                    const isDependency = dependencies.includes(task.id)\r\n\r\n                    return (\r\n                      <button\r\n                        key={task.id}\r\n                        onClick={() => handleToggleDependency(task.id)}\r\n                        className=\"w-full px-4 py-2 flex items-start gap-3 text-sm transition-colors\"\r\n                        style={{ background: 'transparent' }}\r\n                        onMouseEnter={(e) => {\r\n                          e.currentTarget.style.background = 'var(--modal-v2-bg-secondary, rgba(255, 255, 255, 0.05))'\r\n                        }}\r\n                        onMouseLeave={(e) => {\r\n                          e.currentTarget.style.background = 'transparent'\r\n                        }}\r\n                      >\r\n                        {/* Checkbox */}\r\n                        <div\r\n                          className=\"w-4 h-4 rounded border-2 flex items-center justify-center flex-shrink-0 mt-0.5 transition-all\"\r\n                          style={{\r\n                            background: isDependency ? '#3b82f6' : 'transparent',\r\n                            borderColor: isDependency ? '#3b82f6' : 'var(--modal-v2-border, rgba(255, 255, 255, 0.3))',\r\n                          }}\r\n                        >\r\n                          {isDependency && (\r\n                            <svg\r\n                              width=\"12\"\r\n                              height=\"12\"\r\n                              viewBox=\"0 0 12 12\"\r\n                              fill=\"none\"\r\n                              xmlns=\"http://www.w3.org/2000/svg\"\r\n                            >\r\n                              <path\r\n                                d=\"M2 6L5 9L10 3\"\r\n                                stroke=\"white\"\r\n                                strokeWidth=\"2\"\r\n                                strokeLinecap=\"round\"\r\n                                strokeLinejoin=\"round\"\r\n                              />\r\n                            </svg>\r\n                          )}\r\n                        </div>\r\n\r\n                        {/* Task info */}\r\n                        <div className=\"flex-1 text-left\">\r\n                          <div className=\"font-medium\" style={{ color: 'var(--modal-v2-text-primary, rgba(255, 255, 255, 0.9))' }}>\r\n                            {task.title}\r\n                          </div>\r\n                          <div className=\"text-xs mt-0.5\" style={{ color: 'var(--modal-v2-text-tertiary, rgba(255, 255, 255, 0.5))' }}>\r\n                            {task.id}\r\n                          </div>\r\n                        </div>\r\n                      </button>\r\n                    )\r\n                  })\r\n                )}\r\n              </div>\r\n            </>\r\n          )}\r\n\r\n          {/* Clear button */}\r\n          {dependencies.length > 0 && (\r\n            <div className=\"px-3 py-2 border-t border-white/5\">\r\n              <button\r\n                onClick={() => {\r\n                  onChange([])\r\n                  setHasDependencies(false)\r\n                  setIsOpen(false)\r\n                }}\r\n                className=\"w-full px-3 py-2 rounded-md text-xs font-medium transition-all hover:bg-red-600/20 border border-red-500/30\"\r\n                style={{ color: '#E74C3C' }}\r\n              >\r\n                Clear All Dependencies\r\n              </button>\r\n            </div>\r\n          )}\r\n          </div>\r\n        </Portal>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Card Component\r\n * Individual task card in the Kanban board\r\n * @module components/Card\r\n */\r\n\r\nimport { memo } from 'react'\r\nimport { useSortable } from '@dnd-kit/sortable'\r\nimport { CSS } from '@dnd-kit/utilities'\r\nimport type { Card as CardType } from '../../types'\r\nimport type { User } from './UserAssignmentSelector'\r\nimport { cn } from '../../utils'\r\nimport { PrioritySelector } from './PrioritySelector'\r\nimport { DateRangePicker } from './DateRangePicker'\r\nimport { UserAssignmentSelector } from './UserAssignmentSelector'\r\nimport { DependenciesSelector } from './DependenciesSelector'\r\n\r\nexport interface CardProps {\r\n  /** Card data */\r\n  card: CardType\r\n  /** Custom render function */\r\n  render?: (card: CardType) => React.ReactNode\r\n  /** Click handler */\r\n  onClick?: (card: CardType) => void\r\n  /** Is card selected */\r\n  isSelected?: boolean\r\n  /** Disable drag */\r\n  disableDrag?: boolean\r\n  /** Custom className */\r\n  className?: string\r\n  /** Card update handler */\r\n  onUpdate?: (cardId: string, updates: Partial<CardType>) => void\r\n  /** Available users for assignment */\r\n  availableUsers?: User[]\r\n  /** All cards (for dependencies) */\r\n  allCards?: CardType[]\r\n}\r\n\r\n/**\r\n * Default Card Component\r\n * Optimized with memo to prevent unnecessary re-renders\r\n */\r\nexport const Card = memo<CardProps>(\r\n  ({\r\n    card,\r\n    render,\r\n    onClick,\r\n    isSelected,\r\n    disableDrag,\r\n    className,\r\n    onUpdate,\r\n    availableUsers = [],\r\n    allCards = [],\r\n  }) => {\r\n    const {\r\n      attributes,\r\n      listeners,\r\n      setNodeRef,\r\n      transform,\r\n      transition,\r\n      isDragging,\r\n    } = useSortable({\r\n      id: card.id,\r\n      disabled: disableDrag,\r\n      data: {\r\n        type: 'card',\r\n        card,\r\n      },\r\n    })\r\n\r\n    const style = {\r\n      transform: CSS.Transform.toString(transform),\r\n      transition,\r\n    }\r\n\r\n    // If custom render provided, use it\r\n    if (render) {\r\n      return (\r\n        <div\r\n          ref={setNodeRef}\r\n          style={style}\r\n          {...attributes}\r\n          {...listeners}\r\n          onClick={() => onClick?.(card)}\r\n        >\r\n          {render(card)}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    // Get assigned users from IDs\r\n    const assignedUsers = availableUsers.filter((user) =>\r\n      card.assignedUserIds?.includes(user.id)\r\n    )\r\n\r\n    // Default card rendering\r\n    return (\r\n      <div\r\n        ref={setNodeRef}\r\n        style={style}\r\n        className={cn(\r\n          'asakaa-card',\r\n          isDragging && 'asakaa-card-dragging',\r\n          isSelected && 'ring-2 ring-asakaa-accent-blue',\r\n          className\r\n        )}\r\n        {...attributes}\r\n        {...listeners}\r\n        onClick={(e) => {\r\n          // Prevent card click when interacting with configurables\r\n          if (\r\n            (e.target as HTMLElement).closest(\r\n              '.priority-selector, .date-picker, .user-selector, .dependencies-selector'\r\n            )\r\n          ) {\r\n            return\r\n          }\r\n          onClick?.(card)\r\n        }}\r\n      >\r\n        {/* Cover Image */}\r\n        {card.coverImage && (\r\n          <div className=\"asakaa-card-cover mb-3\">\r\n            <img\r\n              src={card.coverImage}\r\n              alt={`Cover for ${card.title}`}\r\n              className=\"w-full h-32 object-cover rounded-md\"\r\n              loading=\"lazy\"\r\n              onError={(e) => {\r\n                // Hide image if it fails to load\r\n                e.currentTarget.style.display = 'none'\r\n              }}\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        {/* Title */}\r\n        <h3 className=\"asakaa-card-title mb-2\">{card.title}</h3>\r\n\r\n        {/* Description */}\r\n        {card.description && (\r\n          <p className=\"asakaa-card-description mb-3\">{card.description}</p>\r\n        )}\r\n\r\n        {/* Configurable properties row */}\r\n        <div className=\"flex items-center gap-3 mb-3 pt-1\">\r\n          {/* Priority selector */}\r\n          <div onClick={(e) => e.stopPropagation()} className=\"priority-selector\">\r\n            <PrioritySelector\r\n              priority={card.priority}\r\n              onChange={(priority) => onUpdate?.(card.id, { priority })}\r\n            />\r\n          </div>\r\n\r\n          {/* Date range picker */}\r\n          <div onClick={(e) => e.stopPropagation()} className=\"date-picker\">\r\n            <DateRangePicker\r\n              startDate={\r\n                card.startDate\r\n                  ? typeof card.startDate === 'string'\r\n                    ? card.startDate\r\n                    : card.startDate.toISOString().split('T')[0]\r\n                  : undefined\r\n              }\r\n              endDate={\r\n                card.endDate\r\n                  ? typeof card.endDate === 'string'\r\n                    ? card.endDate\r\n                    : card.endDate.toISOString().split('T')[0]\r\n                  : undefined\r\n              }\r\n              onChange={(startDate, endDate) =>\r\n                onUpdate?.(card.id, { startDate, endDate })\r\n              }\r\n            />\r\n          </div>\r\n\r\n          {/* User assignment */}\r\n          {availableUsers.length > 0 && (\r\n            <div onClick={(e) => e.stopPropagation()} className=\"user-selector\">\r\n              <UserAssignmentSelector\r\n                assignedUsers={assignedUsers}\r\n                availableUsers={availableUsers}\r\n                onChange={(users) =>\r\n                  onUpdate?.(card.id, {\r\n                    assignedUserIds: users.map((u) => u.id),\r\n                  })\r\n                }\r\n              />\r\n            </div>\r\n          )}\r\n\r\n          {/* Dependencies */}\r\n          <div onClick={(e) => e.stopPropagation()} className=\"dependencies-selector\">\r\n            <DependenciesSelector\r\n              currentCardId={card.id}\r\n              dependencies={\r\n                Array.isArray(card.dependencies)\r\n                  ? card.dependencies.map((d) => (typeof d === 'string' ? d : d.taskId))\r\n                  : []\r\n              }\r\n              availableTasks={allCards}\r\n              onChange={(dependencies) => onUpdate?.(card.id, { dependencies })}\r\n            />\r\n          </div>\r\n        </div>\r\n\r\n        {/* Labels */}\r\n        {card.labels && card.labels.length > 0 && (\r\n          <div className=\"flex flex-wrap gap-1\">\r\n            {card.labels.slice(0, 3).map((label) => (\r\n              <span key={label} className=\"asakaa-label\">\r\n                {label}\r\n              </span>\r\n            ))}\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  },\r\n  // Custom comparison function for optimal performance\r\n  (prevProps, nextProps) => {\r\n    return (\r\n      prevProps.card.id === nextProps.card.id &&\r\n      prevProps.card.title === nextProps.card.title &&\r\n      prevProps.card.description === nextProps.card.description &&\r\n      prevProps.card.position === nextProps.card.position &&\r\n      prevProps.card.columnId === nextProps.card.columnId &&\r\n      prevProps.card.priority === nextProps.card.priority &&\r\n      prevProps.card.startDate === nextProps.card.startDate &&\r\n      prevProps.card.endDate === nextProps.card.endDate &&\r\n      prevProps.isSelected === nextProps.isSelected &&\r\n      JSON.stringify(prevProps.card.labels) ===\r\n        JSON.stringify(nextProps.card.labels) &&\r\n      JSON.stringify(prevProps.card.assignedUserIds) ===\r\n        JSON.stringify(nextProps.card.assignedUserIds) &&\r\n      JSON.stringify(prevProps.card.dependencies) ===\r\n        JSON.stringify(nextProps.card.dependencies)\r\n    )\r\n  }\r\n)\r\n\r\nCard.displayName = 'Card'\r\n","/**\r\n * Column Menu Component\r\n * Three-dot menu for column actions (rename, etc.)\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\n\r\nexport interface ColumnMenuProps {\r\n  /** Current column title */\r\n  columnTitle: string\r\n  /** Rename handler */\r\n  onRename: (newTitle: string) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\nexport function ColumnMenu({\r\n  columnTitle,\r\n  onRename,\r\n  className,\r\n}: ColumnMenuProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [isRenaming, setIsRenaming] = useState(false)\r\n  const [newTitle, setNewTitle] = useState(columnTitle)\r\n  const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n  const inputRef = useRef<HTMLInputElement>(null)\r\n\r\n  // Update menu position when opened\r\n  useEffect(() => {\r\n    if (isOpen && buttonRef.current) {\r\n      const rect = buttonRef.current.getBoundingClientRect()\r\n      setMenuPosition({\r\n        top: rect.bottom + window.scrollY + 8,\r\n        left: rect.left + window.scrollX,\r\n      })\r\n    }\r\n  }, [isOpen])\r\n\r\n  // Close menu when clicking outside\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        !buttonRef.current?.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n        setIsRenaming(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  // Close on escape\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') {\r\n        setIsOpen(false)\r\n        setIsRenaming(false)\r\n        setNewTitle(columnTitle)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen, columnTitle])\r\n\r\n  // Focus input when renaming starts\r\n  useEffect(() => {\r\n    if (isRenaming && inputRef.current) {\r\n      inputRef.current.focus()\r\n      inputRef.current.select()\r\n    }\r\n  }, [isRenaming])\r\n\r\n  const handleRenameClick = () => {\r\n    setIsRenaming(true)\r\n    setNewTitle(columnTitle)\r\n  }\r\n\r\n  const handleRenameSubmit = () => {\r\n    const trimmedTitle = newTitle.trim()\r\n    if (trimmedTitle && trimmedTitle !== columnTitle) {\r\n      onRename(trimmedTitle)\r\n    }\r\n    setIsRenaming(false)\r\n    setIsOpen(false)\r\n    setNewTitle(columnTitle)\r\n  }\r\n\r\n  const handleRenameKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n    if (e.key === 'Enter') {\r\n      handleRenameSubmit()\r\n    } else if (e.key === 'Escape') {\r\n      setIsRenaming(false)\r\n      setNewTitle(columnTitle)\r\n    }\r\n  }\r\n\r\n  return (\r\n    <div className={`relative ${className || ''}`}>\r\n      {/* Three-dot menu button */}\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded hover:bg-white/10\"\r\n        title=\"Column options\"\r\n        aria-label=\"Column menu\"\r\n      >\r\n        <svg\r\n          width=\"16\"\r\n          height=\"16\"\r\n          viewBox=\"0 0 16 16\"\r\n          fill=\"none\"\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n        >\r\n          <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\" />\r\n          <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\" />\r\n          <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\" />\r\n        </svg>\r\n      </button>\r\n\r\n      {/* Menu dropdown */}\r\n      {isOpen && (\r\n        <Portal>\r\n          <div\r\n            ref={menuRef}\r\n            className=\"fixed rounded-xl shadow-2xl border min-w-[200px]\"\r\n            style={{\r\n              top: `${menuPosition.top}px`,\r\n              left: `${menuPosition.left}px`,\r\n              background: 'linear-gradient(135deg, #1f1f1f 0%, #1a1a1a 100%)',\r\n              borderColor: 'rgba(255, 255, 255, 0.15)',\r\n              boxShadow: '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n              zIndex: 99999,\r\n            }}\r\n          >\r\n            {isRenaming ? (\r\n              // Rename input\r\n              <div className=\"p-3\">\r\n                <label className=\"text-xs font-bold text-white/80 uppercase tracking-wider block mb-2\">\r\n                  Rename Column\r\n                </label>\r\n                <input\r\n                  ref={inputRef}\r\n                  type=\"text\"\r\n                  value={newTitle}\r\n                  onChange={(e) => setNewTitle(e.target.value)}\r\n                  onKeyDown={handleRenameKeyDown}\r\n                  onBlur={handleRenameSubmit}\r\n                  className=\"w-full px-3 py-2 rounded-lg text-sm bg-white/5 border border-white/20 text-white placeholder-white/50 outline-none focus:border-blue-500/50 transition-all\"\r\n                  placeholder=\"Column name\"\r\n                  maxLength={50}\r\n                />\r\n              </div>\r\n            ) : (\r\n              // Menu options\r\n              <div className=\"py-1\">\r\n                <button\r\n                  onClick={handleRenameClick}\r\n                  className=\"w-full px-4 py-2.5 flex items-center gap-3 text-sm text-white/90 hover:bg-white/10 transition-all\"\r\n                >\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 16 16\"\r\n                    fill=\"none\"\r\n                    xmlns=\"http://www.w3.org/2000/svg\"\r\n                  >\r\n                    <path\r\n                      d=\"M11.5 1.5L14.5 4.5L5 14H2V11L11.5 1.5Z\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"1.5\"\r\n                      strokeLinecap=\"round\"\r\n                      strokeLinejoin=\"round\"\r\n                    />\r\n                  </svg>\r\n                  <span className=\"font-medium\">Rename</span>\r\n                </button>\r\n              </div>\r\n            )}\r\n          </div>\r\n        </Portal>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Column Component\r\n * Vertical column containing cards\r\n * @module components/Column\r\n */\r\n\r\nimport { memo, useRef } from 'react'\r\nimport { useDroppable } from '@dnd-kit/core'\r\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'\r\nimport { useVirtualizer } from '@tanstack/react-virtual'\r\nimport type { Column as ColumnType, Card as CardType } from '../../types'\r\nimport type { User } from '../Card/UserAssignmentSelector'\r\nimport { Card } from '../Card'\r\nimport { ColumnMenu } from './ColumnMenu'\r\nimport { cn, shouldVirtualize } from '../../utils'\r\n\r\nexport interface ColumnProps {\r\n  /** Column data */\r\n  column: ColumnType\r\n  /** Cards in this column */\r\n  cards: CardType[]\r\n  /** Custom column renderer */\r\n  renderColumn?: (column: ColumnType, cards: CardType[]) => React.ReactNode\r\n  /** Custom card renderer */\r\n  renderCard?: (card: CardType) => React.ReactNode\r\n  /** Custom header renderer */\r\n  renderHeader?: (column: ColumnType, cardCount: number) => React.ReactNode\r\n  /** Custom empty state */\r\n  renderEmptyState?: (column: ColumnType) => React.ReactNode\r\n  /** Card click handler */\r\n  onCardClick?: (card: CardType) => void\r\n  /** Card update handler */\r\n  onCardUpdate?: (cardId: string, updates: Partial<CardType>) => void\r\n  /** Available users for assignment */\r\n  availableUsers?: User[]\r\n  /** All cards (for dependencies) */\r\n  allCards?: CardType[]\r\n  /** Enable virtualization */\r\n  enableVirtualization?: boolean\r\n  /** Estimated card height for virtualization */\r\n  cardHeight?: number\r\n  /** Is column collapsed */\r\n  isCollapsed?: boolean\r\n  /** Toggle collapse */\r\n  onToggleCollapse?: () => void\r\n  /** Column rename handler */\r\n  onColumnRename?: (columnId: string, newTitle: string) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Column Component\r\n * Uses virtualization for large lists automatically\r\n */\r\nexport const Column = memo<ColumnProps>(\r\n  ({\r\n    column,\r\n    cards,\r\n    renderColumn,\r\n    renderCard,\r\n    renderHeader,\r\n    renderEmptyState,\r\n    onCardClick,\r\n    onCardUpdate,\r\n    availableUsers,\r\n    allCards,\r\n    enableVirtualization,\r\n    cardHeight = 120,\r\n    isCollapsed,\r\n    onToggleCollapse,\r\n    onColumnRename,\r\n    className,\r\n  }) => {\r\n    const { setNodeRef, isOver } = useDroppable({\r\n      id: column.id,\r\n      data: {\r\n        type: 'column',\r\n        column,\r\n      },\r\n    })\r\n\r\n    const parentRef = useRef<HTMLDivElement>(null)\r\n\r\n    // Auto-enable virtualization for large lists\r\n    const useVirtualization =\r\n      enableVirtualization ?? shouldVirtualize(cards.length)\r\n\r\n    // Setup virtualizer\r\n    const virtualizer = useVirtualizer({\r\n      count: cards.length,\r\n      getScrollElement: () => parentRef.current,\r\n      estimateSize: () => cardHeight,\r\n      enabled: useVirtualization,\r\n    })\r\n\r\n    // Custom column renderer\r\n    if (renderColumn) {\r\n      return (\r\n        <div ref={setNodeRef} className={className}>\r\n          {renderColumn(column, cards)}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    // Calculate WIP limit status\r\n    const getWipLimitStatus = () => {\r\n      if (!column.wipLimit) return { state: 'none', percentage: 0 }\r\n\r\n      const percentage = (cards.length / column.wipLimit) * 100\r\n\r\n      if (cards.length > column.wipLimit) {\r\n        return { state: 'exceeded', percentage }\r\n      } else if (percentage >= 80) {\r\n        return { state: 'warning', percentage }\r\n      } else if (percentage >= 60) {\r\n        return { state: 'approaching', percentage }\r\n      } else {\r\n        return { state: 'ok', percentage }\r\n      }\r\n    }\r\n\r\n    const wipStatus = getWipLimitStatus()\r\n    const isOverWipLimit = wipStatus.state === 'exceeded'\r\n\r\n    // WIP limit badge styling - simplified without color backgrounds\r\n    const getWipBadgeClasses = () => {\r\n      // All WIP limits use the same base class for consistent, subtle display\r\n      return 'asakaa-column-count'\r\n    }\r\n\r\n    return (\r\n      <div\r\n        ref={setNodeRef}\r\n        className={cn(\r\n          'asakaa-column',\r\n          isOver && 'ring-2 ring-asakaa-accent-blue',\r\n          isOverWipLimit && 'ring-2 ring-asakaa-accent-red',\r\n          className\r\n        )}\r\n      >\r\n        {/* Header */}\r\n        {renderHeader ? (\r\n          renderHeader(column, cards.length)\r\n        ) : (\r\n          <div className=\"asakaa-column-header group\">\r\n            <h2 className=\"asakaa-column-title\">{column.title}</h2>\r\n            <div className=\"flex items-center gap-2\">\r\n              <span className={cn(getWipBadgeClasses())}>\r\n                {cards.length}\r\n                {column.wipLimit && ` / ${column.wipLimit}`}\r\n              </span>\r\n              {/* WIP limit status indicator */}\r\n              {column.wipLimit && wipStatus.state !== 'none' && (\r\n                <span\r\n                  className=\"text-xs font-medium flex items-center\"\r\n                  title={`${wipStatus.percentage.toFixed(0)}% capacity${\r\n                    column.wipLimitType === 'hard'\r\n                      ? ' (Hard limit - blocks new cards)'\r\n                      : ' (Soft limit - shows warning)'\r\n                  }`}\r\n                >\r\n                  {wipStatus.state === 'exceeded' && (\r\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                      <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"#EF4444\" opacity=\"0.9\" />\r\n                      <path d=\"M5 5L11 11M11 5L5 11\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n                    </svg>\r\n                  )}\r\n                  {wipStatus.state === 'warning' && (\r\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                      <path d=\"M8 1L15 14H1L8 1Z\" fill=\"#F59E0B\" opacity=\"0.9\" />\r\n                      <path d=\"M8 6V9M8 11V11.5\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\r\n                    </svg>\r\n                  )}\r\n                  {wipStatus.state === 'approaching' && (\r\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                      <path d=\"M8 1L10 7H14L10 10L12 16L8 12L4 16L6 10L2 7H6L8 1Z\" fill=\"#FB923C\" opacity=\"0.9\" />\r\n                    </svg>\r\n                  )}\r\n                  {wipStatus.state === 'ok' && (\r\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                      <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"#10B981\" opacity=\"0.9\" />\r\n                      <path d=\"M5 8L7 10L11 6\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n                    </svg>\r\n                  )}\r\n                </span>\r\n              )}\r\n              {onColumnRename && (\r\n                <ColumnMenu\r\n                  columnTitle={column.title}\r\n                  onRename={(newTitle) => onColumnRename(column.id, newTitle)}\r\n                />\r\n              )}\r\n              {onToggleCollapse && (\r\n                <button\r\n                  onClick={onToggleCollapse}\r\n                  className=\"text-asakaa-text-tertiary hover:text-asakaa-text-primary\"\r\n                  aria-label={isCollapsed ? 'Expand column' : 'Collapse column'}\r\n                >\r\n                  {isCollapsed ? '▶' : '▼'}\r\n                </button>\r\n              )}\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n        {/* Cards */}\r\n        {!isCollapsed && (\r\n          <div\r\n            ref={parentRef}\r\n            className=\"asakaa-column-cards\"\r\n            style={{\r\n              maxHeight: useVirtualization ? '600px' : undefined,\r\n            }}\r\n          >\r\n            <SortableContext\r\n              items={cards.map((card) => card.id)}\r\n              strategy={verticalListSortingStrategy}\r\n            >\r\n              {cards.length === 0 ? (\r\n                // Empty state\r\n                renderEmptyState ? (\r\n                  renderEmptyState(column)\r\n                ) : (\r\n                  <div className=\"asakaa-drop-zone asakaa-empty\">\r\n                    <p>Drop cards here</p>\r\n                  </div>\r\n                )\r\n              ) : useVirtualization ? (\r\n                // Virtualized list\r\n                <div\r\n                  style={{\r\n                    height: `${virtualizer.getTotalSize()}px`,\r\n                    position: 'relative',\r\n                  }}\r\n                >\r\n                  {virtualizer.getVirtualItems().map((virtualItem) => {\r\n                    const card = cards[virtualItem.index]\r\n                    if (!card) return null\r\n\r\n                    return (\r\n                      <div\r\n                        key={card.id}\r\n                        style={{\r\n                          position: 'absolute',\r\n                          top: 0,\r\n                          left: 0,\r\n                          width: '100%',\r\n                          transform: `translateY(${virtualItem.start}px)`,\r\n                        }}\r\n                      >\r\n                        <Card\r\n                          card={card}\r\n                          render={renderCard}\r\n                          onClick={onCardClick}\r\n                          onUpdate={onCardUpdate}\r\n                          availableUsers={availableUsers}\r\n                          allCards={allCards}\r\n                        />\r\n                      </div>\r\n                    )\r\n                  })}\r\n                </div>\r\n              ) : (\r\n                // Regular list\r\n                cards.map((card) => (\r\n                  <Card\r\n                    key={card.id}\r\n                    card={card}\r\n                    render={renderCard}\r\n                    onClick={onCardClick}\r\n                    onUpdate={onCardUpdate}\r\n                    availableUsers={availableUsers}\r\n                    allCards={allCards}\r\n                  />\r\n                ))\r\n              )}\r\n            </SortableContext>\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n  // Memoization removed to allow card property updates to trigger re-renders\r\n  // The individual Card components are still memoized for performance\r\n)\r\n\r\nColumn.displayName = 'Column'\r\n","/**\r\n * Editable Column Title Component\r\n * Allows inline editing of column names\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface EditableColumnTitleProps {\r\n  title: string\r\n  onSave: (newTitle: string) => void\r\n  className?: string\r\n}\r\n\r\nexport function EditableColumnTitle({\r\n  title,\r\n  onSave,\r\n  className,\r\n}: EditableColumnTitleProps) {\r\n  const [isEditing, setIsEditing] = useState(false)\r\n  const [editValue, setEditValue] = useState(title)\r\n  const inputRef = useRef<HTMLInputElement>(null)\r\n\r\n  useEffect(() => {\r\n    if (isEditing && inputRef.current) {\r\n      inputRef.current.focus()\r\n      inputRef.current.select()\r\n    }\r\n  }, [isEditing])\r\n\r\n  const handleSave = () => {\r\n    const trimmed = editValue.trim()\r\n    if (trimmed && trimmed !== title) {\r\n      onSave(trimmed)\r\n    } else {\r\n      setEditValue(title)\r\n    }\r\n    setIsEditing(false)\r\n  }\r\n\r\n  const handleKeyDown = (e: React.KeyboardEvent) => {\r\n    if (e.key === 'Enter') {\r\n      handleSave()\r\n    } else if (e.key === 'Escape') {\r\n      setEditValue(title)\r\n      setIsEditing(false)\r\n    }\r\n  }\r\n\r\n  if (isEditing) {\r\n    return (\r\n      <input\r\n        ref={inputRef}\r\n        type=\"text\"\r\n        value={editValue}\r\n        onChange={(e) => setEditValue(e.target.value)}\r\n        onBlur={handleSave}\r\n        onKeyDown={handleKeyDown}\r\n        className={cn(\r\n          'asakaa-column-title bg-transparent border-b-2 border-blue-500',\r\n          'outline-none px-1 -ml-1',\r\n          className\r\n        )}\r\n        maxLength={50}\r\n      />\r\n    )\r\n  }\r\n\r\n  return (\r\n    <h2\r\n      className={cn('asakaa-column-title cursor-pointer', className)}\r\n      onClick={() => setIsEditing(true)}\r\n      title=\"Click to edit\"\r\n    >\r\n      {title}\r\n    </h2>\r\n  )\r\n}\r\n","/**\r\n * useDragState - React hook for drag state management\r\n * @module hooks/useDragState\r\n *\r\n * Replacement for Jotai's useAtom(dragStateAtom)\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react'\r\nimport { dragStore, type DragState } from '@libxai/core'\r\n\r\n/**\r\n * Hook return type\r\n */\r\nexport type UseDragStateReturn = [\r\n  state: DragState,\r\n  setState: (state: DragState) => void\r\n]\r\n\r\n/**\r\n * React hook for drag state\r\n *\r\n * Drop-in replacement for `useAtom(dragStateAtom)`\r\n *\r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n *   const [dragState, setDragState] = useDragState()\r\n *\r\n *   const handleDragStart = () => {\r\n *     setDragState({\r\n *       isDragging: true,\r\n *       draggedCardId: 'card-1',\r\n *       sourceColumnId: 'col-1',\r\n *       targetColumnId: 'col-1',\r\n *     })\r\n *   }\r\n *\r\n *   return <div>{dragState.isDragging ? 'Dragging...' : 'Idle'}</div>\r\n * }\r\n * ```\r\n */\r\nexport function useDragState(): UseDragStateReturn {\r\n  const [state, setState] = useState<DragState>(() => dragStore.getState())\r\n\r\n  useEffect(() => {\r\n    // Subscribe to store changes\r\n    const unsubscribe = dragStore.subscribe((newState) => {\r\n      setState(newState)\r\n    })\r\n\r\n    return unsubscribe\r\n  }, [])\r\n\r\n  const setDragState = useCallback((newState: DragState) => {\r\n    dragStore.setState(newState)\r\n  }, [])\r\n\r\n  return [state, setDragState]\r\n}\r\n","import { useCallback, useMemo } from 'react'\r\nimport {\r\n  DndContext,\r\n  DragOverlay,\r\n  closestCorners,\r\n  PointerSensor,\r\n  KeyboardSensor,\r\n  useSensor,\r\n  useSensors,\r\n  DragStartEvent,\r\n  DragEndEvent,\r\n  DragOverEvent,\r\n} from '@dnd-kit/core'\r\nimport { sortableKeyboardCoordinates } from '@dnd-kit/sortable'\r\nimport type { KanbanBoardProps } from '../../types'\r\nimport { Column } from '../Column'\r\nimport { Card } from '../Card'\r\nimport { cn, calculateDropPosition } from '../../utils'\r\nimport { useDragState } from '../../hooks/useDragState'\r\nimport { KanbanThemeProvider } from './KanbanThemeContext'\r\n\r\nexport function KanbanBoard({\r\n  board,\r\n  callbacks,\r\n  onCardClick,\r\n  renderProps,\r\n  config,\r\n  availableUsers = [],\r\n  className,\r\n  style,\r\n  isLoading,\r\n  error,\r\n  children,\r\n}: KanbanBoardProps & { children?: React.ReactNode }) {\r\n  const [dragState, setDragState] = useDragState()\r\n\r\n  // Determine theme class - default to 'dark'\r\n  const themeName = config?.theme || 'dark'\r\n  const isDark = themeName === 'dark' || themeName === 'neutral'\r\n  const themeClass = isDark ? 'dark' : ''\r\n\r\n  const handleCardUpdate = useCallback(\r\n    (cardId: string, updates: Partial<typeof board.cards[0]>) => {\r\n      callbacks.onCardUpdate?.(cardId, updates)\r\n    },\r\n    [callbacks]\r\n  )\r\n\r\n  const handleColumnRename = useCallback(\r\n    (columnId: string, newTitle: string) => {\r\n      callbacks.onColumnUpdate?.(columnId, { title: newTitle })\r\n    },\r\n    [callbacks]\r\n  )\r\n\r\n  const sensors = useSensors(\r\n    useSensor(PointerSensor, {\r\n      activationConstraint: {\r\n        distance: 8,\r\n      },\r\n    }),\r\n    useSensor(KeyboardSensor, {\r\n      coordinateGetter: sortableKeyboardCoordinates,\r\n    })\r\n  )\r\n\r\n  const cardsByColumn = useMemo(() => {\r\n    const map = new Map<string, typeof board.cards>()\r\n\r\n    board.columns.forEach((column) => {\r\n      const columnCards = column.cardIds\r\n        .map((cardId) => board.cards.find((card) => card.id === cardId))\r\n        .filter((card): card is NonNullable<typeof card> => card !== undefined)\r\n        .sort((a, b) => a.position - b.position)\r\n\r\n      map.set(column.id, columnCards)\r\n    })\r\n\r\n    return map\r\n  }, [board.cards, board.columns])\r\n\r\n  const handleDragStart = useCallback(\r\n    (event: DragStartEvent) => {\r\n      const { active } = event\r\n      const card = board.cards.find((c) => c.id === active.id)\r\n\r\n      if (card) {\r\n        setDragState({\r\n          isDragging: true,\r\n          draggedCardId: card.id,\r\n          sourceColumnId: card.columnId,\r\n          targetColumnId: card.columnId,\r\n        })\r\n      }\r\n    },\r\n    [board.cards, setDragState]\r\n  )\r\n\r\n  const handleDragOver = useCallback(\r\n    (event: DragOverEvent) => {\r\n      const { active, over } = event\r\n      if (!over) return\r\n\r\n      const activeCard = board.cards.find((c) => c.id === active.id)\r\n      if (!activeCard) return\r\n\r\n      let targetColumnId: string | null = null\r\n\r\n      if (over.data.current?.type === 'column') {\r\n        targetColumnId = over.id as string\r\n      } else if (over.data.current?.type === 'card') {\r\n        const overCard = board.cards.find((c) => c.id === over.id)\r\n        targetColumnId = overCard?.columnId || null\r\n      }\r\n\r\n      if (targetColumnId && targetColumnId !== dragState.targetColumnId) {\r\n        setDragState({\r\n          ...dragState,\r\n          targetColumnId,\r\n        })\r\n      }\r\n    },\r\n    [board.cards, dragState, setDragState]\r\n  )\r\n\r\n  const handleDragEnd = useCallback(\r\n    async (event: DragEndEvent) => {\r\n      const { active, over } = event\r\n\r\n      setDragState({\r\n        isDragging: false,\r\n        draggedCardId: null,\r\n        sourceColumnId: null,\r\n        targetColumnId: null,\r\n      })\r\n\r\n      if (!over) return\r\n\r\n      const activeCard = board.cards.find((c) => c.id === active.id)\r\n      if (!activeCard) return\r\n\r\n      let targetColumnId: string\r\n      let targetPosition: number\r\n\r\n      if (over.data.current?.type === 'column') {\r\n        targetColumnId = over.id as string\r\n        const targetColumnCards = cardsByColumn.get(targetColumnId) || []\r\n        targetPosition = calculateDropPosition(targetColumnCards, 0)\r\n      } else {\r\n        const overCard = board.cards.find((c) => c.id === over.id)\r\n        if (!overCard) return\r\n\r\n        targetColumnId = overCard.columnId\r\n        const targetColumnCards = cardsByColumn.get(targetColumnId) || []\r\n        const overIndex = targetColumnCards.findIndex((c) => c.id === over.id)\r\n\r\n        targetPosition = calculateDropPosition(targetColumnCards, overIndex)\r\n      }\r\n\r\n      const targetColumn = board.columns.find((col) => col.id === targetColumnId)\r\n      if (targetColumn && targetColumn.wipLimit && targetColumn.wipLimitType === 'hard') {\r\n        const targetColumnCards = cardsByColumn.get(targetColumnId) || []\r\n\r\n        if (activeCard.columnId !== targetColumnId) {\r\n          if (targetColumnCards.length >= targetColumn.wipLimit) {\r\n            callbacks.onWipLimitExceeded?.(targetColumn, activeCard)\r\n            return\r\n          }\r\n        }\r\n      }\r\n\r\n      if (\r\n        activeCard.columnId !== targetColumnId ||\r\n        activeCard.position !== targetPosition\r\n      ) {\r\n        await callbacks.onCardMove?.(activeCard.id, targetColumnId, targetPosition)\r\n      }\r\n    },\r\n    [board.cards, board.columns, cardsByColumn, callbacks, setDragState]\r\n  )\r\n\r\n  const handleCardClick = useCallback(\r\n    (card: typeof board.cards[0]) => {\r\n      onCardClick?.(card)\r\n    },\r\n    [onCardClick]\r\n  )\r\n\r\n  if (isLoading) {\r\n    return (\r\n      <div className={cn('asakaa-board', themeClass, className)} style={style}>\r\n        <LoadingSkeleton columnCount={3} />\r\n      </div>\r\n    )\r\n  }\r\n\r\n  if (error) {\r\n    return (\r\n      <div className={cn('asakaa-board', themeClass, className)} style={style}>\r\n        <div className=\"flex items-center justify-center w-full h-64\">\r\n          <div className=\"text-center\">\r\n            <p className=\"text-asakaa-accent-red text-lg font-semibold mb-2\">\r\n              Error loading board\r\n            </p>\r\n            <p className=\"text-asakaa-text-secondary text-sm\">\r\n              {typeof error === 'string' ? error : error.message}\r\n            </p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <KanbanThemeProvider themeName={themeName}>\r\n      <DndContext\r\n        sensors={sensors}\r\n        collisionDetection={closestCorners}\r\n        onDragStart={handleDragStart}\r\n        onDragOver={handleDragOver}\r\n        onDragEnd={handleDragEnd}\r\n      >\r\n        <div className={cn('asakaa-board', themeClass, className)} style={style} data-theme={themeName}>\r\n          {board.columns\r\n            .sort((a, b) => a.position - b.position)\r\n            .map((column) => {\r\n              const cards = cardsByColumn.get(column.id) || []\r\n\r\n              return (\r\n                <Column\r\n                  key={column.id}\r\n                  column={column}\r\n                  cards={cards}\r\n                  renderCard={renderProps?.renderCard}\r\n                  renderColumn={renderProps?.renderColumn}\r\n                  renderHeader={renderProps?.renderColumnHeader}\r\n                  renderEmptyState={renderProps?.renderEmptyState}\r\n                  onCardClick={handleCardClick}\r\n                  onCardUpdate={handleCardUpdate}\r\n                  onColumnRename={handleColumnRename}\r\n                  availableUsers={availableUsers}\r\n                  allCards={board.cards}\r\n                  enableVirtualization={config?.enableVirtualization}\r\n                  cardHeight={config?.cardHeight}\r\n                />\r\n              )\r\n            })}\r\n          {children}\r\n        </div>\r\n\r\n        <DragOverlay>\r\n          {dragState.draggedCardId ? (\r\n            <Card\r\n              card={\r\n                board.cards.find((c) => c.id === dragState.draggedCardId)!\r\n              }\r\n              render={renderProps?.renderCardOverlay || renderProps?.renderCard}\r\n              disableDrag\r\n              className=\"opacity-90 rotate-3 shadow-2xl\"\r\n            />\r\n          ) : null}\r\n        </DragOverlay>\r\n      </DndContext>\r\n    </KanbanThemeProvider>\r\n  )\r\n}\r\n\r\nfunction LoadingSkeleton({ columnCount }: { columnCount: number }) {\r\n  return (\r\n    <>\r\n      {Array.from({ length: columnCount }).map((_, i) => (\r\n        <div key={i} className=\"asakaa-column\">\r\n          <div className=\"asakaa-skeleton h-8 mb-3\" />\r\n          <div className=\"flex flex-col gap-2\">\r\n            <div className=\"asakaa-skeleton h-24\" />\r\n            <div className=\"asakaa-skeleton h-32\" />\r\n            <div className=\"asakaa-skeleton h-28\" />\r\n          </div>\r\n        </div>\r\n      ))}\r\n    </>\r\n  )\r\n}\r\n","/**\r\n * CoverImageManager - Elite UX for cover images\r\n *\r\n * Features:\r\n * - Drag & drop (primary action)\r\n * - Paste from clipboard\r\n * - File upload browser\r\n * - URL input\r\n * - Unsplash integration\r\n * - Recent uploads gallery\r\n * - Reposition tool\r\n *\r\n * Inspired by: Notion + Linear\r\n */\r\n\r\nimport { useState, useCallback, useEffect, useRef } from 'react'\r\nimport { useDropzone } from 'react-dropzone'\r\nimport { motion, AnimatePresence } from 'framer-motion'\r\nimport { cn } from '../../utils'\r\nimport './cover-image-manager.css'\r\n\r\nexport interface RecentUpload {\r\n  url: string\r\n  thumbnail: string\r\n  uploadedAt: Date\r\n  usedCount: number\r\n}\r\n\r\nexport interface UnsplashPhoto {\r\n  id: string\r\n  urls: {\r\n    regular: string\r\n    small: string\r\n    thumb: string\r\n  }\r\n  user: {\r\n    name: string\r\n    username: string\r\n  }\r\n  description?: string\r\n}\r\n\r\nexport interface CoverImageManagerProps {\r\n  /** Current cover image URL */\r\n  coverImage?: string\r\n\r\n  /** Upload callback - returns URL after upload */\r\n  onUpload?: (file: File) => Promise<string>\r\n\r\n  /** Change callback */\r\n  onChange: (url: string) => void\r\n\r\n  /** Remove callback */\r\n  onRemove: () => void\r\n\r\n  /** Unsplash API access key (optional) */\r\n  unsplashAccessKey?: string\r\n\r\n  /** Max file size in MB */\r\n  maxFileSize?: number\r\n\r\n  /** Show recent uploads */\r\n  showRecentUploads?: boolean\r\n\r\n  /** Theme for styling (dark, light, neutral). Defaults to 'dark' */\r\n  theme?: 'dark' | 'light' | 'neutral'\r\n}\r\n\r\ntype TabType = 'upload' | 'link' | 'unsplash'\r\n\r\nconst MAX_FILE_SIZE = 5 * 1024 * 1024 // 5MB\r\nconst RECENT_UPLOADS_KEY = 'asakaa-recent-uploads'\r\nconst MAX_RECENT_UPLOADS = 10\r\n\r\nexport function CoverImageManager({\r\n  coverImage,\r\n  onUpload,\r\n  onChange,\r\n  onRemove,\r\n  unsplashAccessKey,\r\n  maxFileSize = MAX_FILE_SIZE,\r\n  showRecentUploads = true,\r\n  theme = 'dark',\r\n}: CoverImageManagerProps) {\r\n  const [activeTab, setActiveTab] = useState<TabType>('upload')\r\n  const [isUploading, setIsUploading] = useState(false)\r\n  const [uploadProgress, setUploadProgress] = useState(0)\r\n  const [urlInput, setUrlInput] = useState('')\r\n  const [unsplashQuery, setUnsplashQuery] = useState('')\r\n  const [unsplashResults, setUnsplashResults] = useState<UnsplashPhoto[]>([])\r\n  const [isSearching, setIsSearching] = useState(false)\r\n  const [recentUploads, setRecentUploads] = useState<RecentUpload[]>([])\r\n  const [repositionMode, setRepositionMode] = useState(false)\r\n  const [repositionOffset, setRepositionOffset] = useState(0)\r\n  const [error, setError] = useState<string | null>(null)\r\n\r\n  const fileInputRef = useRef<HTMLInputElement>(null)\r\n\r\n  // Load recent uploads from localStorage\r\n  useEffect(() => {\r\n    try {\r\n      const saved = localStorage.getItem(RECENT_UPLOADS_KEY)\r\n      if (saved) {\r\n        const uploads = JSON.parse(saved) as RecentUpload[]\r\n        setRecentUploads(uploads.slice(0, MAX_RECENT_UPLOADS))\r\n      }\r\n    } catch (err) {\r\n      console.error('Failed to load recent uploads:', err)\r\n    }\r\n  }, [])\r\n\r\n  // Save recent upload\r\n  const saveRecentUpload = useCallback((url: string, thumbnail?: string) => {\r\n    const newUpload: RecentUpload = {\r\n      url,\r\n      thumbnail: thumbnail || url,\r\n      uploadedAt: new Date(),\r\n      usedCount: 1,\r\n    }\r\n\r\n    setRecentUploads((prev) => {\r\n      // Check if already exists\r\n      const existing = prev.find((u) => u.url === url)\r\n      if (existing) {\r\n        // Increment usage count\r\n        const updated = prev.map((u) =>\r\n          u.url === url ? { ...u, usedCount: u.usedCount + 1 } : u\r\n        )\r\n        // Sort by usage count, then date\r\n        const sorted = updated.sort((a, b) => {\r\n          if (a.usedCount !== b.usedCount) {\r\n            return b.usedCount - a.usedCount\r\n          }\r\n          return new Date(b.uploadedAt).getTime() - new Date(a.uploadedAt).getTime()\r\n        })\r\n        localStorage.setItem(RECENT_UPLOADS_KEY, JSON.stringify(sorted))\r\n        return sorted\r\n      }\r\n\r\n      // Add new upload\r\n      const updated = [newUpload, ...prev].slice(0, MAX_RECENT_UPLOADS)\r\n      localStorage.setItem(RECENT_UPLOADS_KEY, JSON.stringify(updated))\r\n      return updated\r\n    })\r\n  }, [])\r\n\r\n  // Handle file upload\r\n  const handleFileUpload = useCallback(\r\n    async (file: File) => {\r\n      setError(null)\r\n\r\n      // Validate file size\r\n      if (file.size > maxFileSize) {\r\n        setError(`File too large. Max size: ${maxFileSize / (1024 * 1024)}MB`)\r\n        return\r\n      }\r\n\r\n      // Validate file type\r\n      if (!file.type.startsWith('image/')) {\r\n        setError('Please upload an image file (JPG, PNG, GIF, WebP)')\r\n        return\r\n      }\r\n\r\n      setIsUploading(true)\r\n      setUploadProgress(0)\r\n\r\n      try {\r\n        let url: string\r\n\r\n        if (onUpload) {\r\n          // Custom upload handler\r\n          url = await onUpload(file)\r\n        } else {\r\n          // Default: convert to base64 data URL\r\n          url = await fileToDataURL(file)\r\n        }\r\n\r\n        // Simulate progress for UX\r\n        for (let i = 0; i <= 100; i += 10) {\r\n          setUploadProgress(i)\r\n          await new Promise((resolve) => setTimeout(resolve, 50))\r\n        }\r\n\r\n        onChange(url)\r\n        saveRecentUpload(url)\r\n        setIsUploading(false)\r\n        setUploadProgress(0)\r\n      } catch (err) {\r\n        console.error('Upload failed:', err)\r\n        setError('Upload failed. Please try again.')\r\n        setIsUploading(false)\r\n        setUploadProgress(0)\r\n      }\r\n    },\r\n    [maxFileSize, onUpload, onChange, saveRecentUpload]\r\n  )\r\n\r\n  // Dropzone config\r\n  const { getRootProps, getInputProps, isDragActive, isDragReject } = useDropzone({\r\n    onDrop: (acceptedFiles: File[]) => {\r\n      if (acceptedFiles.length > 0 && acceptedFiles[0]) {\r\n        handleFileUpload(acceptedFiles[0])\r\n      }\r\n    },\r\n    accept: {\r\n      'image/*': ['.png', '.jpg', '.jpeg', '.gif', '.webp'],\r\n    },\r\n    maxSize: maxFileSize,\r\n    multiple: false,\r\n    noClick: true, // We handle click separately\r\n  })\r\n\r\n  // Paste detection\r\n  useEffect(() => {\r\n    const handlePaste = async (e: ClipboardEvent) => {\r\n      const items = e.clipboardData?.items\r\n      if (!items) return\r\n\r\n      for (const item of items) {\r\n        if (item.type.startsWith('image/')) {\r\n          const file = item.getAsFile()\r\n          if (file) {\r\n            await handleFileUpload(file)\r\n            break\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    window.addEventListener('paste', handlePaste)\r\n    return () => window.removeEventListener('paste', handlePaste)\r\n  }, [handleFileUpload])\r\n\r\n  // Handle URL input\r\n  const handleUrlSubmit = useCallback(() => {\r\n    if (!urlInput.trim()) return\r\n\r\n    // Basic URL validation\r\n    try {\r\n      new URL(urlInput)\r\n      onChange(urlInput)\r\n      saveRecentUpload(urlInput)\r\n      setUrlInput('')\r\n      setError(null)\r\n    } catch {\r\n      setError('Please enter a valid URL')\r\n    }\r\n  }, [urlInput, onChange, saveRecentUpload])\r\n\r\n  // Search Unsplash\r\n  const searchUnsplash = useCallback(\r\n    async (query: string) => {\r\n      if (!unsplashAccessKey) {\r\n        setError('Unsplash integration not configured')\r\n        return\r\n      }\r\n\r\n      if (!query.trim()) return\r\n\r\n      setIsSearching(true)\r\n      setError(null)\r\n\r\n      try {\r\n        const response = await fetch(\r\n          `https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&per_page=12`,\r\n          {\r\n            headers: {\r\n              Authorization: `Client-ID ${unsplashAccessKey}`,\r\n            },\r\n          }\r\n        )\r\n\r\n        if (!response.ok) {\r\n          throw new Error('Unsplash search failed')\r\n        }\r\n\r\n        const data = await response.json()\r\n        setUnsplashResults(data.results || [])\r\n      } catch (err) {\r\n        console.error('Unsplash search failed:', err)\r\n        setError('Failed to search Unsplash. Please try again.')\r\n      } finally {\r\n        setIsSearching(false)\r\n      }\r\n    },\r\n    [unsplashAccessKey]\r\n  )\r\n\r\n  // Select Unsplash photo\r\n  const handleUnsplashSelect = useCallback(\r\n    (photo: UnsplashPhoto) => {\r\n      onChange(photo.urls.regular)\r\n      saveRecentUpload(photo.urls.regular, photo.urls.thumb)\r\n    },\r\n    [onChange, saveRecentUpload]\r\n  )\r\n\r\n  if (coverImage && !repositionMode) {\r\n    // Preview mode\r\n    return (\r\n      <div className=\"cover-image-preview\" data-theme={theme}>\r\n        <div className=\"cover-image-preview-container\">\r\n          <img\r\n            src={coverImage}\r\n            alt=\"Cover\"\r\n            style={{ transform: `translateY(${repositionOffset}%)` }}\r\n            onError={(e) => {\r\n              e.currentTarget.src = 'https://via.placeholder.com/600x200?text=Image+Not+Found'\r\n            }}\r\n          />\r\n        </div>\r\n\r\n        <div className=\"cover-image-actions\">\r\n          <button\r\n            className=\"cover-image-button\"\r\n            onClick={() => setRepositionMode(true)}\r\n          >\r\n            <RepositionIcon />\r\n            Reposition\r\n          </button>\r\n          <button\r\n            className=\"cover-image-button\"\r\n            onClick={() => {\r\n              setRepositionMode(false)\r\n              setRepositionOffset(0)\r\n              // Clear cover and show uploader\r\n              onRemove()\r\n            }}\r\n          >\r\n            <ChangeIcon />\r\n            Change\r\n          </button>\r\n          <button\r\n            className=\"cover-image-button cover-image-button-danger\"\r\n            onClick={onRemove}\r\n          >\r\n            <RemoveIcon />\r\n            Remove\r\n          </button>\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className=\"cover-image-manager\" data-theme={theme}>\r\n      {/* Tabs */}\r\n      <div className=\"cover-image-tabs\" role=\"tablist\">\r\n        <button\r\n          role=\"tab\"\r\n          aria-selected={activeTab === 'upload'}\r\n          className={cn('cover-image-tab', {\r\n            'cover-image-tab-active': activeTab === 'upload',\r\n          })}\r\n          onClick={() => setActiveTab('upload')}\r\n        >\r\n          <UploadIcon />\r\n          Upload\r\n        </button>\r\n        <button\r\n          role=\"tab\"\r\n          aria-selected={activeTab === 'link'}\r\n          className={cn('cover-image-tab', {\r\n            'cover-image-tab-active': activeTab === 'link',\r\n          })}\r\n          onClick={() => setActiveTab('link')}\r\n        >\r\n          <LinkIcon />\r\n          Link\r\n        </button>\r\n        {unsplashAccessKey && (\r\n          <button\r\n            role=\"tab\"\r\n            aria-selected={activeTab === 'unsplash'}\r\n            className={cn('cover-image-tab', {\r\n              'cover-image-tab-active': activeTab === 'unsplash',\r\n            })}\r\n            onClick={() => setActiveTab('unsplash')}\r\n          >\r\n            <UnsplashIcon />\r\n            Unsplash\r\n          </button>\r\n        )}\r\n      </div>\r\n\r\n      {/* Error message */}\r\n      <AnimatePresence>\r\n        {error && (\r\n          <motion.div\r\n            className=\"cover-image-error\"\r\n            initial={{ opacity: 0, y: -10 }}\r\n            animate={{ opacity: 1, y: 0 }}\r\n            exit={{ opacity: 0, y: -10 }}\r\n          >\r\n            {error}\r\n          </motion.div>\r\n        )}\r\n      </AnimatePresence>\r\n\r\n      {/* Tab Panels */}\r\n      <div className=\"cover-image-panels\">\r\n        {/* UPLOAD PANEL */}\r\n        {activeTab === 'upload' && (\r\n          <div className=\"cover-image-panel\">\r\n            {/* Dropzone */}\r\n            <div\r\n              {...getRootProps()}\r\n              className={cn('cover-image-dropzone', {\r\n                'cover-image-dropzone-active': isDragActive,\r\n                'cover-image-dropzone-reject': isDragReject,\r\n              })}\r\n            >\r\n              <input {...getInputProps()} ref={fileInputRef} />\r\n\r\n              {isUploading ? (\r\n                <div className=\"cover-image-uploading\">\r\n                  <div className=\"cover-image-progress\">\r\n                    <div\r\n                      className=\"cover-image-progress-bar\"\r\n                      style={{ width: `${uploadProgress}%` }}\r\n                    />\r\n                  </div>\r\n                  <p>Uploading... {uploadProgress}%</p>\r\n                </div>\r\n              ) : (\r\n                <>\r\n                  <UploadIcon size={48} />\r\n                  <h3>Drop image here</h3>\r\n                  <p className=\"cover-image-hint\">\r\n                    or paste from clipboard (Cmd/Ctrl+V)\r\n                  </p>\r\n                  <button\r\n                    className=\"cover-image-button-primary\"\r\n                    onClick={() => fileInputRef.current?.click()}\r\n                  >\r\n                    Browse files\r\n                  </button>\r\n                  <p className=\"cover-image-meta\">\r\n                    Max {maxFileSize / (1024 * 1024)}MB · JPG, PNG, GIF, WebP\r\n                  </p>\r\n                </>\r\n              )}\r\n            </div>\r\n\r\n            {/* Recent uploads */}\r\n            {showRecentUploads && recentUploads.length > 0 && (\r\n              <div className=\"cover-image-recent\">\r\n                <h4>Recent uploads</h4>\r\n                <div className=\"cover-image-recent-grid\">\r\n                  {recentUploads.slice(0, 4).map((upload, index) => (\r\n                    <button\r\n                      key={index}\r\n                      className=\"cover-image-recent-item\"\r\n                      onClick={() => onChange(upload.url)}\r\n                      style={{ backgroundImage: `url(${upload.thumbnail})` }}\r\n                      title=\"Click to use this image\"\r\n                    />\r\n                  ))}\r\n                </div>\r\n              </div>\r\n            )}\r\n          </div>\r\n        )}\r\n\r\n        {/* LINK PANEL */}\r\n        {activeTab === 'link' && (\r\n          <div className=\"cover-image-panel\">\r\n            <div className=\"cover-image-url-input\">\r\n              <input\r\n                type=\"url\"\r\n                placeholder=\"Paste image URL...\"\r\n                value={urlInput}\r\n                onChange={(e) => setUrlInput(e.target.value)}\r\n                onKeyDown={(e) => {\r\n                  if (e.key === 'Enter') {\r\n                    handleUrlSubmit()\r\n                  }\r\n                }}\r\n              />\r\n              <button\r\n                className=\"cover-image-button-primary\"\r\n                onClick={handleUrlSubmit}\r\n                disabled={!urlInput.trim()}\r\n              >\r\n                Add image\r\n              </button>\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n        {/* UNSPLASH PANEL */}\r\n        {activeTab === 'unsplash' && unsplashAccessKey && (\r\n          <div className=\"cover-image-panel\">\r\n            <div className=\"cover-image-search\">\r\n              <input\r\n                type=\"search\"\r\n                placeholder=\"Search Unsplash...\"\r\n                value={unsplashQuery}\r\n                onChange={(e) => setUnsplashQuery(e.target.value)}\r\n                onKeyDown={(e) => {\r\n                  if (e.key === 'Enter') {\r\n                    searchUnsplash(unsplashQuery)\r\n                  }\r\n                }}\r\n              />\r\n              <button\r\n                className=\"cover-image-button-primary\"\r\n                onClick={() => searchUnsplash(unsplashQuery)}\r\n                disabled={isSearching || !unsplashQuery.trim()}\r\n              >\r\n                {isSearching ? 'Searching...' : 'Search'}\r\n              </button>\r\n            </div>\r\n\r\n            {/* Unsplash results */}\r\n            {unsplashResults.length > 0 && (\r\n              <div className=\"cover-image-unsplash-grid\">\r\n                {unsplashResults.map((photo) => (\r\n                  <button\r\n                    key={photo.id}\r\n                    className=\"cover-image-unsplash-item\"\r\n                    onClick={() => handleUnsplashSelect(photo)}\r\n                    style={{ backgroundImage: `url(${photo.urls.small})` }}\r\n                    title={`Photo by ${photo.user.name}`}\r\n                  />\r\n                ))}\r\n              </div>\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\n// Helper: Convert file to base64 data URL\r\nfunction fileToDataURL(file: File): Promise<string> {\r\n  return new Promise((resolve, reject) => {\r\n    const reader = new FileReader()\r\n    reader.onload = () => resolve(reader.result as string)\r\n    reader.onerror = reject\r\n    reader.readAsDataURL(file)\r\n  })\r\n}\r\n\r\n// Icons\r\nfunction UploadIcon({ size = 20 }: { size?: number }) {\r\n  return (\r\n    <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n      <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\r\n      <polyline points=\"17 8 12 3 7 8\" />\r\n      <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\r\n    </svg>\r\n  )\r\n}\r\n\r\nfunction LinkIcon() {\r\n  return (\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n      <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\r\n      <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\r\n    </svg>\r\n  )\r\n}\r\n\r\nfunction UnsplashIcon() {\r\n  return (\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n      <path d=\"M7.5 6.5H16.5V0H7.5V6.5ZM16.5 9H24V24H0V9H7.5V16.5H16.5V9Z\" />\r\n    </svg>\r\n  )\r\n}\r\n\r\nfunction RepositionIcon() {\r\n  return (\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n      <polyline points=\"7 13 12 8 17 13\" />\r\n      <polyline points=\"7 17 12 12 17 17\" />\r\n    </svg>\r\n  )\r\n}\r\n\r\nfunction ChangeIcon() {\r\n  return (\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n      <path d=\"M21.5 2v6h-6M2.5 22v-6h6M2 11.5a10 10 0 0 1 18.8-4.3M22 12.5a10 10 0 0 1-18.8 4.2\" />\r\n    </svg>\r\n  )\r\n}\r\n\r\nfunction RemoveIcon() {\r\n  return (\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n      <polyline points=\"3 6 5 6 21 6\" />\r\n      <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n    </svg>\r\n  )\r\n}\r\n","/**\r\n * Error Boundary Component\r\n * Catches errors in child components and provides fallback UI\r\n * @module components/ErrorBoundary\r\n */\r\n\r\nimport React, { Component, ErrorInfo, ReactNode } from 'react'\r\n\r\nexport interface ErrorBoundaryProps {\r\n  /** Child components to wrap */\r\n  children: ReactNode\r\n  /** Custom fallback UI (receives error and reset callback) */\r\n  fallback?: (error: Error, reset: () => void) => ReactNode\r\n  /** Callback when error is caught */\r\n  onError?: (error: Error, errorInfo: ErrorInfo) => void\r\n  /** Component identifier for error tracking */\r\n  componentName?: string\r\n}\r\n\r\ninterface ErrorBoundaryState {\r\n  hasError: boolean\r\n  error: Error | null\r\n  errorInfo: ErrorInfo | null\r\n}\r\n\r\n/**\r\n * Error Boundary for catching React errors\r\n *\r\n * @example\r\n * ```tsx\r\n * <ErrorBoundary\r\n *   onError={(error) => console.error(error)}\r\n *   componentName=\"KanbanBoard\"\r\n * >\r\n *   <KanbanBoard {...props} />\r\n * </ErrorBoundary>\r\n * ```\r\n */\r\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\r\n  constructor(props: ErrorBoundaryProps) {\r\n    super(props)\r\n    this.state = {\r\n      hasError: false,\r\n      error: null,\r\n      errorInfo: null,\r\n    }\r\n  }\r\n\r\n  static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\r\n    return {\r\n      hasError: true,\r\n      error,\r\n    }\r\n  }\r\n\r\n  componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\r\n    const { onError, componentName } = this.props\r\n\r\n    // Log error to console in development\r\n    if (process.env.NODE_ENV === 'development') {\r\n      console.error(`Error in ${componentName || 'Component'}:`, error)\r\n      console.error('Error Info:', errorInfo)\r\n    }\r\n\r\n    // Update state with error info\r\n    this.setState({\r\n      errorInfo,\r\n    })\r\n\r\n    // Call custom error handler\r\n    if (onError) {\r\n      try {\r\n        onError(error, errorInfo)\r\n      } catch (handlerError) {\r\n        console.error('Error in error handler:', handlerError)\r\n      }\r\n    }\r\n  }\r\n\r\n  resetError = (): void => {\r\n    this.setState({\r\n      hasError: false,\r\n      error: null,\r\n      errorInfo: null,\r\n    })\r\n  }\r\n\r\n  render(): ReactNode {\r\n    const { hasError, error } = this.state\r\n    const { children, fallback, componentName } = this.props\r\n\r\n    if (hasError && error) {\r\n      // Use custom fallback if provided\r\n      if (fallback) {\r\n        return fallback(error, this.resetError)\r\n      }\r\n\r\n      // Default fallback UI\r\n      return (\r\n        <div\r\n          className=\"p-6 rounded-lg border\"\r\n          style={{\r\n            background: 'linear-gradient(135deg, #2d1b1b 0%, #1a1a1a 100%)',\r\n            borderColor: 'rgba(239, 68, 68, 0.3)',\r\n          }}\r\n        >\r\n          <div className=\"flex items-start gap-3\">\r\n            {/* Error icon */}\r\n            <svg\r\n              width=\"24\"\r\n              height=\"24\"\r\n              viewBox=\"0 0 24 24\"\r\n              fill=\"none\"\r\n              xmlns=\"http://www.w3.org/2000/svg\"\r\n              className=\"flex-shrink-0\"\r\n            >\r\n              <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#EF4444\" strokeWidth=\"2\" />\r\n              <path d=\"M12 8V12\" stroke=\"#EF4444\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n              <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"#EF4444\" />\r\n            </svg>\r\n\r\n            <div className=\"flex-1\">\r\n              <h3 className=\"text-lg font-semibold text-red-400 mb-1\">\r\n                {componentName ? `Error in ${componentName}` : 'Something went wrong'}\r\n              </h3>\r\n              <p className=\"text-sm text-white/70 mb-3\">\r\n                {error.message || 'An unexpected error occurred'}\r\n              </p>\r\n\r\n              {process.env.NODE_ENV === 'development' && (\r\n                <details className=\"mb-3\">\r\n                  <summary className=\"text-xs text-white/50 cursor-pointer hover:text-white/70 mb-2\">\r\n                    Error Details (Development Only)\r\n                  </summary>\r\n                  <pre className=\"text-xs text-white/60 bg-black/30 p-3 rounded overflow-auto max-h-48\">\r\n                    {error.stack}\r\n                  </pre>\r\n                </details>\r\n              )}\r\n\r\n              <button\r\n                onClick={this.resetError}\r\n                className=\"px-4 py-2 rounded-lg text-sm font-medium transition-all hover:bg-red-600/20 border border-red-500/30\"\r\n                style={{ color: '#EF4444' }}\r\n              >\r\n                Try Again\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return children\r\n  }\r\n}\r\n\r\n/**\r\n * Hook-based error boundary wrapper\r\n * Use this for functional components\r\n */\r\nexport function withErrorBoundary<P extends object>(\r\n  Component: React.ComponentType<P>,\r\n  errorBoundaryProps?: Omit<ErrorBoundaryProps, 'children'>\r\n) {\r\n  const WrappedComponent = (props: P) => (\r\n    <ErrorBoundary {...errorBoundaryProps}>\r\n      <Component {...props} />\r\n    </ErrorBoundary>\r\n  )\r\n\r\n  WrappedComponent.displayName = `withErrorBoundary(${Component.displayName || Component.name || 'Component'})`\r\n\r\n  return WrappedComponent\r\n}\r\n","/**\r\n * CommandPalette - Premium command palette (Cmd+K / Ctrl+K)\r\n * Quick access to all board actions, search, navigation, and AI features\r\n */\r\n\r\nimport { useEffect, useState, useCallback } from 'react'\r\nimport { Command } from 'cmdk'\r\nimport { Portal } from '../Portal'\r\nimport type { Board, Priority, User } from '../../types'\r\nimport './command-palette.css'\r\n\r\nexport interface CommandPaletteProps {\r\n  /** Current board state */\r\n  board: Board\r\n\r\n  /** Available users for assignment */\r\n  availableUsers?: User[]\r\n\r\n  /** Callback to create a new card */\r\n  onCreateCard?: (columnId: string, title: string) => void\r\n\r\n  /** Callback to navigate to a card */\r\n  onNavigateToCard?: (cardId: string) => void\r\n\r\n  /** Callback to search and filter cards */\r\n  onSearch?: (query: string) => void\r\n\r\n  /** Callback to change card priority */\r\n  onChangePriority?: (cardId: string, priority: Priority) => void\r\n\r\n  /** Callback to assign user to card */\r\n  onAssignUser?: (cardId: string, userId: string) => void\r\n\r\n  /** AI Callbacks */\r\n  onGeneratePlan?: () => void\r\n  onPredictRisks?: () => void\r\n  onOpenAIUsage?: () => void\r\n\r\n  /** Custom keyboard shortcut (default: Cmd+K / Ctrl+K) */\r\n  shortcut?: string\r\n\r\n  /** Custom CSS class */\r\n  className?: string\r\n}\r\n\r\ntype CommandPage = 'home' | 'create-card' | 'navigate' | 'priority' | 'assign' | 'ai'\r\n\r\nexport function CommandPalette({\r\n  board,\r\n  onCreateCard,\r\n  onNavigateToCard,\r\n  onSearch,\r\n  onChangePriority,\r\n  onAssignUser,\r\n  onGeneratePlan,\r\n  onPredictRisks,\r\n  onOpenAIUsage,\r\n  shortcut = 'k',\r\n  className = '',\r\n}: CommandPaletteProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [search, setSearch] = useState('')\r\n  const [page, setPage] = useState<CommandPage>('home')\r\n  const [selectedColumn, setSelectedColumn] = useState<string>('')\r\n  const [selectedCard, setSelectedCard] = useState<string>('')\r\n\r\n  // Keyboard shortcut handler\r\n  useEffect(() => {\r\n    const handleKeyDown = (e: KeyboardEvent) => {\r\n      if ((e.metaKey || e.ctrlKey) && e.key === shortcut) {\r\n        e.preventDefault()\r\n        setIsOpen((open) => !open)\r\n      }\r\n\r\n      // Escape to close\r\n      if (e.key === 'Escape') {\r\n        setIsOpen(false)\r\n        setPage('home')\r\n        setSearch('')\r\n      }\r\n    }\r\n\r\n    document.addEventListener('keydown', handleKeyDown)\r\n    return () => document.removeEventListener('keydown', handleKeyDown)\r\n  }, [shortcut])\r\n\r\n  // Reset state when closed\r\n  useEffect(() => {\r\n    if (!isOpen) {\r\n      setPage('home')\r\n      setSearch('')\r\n      setSelectedColumn('')\r\n      setSelectedCard('')\r\n    }\r\n  }, [isOpen])\r\n\r\n  const handleClose = useCallback(() => {\r\n    setIsOpen(false)\r\n  }, [])\r\n\r\n  const handleSelectCommand = useCallback(\r\n    (value: string) => {\r\n      // Parse command value\r\n      const [action, param] = value.split(':')\r\n\r\n      switch (action) {\r\n        case 'create-card':\r\n          setPage('create-card')\r\n          break\r\n\r\n        case 'create-card-in':\r\n          setSelectedColumn(param || '')\r\n          // Focus on input to type card title\r\n          break\r\n\r\n        case 'navigate':\r\n          if (param) {\r\n            onNavigateToCard?.(param)\r\n            handleClose()\r\n          } else {\r\n            setPage('navigate')\r\n          }\r\n          break\r\n\r\n        case 'search':\r\n          onSearch?.(search)\r\n          handleClose()\r\n          break\r\n\r\n        case 'priority':\r\n          setPage('priority')\r\n          break\r\n\r\n        case 'set-priority':\r\n          if (selectedCard && param) {\r\n            onChangePriority?.(selectedCard, param as Priority)\r\n            handleClose()\r\n          }\r\n          break\r\n\r\n        case 'assign':\r\n          setPage('assign')\r\n          break\r\n\r\n        case 'assign-user':\r\n          if (selectedCard && param) {\r\n            onAssignUser?.(selectedCard, param)\r\n            handleClose()\r\n          }\r\n          break\r\n\r\n        case 'ai':\r\n          setPage('ai')\r\n          break\r\n\r\n        case 'ai-generate-plan':\r\n          onGeneratePlan?.()\r\n          handleClose()\r\n          break\r\n\r\n        case 'ai-predict-risks':\r\n          onPredictRisks?.()\r\n          handleClose()\r\n          break\r\n\r\n        case 'ai-usage':\r\n          onOpenAIUsage?.()\r\n          handleClose()\r\n          break\r\n\r\n        case 'back':\r\n          setPage('home')\r\n          break\r\n\r\n        default:\r\n          break\r\n      }\r\n    },\r\n    [\r\n      search,\r\n      selectedCard,\r\n      onCreateCard,\r\n      onNavigateToCard,\r\n      onSearch,\r\n      onChangePriority,\r\n      onAssignUser,\r\n      onGeneratePlan,\r\n      onPredictRisks,\r\n      onOpenAIUsage,\r\n      handleClose,\r\n    ]\r\n  )\r\n\r\n  const handleCreateCard = useCallback(() => {\r\n    if (selectedColumn && search.trim()) {\r\n      onCreateCard?.(selectedColumn, search.trim())\r\n      handleClose()\r\n    }\r\n  }, [selectedColumn, search, onCreateCard, handleClose])\r\n\r\n  if (!isOpen) return null\r\n\r\n  return (\r\n    <Portal>\r\n      <div className=\"command-palette-overlay\" onClick={handleClose}>\r\n        <div\r\n          className={`command-palette ${className}`}\r\n          onClick={(e) => e.stopPropagation()}\r\n        >\r\n          <Command value={search} onValueChange={setSearch} label=\"Command Menu\">\r\n            <div className=\"command-palette-header\">\r\n              <svg\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n                strokeLinecap=\"round\"\r\n                strokeLinejoin=\"round\"\r\n              >\r\n                <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n                <path d=\"m21 21-4.35-4.35\" />\r\n              </svg>\r\n              <Command.Input\r\n                placeholder={\r\n                  page === 'create-card' && selectedColumn\r\n                    ? 'Type card title and press Enter...'\r\n                    : page === 'create-card'\r\n                    ? 'Select a column first...'\r\n                    : 'Type a command or search...'\r\n                }\r\n                className=\"command-palette-input\"\r\n                onKeyDown={(e) => {\r\n                  if (e.key === 'Enter' && page === 'create-card' && selectedColumn) {\r\n                    handleCreateCard()\r\n                  }\r\n                }}\r\n              />\r\n              <div className=\"command-palette-shortcut\">\r\n                <kbd>{navigator.platform.includes('Mac') ? '⌘' : 'Ctrl'}</kbd>\r\n                <kbd>K</kbd>\r\n              </div>\r\n            </div>\r\n\r\n            <Command.List className=\"command-palette-list\">\r\n              <Command.Empty className=\"command-palette-empty\">\r\n                No results found.\r\n              </Command.Empty>\r\n\r\n              {/* HOME PAGE */}\r\n              {page === 'home' && (\r\n                <>\r\n                  <Command.Group heading=\"Actions\" className=\"command-palette-group\">\r\n                    <Command.Item\r\n                      value=\"create-card\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\r\n                        <path d=\"M12 8v8m-4-4h8\" />\r\n                      </svg>\r\n                      <span>Create Card</span>\r\n                      <div className=\"command-palette-item-shortcut\">C</div>\r\n                    </Command.Item>\r\n\r\n                    <Command.Item\r\n                      value=\"navigate\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                        <polyline points=\"12 16 16 12 12 8\" />\r\n                        <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\" />\r\n                      </svg>\r\n                      <span>Navigate to Card</span>\r\n                      <div className=\"command-palette-item-shortcut\">G</div>\r\n                    </Command.Item>\r\n\r\n                    <Command.Item\r\n                      value=\"search\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n                        <path d=\"m21 21-4.35-4.35\" />\r\n                      </svg>\r\n                      <span>Search Cards</span>\r\n                      <div className=\"command-palette-item-shortcut\">/</div>\r\n                    </Command.Item>\r\n                  </Command.Group>\r\n\r\n                  <Command.Group heading=\"AI Features\" className=\"command-palette-group\">\r\n                    <Command.Item\r\n                      value=\"ai\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item command-palette-item-ai\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" />\r\n                        <path d=\"M2 17L12 22L22 17\" />\r\n                        <path d=\"M2 12L12 17L22 12\" />\r\n                      </svg>\r\n                      <span>AI Commands</span>\r\n                      <div className=\"command-palette-item-badge\">AI</div>\r\n                    </Command.Item>\r\n                  </Command.Group>\r\n\r\n                  <Command.Group heading=\"Cards\" className=\"command-palette-group\">\r\n                    {board.cards.slice(0, 5).map((card) => (\r\n                      <Command.Item\r\n                        key={card.id}\r\n                        value={`navigate:${card.id}`}\r\n                        onSelect={handleSelectCommand}\r\n                        className=\"command-palette-item\"\r\n                      >\r\n                        <div\r\n                          className=\"command-palette-item-dot\"\r\n                          style={{\r\n                            background:\r\n                              card.priority === 'URGENT'\r\n                                ? '#EF4444'\r\n                                : card.priority === 'HIGH'\r\n                                ? '#F59E0B'\r\n                                : card.priority === 'MEDIUM'\r\n                                ? '#3B82F6'\r\n                                : '#6B7280',\r\n                          }}\r\n                        />\r\n                        <span>{card.title}</span>\r\n                        {card.labels && card.labels.length > 0 && (\r\n                          <div className=\"command-palette-item-labels\">\r\n                            {card.labels.slice(0, 2).map((label) => (\r\n                              <span key={label} className=\"command-palette-item-label\">\r\n                                {label}\r\n                              </span>\r\n                            ))}\r\n                          </div>\r\n                        )}\r\n                      </Command.Item>\r\n                    ))}\r\n                  </Command.Group>\r\n                </>\r\n              )}\r\n\r\n              {/* CREATE CARD PAGE */}\r\n              {page === 'create-card' && (\r\n                <>\r\n                  <Command.Item\r\n                    value=\"back\"\r\n                    onSelect={handleSelectCommand}\r\n                    className=\"command-palette-item\"\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <path d=\"M19 12H5M12 19l-7-7 7-7\" />\r\n                    </svg>\r\n                    <span>Back</span>\r\n                  </Command.Item>\r\n\r\n                  <Command.Group\r\n                    heading=\"Select Column\"\r\n                    className=\"command-palette-group\"\r\n                  >\r\n                    {board.columns.map((column) => (\r\n                      <Command.Item\r\n                        key={column.id}\r\n                        value={`create-card-in:${column.id}`}\r\n                        onSelect={handleSelectCommand}\r\n                        className=\"command-palette-item\"\r\n                      >\r\n                        <svg\r\n                          width=\"16\"\r\n                          height=\"16\"\r\n                          viewBox=\"0 0 24 24\"\r\n                          fill=\"none\"\r\n                          stroke=\"currentColor\"\r\n                          strokeWidth=\"2\"\r\n                        >\r\n                          <rect x=\"3\" y=\"3\" width=\"7\" height=\"18\" rx=\"1\" />\r\n                        </svg>\r\n                        <span>{column.title}</span>\r\n                        <div className=\"command-palette-item-count\">\r\n                          {column.cardIds.length} cards\r\n                        </div>\r\n                      </Command.Item>\r\n                    ))}\r\n                  </Command.Group>\r\n                </>\r\n              )}\r\n\r\n              {/* NAVIGATE PAGE */}\r\n              {page === 'navigate' && (\r\n                <>\r\n                  <Command.Item\r\n                    value=\"back\"\r\n                    onSelect={handleSelectCommand}\r\n                    className=\"command-palette-item\"\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <path d=\"M19 12H5M12 19l-7-7 7-7\" />\r\n                    </svg>\r\n                    <span>Back</span>\r\n                  </Command.Item>\r\n\r\n                  <Command.Group heading=\"All Cards\" className=\"command-palette-group\">\r\n                    {board.cards.map((card) => {\r\n                      const column = board.columns.find((c) => c.id === card.columnId)\r\n                      return (\r\n                        <Command.Item\r\n                          key={card.id}\r\n                          value={`navigate:${card.id}`}\r\n                          onSelect={handleSelectCommand}\r\n                          className=\"command-palette-item\"\r\n                          keywords={[card.title, card.description || '', ...(card.labels || [])]}\r\n                        >\r\n                          <div\r\n                            className=\"command-palette-item-dot\"\r\n                            style={{\r\n                              background:\r\n                                card.priority === 'URGENT'\r\n                                  ? '#EF4444'\r\n                                  : card.priority === 'HIGH'\r\n                                  ? '#F59E0B'\r\n                                  : card.priority === 'MEDIUM'\r\n                                  ? '#3B82F6'\r\n                                  : '#6B7280',\r\n                            }}\r\n                          />\r\n                          <div className=\"command-palette-item-content\">\r\n                            <div>{card.title}</div>\r\n                            <div className=\"command-palette-item-meta\">\r\n                              {column?.title}\r\n                            </div>\r\n                          </div>\r\n                          {card.labels && card.labels.length > 0 && (\r\n                            <div className=\"command-palette-item-labels\">\r\n                              {card.labels.slice(0, 2).map((label) => (\r\n                                <span key={label} className=\"command-palette-item-label\">\r\n                                  {label}\r\n                                </span>\r\n                              ))}\r\n                            </div>\r\n                          )}\r\n                        </Command.Item>\r\n                      )\r\n                    })}\r\n                  </Command.Group>\r\n                </>\r\n              )}\r\n\r\n              {/* AI PAGE */}\r\n              {page === 'ai' && (\r\n                <>\r\n                  <Command.Item\r\n                    value=\"back\"\r\n                    onSelect={handleSelectCommand}\r\n                    className=\"command-palette-item\"\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <path d=\"M19 12H5M12 19l-7-7 7-7\" />\r\n                    </svg>\r\n                    <span>Back</span>\r\n                  </Command.Item>\r\n\r\n                  <Command.Group heading=\"AI Features\" className=\"command-palette-group\">\r\n                    <Command.Item\r\n                      value=\"ai-generate-plan\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item command-palette-item-ai\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" />\r\n                        <path d=\"M2 17L12 22L22 17\" />\r\n                        <path d=\"M2 12L12 17L22 12\" />\r\n                      </svg>\r\n                      <span>Generate Project Plan</span>\r\n                      <div className=\"command-palette-item-badge\">AI</div>\r\n                    </Command.Item>\r\n\r\n                    <Command.Item\r\n                      value=\"ai-predict-risks\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item command-palette-item-ai\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\r\n                        <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\r\n                        <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\r\n                      </svg>\r\n                      <span>Predict Risks</span>\r\n                      <div className=\"command-palette-item-badge\">AI</div>\r\n                    </Command.Item>\r\n\r\n                    <Command.Item\r\n                      value=\"ai-usage\"\r\n                      onSelect={handleSelectCommand}\r\n                      className=\"command-palette-item command-palette-item-ai\"\r\n                    >\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\" />\r\n                        <path d=\"M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\" />\r\n                      </svg>\r\n                      <span>AI Usage & Costs</span>\r\n                      <div className=\"command-palette-item-badge\">AI</div>\r\n                    </Command.Item>\r\n                  </Command.Group>\r\n                </>\r\n              )}\r\n            </Command.List>\r\n\r\n            <div className=\"command-palette-footer\">\r\n              <div className=\"command-palette-footer-hint\">\r\n                <kbd>↑</kbd>\r\n                <kbd>↓</kbd>\r\n                <span>Navigate</span>\r\n              </div>\r\n              <div className=\"command-palette-footer-hint\">\r\n                <kbd>Enter</kbd>\r\n                <span>Select</span>\r\n              </div>\r\n              <div className=\"command-palette-footer-hint\">\r\n                <kbd>Esc</kbd>\r\n                <span>Close</span>\r\n              </div>\r\n            </div>\r\n          </Command>\r\n        </div>\r\n      </div>\r\n    </Portal>\r\n  )\r\n}\r\n","/**\r\n * AttachmentUploader Component\r\n * Drag & drop file uploader with preview\r\n */\r\n\r\nimport { useState, useCallback, useRef } from 'react'\r\nimport type { Attachment } from '../../types'\r\nimport './attachments.css'\r\n\r\nexport interface AttachmentUploaderProps {\r\n  /** Card ID for attachments */\r\n  cardId: string\r\n  /** Existing attachments */\r\n  attachments?: Attachment[]\r\n  /** Callback when files are uploaded */\r\n  onUpload?: (files: File[]) => Promise<void> | void\r\n  /** Callback when attachment is deleted */\r\n  onDelete?: (attachmentId: string) => void\r\n  /** Current user ID */\r\n  currentUserId?: string\r\n  /** Max file size in MB */\r\n  maxSizeMB?: number\r\n  /** Allowed file types (MIME types) */\r\n  allowedTypes?: string[]\r\n  /** Max number of files */\r\n  maxFiles?: number\r\n}\r\n\r\n/**\r\n * Format file size to human readable string\r\n */\r\nfunction formatFileSize(bytes: number): string {\r\n  if (bytes === 0) return '0 Bytes'\r\n  const k = 1024\r\n  const sizes = ['Bytes', 'KB', 'MB', 'GB']\r\n  const i = Math.floor(Math.log(bytes) / Math.log(k))\r\n  return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]\r\n}\r\n\r\n/**\r\n * Get file icon based on MIME type\r\n */\r\nfunction getFileIcon(type: string): string {\r\n  if (type.startsWith('image/')) return '🖼️'\r\n  if (type.startsWith('video/')) return '🎥'\r\n  if (type.startsWith('audio/')) return '🎵'\r\n  if (type.includes('pdf')) return '📄'\r\n  if (type.includes('word') || type.includes('document')) return '📝'\r\n  if (type.includes('sheet') || type.includes('excel')) return '📊'\r\n  if (type.includes('presentation') || type.includes('powerpoint')) return '📽️'\r\n  if (type.includes('zip') || type.includes('rar') || type.includes('compressed')) return '🗜️'\r\n  if (type.includes('text')) return '📃'\r\n  return '📎'\r\n}\r\n\r\n/**\r\n * Check if file is an image\r\n */\r\nfunction isImage(type: string): boolean {\r\n  return type.startsWith('image/')\r\n}\r\n\r\nexport function AttachmentUploader({\r\n  attachments = [],\r\n  onUpload,\r\n  onDelete,\r\n  maxSizeMB = 10,\r\n  allowedTypes,\r\n  maxFiles = 10,\r\n}: AttachmentUploaderProps) {\r\n  const [isDragging, setIsDragging] = useState(false)\r\n  const [isUploading, setIsUploading] = useState(false)\r\n  const [error, setError] = useState<string | null>(null)\r\n  const fileInputRef = useRef<HTMLInputElement>(null)\r\n\r\n  // Handle file validation\r\n  const validateFiles = useCallback(\r\n    (files: File[]): { valid: File[]; errors: string[] } => {\r\n      const valid: File[] = []\r\n      const errors: string[] = []\r\n\r\n      // Check max files\r\n      if (attachments.length + files.length > maxFiles) {\r\n        errors.push(`Maximum ${maxFiles} files allowed`)\r\n        return { valid, errors }\r\n      }\r\n\r\n      files.forEach((file) => {\r\n        // Check file size\r\n        const sizeMB = file.size / (1024 * 1024)\r\n        if (sizeMB > maxSizeMB) {\r\n          errors.push(`${file.name} is too large (max ${maxSizeMB}MB)`)\r\n          return\r\n        }\r\n\r\n        // Check file type\r\n        if (allowedTypes && !allowedTypes.some((type) => file.type.match(type))) {\r\n          errors.push(`${file.name} has invalid file type`)\r\n          return\r\n        }\r\n\r\n        valid.push(file)\r\n      })\r\n\r\n      return { valid, errors }\r\n    },\r\n    [attachments.length, maxFiles, maxSizeMB, allowedTypes]\r\n  )\r\n\r\n  // Handle file upload\r\n  const handleUpload = useCallback(\r\n    async (files: File[]) => {\r\n      const { valid, errors } = validateFiles(files)\r\n\r\n      if (errors.length > 0) {\r\n        setError(errors.join(', '))\r\n        setTimeout(() => setError(null), 5000)\r\n        return\r\n      }\r\n\r\n      if (valid.length === 0) return\r\n\r\n      setIsUploading(true)\r\n      setError(null)\r\n\r\n      try {\r\n        await onUpload?.(valid)\r\n      } catch (err) {\r\n        setError(err instanceof Error ? err.message : 'Upload failed')\r\n        setTimeout(() => setError(null), 5000)\r\n      } finally {\r\n        setIsUploading(false)\r\n      }\r\n    },\r\n    [validateFiles, onUpload]\r\n  )\r\n\r\n  // Handle drag events\r\n  const handleDragEnter = useCallback((e: React.DragEvent) => {\r\n    e.preventDefault()\r\n    e.stopPropagation()\r\n    setIsDragging(true)\r\n  }, [])\r\n\r\n  const handleDragLeave = useCallback((e: React.DragEvent) => {\r\n    e.preventDefault()\r\n    e.stopPropagation()\r\n    setIsDragging(false)\r\n  }, [])\r\n\r\n  const handleDragOver = useCallback((e: React.DragEvent) => {\r\n    e.preventDefault()\r\n    e.stopPropagation()\r\n  }, [])\r\n\r\n  const handleDrop = useCallback(\r\n    (e: React.DragEvent) => {\r\n      e.preventDefault()\r\n      e.stopPropagation()\r\n      setIsDragging(false)\r\n\r\n      const files = Array.from(e.dataTransfer.files)\r\n      handleUpload(files)\r\n    },\r\n    [handleUpload]\r\n  )\r\n\r\n  // Handle file input change\r\n  const handleFileInputChange = useCallback(\r\n    (e: React.ChangeEvent<HTMLInputElement>) => {\r\n      const files = e.target.files ? Array.from(e.target.files) : []\r\n      handleUpload(files)\r\n      // Reset input\r\n      if (fileInputRef.current) {\r\n        fileInputRef.current.value = ''\r\n      }\r\n    },\r\n    [handleUpload]\r\n  )\r\n\r\n  // Handle click to open file dialog\r\n  const handleClick = useCallback(() => {\r\n    fileInputRef.current?.click()\r\n  }, [])\r\n\r\n  // Handle delete\r\n  const handleDelete = useCallback(\r\n    (attachmentId: string) => {\r\n      if (confirm('Are you sure you want to delete this attachment?')) {\r\n        onDelete?.(attachmentId)\r\n      }\r\n    },\r\n    [onDelete]\r\n  )\r\n\r\n  return (\r\n    <div className=\"attachment-uploader\">\r\n      {/* Drop zone */}\r\n      <div\r\n        className={`attachment-dropzone ${isDragging ? 'dragging' : ''} ${isUploading ? 'uploading' : ''}`}\r\n        onDragEnter={handleDragEnter}\r\n        onDragLeave={handleDragLeave}\r\n        onDragOver={handleDragOver}\r\n        onDrop={handleDrop}\r\n        onClick={handleClick}\r\n      >\r\n        <input\r\n          ref={fileInputRef}\r\n          type=\"file\"\r\n          multiple\r\n          onChange={handleFileInputChange}\r\n          style={{ display: 'none' }}\r\n          accept={allowedTypes?.join(',')}\r\n        />\r\n\r\n        <div className=\"attachment-dropzone-content\">\r\n          {isUploading ? (\r\n            <>\r\n              <div className=\"attachment-spinner\" />\r\n              <p className=\"attachment-dropzone-text\">Uploading...</p>\r\n            </>\r\n          ) : (\r\n            <>\r\n              <svg\r\n                width=\"48\"\r\n                height=\"48\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                className=\"attachment-dropzone-icon\"\r\n              >\r\n                <path\r\n                  d=\"M21 15V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V15\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                  strokeLinecap=\"round\"\r\n                  strokeLinejoin=\"round\"\r\n                />\r\n                <path\r\n                  d=\"M17 8L12 3L7 8\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                  strokeLinecap=\"round\"\r\n                  strokeLinejoin=\"round\"\r\n                />\r\n                <path\r\n                  d=\"M12 3V15\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                  strokeLinecap=\"round\"\r\n                  strokeLinejoin=\"round\"\r\n                />\r\n              </svg>\r\n              <p className=\"attachment-dropzone-text\">\r\n                {isDragging ? 'Drop files here' : 'Drag & drop files here'}\r\n              </p>\r\n              <p className=\"attachment-dropzone-subtext\">or click to browse</p>\r\n              <p className=\"attachment-dropzone-info\">\r\n                Max {maxSizeMB}MB • {attachments.length}/{maxFiles} files\r\n              </p>\r\n            </>\r\n          )}\r\n        </div>\r\n      </div>\r\n\r\n      {/* Error message */}\r\n      {error && (\r\n        <div className=\"attachment-error\">\r\n          <span className=\"attachment-error-icon\">⚠️</span>\r\n          <span className=\"attachment-error-text\">{error}</span>\r\n        </div>\r\n      )}\r\n\r\n      {/* Attachment list */}\r\n      {attachments.length > 0 && (\r\n        <div className=\"attachment-list\">\r\n          {attachments.map((attachment) => (\r\n            <div key={attachment.id} className=\"attachment-item\">\r\n              <div className=\"attachment-preview\">\r\n                {isImage(attachment.type) && attachment.url ? (\r\n                  <img\r\n                    src={attachment.thumbnailUrl || attachment.url}\r\n                    alt={attachment.name}\r\n                    className=\"attachment-thumbnail\"\r\n                  />\r\n                ) : (\r\n                  <div className=\"attachment-icon\">{getFileIcon(attachment.type)}</div>\r\n                )}\r\n              </div>\r\n\r\n              <div className=\"attachment-info\">\r\n                <a\r\n                  href={attachment.url}\r\n                  target=\"_blank\"\r\n                  rel=\"noopener noreferrer\"\r\n                  className=\"attachment-name\"\r\n                  title={attachment.name}\r\n                >\r\n                  {attachment.name}\r\n                </a>\r\n                <div className=\"attachment-meta\">\r\n                  <span className=\"attachment-size\">{formatFileSize(attachment.size)}</span>\r\n                  <span className=\"attachment-separator\">•</span>\r\n                  <span className=\"attachment-date\">\r\n                    {new Date(attachment.uploadedAt).toLocaleDateString()}\r\n                  </span>\r\n                </div>\r\n              </div>\r\n\r\n              <button\r\n                onClick={() => handleDelete(attachment.id)}\r\n                className=\"attachment-delete\"\r\n                title=\"Delete attachment\"\r\n                type=\"button\"\r\n              >\r\n                <svg\r\n                  width=\"16\"\r\n                  height=\"16\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  xmlns=\"http://www.w3.org/2000/svg\"\r\n                >\r\n                  <path\r\n                    d=\"M18 6L6 18M6 6L18 18\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                  />\r\n                </svg>\r\n              </button>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * CardDetailModal - Premium full-featured card detail modal\r\n * Features: Details tab, Comments, Activity log, AI suggestions\r\n */\r\n\r\nimport { useState, useCallback } from 'react'\r\nimport { Portal } from '../Portal'\r\nimport { AttachmentUploader } from '../Attachments'\r\nimport type { Card, User, Comment, Activity, Insight, AssigneeSuggestion, Attachment } from '../../types'\r\nimport './card-detail-modal.css'\r\n\r\nexport interface CardDetailModalProps {\r\n  /** Card to display */\r\n  card: Card | null\r\n\r\n  /** Whether modal is open */\r\n  isOpen: boolean\r\n\r\n  /** Close callback */\r\n  onClose: () => void\r\n\r\n  /** Update card callback */\r\n  onUpdate?: (cardId: string, updates: Partial<Card>) => void\r\n\r\n  /** Delete card callback */\r\n  onDelete?: (cardId: string) => void\r\n\r\n  /** Available users for assignment */\r\n  availableUsers?: User[]\r\n\r\n  /** Comments for this card */\r\n  comments?: Comment[]\r\n\r\n  /** Activity log for this card */\r\n  activities?: Activity[]\r\n\r\n  /** AI insights for this card */\r\n  aiInsights?: Insight[]\r\n\r\n  /** Attachments for this card */\r\n  attachments?: Attachment[]\r\n\r\n  /** Add comment callback */\r\n  onAddComment?: (cardId: string, content: string) => void\r\n\r\n  /** Delete comment callback */\r\n  onDeleteComment?: (commentId: string) => void\r\n\r\n  /** Upload attachments callback */\r\n  onUploadAttachments?: (cardId: string, files: File[]) => Promise<void> | void\r\n\r\n  /** Delete attachment callback */\r\n  onDeleteAttachment?: (attachmentId: string) => void\r\n\r\n  /** Current user ID */\r\n  currentUserId?: string\r\n\r\n  /** AI: Suggest assignee */\r\n  onSuggestAssignee?: (card: Card) => Promise<AssigneeSuggestion[]>\r\n\r\n  /** AI: Generate subtasks */\r\n  onGenerateSubtasks?: (card: Card) => Promise<Omit<Card, 'id'>[]>\r\n\r\n  /** AI: Estimate effort */\r\n  onEstimateEffort?: (card: Card) => Promise<{ hours: number; confidence: number }>\r\n}\r\n\r\ntype TabType = 'details' | 'comments' | 'activity' | 'attachments' | 'ai'\r\n\r\nexport function CardDetailModal({\r\n  card,\r\n  isOpen,\r\n  onClose,\r\n  onUpdate,\r\n  onDelete,\r\n  availableUsers = [],\r\n  comments = [],\r\n  activities = [],\r\n  aiInsights = [],\r\n  attachments = [],\r\n  onAddComment,\r\n  onDeleteComment,\r\n  onUploadAttachments,\r\n  onDeleteAttachment,\r\n  onSuggestAssignee,\r\n  onGenerateSubtasks,\r\n  onEstimateEffort,\r\n  currentUserId = 'user-1',\r\n}: CardDetailModalProps) {\r\n  const [activeTab, setActiveTab] = useState<TabType>('details')\r\n  const [isEditing, setIsEditing] = useState(false)\r\n  const [editedCard, setEditedCard] = useState<Partial<Card>>({})\r\n  const [newComment, setNewComment] = useState('')\r\n  const [aiLoading, setAiLoading] = useState(false)\r\n  const [aiSuggestions, setAiSuggestions] = useState<{\r\n    assignees?: AssigneeSuggestion[]\r\n    subtasks?: Omit<Card, 'id'>[]\r\n    effort?: { hours: number; confidence: number }\r\n  }>({})\r\n\r\n  if (!isOpen || !card) return null\r\n\r\n  const handleClose = useCallback(() => {\r\n    setIsEditing(false)\r\n    setEditedCard({})\r\n    setActiveTab('details')\r\n    setNewComment('')\r\n    setAiSuggestions({})\r\n    onClose()\r\n  }, [onClose])\r\n\r\n  const handleSave = useCallback(() => {\r\n    if (onUpdate && Object.keys(editedCard).length > 0) {\r\n      onUpdate(card.id, editedCard)\r\n      setEditedCard({})\r\n      setIsEditing(false)\r\n    }\r\n  }, [card.id, editedCard, onUpdate])\r\n\r\n  const handleDelete = useCallback(() => {\r\n    if (\r\n      onDelete &&\r\n      window.confirm('Are you sure you want to delete this card?')\r\n    ) {\r\n      onDelete(card.id)\r\n      handleClose()\r\n    }\r\n  }, [card.id, onDelete, handleClose])\r\n\r\n  const handleAddComment = useCallback(() => {\r\n    if (onAddComment && newComment.trim()) {\r\n      onAddComment(card.id, newComment.trim())\r\n      setNewComment('')\r\n    }\r\n  }, [card.id, newComment, onAddComment])\r\n\r\n  const handleSuggestAssignee = useCallback(async () => {\r\n    if (!onSuggestAssignee) return\r\n    setAiLoading(true)\r\n    try {\r\n      const suggestions = await onSuggestAssignee(card)\r\n      setAiSuggestions((prev) => ({ ...prev, assignees: suggestions }))\r\n    } catch (error) {\r\n      console.error('Failed to suggest assignee:', error)\r\n    } finally {\r\n      setAiLoading(false)\r\n    }\r\n  }, [card, onSuggestAssignee])\r\n\r\n  const handleGenerateSubtasks = useCallback(async () => {\r\n    if (!onGenerateSubtasks) return\r\n    setAiLoading(true)\r\n    try {\r\n      const subtasks = await onGenerateSubtasks(card)\r\n      setAiSuggestions((prev) => ({ ...prev, subtasks }))\r\n    } catch (error) {\r\n      console.error('Failed to generate subtasks:', error)\r\n    } finally {\r\n      setAiLoading(false)\r\n    }\r\n  }, [card, onGenerateSubtasks])\r\n\r\n  const handleEstimateEffort = useCallback(async () => {\r\n    if (!onEstimateEffort) return\r\n    setAiLoading(true)\r\n    try {\r\n      const effort = await onEstimateEffort(card)\r\n      setAiSuggestions((prev) => ({ ...prev, effort }))\r\n    } catch (error) {\r\n      console.error('Failed to estimate effort:', error)\r\n    } finally {\r\n      setAiLoading(false)\r\n    }\r\n  }, [card, onEstimateEffort])\r\n\r\n  const currentCard = { ...card, ...editedCard }\r\n\r\n  const assignedUsers = availableUsers.filter((user) =>\r\n    currentCard.assignedUserIds?.includes(user.id)\r\n  )\r\n\r\n  return (\r\n    <Portal>\r\n      <div className=\"card-detail-overlay\" onClick={handleClose}>\r\n        <div\r\n          className=\"card-detail-modal\"\r\n          onClick={(e) => e.stopPropagation()}\r\n        >\r\n          {/* Header */}\r\n          <div className=\"card-detail-header\">\r\n            <div className=\"card-detail-header-left\">\r\n              <div\r\n                className=\"card-detail-priority-dot\"\r\n                style={{\r\n                  background:\r\n                    currentCard.priority === 'URGENT'\r\n                      ? '#EF4444'\r\n                      : currentCard.priority === 'HIGH'\r\n                      ? '#F59E0B'\r\n                      : currentCard.priority === 'MEDIUM'\r\n                      ? '#3B82F6'\r\n                      : '#6B7280',\r\n                }}\r\n              />\r\n              {isEditing ? (\r\n                <input\r\n                  type=\"text\"\r\n                  value={editedCard.title ?? currentCard.title}\r\n                  onChange={(e) =>\r\n                    setEditedCard({ ...editedCard, title: e.target.value })\r\n                  }\r\n                  className=\"card-detail-title-input\"\r\n                  placeholder=\"Card title\"\r\n                />\r\n              ) : (\r\n                <h2 className=\"card-detail-title\">{currentCard.title}</h2>\r\n              )}\r\n            </div>\r\n\r\n            <div className=\"card-detail-header-actions\">\r\n              {isEditing ? (\r\n                <>\r\n                  <button\r\n                    onClick={handleSave}\r\n                    className=\"card-detail-btn card-detail-btn-primary\"\r\n                  >\r\n                    Save\r\n                  </button>\r\n                  <button\r\n                    onClick={() => {\r\n                      setIsEditing(false)\r\n                      setEditedCard({})\r\n                    }}\r\n                    className=\"card-detail-btn\"\r\n                  >\r\n                    Cancel\r\n                  </button>\r\n                </>\r\n              ) : (\r\n                <button\r\n                  onClick={() => setIsEditing(true)}\r\n                  className=\"card-detail-btn\"\r\n                >\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\r\n                    <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\r\n                  </svg>\r\n                  Edit\r\n                </button>\r\n              )}\r\n\r\n              <button onClick={handleDelete} className=\"card-detail-btn card-detail-btn-danger\">\r\n                <svg\r\n                  width=\"16\"\r\n                  height=\"16\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                >\r\n                  <polyline points=\"3 6 5 6 21 6\" />\r\n                  <path d=\"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2\" />\r\n                </svg>\r\n                Delete\r\n              </button>\r\n\r\n              <button onClick={handleClose} className=\"card-detail-btn-close\">\r\n                <svg\r\n                  width=\"20\"\r\n                  height=\"20\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                >\r\n                  <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n                  <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n                </svg>\r\n              </button>\r\n            </div>\r\n          </div>\r\n\r\n          {/* Tabs */}\r\n          <div className=\"card-detail-tabs\">\r\n            <button\r\n              onClick={() => setActiveTab('details')}\r\n              className={`card-detail-tab ${activeTab === 'details' ? 'active' : ''}`}\r\n            >\r\n              <svg\r\n                width=\"16\"\r\n                height=\"16\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\" />\r\n                <polyline points=\"14 2 14 8 20 8\" />\r\n                <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\r\n                <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\r\n                <polyline points=\"10 9 9 9 8 9\" />\r\n              </svg>\r\n              Details\r\n            </button>\r\n\r\n            <button\r\n              onClick={() => setActiveTab('comments')}\r\n              className={`card-detail-tab ${activeTab === 'comments' ? 'active' : ''}`}\r\n            >\r\n              <svg\r\n                width=\"16\"\r\n                height=\"16\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" />\r\n              </svg>\r\n              Comments\r\n              {comments.length > 0 && (\r\n                <span className=\"card-detail-tab-badge\">{comments.length}</span>\r\n              )}\r\n            </button>\r\n\r\n            <button\r\n              onClick={() => setActiveTab('activity')}\r\n              className={`card-detail-tab ${activeTab === 'activity' ? 'active' : ''}`}\r\n            >\r\n              <svg\r\n                width=\"16\"\r\n                height=\"16\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\" />\r\n              </svg>\r\n              Activity\r\n              {activities.length > 0 && (\r\n                <span className=\"card-detail-tab-badge\">{activities.length}</span>\r\n              )}\r\n            </button>\r\n\r\n            <button\r\n              onClick={() => setActiveTab('attachments')}\r\n              className={`card-detail-tab ${activeTab === 'attachments' ? 'active' : ''}`}\r\n            >\r\n              <svg\r\n                width=\"16\"\r\n                height=\"16\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48\" />\r\n              </svg>\r\n              Attachments\r\n              {attachments.length > 0 && (\r\n                <span className=\"card-detail-tab-badge\">{attachments.length}</span>\r\n              )}\r\n            </button>\r\n\r\n            <button\r\n              onClick={() => setActiveTab('ai')}\r\n              className={`card-detail-tab ${activeTab === 'ai' ? 'active' : ''}`}\r\n            >\r\n              <svg\r\n                width=\"16\"\r\n                height=\"16\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" />\r\n                <path d=\"M2 17L12 22L22 17\" />\r\n                <path d=\"M2 12L12 17L22 12\" />\r\n              </svg>\r\n              AI Insights\r\n              <span className=\"card-detail-tab-badge card-detail-tab-badge-ai\">\r\n                AI\r\n              </span>\r\n            </button>\r\n          </div>\r\n\r\n          {/* Tab Content */}\r\n          <div className=\"card-detail-content\">\r\n            {/* DETAILS TAB */}\r\n            {activeTab === 'details' && (\r\n              <div className=\"card-detail-details\">\r\n                {/* Description */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Description</label>\r\n                  {isEditing ? (\r\n                    <textarea\r\n                      value={editedCard.description ?? currentCard.description ?? ''}\r\n                      onChange={(e) =>\r\n                        setEditedCard({ ...editedCard, description: e.target.value })\r\n                      }\r\n                      className=\"card-detail-textarea\"\r\n                      placeholder=\"Add a description...\"\r\n                      rows={4}\r\n                    />\r\n                  ) : (\r\n                    <p className=\"card-detail-text\">\r\n                      {currentCard.description || 'No description'}\r\n                    </p>\r\n                  )}\r\n                </div>\r\n\r\n                {/* Assignees */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Assigned To</label>\r\n                  {isEditing ? (\r\n                    <select\r\n                      multiple\r\n                      value={editedCard.assignedUserIds ?? currentCard.assignedUserIds ?? []}\r\n                      onChange={(e) => {\r\n                        const selected = Array.from(e.target.selectedOptions, (option) => option.value)\r\n                        setEditedCard({\r\n                          ...editedCard,\r\n                          assignedUserIds: selected,\r\n                        })\r\n                      }}\r\n                      className=\"card-detail-textarea\"\r\n                      style={{ height: '120px', padding: '8px 12px' }}\r\n                    >\r\n                      {availableUsers.map((user) => (\r\n                        <option key={user.id} value={user.id}>\r\n                          {user.name}\r\n                        </option>\r\n                      ))}\r\n                    </select>\r\n                  ) : (\r\n                    <div className=\"card-detail-users\">\r\n                      {assignedUsers.length > 0 ? (\r\n                        assignedUsers.map((user) => (\r\n                          <div key={user.id} className=\"card-detail-user\">\r\n                            <div\r\n                              className=\"card-detail-user-avatar\"\r\n                              style={{ background: user.color }}\r\n                            >\r\n                              {user.initials}\r\n                            </div>\r\n                            <span>{user.name}</span>\r\n                          </div>\r\n                        ))\r\n                      ) : (\r\n                        <span className=\"card-detail-empty\">Unassigned</span>\r\n                      )}\r\n                    </div>\r\n                  )}\r\n                </div>\r\n\r\n                {/* Priority */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Priority</label>\r\n                  {isEditing ? (\r\n                    <select\r\n                      value={editedCard.priority ?? currentCard.priority ?? ''}\r\n                      onChange={(e) =>\r\n                        setEditedCard({\r\n                          ...editedCard,\r\n                          priority: (e.target.value || undefined) as any,\r\n                        })\r\n                      }\r\n                      className=\"card-detail-textarea\"\r\n                      style={{ height: 'auto', padding: '8px 12px' }}\r\n                    >\r\n                      <option value=\"\">None</option>\r\n                      <option value=\"LOW\">LOW</option>\r\n                      <option value=\"MEDIUM\">MEDIUM</option>\r\n                      <option value=\"HIGH\">HIGH</option>\r\n                      <option value=\"URGENT\">URGENT</option>\r\n                    </select>\r\n                  ) : (\r\n                    <div className=\"card-detail-priority\">\r\n                      <div\r\n                        className=\"card-detail-priority-dot\"\r\n                        style={{\r\n                          background:\r\n                            currentCard.priority === 'URGENT'\r\n                              ? '#EF4444'\r\n                              : currentCard.priority === 'HIGH'\r\n                              ? '#F59E0B'\r\n                              : currentCard.priority === 'MEDIUM'\r\n                              ? '#3B82F6'\r\n                              : '#6B7280',\r\n                        }}\r\n                      />\r\n                      <span>{currentCard.priority || 'None'}</span>\r\n                    </div>\r\n                  )}\r\n                </div>\r\n\r\n                {/* Labels */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Labels</label>\r\n                  <div className=\"card-detail-labels\">\r\n                    {currentCard.labels && currentCard.labels.length > 0 ? (\r\n                      currentCard.labels.map((label) => (\r\n                        <span key={label} className=\"card-detail-label-tag\">\r\n                          {label}\r\n                        </span>\r\n                      ))\r\n                    ) : (\r\n                      <span className=\"card-detail-empty\">No labels</span>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n\r\n                {/* Dates */}\r\n                <div className=\"card-detail-section-row\">\r\n                  <div className=\"card-detail-section\">\r\n                    <label className=\"card-detail-label\">Start Date</label>\r\n                    {isEditing ? (\r\n                      <input\r\n                        type=\"date\"\r\n                        value={\r\n                          editedCard.startDate\r\n                            ? new Date(editedCard.startDate).toISOString().split('T')[0]\r\n                            : currentCard.startDate\r\n                            ? new Date(currentCard.startDate).toISOString().split('T')[0]\r\n                            : ''\r\n                        }\r\n                        onChange={(e) =>\r\n                          setEditedCard({\r\n                            ...editedCard,\r\n                            startDate: e.target.value || undefined,\r\n                          })\r\n                        }\r\n                        className=\"card-detail-textarea\"\r\n                        style={{ height: 'auto', padding: '8px 12px' }}\r\n                      />\r\n                    ) : (\r\n                      <span className=\"card-detail-text\">\r\n                        {currentCard.startDate\r\n                          ? new Date(currentCard.startDate).toLocaleDateString()\r\n                          : 'Not set'}\r\n                      </span>\r\n                    )}\r\n                  </div>\r\n\r\n                  <div className=\"card-detail-section\">\r\n                    <label className=\"card-detail-label\">End Date</label>\r\n                    {isEditing ? (\r\n                      <input\r\n                        type=\"date\"\r\n                        value={\r\n                          editedCard.endDate\r\n                            ? new Date(editedCard.endDate).toISOString().split('T')[0]\r\n                            : currentCard.endDate\r\n                            ? new Date(currentCard.endDate).toISOString().split('T')[0]\r\n                            : ''\r\n                        }\r\n                        onChange={(e) =>\r\n                          setEditedCard({\r\n                            ...editedCard,\r\n                            endDate: e.target.value || undefined,\r\n                          })\r\n                        }\r\n                        className=\"card-detail-textarea\"\r\n                        style={{ height: 'auto', padding: '8px 12px' }}\r\n                      />\r\n                    ) : (\r\n                      <span className=\"card-detail-text\">\r\n                        {currentCard.endDate\r\n                          ? new Date(currentCard.endDate).toLocaleDateString()\r\n                          : 'Not set'}\r\n                      </span>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n\r\n                {/* Estimated Time */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Estimated Hours</label>\r\n                  {isEditing ? (\r\n                    <input\r\n                      type=\"number\"\r\n                      min=\"0\"\r\n                      step=\"0.5\"\r\n                      value={editedCard.estimatedTime ?? currentCard.estimatedTime ?? ''}\r\n                      onChange={(e) =>\r\n                        setEditedCard({\r\n                          ...editedCard,\r\n                          estimatedTime: e.target.value ? parseFloat(e.target.value) : undefined,\r\n                        })\r\n                      }\r\n                      className=\"card-detail-textarea\"\r\n                      style={{ height: 'auto', padding: '8px 12px' }}\r\n                      placeholder=\"Enter hours\"\r\n                    />\r\n                  ) : (\r\n                    <span className=\"card-detail-text\">\r\n                      {currentCard.estimatedTime || 'Not estimated'}\r\n                    </span>\r\n                  )}\r\n                </div>\r\n\r\n                {/* Dependencies */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Dependencies</label>\r\n                  <div className=\"card-detail-dependencies\">\r\n                    {currentCard.dependencies && currentCard.dependencies.length > 0 ? (\r\n                      currentCard.dependencies.map((dep) => {\r\n                        const depId = typeof dep === 'string' ? dep : dep.taskId\r\n                        return (\r\n                          <span key={depId} className=\"card-detail-dependency\">\r\n                            Card #{depId.slice(-4)}\r\n                          </span>\r\n                        )\r\n                      })\r\n                    ) : (\r\n                      <span className=\"card-detail-empty\">No dependencies</span>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n\r\n                {/* Metadata */}\r\n                <div className=\"card-detail-section\">\r\n                  <label className=\"card-detail-label\">Created</label>\r\n                  <span className=\"card-detail-text\">\r\n                    {currentCard.createdAt\r\n                      ? new Date(currentCard.createdAt).toLocaleString()\r\n                      : 'Unknown'}\r\n                  </span>\r\n                </div>\r\n              </div>\r\n            )}\r\n\r\n            {/* COMMENTS TAB */}\r\n            {activeTab === 'comments' && (\r\n              <div className=\"card-detail-comments\">\r\n                {/* New Comment */}\r\n                <div className=\"card-detail-comment-form\">\r\n                  <textarea\r\n                    value={newComment}\r\n                    onChange={(e) => setNewComment(e.target.value)}\r\n                    className=\"card-detail-comment-textarea\"\r\n                    placeholder=\"Write a comment...\"\r\n                    rows={3}\r\n                  />\r\n                  <button\r\n                    onClick={handleAddComment}\r\n                    disabled={!newComment.trim()}\r\n                    className=\"card-detail-btn card-detail-btn-primary\"\r\n                  >\r\n                    Add Comment\r\n                  </button>\r\n                </div>\r\n\r\n                {/* Comments List */}\r\n                <div className=\"card-detail-comments-list\">\r\n                  {comments.length > 0 ? (\r\n                    comments.map((comment) => {\r\n                      const author = availableUsers.find((u) => u.id === comment.authorId)\r\n                      return (\r\n                        <div key={comment.id} className=\"card-detail-comment\">\r\n                          <div className=\"card-detail-comment-header\">\r\n                            <div className=\"card-detail-comment-author\">\r\n                              {author && (\r\n                                <div\r\n                                  className=\"card-detail-user-avatar\"\r\n                                  style={{ background: author.color }}\r\n                                >\r\n                                  {author.initials}\r\n                                </div>\r\n                              )}\r\n                              <div>\r\n                                <div className=\"card-detail-comment-author-name\">\r\n                                  {author?.name || 'Unknown'}\r\n                                </div>\r\n                                <div className=\"card-detail-comment-time\">\r\n                                  {new Date(comment.createdAt).toLocaleString()}\r\n                                </div>\r\n                              </div>\r\n                            </div>\r\n                            {onDeleteComment && (\r\n                              <button\r\n                                onClick={() => onDeleteComment(comment.id)}\r\n                                className=\"card-detail-comment-delete\"\r\n                              >\r\n                                <svg\r\n                                  width=\"14\"\r\n                                  height=\"14\"\r\n                                  viewBox=\"0 0 24 24\"\r\n                                  fill=\"none\"\r\n                                  stroke=\"currentColor\"\r\n                                  strokeWidth=\"2\"\r\n                                >\r\n                                  <polyline points=\"3 6 5 6 21 6\" />\r\n                                  <path d=\"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2\" />\r\n                                </svg>\r\n                              </button>\r\n                            )}\r\n                          </div>\r\n                          <p className=\"card-detail-comment-content\">{comment.content}</p>\r\n                        </div>\r\n                      )\r\n                    })\r\n                  ) : (\r\n                    <div className=\"card-detail-empty-state\">\r\n                      <svg\r\n                        width=\"48\"\r\n                        height=\"48\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"1.5\"\r\n                      >\r\n                        <path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" />\r\n                      </svg>\r\n                      <p>No comments yet</p>\r\n                      <span>Be the first to comment</span>\r\n                    </div>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            )}\r\n\r\n            {/* ACTIVITY TAB */}\r\n            {activeTab === 'activity' && (\r\n              <div className=\"card-detail-activity\">\r\n                {activities.length > 0 ? (\r\n                  <div className=\"card-detail-activity-list\">\r\n                    {activities.map((activity) => {\r\n                      const user = availableUsers.find((u) => u.id === activity.userId)\r\n                      return (\r\n                        <div key={activity.id} className=\"card-detail-activity-item\">\r\n                          <div className=\"card-detail-activity-icon\">\r\n                            {activity.type.includes('CREATED') && '➕'}\r\n                            {activity.type.includes('UPDATED') && '✏️'}\r\n                            {activity.type.includes('MOVED') && '➡️'}\r\n                            {activity.type.includes('DELETED') && '🗑️'}\r\n                            {activity.type.includes('COMMENT') && '💬'}\r\n                            {activity.type.includes('ASSIGNED') && '👤'}\r\n                            {activity.type.includes('PRIORITY') && '🎯'}\r\n                            {activity.type.includes('LABEL') && '🏷️'}\r\n                            {activity.type.includes('ATTACHMENT') && '📎'}\r\n                          </div>\r\n                          <div className=\"card-detail-activity-content\">\r\n                            <div className=\"card-detail-activity-text\">\r\n                              <strong>{user?.name || 'Unknown'}</strong>{' '}\r\n                              {activity.type.replace(/_/g, ' ').toLowerCase()}\r\n                              {activity.newValue && (\r\n                                <span className=\"card-detail-activity-value\">\r\n                                  {' '}\r\n                                  to <strong>{activity.newValue}</strong>\r\n                                </span>\r\n                              )}\r\n                            </div>\r\n                            <div className=\"card-detail-activity-time\">\r\n                              {new Date(activity.timestamp).toLocaleString()}\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      )\r\n                    })}\r\n                  </div>\r\n                ) : (\r\n                  <div className=\"card-detail-empty-state\">\r\n                    <svg\r\n                      width=\"48\"\r\n                      height=\"48\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"1.5\"\r\n                    >\r\n                      <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\" />\r\n                    </svg>\r\n                    <p>No activity yet</p>\r\n                    <span>Activity will appear here</span>\r\n                  </div>\r\n                )}\r\n              </div>\r\n            )}\r\n\r\n            {/* ATTACHMENTS TAB */}\r\n            {activeTab === 'attachments' && (\r\n              <div className=\"card-detail-attachments\">\r\n                <AttachmentUploader\r\n                  cardId={card.id}\r\n                  attachments={attachments}\r\n                  onUpload={onUploadAttachments ? (files) => onUploadAttachments(card.id, files) : undefined}\r\n                  onDelete={onDeleteAttachment}\r\n                  currentUserId={currentUserId}\r\n                  maxSizeMB={10}\r\n                  maxFiles={20}\r\n                />\r\n              </div>\r\n            )}\r\n\r\n            {/* AI TAB */}\r\n            {activeTab === 'ai' && (\r\n              <div className=\"card-detail-ai\">\r\n                {/* AI Actions */}\r\n                <div className=\"card-detail-ai-actions\">\r\n                  <h3 className=\"card-detail-ai-heading\">AI-Powered Suggestions</h3>\r\n\r\n                  <button\r\n                    onClick={handleSuggestAssignee}\r\n                    disabled={aiLoading || !onSuggestAssignee}\r\n                    className=\"card-detail-ai-btn\"\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\" />\r\n                      <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n                    </svg>\r\n                    Suggest Best Assignee\r\n                  </button>\r\n\r\n                  <button\r\n                    onClick={handleGenerateSubtasks}\r\n                    disabled={aiLoading || !onGenerateSubtasks}\r\n                    className=\"card-detail-ai-btn\"\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" />\r\n                      <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\r\n                      <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\r\n                      <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\" />\r\n                      <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\" />\r\n                      <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\" />\r\n                    </svg>\r\n                    Generate Subtasks\r\n                  </button>\r\n\r\n                  <button\r\n                    onClick={handleEstimateEffort}\r\n                    disabled={aiLoading || !onEstimateEffort}\r\n                    className=\"card-detail-ai-btn\"\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                      <polyline points=\"12 6 12 12 16 14\" />\r\n                    </svg>\r\n                    Estimate Effort\r\n                  </button>\r\n                </div>\r\n\r\n                {/* AI Suggestions Results */}\r\n                {aiSuggestions.assignees && (\r\n                  <div className=\"card-detail-ai-results\">\r\n                    <h4>Assignee Suggestions</h4>\r\n                    {aiSuggestions.assignees.map((suggestion, index) => {\r\n                      const user = availableUsers.find((u) => u.id === suggestion.userId)\r\n                      return (\r\n                        <div key={index} className=\"card-detail-ai-suggestion\">\r\n                          {user && (\r\n                            <div\r\n                              className=\"card-detail-user-avatar\"\r\n                              style={{ background: user.color }}\r\n                            >\r\n                              {user.initials}\r\n                            </div>\r\n                          )}\r\n                          <div>\r\n                            <div className=\"card-detail-ai-suggestion-name\">\r\n                              {user?.name}\r\n                            </div>\r\n                            <div className=\"card-detail-ai-suggestion-reason\">\r\n                              {suggestion.reasoning}\r\n                            </div>\r\n                            <div className=\"card-detail-ai-suggestion-confidence\">\r\n                              Confidence: {(suggestion.confidence * 100).toFixed(0)}%\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      )\r\n                    })}\r\n                  </div>\r\n                )}\r\n\r\n                {aiSuggestions.subtasks && (\r\n                  <div className=\"card-detail-ai-results\">\r\n                    <h4>Suggested Subtasks</h4>\r\n                    {aiSuggestions.subtasks.map((subtask, index) => (\r\n                      <div key={index} className=\"card-detail-ai-subtask\">\r\n                        <div className=\"card-detail-ai-subtask-title\">\r\n                          {subtask.title}\r\n                        </div>\r\n                        {subtask.description && (\r\n                          <div className=\"card-detail-ai-subtask-desc\">\r\n                            {subtask.description}\r\n                          </div>\r\n                        )}\r\n                        {subtask.estimatedTime && (\r\n                          <div className=\"card-detail-ai-subtask-time\">\r\n                            Est: {subtask.estimatedTime}h\r\n                          </div>\r\n                        )}\r\n                      </div>\r\n                    ))}\r\n                  </div>\r\n                )}\r\n\r\n                {aiSuggestions.effort && (\r\n                  <div className=\"card-detail-ai-results\">\r\n                    <h4>Effort Estimate</h4>\r\n                    <div className=\"card-detail-ai-effort\">\r\n                      <div className=\"card-detail-ai-effort-hours\">\r\n                        {aiSuggestions.effort.hours} hours\r\n                      </div>\r\n                      <div className=\"card-detail-ai-effort-confidence\">\r\n                        Confidence: {(aiSuggestions.effort.confidence * 100).toFixed(0)}%\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                )}\r\n\r\n                {/* AI Insights */}\r\n                {aiInsights.length > 0 && (\r\n                  <div className=\"card-detail-ai-insights\">\r\n                    <h4>AI Insights</h4>\r\n                    {aiInsights.map((insight) => (\r\n                      <div\r\n                        key={insight.id}\r\n                        className={`card-detail-ai-insight card-detail-ai-insight-${insight.severity.toLowerCase()}`}\r\n                      >\r\n                        <div className=\"card-detail-ai-insight-header\">\r\n                          <span className=\"card-detail-ai-insight-title\">\r\n                            {insight.title}\r\n                          </span>\r\n                          <span className=\"card-detail-ai-insight-severity\">\r\n                            {insight.severity}\r\n                          </span>\r\n                        </div>\r\n                        <p className=\"card-detail-ai-insight-desc\">\r\n                          {insight.description}\r\n                        </p>\r\n                        {insight.suggestedAction && (\r\n                          <div className=\"card-detail-ai-insight-action\">\r\n                            💡 {insight.suggestedAction}\r\n                          </div>\r\n                        )}\r\n                      </div>\r\n                    ))}\r\n                  </div>\r\n                )}\r\n\r\n                {!aiSuggestions.assignees &&\r\n                  !aiSuggestions.subtasks &&\r\n                  !aiSuggestions.effort &&\r\n                  aiInsights.length === 0 && (\r\n                    <div className=\"card-detail-empty-state\">\r\n                      <svg\r\n                        width=\"48\"\r\n                        height=\"48\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"1.5\"\r\n                      >\r\n                        <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" />\r\n                        <path d=\"M2 17L12 22L22 17\" />\r\n                        <path d=\"M2 12L12 17L22 12\" />\r\n                      </svg>\r\n                      <p>AI Suggestions</p>\r\n                      <span>Click a button above to get AI-powered insights</span>\r\n                    </div>\r\n                  )}\r\n              </div>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </Portal>\r\n  )\r\n}\r\n","/**\r\n * CardDetailModal V2.0 - Premium task detail view\r\n *\r\n * Design Philosophy:\r\n * - Speed above all: <100ms open time\r\n * - Keyboard-first interaction\r\n * - Single vertical flow (no sidebars)\r\n * - Instant inline editing\r\n * - Zero friction UX\r\n *\r\n * ALL PHASES IMPLEMENTED:\r\n * ✅ Phase 1: Modal + Header + Metadata (COMPLETE)\r\n * ✅ Phase 2: Status & Priority selectors (COMPLETE)\r\n * ✅ Phase 3: Assignees & Labels selectors (COMPLETE)\r\n * ✅ Phase 4: Date picker & Time input (COMPLETE)\r\n * ✅ Phase 5: Markdown renderer (COMPLETE)\r\n * ✅ Phase 6: Animations & Accessibility polish (COMPLETE)\r\n */\r\n\r\nimport { useState, useCallback, useEffect, useRef } from 'react'\r\nimport ReactMarkdown from 'react-markdown'\r\nimport remarkGfm from 'remark-gfm'\r\nimport rehypeSanitize from 'rehype-sanitize'\r\nimport { Portal } from '../Portal'\r\nimport { CoverImageManager } from '../CoverImage'\r\nimport { useKanbanTheme } from '../Board/KanbanThemeContext'\r\nimport type { Card, User, Comment, Activity, Subtask } from '../../types'\r\nimport './card-detail-modal-v2.css'\r\n\r\nexport interface CardDetailModalV2Props {\r\n  /** Card to display */\r\n  card: Card | null\r\n\r\n  /** Whether modal is open */\r\n  isOpen: boolean\r\n\r\n  /** Close callback */\r\n  onClose: () => void\r\n\r\n  /** Update card callback */\r\n  onUpdate?: (cardId: string, updates: Partial<Card>) => void\r\n\r\n  /** Delete card callback */\r\n  onDelete?: (cardId: string) => void\r\n\r\n  /** Available users for assignment */\r\n  availableUsers?: User[]\r\n\r\n  /** Comments for this card */\r\n  comments?: Comment[]\r\n\r\n  /** Activity log for this card */\r\n  activities?: Activity[]\r\n\r\n  /** Add comment callback */\r\n  onAddComment?: (cardId: string, content: string) => void\r\n\r\n  /** Delete comment callback */\r\n  onDeleteComment?: (commentId: string) => void\r\n\r\n  /** Current user */\r\n  currentUser?: User\r\n\r\n  /** AI: Generate description */\r\n  onAIGenerateDescription?: (card: Card) => Promise<string>\r\n\r\n  /** AI: Create subtasks */\r\n  onAICreateSubtasks?: (card: Card) => Promise<string[]>\r\n\r\n  /** AI: Find similar tasks */\r\n  onAIFindSimilar?: (card: Card) => Promise<Card[]>\r\n\r\n  /** Available columns for status */\r\n  availableColumns?: Array<{ id: string; title: string }>\r\n\r\n  /** Available labels */\r\n  availableLabels?: string[]\r\n\r\n  /** Upload cover image callback (optional - returns public URL) */\r\n  onUploadCoverImage?: (file: File) => Promise<string>\r\n\r\n  /** Unsplash API key for cover images (optional) */\r\n  unsplashAccessKey?: string\r\n\r\n  /** Theme for the modal (dark, light, neutral). If not provided, uses KanbanThemeContext or defaults to 'dark' */\r\n  theme?: 'dark' | 'light' | 'neutral'\r\n\r\n  /** Callback when subtasks are changed (for persistence) */\r\n  onSubtasksChange?: (cardId: string, subtasks: Subtask[]) => void\r\n}\r\n\r\nconst PRIORITY_OPTIONS = ['LOW', 'MEDIUM', 'HIGH', 'URGENT'] as const\r\nconst STATUS_OPTIONS = ['todo', 'in-progress', 'review', 'done'] as const\r\n\r\nexport function CardDetailModalV2({\r\n  card,\r\n  isOpen,\r\n  onClose,\r\n  onUpdate,\r\n  onDelete: _onDelete,\r\n  availableUsers = [],\r\n  comments = [],\r\n  activities = [],\r\n  onAddComment,\r\n  onDeleteComment: _onDeleteComment,\r\n  currentUser,\r\n  onAIGenerateDescription: _onAIGenerateDescription,\r\n  onAICreateSubtasks: _onAICreateSubtasks,\r\n  onAIFindSimilar: _onAIFindSimilar,\r\n  availableColumns = [],\r\n  availableLabels = [],\r\n  onUploadCoverImage,\r\n  unsplashAccessKey,\r\n  theme,\r\n  onSubtasksChange,\r\n}: CardDetailModalV2Props) {\r\n  // Get theme: prop > context > fallback\r\n  const kanbanTheme = useKanbanTheme()\r\n  const themeName = theme || kanbanTheme?.themeName || 'dark'\r\n\r\n  // Local state - Initialize immediately from card prop to avoid render delay\r\n  const [localCard, setLocalCard] = useState<Card | null>(card)\r\n\r\n  const [isEditingDescription, setIsEditingDescription] = useState(false)\r\n  const [subtasks, setSubtasks] = useState<Subtask[]>(card?.subtasks || [])\r\n  const [isAddingSubtask, setIsAddingSubtask] = useState(false)\r\n  const [newSubtaskTitle, setNewSubtaskTitle] = useState('')\r\n  const [commentText, setCommentText] = useState('')\r\n  const [activityFilter, setActivityFilter] = useState<'all' | 'comments' | 'history'>('all')\r\n  const [showCoverManager, setShowCoverManager] = useState(false)\r\n\r\n  // Popover states\r\n  const [showStatusMenu, setShowStatusMenu] = useState(false)\r\n  const [showPriorityMenu, setShowPriorityMenu] = useState(false)\r\n  const [showAssigneeMenu, setShowAssigneeMenu] = useState(false)\r\n  const [showLabelMenu, setShowLabelMenu] = useState(false)\r\n  const [showDatePicker, setShowDatePicker] = useState(false)\r\n  const [showTimePicker, setShowTimePicker] = useState(false)\r\n\r\n  // Refs\r\n  const titleRef = useRef<HTMLHeadingElement>(null)\r\n  const descriptionRef = useRef<HTMLTextAreaElement>(null)\r\n  const commentRef = useRef<HTMLTextAreaElement>(null)\r\n  const statusMenuRef = useRef<HTMLDivElement>(null)\r\n  const priorityMenuRef = useRef<HTMLDivElement>(null)\r\n  const assigneeMenuRef = useRef<HTMLDivElement>(null)\r\n  const labelMenuRef = useRef<HTMLDivElement>(null)\r\n  const datePickerRef = useRef<HTMLInputElement>(null)\r\n\r\n  // Update local card when prop changes - THIS IS THE FIX!\r\n  // Initialize local card immediately when card prop is available\r\n  useEffect(() => {\r\n    if (card && !localCard) {\r\n      setLocalCard({ ...card })\r\n      setSubtasks(card.subtasks || [])\r\n    } else if (card && localCard && card.id !== localCard.id) {\r\n      setLocalCard({ ...card })\r\n      setSubtasks(card.subtasks || [])\r\n    }\r\n  }, [card, localCard])\r\n\r\n  // Close popovers when clicking outside\r\n  useEffect(() => {\r\n    const handleClickOutside = (e: MouseEvent) => {\r\n      const target = e.target as HTMLElement\r\n\r\n      if (statusMenuRef.current && !statusMenuRef.current.contains(target)) {\r\n        setShowStatusMenu(false)\r\n      }\r\n      if (priorityMenuRef.current && !priorityMenuRef.current.contains(target)) {\r\n        setShowPriorityMenu(false)\r\n      }\r\n      if (assigneeMenuRef.current && !assigneeMenuRef.current.contains(target)) {\r\n        setShowAssigneeMenu(false)\r\n      }\r\n      if (labelMenuRef.current && !labelMenuRef.current.contains(target)) {\r\n        setShowLabelMenu(false)\r\n      }\r\n    }\r\n\r\n    if (showStatusMenu || showPriorityMenu || showAssigneeMenu || showLabelMenu) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n\r\n    return undefined\r\n  }, [showStatusMenu, showPriorityMenu, showAssigneeMenu, showLabelMenu])\r\n\r\n  // Keyboard shortcuts\r\n  useEffect(() => {\r\n    if (!isOpen) return\r\n\r\n    const handleKeyDown = (e: KeyboardEvent) => {\r\n      // Check if user is typing in an input/textarea\r\n      const target = e.target as HTMLElement\r\n      const isTyping =\r\n        target.tagName === 'INPUT' ||\r\n        target.tagName === 'TEXTAREA' ||\r\n        target.isContentEditable\r\n\r\n      // ESC - Close modal or menus\r\n      if (e.key === 'Escape') {\r\n        e.preventDefault()\r\n        if (showStatusMenu || showPriorityMenu || showAssigneeMenu || showLabelMenu || showDatePicker || showTimePicker) {\r\n          setShowStatusMenu(false)\r\n          setShowPriorityMenu(false)\r\n          setShowAssigneeMenu(false)\r\n          setShowLabelMenu(false)\r\n          setShowDatePicker(false)\r\n          setShowTimePicker(false)\r\n        } else if (!isTyping) {\r\n          onClose()\r\n        }\r\n        return\r\n      }\r\n\r\n      // Ignore shortcuts if typing\r\n      if (isTyping && e.key !== 'Escape') return\r\n\r\n      const isMod = e.metaKey || e.ctrlKey\r\n\r\n      // Single key shortcuts\r\n      switch (e.key.toLowerCase()) {\r\n        case 's':\r\n          e.preventDefault()\r\n          setShowStatusMenu(true)\r\n          break\r\n        case 'a':\r\n          e.preventDefault()\r\n          setShowAssigneeMenu(true)\r\n          break\r\n        case 'p':\r\n          e.preventDefault()\r\n          setShowPriorityMenu(true)\r\n          break\r\n        case 'l':\r\n          e.preventDefault()\r\n          setShowLabelMenu(true)\r\n          break\r\n        case 'd':\r\n          if (!isMod) {\r\n            e.preventDefault()\r\n            setShowDatePicker(true)\r\n            setTimeout(() => datePickerRef.current?.focus(), 0)\r\n          }\r\n          break\r\n        case 'e':\r\n          if (!isMod) {\r\n            e.preventDefault()\r\n            setShowTimePicker(true)\r\n          }\r\n          break\r\n        case 'i':\r\n          e.preventDefault()\r\n          setIsEditingDescription(true)\r\n          setTimeout(() => descriptionRef.current?.focus(), 0)\r\n          break\r\n        case 't':\r\n          e.preventDefault()\r\n          setIsAddingSubtask(true)\r\n          break\r\n        case 'c':\r\n          e.preventDefault()\r\n          commentRef.current?.focus()\r\n          break\r\n      }\r\n    }\r\n\r\n    window.addEventListener('keydown', handleKeyDown)\r\n    return () => window.removeEventListener('keydown', handleKeyDown)\r\n    }, [isOpen, onClose, showStatusMenu, showPriorityMenu, showAssigneeMenu, showLabelMenu, showDatePicker, showTimePicker])\r\n\r\n\r\n  // Handlers\r\n  const handleTitleChange = useCallback(\r\n    (e: React.FormEvent<HTMLHeadingElement>) => {\r\n      const newTitle = e.currentTarget.textContent?.trim() || ''\r\n      if (localCard && newTitle !== localCard.title) {\r\n        const updated = { ...localCard, title: newTitle }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { title: newTitle })\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleTitleKeyDown = useCallback(\r\n    (e: React.KeyboardEvent<HTMLHeadingElement>) => {\r\n      if (e.key === 'Enter') {\r\n        e.preventDefault()\r\n        e.currentTarget.blur()\r\n      }\r\n      if (e.key === 'Escape') {\r\n        e.preventDefault()\r\n        e.currentTarget.textContent = localCard?.title || ''\r\n        e.currentTarget.blur()\r\n      }\r\n    },\r\n    [localCard]\r\n  )\r\n\r\n  // Note: handleDescriptionChange removed - now handled inline in MarkdownEditor\r\n\r\n  const handleDescriptionBlur = useCallback(() => {\r\n    if (localCard && card && localCard.description !== card.description) {\r\n      onUpdate?.(localCard.id, { description: localCard.description })\r\n    }\r\n    setIsEditingDescription(false)\r\n  }, [localCard, card, onUpdate])\r\n\r\n  const handleStatusChange = useCallback(\r\n    (status: string) => {\r\n      if (localCard) {\r\n        const updated = { ...localCard, columnId: status }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { columnId: status })\r\n        setShowStatusMenu(false)\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handlePriorityChange = useCallback(\r\n    (priority: string) => {\r\n      if (localCard) {\r\n        const updated = { ...localCard, priority: priority as any }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { priority: priority as any })\r\n        setShowPriorityMenu(false)\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleToggleAssignee = useCallback(\r\n    (userId: string) => {\r\n      if (localCard) {\r\n        const currentAssignees = localCard.assignedUserIds || []\r\n        const newAssignees = currentAssignees.includes(userId)\r\n          ? currentAssignees.filter((id) => id !== userId)\r\n          : [...currentAssignees, userId]\r\n\r\n        const updated = { ...localCard, assignedUserIds: newAssignees }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { assignedUserIds: newAssignees })\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleToggleLabel = useCallback(\r\n    (label: string) => {\r\n      if (localCard) {\r\n        const currentLabels = localCard.labels || []\r\n        const newLabels = currentLabels.includes(label)\r\n          ? currentLabels.filter((l) => l !== label)\r\n          : [...currentLabels, label]\r\n\r\n        const updated = { ...localCard, labels: newLabels }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { labels: newLabels })\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleDateChange = useCallback(\r\n    (e: React.ChangeEvent<HTMLInputElement>) => {\r\n      if (localCard) {\r\n        const newDate = e.target.value\r\n        const updated = { ...localCard, endDate: newDate }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { endDate: newDate })\r\n        setShowDatePicker(false)\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleTimeChange = useCallback(\r\n    (hours: string) => {\r\n      if (localCard) {\r\n        const updated = { ...localCard, estimatedTime: parseFloat(hours) || 0 }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { estimatedTime: parseFloat(hours) || 0 })\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleAddSubtask = useCallback(() => {\r\n    if (newSubtaskTitle.trim() && localCard) {\r\n      const newSubtask: Subtask = {\r\n        id: `subtask-${Date.now()}`,\r\n        title: newSubtaskTitle.trim(),\r\n        completed: false,\r\n        createdAt: new Date(),\r\n      }\r\n      const updatedSubtasks = [...subtasks, newSubtask]\r\n      setSubtasks(updatedSubtasks)\r\n      setNewSubtaskTitle('')\r\n      setIsAddingSubtask(false)\r\n      // Persist subtasks\r\n      onSubtasksChange?.(localCard.id, updatedSubtasks)\r\n    }\r\n  }, [newSubtaskTitle, subtasks, localCard, onSubtasksChange])\r\n\r\n  const handleToggleSubtask = useCallback(\r\n    (id: string) => {\r\n      const updatedSubtasks = subtasks.map((st) =>\r\n        st.id === id ? { ...st, completed: !st.completed, updatedAt: new Date() } : st\r\n      )\r\n      setSubtasks(updatedSubtasks)\r\n      // Persist subtasks\r\n      if (localCard) {\r\n        onSubtasksChange?.(localCard.id, updatedSubtasks)\r\n      }\r\n    },\r\n    [subtasks, localCard, onSubtasksChange]\r\n  )\r\n\r\n  const handleDeleteSubtask = useCallback(\r\n    (id: string) => {\r\n      const updatedSubtasks = subtasks.filter((st) => st.id !== id)\r\n      setSubtasks(updatedSubtasks)\r\n      // Persist subtasks\r\n      if (localCard) {\r\n        onSubtasksChange?.(localCard.id, updatedSubtasks)\r\n      }\r\n    },\r\n    [subtasks, localCard, onSubtasksChange]\r\n  )\r\n\r\n  const handleSendComment = useCallback(() => {\r\n    if (commentText.trim() && localCard && onAddComment) {\r\n      onAddComment(localCard.id, commentText.trim())\r\n      setCommentText('')\r\n    }\r\n  }, [commentText, localCard, onAddComment])\r\n\r\n  const handleCommentKeyDown = useCallback(\r\n    (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\r\n      if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\r\n        e.preventDefault()\r\n        handleSendComment()\r\n      }\r\n    },\r\n    [handleSendComment]\r\n  )\r\n\r\n  const handleCoverImageChange = useCallback(\r\n    (url: string) => {\r\n      if (localCard) {\r\n        const updated = { ...localCard, coverImage: url }\r\n        setLocalCard(updated)\r\n        onUpdate?.(localCard.id, { coverImage: url })\r\n        setShowCoverManager(false)\r\n      }\r\n    },\r\n    [localCard, onUpdate]\r\n  )\r\n\r\n  const handleCoverImageRemove = useCallback(() => {\r\n    if (localCard) {\r\n      const updated = { ...localCard, coverImage: undefined }\r\n      setLocalCard(updated)\r\n      onUpdate?.(localCard.id, { coverImage: undefined })\r\n      // Don't close manager immediately - let user see the change\r\n      // setShowCoverManager(false)\r\n    }\r\n  }, [localCard, onUpdate])\r\n\r\n  // Enhanced markdown renderer with GFM support\r\n  const renderMarkdown = (text: string) => {\r\n    return (\r\n      <ReactMarkdown\r\n        remarkPlugins={[remarkGfm]}\r\n        rehypePlugins={[rehypeSanitize]}\r\n        components={{\r\n          a: ({ node, ...props }) => <a {...props} target=\"_blank\" rel=\"noopener noreferrer\" />,\r\n        }}\r\n      >\r\n        {text}\r\n      </ReactMarkdown>\r\n    )\r\n  }\r\n\r\n  // Filter activities\r\n  const filteredActivity = activities.filter((activity) => {\r\n    if (activityFilter === 'comments') {\r\n      return activity.type.includes('COMMENT')\r\n    }\r\n    if (activityFilter === 'history') {\r\n      return !activity.type.includes('COMMENT')\r\n    }\r\n    return true\r\n  })\r\n\r\n  // CRITICAL FIX: Use card prop directly for early return check\r\n  // Using localCard causes race condition with Portal mount + useEffect timing\r\n  if (!isOpen || !card) {\r\n    return null\r\n  }\r\n\r\n  // Use localCard if available (for live edits), fallback to card prop\r\n  const displayCard = localCard || card\r\n\r\n  const assignedUsers = availableUsers.filter((user) =>\r\n    displayCard.assignedUserIds?.includes(user.id)\r\n  )\r\n\r\n  const completedSubtasksCount = subtasks.filter((st) => st.completed).length\r\n\r\n  return (\r\n    <Portal>\r\n      <div\r\n        className=\"modal-v2-backdrop\"\r\n        onClick={onClose}\r\n        style={{\r\n          position: 'fixed',\r\n          inset: '0',\r\n          zIndex: 9999,\r\n          background: 'rgba(0, 0, 0, 0.7)',\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          justifyContent: 'center',\r\n        }}\r\n      >\r\n        <div\r\n          className=\"modal-v2-container\"\r\n          onClick={(e) => e.stopPropagation()}\r\n          role=\"dialog\"\r\n          aria-modal=\"true\"\r\n          aria-labelledby=\"modal-title\"\r\n          data-theme={themeName}\r\n        >\r\n          {/* HEADER */}\r\n          <header className=\"modal-v2-header\">\r\n            <h1\r\n              id=\"modal-title\"\r\n              ref={titleRef}\r\n              className=\"modal-v2-title\"\r\n              contentEditable\r\n              suppressContentEditableWarning\r\n              onBlur={handleTitleChange}\r\n              onKeyDown={handleTitleKeyDown}\r\n            >\r\n              {displayCard.title}\r\n            </h1>\r\n\r\n            <p className=\"modal-v2-ai-prompt\">\r\n              <span className=\"modal-v2-ai-icon\">✨</span>\r\n              Ask AI to write a description, create subtasks, or find similar tasks\r\n            </p>\r\n\r\n            <button className=\"modal-v2-close\" onClick={onClose} aria-label=\"Close\">\r\n              <svg\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n                <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n              </svg>\r\n            </button>\r\n          </header>\r\n\r\n          {/* COVER IMAGE SECTION */}\r\n          <section className=\"modal-v2-cover-section\">\r\n            {!showCoverManager && !displayCard.coverImage && (\r\n              <button\r\n                className=\"modal-v2-add-cover-button\"\r\n                onClick={() => setShowCoverManager(true)}\r\n              >\r\n                <svg\r\n                  width=\"20\"\r\n                  height=\"20\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                >\r\n                  <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\r\n                  <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\r\n                  <polyline points=\"21 15 16 10 5 21\" />\r\n                </svg>\r\n                Add cover image\r\n              </button>\r\n            )}\r\n\r\n            {!showCoverManager && displayCard.coverImage && (\r\n              <div className=\"modal-v2-cover-preview-wrapper\">\r\n                <img\r\n                  src={displayCard.coverImage}\r\n                  alt={`Cover for ${displayCard.title}`}\r\n                  className=\"modal-v2-cover-image\"\r\n                  onError={(e) => {\r\n                    e.currentTarget.style.display = 'none'\r\n                  }}\r\n                />\r\n                <div className=\"modal-v2-cover-actions\">\r\n                  <button\r\n                    className=\"modal-v2-cover-action-button\"\r\n                    onClick={() => setShowCoverManager(true)}\r\n                  >\r\n                    Change\r\n                  </button>\r\n                  <button\r\n                    className=\"modal-v2-cover-action-button danger\"\r\n                    onClick={handleCoverImageRemove}\r\n                  >\r\n                    Remove\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            )}\r\n\r\n            {showCoverManager && (\r\n              <div className=\"modal-v2-cover-manager-wrapper\">\r\n                <div className=\"modal-v2-cover-manager-header\">\r\n                  <h3>Cover Image</h3>\r\n                  <button\r\n                    className=\"modal-v2-cover-manager-close\"\r\n                    onClick={() => setShowCoverManager(false)}\r\n                  >\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n                      <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n                    </svg>\r\n                  </button>\r\n                </div>\r\n                <CoverImageManager\r\n                  coverImage={displayCard.coverImage}\r\n                  onUpload={onUploadCoverImage}\r\n                  onChange={handleCoverImageChange}\r\n                  onRemove={handleCoverImageRemove}\r\n                  unsplashAccessKey={unsplashAccessKey}\r\n                  showRecentUploads={true}\r\n                  theme={themeName}\r\n                />\r\n              </div>\r\n            )}\r\n          </section>\r\n\r\n          {/* METADATA GRID */}\r\n          <section className=\"modal-v2-metadata\">\r\n            {/* STATUS FIELD */}\r\n            <div className=\"modal-v2-field-wrapper\" ref={statusMenuRef}>\r\n              <button\r\n                className=\"modal-v2-field\"\r\n                onClick={() => setShowStatusMenu(!showStatusMenu)}\r\n              >\r\n                <div className=\"modal-v2-field-label\">\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                    <path d=\"M12 6v6l4 2\" />\r\n                  </svg>\r\n                  <span>Status</span>\r\n                  <kbd className=\"modal-v2-shortcut\">S</kbd>\r\n                </div>\r\n                <div className=\"modal-v2-field-value\">{displayCard.columnId || 'No status'}</div>\r\n              </button>\r\n              {showStatusMenu && (\r\n                <div className=\"modal-v2-popover\">\r\n                  {(availableColumns.length > 0 ? availableColumns : STATUS_OPTIONS.map(s => ({ id: s, title: s }))).map((col) => (\r\n                    <button\r\n                      key={col.id}\r\n                      className={`modal-v2-popover-item ${\r\n                        displayCard.columnId === col.id ? 'active' : ''\r\n                      }`}\r\n                      onClick={() => handleStatusChange(col.id)}\r\n                    >\r\n                      {col.title}\r\n                    </button>\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </div>\r\n\r\n            {/* ASSIGNEES FIELD */}\r\n            <div className=\"modal-v2-field-wrapper\" ref={assigneeMenuRef}>\r\n              <button\r\n                className=\"modal-v2-field\"\r\n                onClick={() => setShowAssigneeMenu(!showAssigneeMenu)}\r\n              >\r\n                <div className=\"modal-v2-field-label\">\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\" />\r\n                    <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n                  </svg>\r\n                  <span>Assignees</span>\r\n                  <kbd className=\"modal-v2-shortcut\">A</kbd>\r\n                </div>\r\n                <div className=\"modal-v2-field-value\">\r\n                  {assignedUsers.length > 0 ? (\r\n                    <div className=\"modal-v2-avatars\">\r\n                      {assignedUsers.map((user) => (\r\n                        <div\r\n                          key={user.id}\r\n                          className=\"modal-v2-avatar\"\r\n                          style={{ background: user.color }}\r\n                          title={user.name}\r\n                        >\r\n                          {user.initials}\r\n                        </div>\r\n                      ))}\r\n                    </div>\r\n                  ) : (\r\n                    <span className=\"modal-v2-empty\">Empty</span>\r\n                  )}\r\n                </div>\r\n              </button>\r\n              {showAssigneeMenu && (\r\n                <div className=\"modal-v2-popover\">\r\n                  {availableUsers.map((user) => (\r\n                    <button\r\n                      key={user.id}\r\n                      className={`modal-v2-popover-item ${\r\n                        displayCard.assignedUserIds?.includes(user.id) ? 'active' : ''\r\n                      }`}\r\n                      onClick={() => handleToggleAssignee(user.id)}\r\n                    >\r\n                      <div\r\n                        className=\"modal-v2-avatar-small\"\r\n                        style={{ background: user.color }}\r\n                      >\r\n                        {user.initials}\r\n                      </div>\r\n                      {user.name}\r\n                      {displayCard.assignedUserIds?.includes(user.id) && (\r\n                        <svg\r\n                          width=\"16\"\r\n                          height=\"16\"\r\n                          viewBox=\"0 0 24 24\"\r\n                          fill=\"none\"\r\n                          stroke=\"currentColor\"\r\n                          strokeWidth=\"2\"\r\n                          style={{ marginLeft: 'auto' }}\r\n                        >\r\n                          <polyline points=\"20 6 9 17 4 12\" />\r\n                        </svg>\r\n                      )}\r\n                    </button>\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </div>\r\n\r\n            {/* PRIORITY FIELD */}\r\n            <div className=\"modal-v2-field-wrapper\" ref={priorityMenuRef}>\r\n              <button\r\n                className=\"modal-v2-field\"\r\n                onClick={() => setShowPriorityMenu(!showPriorityMenu)}\r\n              >\r\n                <div className=\"modal-v2-field-label\">\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\r\n                    <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\r\n                    <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\r\n                  </svg>\r\n                  <span>Priority</span>\r\n                  <kbd className=\"modal-v2-shortcut\">P</kbd>\r\n                </div>\r\n                <div className=\"modal-v2-field-value\">\r\n                  {displayCard.priority || 'None'}\r\n                </div>\r\n              </button>\r\n              {showPriorityMenu && (\r\n                <div className=\"modal-v2-popover\">\r\n                  {PRIORITY_OPTIONS.map((priority) => (\r\n                    <button\r\n                      key={priority}\r\n                      className={`modal-v2-popover-item priority-${priority.toLowerCase()} ${\r\n                        displayCard.priority === priority ? 'active' : ''\r\n                      }`}\r\n                      onClick={() => handlePriorityChange(priority)}\r\n                    >\r\n                      {priority}\r\n                    </button>\r\n                  ))}\r\n                  <button\r\n                    className=\"modal-v2-popover-item\"\r\n                    onClick={() => handlePriorityChange('')}\r\n                  >\r\n                    None\r\n                  </button>\r\n                </div>\r\n              )}\r\n            </div>\r\n\r\n            {/* LABELS FIELD */}\r\n            <div className=\"modal-v2-field-wrapper\" ref={labelMenuRef}>\r\n              <button\r\n                className=\"modal-v2-field\"\r\n                onClick={() => setShowLabelMenu(!showLabelMenu)}\r\n              >\r\n                <div className=\"modal-v2-field-label\">\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 01-2.83 0L2 12V2h10l8.59 8.59a2 2 0 010 2.82z\" />\r\n                    <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\r\n                  </svg>\r\n                  <span>Labels</span>\r\n                  <kbd className=\"modal-v2-shortcut\">L</kbd>\r\n                </div>\r\n                <div className=\"modal-v2-field-value\">\r\n                  {displayCard.labels && displayCard.labels.length > 0 ? (\r\n                    <span>{displayCard.labels.join(', ')}</span>\r\n                  ) : (\r\n                    <span className=\"modal-v2-empty\">Empty</span>\r\n                  )}\r\n                </div>\r\n              </button>\r\n              {showLabelMenu && (\r\n                <div className=\"modal-v2-popover\">\r\n                  {(availableLabels.length > 0 ? availableLabels : ['Bug', 'Feature', 'Enhancement', 'Documentation']).map((label) => (\r\n                    <button\r\n                      key={label}\r\n                      className={`modal-v2-popover-item ${\r\n                        displayCard.labels?.includes(label) ? 'active' : ''\r\n                      }`}\r\n                      onClick={() => handleToggleLabel(label)}\r\n                    >\r\n                      {label}\r\n                      {displayCard.labels?.includes(label) && (\r\n                        <svg\r\n                          width=\"16\"\r\n                          height=\"16\"\r\n                          viewBox=\"0 0 24 24\"\r\n                          fill=\"none\"\r\n                          stroke=\"currentColor\"\r\n                          strokeWidth=\"2\"\r\n                          style={{ marginLeft: 'auto' }}\r\n                        >\r\n                          <polyline points=\"20 6 9 17 4 12\" />\r\n                        </svg>\r\n                      )}\r\n                    </button>\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </div>\r\n\r\n            {/* DUE DATE FIELD */}\r\n            <button\r\n              className=\"modal-v2-field\"\r\n              onClick={() => {\r\n                setShowDatePicker(!showDatePicker)\r\n                setTimeout(() => datePickerRef.current?.showPicker?.(), 0)\r\n              }}\r\n            >\r\n              <div className=\"modal-v2-field-label\">\r\n                <svg\r\n                  width=\"16\"\r\n                  height=\"16\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                >\r\n                  <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\r\n                  <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\r\n                  <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\r\n                  <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\r\n                </svg>\r\n                <span>Due Date</span>\r\n                <kbd className=\"modal-v2-shortcut\">D</kbd>\r\n              </div>\r\n              <div className=\"modal-v2-field-value\">\r\n                {displayCard.endDate\r\n                  ? new Date(displayCard.endDate).toLocaleDateString()\r\n                  : 'Not set'}\r\n              </div>\r\n              <input\r\n                ref={datePickerRef}\r\n                type=\"date\"\r\n                value={\r\n                  typeof displayCard.endDate === 'string'\r\n                    ? displayCard.endDate.split('T')[0]\r\n                    : displayCard.endDate\r\n                    ? (() => {\r\n                        // Convert Date to YYYY-MM-DD using UTC to avoid timezone shifts\r\n                        const d = new Date(displayCard.endDate)\r\n                        const year = d.getUTCFullYear()\r\n                        const month = String(d.getUTCMonth() + 1).padStart(2, '0')\r\n                        const day = String(d.getUTCDate()).padStart(2, '0')\r\n                        return `${year}-${month}-${day}`\r\n                      })()\r\n                    : ''\r\n                }\r\n                onChange={handleDateChange}\r\n                style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\r\n              />\r\n            </button>\r\n\r\n            {/* ESTIMATED TIME FIELD */}\r\n            <div className=\"modal-v2-field-wrapper\">\r\n              <button\r\n                className=\"modal-v2-field\"\r\n                onClick={() => setShowTimePicker(!showTimePicker)}\r\n              >\r\n                <div className=\"modal-v2-field-label\">\r\n                  <svg\r\n                    width=\"16\"\r\n                    height=\"16\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                    <polyline points=\"12 6 12 12 16 14\" />\r\n                  </svg>\r\n                  <span>Estimated Time</span>\r\n                  <kbd className=\"modal-v2-shortcut\">E</kbd>\r\n                </div>\r\n                <div className=\"modal-v2-field-value\">\r\n                  {displayCard.estimatedTime ? `${displayCard.estimatedTime}h` : 'Not set'}\r\n                </div>\r\n              </button>\r\n              {showTimePicker && (\r\n                <div className=\"modal-v2-popover\">\r\n                  <input\r\n                    type=\"number\"\r\n                    min=\"0\"\r\n                    step=\"0.5\"\r\n                    placeholder=\"Hours\"\r\n                    value={displayCard.estimatedTime || ''}\r\n                    onChange={(e) => handleTimeChange(e.target.value)}\r\n                    className=\"modal-v2-time-input\"\r\n                    autoFocus\r\n                    onBlur={() => setShowTimePicker(false)}\r\n                  />\r\n                </div>\r\n              )}\r\n            </div>\r\n          </section>\r\n\r\n          {/* DESCRIPTION */}\r\n          <section className=\"modal-v2-section\">\r\n            <div className=\"modal-v2-section-header\">\r\n              <svg\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\" />\r\n                <polyline points=\"14 2 14 8 20 8\" />\r\n                <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\r\n                <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\r\n                <polyline points=\"10 9 9 9 8 9\" />\r\n              </svg>\r\n              <h2>Description</h2>\r\n              <button className=\"modal-v2-ai-button\">\r\n                <svg\r\n                  width=\"16\"\r\n                  height=\"16\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                >\r\n                  <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" />\r\n                  <path d=\"M2 17L12 22L22 17\" />\r\n                  <path d=\"M2 12L12 17L22 12\" />\r\n                </svg>\r\n                AI Assist\r\n              </button>\r\n            </div>\r\n\r\n            {isEditingDescription ? (\r\n              <textarea\r\n                className=\"modal-v2-textarea\"\r\n                value={displayCard.description || ''}\r\n                onChange={(e) => {\r\n                  if (localCard) {\r\n                    const updated: Card = { ...localCard, description: e.target.value }\r\n                    setLocalCard(updated)\r\n                  }\r\n                }}\r\n                onBlur={handleDescriptionBlur}\r\n                placeholder=\"Add a detailed description...\"\r\n                autoFocus\r\n              />\r\n            ) : (\r\n              <div className=\"modal-v2-content\" onClick={() => setIsEditingDescription(true)}>\r\n                {displayCard.description ? (\r\n                  <div className=\"modal-v2-markdown\">{renderMarkdown(displayCard.description)}</div>\r\n                ) : (\r\n                  <p className=\"modal-v2-placeholder\">\r\n                    <svg\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\r\n                      <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\r\n                    </svg>\r\n                    Add description...\r\n                  </p>\r\n                )}\r\n              </div>\r\n            )}\r\n          </section>\r\n\r\n          {/* SUBTASKS */}\r\n          <section className=\"modal-v2-section\">\r\n            <div className=\"modal-v2-section-header\">\r\n              <svg\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M9 11l3 3L22 4\" />\r\n                <path d=\"M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11\" />\r\n              </svg>\r\n              <h2>Subtasks</h2>\r\n              {subtasks.length > 0 && (\r\n                <span className=\"modal-v2-count\">\r\n                  {completedSubtasksCount}/{subtasks.length}\r\n                </span>\r\n              )}\r\n              <button className=\"modal-v2-add-button\" onClick={() => setIsAddingSubtask(true)}>\r\n                <svg\r\n                  width=\"16\"\r\n                  height=\"16\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                >\r\n                  <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n                  <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\r\n                </svg>\r\n                Add\r\n              </button>\r\n            </div>\r\n\r\n            <div className=\"modal-v2-subtasks\">\r\n              {subtasks.map((subtask) => (\r\n                <div\r\n                  key={subtask.id}\r\n                  className={`modal-v2-subtask ${subtask.completed ? 'completed' : ''}`}\r\n                >\r\n                  <button\r\n                    className=\"modal-v2-subtask-checkbox\"\r\n                    onClick={() => handleToggleSubtask(subtask.id)}\r\n                  >\r\n                    {subtask.completed ? (\r\n                      <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n                        <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                        <path\r\n                          d=\"M9 12l2 2 4-4\"\r\n                          stroke=\"white\"\r\n                          strokeWidth=\"2\"\r\n                          fill=\"none\"\r\n                        />\r\n                      </svg>\r\n                    ) : (\r\n                      <svg\r\n                        width=\"18\"\r\n                        height=\"18\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                      </svg>\r\n                    )}\r\n                  </button>\r\n                  <span className=\"modal-v2-subtask-title\">{subtask.title}</span>\r\n                  <button\r\n                    className=\"modal-v2-subtask-delete\"\r\n                    onClick={() => handleDeleteSubtask(subtask.id)}\r\n                  >\r\n                    <svg\r\n                      width=\"14\"\r\n                      height=\"14\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                    >\r\n                      <polyline points=\"3 6 5 6 21 6\" />\r\n                      <path d=\"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2\" />\r\n                    </svg>\r\n                  </button>\r\n                </div>\r\n              ))}\r\n\r\n              {isAddingSubtask && (\r\n                <div className=\"modal-v2-subtask-input-row\">\r\n                  <input\r\n                    type=\"text\"\r\n                    placeholder=\"Subtask title...\"\r\n                    value={newSubtaskTitle}\r\n                    onChange={(e) => setNewSubtaskTitle(e.target.value)}\r\n                    onKeyDown={(e) => {\r\n                      if (e.key === 'Enter') handleAddSubtask()\r\n                      if (e.key === 'Escape') {\r\n                        setIsAddingSubtask(false)\r\n                        setNewSubtaskTitle('')\r\n                      }\r\n                    }}\r\n                    onBlur={handleAddSubtask}\r\n                    autoFocus\r\n                    className=\"modal-v2-subtask-input\"\r\n                  />\r\n                </div>\r\n              )}\r\n            </div>\r\n          </section>\r\n\r\n          {/* ACTIVITY & COMMENTS */}\r\n          <section className=\"modal-v2-section\">\r\n            <div className=\"modal-v2-section-header\">\r\n              <svg\r\n                width=\"20\"\r\n                height=\"20\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n              >\r\n                <path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" />\r\n              </svg>\r\n              <h2>Activity</h2>\r\n              <div className=\"modal-v2-filters\">\r\n                <button\r\n                  className={`modal-v2-filter ${activityFilter === 'all' ? 'active' : ''}`}\r\n                  onClick={() => setActivityFilter('all')}\r\n                >\r\n                  All\r\n                </button>\r\n                <button\r\n                  className={`modal-v2-filter ${activityFilter === 'comments' ? 'active' : ''}`}\r\n                  onClick={() => setActivityFilter('comments')}\r\n                >\r\n                  Comments\r\n                </button>\r\n                <button\r\n                  className={`modal-v2-filter ${activityFilter === 'history' ? 'active' : ''}`}\r\n                  onClick={() => setActivityFilter('history')}\r\n                >\r\n                  History\r\n                </button>\r\n              </div>\r\n            </div>\r\n\r\n            {/* Comment Input */}\r\n            <div className=\"modal-v2-comment-input\">\r\n              {currentUser && (\r\n                <div className=\"modal-v2-avatar\" style={{ background: currentUser.color }}>\r\n                  {currentUser.initials}\r\n                </div>\r\n              )}\r\n              <div className=\"modal-v2-comment-wrapper\">\r\n                <textarea\r\n                  ref={commentRef}\r\n                  className=\"modal-v2-comment-textarea\"\r\n                  placeholder=\"Write a comment...\"\r\n                  value={commentText}\r\n                  onChange={(e) => setCommentText(e.target.value)}\r\n                  onKeyDown={handleCommentKeyDown}\r\n                  rows={1}\r\n                />\r\n                <div className=\"modal-v2-comment-toolbar\">\r\n                  <div className=\"modal-v2-toolbar-left\">\r\n                    <button className=\"modal-v2-toolbar-button\" title=\"Attach file\">\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48\" />\r\n                      </svg>\r\n                    </button>\r\n                    <button className=\"modal-v2-toolbar-button\" title=\"Mention user\">\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <circle cx=\"12\" cy=\"12\" r=\"4\" />\r\n                        <path d=\"M16 8v5a3 3 0 006 0v-1a10 10 0 10-3.92 7.94\" />\r\n                      </svg>\r\n                    </button>\r\n                    <button className=\"modal-v2-toolbar-button\" title=\"Add emoji\">\r\n                      <svg\r\n                        width=\"16\"\r\n                        height=\"16\"\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                      >\r\n                        <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n                        <path d=\"M8 14s1.5 2 4 2 4-2 4-2\" />\r\n                        <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" />\r\n                        <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" />\r\n                      </svg>\r\n                    </button>\r\n                  </div>\r\n                  <button\r\n                    className=\"modal-v2-send-button\"\r\n                    onClick={handleSendComment}\r\n                    disabled={!commentText.trim()}\r\n                  >\r\n                    Send\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n\r\n            {/* Activity Timeline */}\r\n            <div className=\"modal-v2-timeline\">\r\n              {filteredActivity.map((activity) => {\r\n                const user = availableUsers.find((u) => u.id === activity.userId)\r\n                const isComment = activity.type.includes('COMMENT')\r\n\r\n                if (isComment) {\r\n                  const comment = comments.find((c) => c.id === activity.metadata?.commentId)\r\n                  if (!comment) return null\r\n\r\n                  return (\r\n                    <div key={activity.id} className=\"modal-v2-activity-item comment-item\">\r\n                      {user && (\r\n                        <div className=\"modal-v2-avatar\" style={{ background: user.color }}>\r\n                          {user.initials}\r\n                        </div>\r\n                      )}\r\n                      <div className=\"modal-v2-activity-content\">\r\n                        <div className=\"modal-v2-activity-header\">\r\n                          <span className=\"modal-v2-activity-user\">\r\n                            {user?.name || 'Unknown'}\r\n                          </span>\r\n                          <span className=\"modal-v2-activity-time\">\r\n                            {new Date(activity.timestamp).toLocaleString()}\r\n                          </span>\r\n                        </div>\r\n                        <div className=\"modal-v2-comment-body\">{comment.content}</div>\r\n                      </div>\r\n                    </div>\r\n                  )\r\n                }\r\n\r\n                // History item\r\n                return (\r\n                  <div key={activity.id} className=\"modal-v2-activity-item history-item\">\r\n                    <div className=\"modal-v2-history-icon\">\r\n                      {activity.type.includes('CREATED') && '➕'}\r\n                      {activity.type.includes('UPDATED') && '✏️'}\r\n                      {activity.type.includes('MOVED') && '➡️'}\r\n                      {activity.type.includes('DELETED') && '🗑️'}\r\n                      {activity.type.includes('ASSIGNED') && '👤'}\r\n                      {activity.type.includes('PRIORITY') && '🎯'}\r\n                      {activity.type.includes('LABEL') && '🏷️'}\r\n                    </div>\r\n                    <div className=\"modal-v2-activity-content\">\r\n                      <div className=\"modal-v2-history-text\">\r\n                        <span className=\"modal-v2-activity-user\">\r\n                          {user?.name || 'Unknown'}\r\n                        </span>{' '}\r\n                        {activity.type.replace(/_/g, ' ').toLowerCase()}\r\n                        {activity.newValue && (\r\n                          <>\r\n                            {' to '}\r\n                            <strong>{activity.newValue}</strong>\r\n                          </>\r\n                        )}\r\n                      </div>\r\n                      <span className=\"modal-v2-activity-time\">\r\n                        {new Date(activity.timestamp).toLocaleString()}\r\n                      </span>\r\n                    </div>\r\n                  </div>\r\n                )\r\n              })}\r\n\r\n              {filteredActivity.length === 0 && (\r\n                <div className=\"modal-v2-empty\">\r\n                  <p>No activity yet</p>\r\n                  <span>Activity will appear here</span>\r\n                </div>\r\n              )}\r\n            </div>\r\n          </section>\r\n        </div>\r\n      </div>\r\n    </Portal>\r\n  )\r\n}\r\n","/**\r\n * VelocityChart Component\r\n * Shows team velocity over time (cards completed per week/sprint)\r\n */\r\n\r\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'\r\nimport './charts.css'\r\n\r\nexport interface VelocityDataPoint {\r\n  /** Period name (e.g., \"Week 1\", \"Sprint 3\") */\r\n  period: string\r\n  /** Number of cards completed */\r\n  completed: number\r\n  /** Number of cards planned */\r\n  planned?: number\r\n  /** Average velocity (optional) */\r\n  average?: number\r\n}\r\n\r\nexport interface VelocityChartProps {\r\n  /** Velocity data points */\r\n  data: VelocityDataPoint[]\r\n  /** Chart title */\r\n  title?: string\r\n  /** Chart height in pixels */\r\n  height?: number\r\n  /** Show average line */\r\n  showAverage?: boolean\r\n  /** Show planned line */\r\n  showPlanned?: boolean\r\n}\r\n\r\n/**\r\n * Custom tooltip for velocity chart\r\n */\r\nfunction CustomTooltip({ active, payload }: any) {\r\n  if (!active || !payload || !payload.length) return null\r\n\r\n  return (\r\n    <div className=\"chart-tooltip\">\r\n      <p className=\"chart-tooltip-label\">{payload[0].payload.period}</p>\r\n      {payload.map((entry: any, index: number) => (\r\n        <p key={index} className=\"chart-tooltip-value\" style={{ color: entry.color }}>\r\n          {entry.name}: <strong>{entry.value}</strong> cards\r\n        </p>\r\n      ))}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport function VelocityChart({\r\n  data,\r\n  title = 'Team Velocity',\r\n  height = 300,\r\n  showAverage = true,\r\n  showPlanned = true,\r\n}: VelocityChartProps) {\r\n  // Calculate average if not provided\r\n  const dataWithAverage = data.map((point) => ({\r\n    ...point,\r\n    average:\r\n      point.average ??\r\n      data.reduce((sum, p) => sum + p.completed, 0) / data.length,\r\n  }))\r\n\r\n  return (\r\n    <div className=\"chart-container\">\r\n      {title && <h3 className=\"chart-title\">{title}</h3>}\r\n\r\n      <ResponsiveContainer width=\"100%\" height={height}>\r\n        <LineChart\r\n          data={dataWithAverage}\r\n          margin={{ top: 5, right: 30, left: 20, bottom: 5 }}\r\n        >\r\n          <CartesianGrid strokeDasharray=\"3 3\" stroke=\"rgba(255, 255, 255, 0.1)\" />\r\n          <XAxis\r\n            dataKey=\"period\"\r\n            stroke=\"rgba(255, 255, 255, 0.5)\"\r\n            style={{ fontSize: '12px' }}\r\n          />\r\n          <YAxis\r\n            stroke=\"rgba(255, 255, 255, 0.5)\"\r\n            style={{ fontSize: '12px' }}\r\n          />\r\n          <Tooltip content={<CustomTooltip />} />\r\n          <Legend\r\n            wrapperStyle={{ fontSize: '12px', color: 'rgba(255, 255, 255, 0.7)' }}\r\n          />\r\n\r\n          {/* Completed cards line */}\r\n          <Line\r\n            type=\"monotone\"\r\n            dataKey=\"completed\"\r\n            stroke=\"#10B981\"\r\n            strokeWidth={3}\r\n            name=\"Completed\"\r\n            dot={{ fill: '#10B981', r: 5 }}\r\n            activeDot={{ r: 7 }}\r\n          />\r\n\r\n          {/* Planned cards line */}\r\n          {showPlanned && (\r\n            <Line\r\n              type=\"monotone\"\r\n              dataKey=\"planned\"\r\n              stroke=\"#3B82F6\"\r\n              strokeWidth={2}\r\n              strokeDasharray=\"5 5\"\r\n              name=\"Planned\"\r\n              dot={{ fill: '#3B82F6', r: 4 }}\r\n            />\r\n          )}\r\n\r\n          {/* Average line */}\r\n          {showAverage && (\r\n            <Line\r\n              type=\"monotone\"\r\n              dataKey=\"average\"\r\n              stroke=\"#F59E0B\"\r\n              strokeWidth={2}\r\n              strokeDasharray=\"3 3\"\r\n              name=\"Average\"\r\n              dot={false}\r\n            />\r\n          )}\r\n        </LineChart>\r\n      </ResponsiveContainer>\r\n\r\n      {/* Stats */}\r\n      <div className=\"chart-stats\">\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Total Completed</span>\r\n          <span className=\"chart-stat-value\" style={{ color: '#10B981' }}>\r\n            {data.reduce((sum, point) => sum + point.completed, 0)}\r\n          </span>\r\n        </div>\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Average Velocity</span>\r\n          <span className=\"chart-stat-value\" style={{ color: '#F59E0B' }}>\r\n            {(data.reduce((sum, point) => sum + point.completed, 0) / data.length).toFixed(1)}\r\n          </span>\r\n        </div>\r\n        {showPlanned && data.some((p) => p.planned) && (\r\n          <div className=\"chart-stat\">\r\n            <span className=\"chart-stat-label\">Total Planned</span>\r\n            <span className=\"chart-stat-value\" style={{ color: '#3B82F6' }}>\r\n              {data.reduce((sum, point) => sum + (point.planned || 0), 0)}\r\n            </span>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * BurnDownChart Component\r\n * Shows remaining work over time compared to ideal burndown\r\n */\r\n\r\nimport { AreaChart, Area, LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'\r\nimport './charts.css'\r\n\r\nexport interface BurnDownDataPoint {\r\n  /** Day/Date label */\r\n  day: string\r\n  /** Remaining tasks */\r\n  remaining: number\r\n  /** Ideal burndown line */\r\n  ideal: number\r\n}\r\n\r\nexport interface BurnDownChartProps {\r\n  /** Burndown data points */\r\n  data: BurnDownDataPoint[]\r\n  /** Chart title */\r\n  title?: string\r\n  /** Chart height in pixels */\r\n  height?: number\r\n  /** Total tasks at start */\r\n  totalTasks?: number\r\n  /** Use area chart instead of line */\r\n  useArea?: boolean\r\n}\r\n\r\n/**\r\n * Custom tooltip for burndown chart\r\n */\r\nfunction CustomTooltip({ active, payload }: any) {\r\n  if (!active || !payload || !payload.length) return null\r\n\r\n  return (\r\n    <div className=\"chart-tooltip\">\r\n      <p className=\"chart-tooltip-label\">{payload[0].payload.day}</p>\r\n      {payload.map((entry: any, index: number) => (\r\n        <p key={index} className=\"chart-tooltip-value\" style={{ color: entry.color }}>\r\n          {entry.name}: <strong>{entry.value}</strong> tasks\r\n        </p>\r\n      ))}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport function BurnDownChart({\r\n  data,\r\n  title = 'Sprint Burndown',\r\n  height = 300,\r\n  totalTasks,\r\n  useArea = false,\r\n}: BurnDownChartProps) {\r\n  // Calculate total tasks if not provided\r\n  const total = totalTasks ?? (data[0]?.ideal || data[0]?.remaining || 0)\r\n\r\n  // Calculate stats\r\n  const currentRemaining = data[data.length - 1]?.remaining || 0\r\n  const idealRemaining = data[data.length - 1]?.ideal || 0\r\n  const progress = total > 0 ? ((total - currentRemaining) / total) * 100 : 0\r\n  const isOnTrack = currentRemaining <= idealRemaining\r\n\r\n  const ChartComponent = useArea ? AreaChart : LineChart\r\n\r\n  return (\r\n    <div className=\"chart-container\">\r\n      {title && <h3 className=\"chart-title\">{title}</h3>}\r\n\r\n      <ResponsiveContainer width=\"100%\" height={height}>\r\n        <ChartComponent\r\n          data={data}\r\n          margin={{ top: 5, right: 30, left: 20, bottom: 5 }}\r\n        >\r\n          <CartesianGrid strokeDasharray=\"3 3\" stroke=\"rgba(255, 255, 255, 0.1)\" />\r\n          <XAxis\r\n            dataKey=\"day\"\r\n            stroke=\"rgba(255, 255, 255, 0.5)\"\r\n            style={{ fontSize: '12px' }}\r\n          />\r\n          <YAxis\r\n            stroke=\"rgba(255, 255, 255, 0.5)\"\r\n            style={{ fontSize: '12px' }}\r\n          />\r\n          <Tooltip content={<CustomTooltip />} />\r\n          <Legend\r\n            wrapperStyle={{ fontSize: '12px', color: 'rgba(255, 255, 255, 0.7)' }}\r\n          />\r\n\r\n          {useArea ? (\r\n            <>\r\n              {/* Ideal burndown area */}\r\n              <Area\r\n                type=\"monotone\"\r\n                dataKey=\"ideal\"\r\n                stroke=\"#F59E0B\"\r\n                fill=\"rgba(245, 158, 11, 0.2)\"\r\n                strokeWidth={2}\r\n                strokeDasharray=\"5 5\"\r\n                name=\"Ideal\"\r\n              />\r\n              {/* Actual burndown area */}\r\n              <Area\r\n                type=\"monotone\"\r\n                dataKey=\"remaining\"\r\n                stroke={isOnTrack ? '#10B981' : '#EF4444'}\r\n                fill={isOnTrack ? 'rgba(16, 185, 129, 0.2)' : 'rgba(239, 68, 68, 0.2)'}\r\n                strokeWidth={3}\r\n                name=\"Remaining\"\r\n              />\r\n            </>\r\n          ) : (\r\n            <>\r\n              {/* Ideal burndown line */}\r\n              <Line\r\n                type=\"linear\"\r\n                dataKey=\"ideal\"\r\n                stroke=\"#F59E0B\"\r\n                strokeWidth={2}\r\n                strokeDasharray=\"5 5\"\r\n                name=\"Ideal\"\r\n                dot={{ fill: '#F59E0B', r: 4 }}\r\n              />\r\n              {/* Actual burndown line */}\r\n              <Line\r\n                type=\"monotone\"\r\n                dataKey=\"remaining\"\r\n                stroke={isOnTrack ? '#10B981' : '#EF4444'}\r\n                strokeWidth={3}\r\n                name=\"Remaining\"\r\n                dot={{ fill: isOnTrack ? '#10B981' : '#EF4444', r: 5 }}\r\n                activeDot={{ r: 7 }}\r\n              />\r\n            </>\r\n          )}\r\n        </ChartComponent>\r\n      </ResponsiveContainer>\r\n\r\n      {/* Stats */}\r\n      <div className=\"chart-stats\">\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Progress</span>\r\n          <span\r\n            className=\"chart-stat-value\"\r\n            style={{ color: progress >= 50 ? '#10B981' : '#F59E0B' }}\r\n          >\r\n            {progress.toFixed(0)}%\r\n          </span>\r\n        </div>\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Remaining</span>\r\n          <span\r\n            className=\"chart-stat-value\"\r\n            style={{ color: isOnTrack ? '#10B981' : '#EF4444' }}\r\n          >\r\n            {currentRemaining}\r\n          </span>\r\n        </div>\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Status</span>\r\n          <span\r\n            className=\"chart-stat-badge\"\r\n            style={{\r\n              background: isOnTrack\r\n                ? 'rgba(16, 185, 129, 0.15)'\r\n                : 'rgba(239, 68, 68, 0.15)',\r\n              color: isOnTrack ? '#10B981' : '#EF4444',\r\n            }}\r\n          >\r\n            {isOnTrack ? '✓ On Track' : '⚠ Behind'}\r\n          </span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * DistributionCharts Component\r\n * Shows distribution of cards by priority, status, or assignees\r\n */\r\n\r\nimport { PieChart, Pie, Cell, BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'\r\nimport './charts.css'\r\n\r\nexport interface DistributionDataPoint {\r\n  /** Category name */\r\n  name: string\r\n  /** Value/count */\r\n  value: number\r\n  /** Optional color */\r\n  color?: string\r\n}\r\n\r\nexport interface DistributionChartsProps {\r\n  /** Distribution data */\r\n  data: DistributionDataPoint[]\r\n  /** Chart title */\r\n  title?: string\r\n  /** Chart type */\r\n  type?: 'pie' | 'bar'\r\n  /** Chart height in pixels */\r\n  height?: number\r\n  /** Show percentages */\r\n  showPercentages?: boolean\r\n}\r\n\r\n// Default colors for priority\r\nconst PRIORITY_COLORS: Record<string, string> = {\r\n  URGENT: '#EF4444',\r\n  HIGH: '#F59E0B',\r\n  MEDIUM: '#3B82F6',\r\n  LOW: '#10B981',\r\n}\r\n\r\n// Default colors for common categories\r\nconst DEFAULT_COLORS = ['#3B82F6', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899']\r\n\r\n/**\r\n * Custom label for pie chart\r\n */\r\nfunction renderPieLabel({\r\n  cx,\r\n  cy,\r\n  midAngle,\r\n  innerRadius,\r\n  outerRadius,\r\n  percent,\r\n}: any) {\r\n  const radius = innerRadius + (outerRadius - innerRadius) * 0.5\r\n  const x = cx + radius * Math.cos(-midAngle * (Math.PI / 180))\r\n  const y = cy + radius * Math.sin(-midAngle * (Math.PI / 180))\r\n\r\n  if (percent < 0.05) return null // Don't show label for small slices\r\n\r\n  return (\r\n    <text\r\n      x={x}\r\n      y={y}\r\n      fill=\"white\"\r\n      textAnchor={x > cx ? 'start' : 'end'}\r\n      dominantBaseline=\"central\"\r\n      style={{ fontSize: '12px', fontWeight: 600 }}\r\n    >\r\n      {`${(percent * 100).toFixed(0)}%`}\r\n    </text>\r\n  )\r\n}\r\n\r\n/**\r\n * Custom tooltip\r\n */\r\nfunction CustomTooltip({ active, payload }: any) {\r\n  if (!active || !payload || !payload.length) return null\r\n\r\n  const data = payload[0].payload\r\n  const total = payload[0].payload.totalValue || 0\r\n  const percentage = total > 0 ? ((data.value / total) * 100).toFixed(1) : '0'\r\n\r\n  return (\r\n    <div className=\"chart-tooltip\">\r\n      <p className=\"chart-tooltip-label\">{data.name}</p>\r\n      <p className=\"chart-tooltip-value\" style={{ color: data.color || payload[0].color }}>\r\n        Count: <strong>{data.value}</strong>\r\n      </p>\r\n      <p className=\"chart-tooltip-value\" style={{ color: 'rgba(255, 255, 255, 0.7)' }}>\r\n        Percentage: <strong>{percentage}%</strong>\r\n      </p>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport function DistributionCharts({\r\n  data,\r\n  title = 'Distribution',\r\n  type = 'pie',\r\n  height = 300,\r\n  showPercentages = true,\r\n}: DistributionChartsProps) {\r\n  // Calculate total and add to each data point\r\n  const total = data.reduce((sum, point) => sum + point.value, 0)\r\n  const dataWithTotal = data.map((point) => ({\r\n    ...point,\r\n    totalValue: total,\r\n    color: point.color || PRIORITY_COLORS[point.name] || DEFAULT_COLORS[data.indexOf(point) % DEFAULT_COLORS.length],\r\n  }))\r\n\r\n  // Get colors array\r\n  const colors = dataWithTotal.map((point) => point.color)\r\n\r\n  return (\r\n    <div className=\"chart-container\">\r\n      {title && <h3 className=\"chart-title\">{title}</h3>}\r\n\r\n      <ResponsiveContainer width=\"100%\" height={height}>\r\n        {type === 'pie' ? (\r\n          <PieChart>\r\n            <Pie\r\n              data={dataWithTotal}\r\n              cx=\"50%\"\r\n              cy=\"50%\"\r\n              labelLine={false}\r\n              label={showPercentages ? renderPieLabel : false}\r\n              outerRadius={height * 0.35}\r\n              fill=\"#8884d8\"\r\n              dataKey=\"value\"\r\n            >\r\n              {dataWithTotal.map((_, index) => (\r\n                <Cell key={`cell-${index}`} fill={colors[index]} />\r\n              ))}\r\n            </Pie>\r\n            <Tooltip content={<CustomTooltip />} />\r\n            <Legend\r\n              wrapperStyle={{ fontSize: '12px', color: 'rgba(255, 255, 255, 0.7)' }}\r\n              formatter={(value, legendEntry: any) => {\r\n                const point = legendEntry.payload\r\n                const percentage = total > 0 ? ((point.value / total) * 100).toFixed(0) : '0'\r\n                return `${value} (${point.value} - ${percentage}%)`\r\n              }}\r\n            />\r\n          </PieChart>\r\n        ) : (\r\n          <BarChart\r\n            data={dataWithTotal}\r\n            margin={{ top: 5, right: 30, left: 20, bottom: 5 }}\r\n          >\r\n            <CartesianGrid strokeDasharray=\"3 3\" stroke=\"rgba(255, 255, 255, 0.1)\" />\r\n            <XAxis\r\n              dataKey=\"name\"\r\n              stroke=\"rgba(255, 255, 255, 0.5)\"\r\n              style={{ fontSize: '12px' }}\r\n            />\r\n            <YAxis\r\n              stroke=\"rgba(255, 255, 255, 0.5)\"\r\n              style={{ fontSize: '12px' }}\r\n            />\r\n            <Tooltip content={<CustomTooltip />} />\r\n            <Legend\r\n              wrapperStyle={{ fontSize: '12px', color: 'rgba(255, 255, 255, 0.7)' }}\r\n            />\r\n            <Bar dataKey=\"value\" name=\"Count\" radius={[8, 8, 0, 0]}>\r\n              {dataWithTotal.map((_, index) => (\r\n                <Cell key={`cell-${index}`} fill={colors[index]} />\r\n              ))}\r\n            </Bar>\r\n          </BarChart>\r\n        )}\r\n      </ResponsiveContainer>\r\n\r\n      {/* Stats */}\r\n      <div className=\"chart-stats\">\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Total Cards</span>\r\n          <span className=\"chart-stat-value\" style={{ color: '#3B82F6' }}>\r\n            {total}\r\n          </span>\r\n        </div>\r\n        <div className=\"chart-stat\">\r\n          <span className=\"chart-stat-label\">Categories</span>\r\n          <span className=\"chart-stat-value\" style={{ color: '#10B981' }}>\r\n            {data.length}\r\n          </span>\r\n        </div>\r\n        {data.length > 0 && (\r\n          <div className=\"chart-stat\">\r\n            <span className=\"chart-stat-label\">Largest Category</span>\r\n            <span className=\"chart-stat-value\" style={{ color: '#F59E0B' }}>\r\n              {data.reduce((max, point) => (point.value > max.value ? point : max)).name}\r\n            </span>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Bulk Operations Toolbar\r\n * Floating toolbar for performing bulk actions on selected cards\r\n * @module components/BulkOperations\r\n */\r\n\r\nimport { memo, useState } from 'react'\r\nimport type { Card, Priority, BulkOperationsCallbacks } from '../../types'\r\nimport type { User } from '../Card/UserAssignmentSelector'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface BulkOperationsToolbarProps {\r\n  /** Selected cards */\r\n  selectedCards: Card[]\r\n  /** Available users for assignment */\r\n  availableUsers?: User[]\r\n  /** Callback when selection is cleared */\r\n  onClearSelection: () => void\r\n  /** Bulk operations callbacks */\r\n  callbacks: BulkOperationsCallbacks\r\n  /** Available columns for move operation */\r\n  columns?: Array<{ id: string; title: string }>\r\n  /** Available labels */\r\n  availableLabels?: string[]\r\n}\r\n\r\n/**\r\n * Bulk Operations Toolbar Component\r\n */\r\nexport const BulkOperationsToolbar = memo<BulkOperationsToolbarProps>(\r\n  ({\r\n    selectedCards,\r\n    availableUsers = [],\r\n    onClearSelection,\r\n    callbacks,\r\n    columns = [],\r\n    availableLabels = [],\r\n  }) => {\r\n    const [showPriorityMenu, setShowPriorityMenu] = useState(false)\r\n    const [showMoveMenu, setShowMoveMenu] = useState(false)\r\n    const [showUserMenu, setShowUserMenu] = useState(false)\r\n    const [showLabelMenu, setShowLabelMenu] = useState(false)\r\n\r\n    if (selectedCards.length === 0) return null\r\n\r\n    const cardIds = selectedCards.map((card) => card.id)\r\n\r\n    const handleUpdatePriority = (priority: Priority) => {\r\n      callbacks.onBulkUpdate?.(cardIds, { priority })\r\n      setShowPriorityMenu(false)\r\n    }\r\n\r\n    const handleMove = (columnId: string) => {\r\n      callbacks.onBulkMove?.(cardIds, columnId)\r\n      setShowMoveMenu(false)\r\n      onClearSelection()\r\n    }\r\n\r\n    const handleAssignUsers = (userIds: string[]) => {\r\n      callbacks.onBulkUpdate?.(cardIds, { assignedUserIds: userIds })\r\n      setShowUserMenu(false)\r\n    }\r\n\r\n    const handleAddLabels = (labels: string[]) => {\r\n      // Get existing labels from all selected cards\r\n      const existingLabels = new Set<string>()\r\n      selectedCards.forEach((card) => {\r\n        card.labels?.forEach((label) => existingLabels.add(label))\r\n      })\r\n\r\n      // Merge with new labels\r\n      const allLabels = Array.from(new Set([...existingLabels, ...labels]))\r\n\r\n      callbacks.onBulkUpdate?.(cardIds, { labels: allLabels })\r\n      setShowLabelMenu(false)\r\n    }\r\n\r\n    const handleDelete = () => {\r\n      if (confirm(`Delete ${selectedCards.length} card(s)? This cannot be undone.`)) {\r\n        callbacks.onBulkDelete?.(cardIds)\r\n        onClearSelection()\r\n      }\r\n    }\r\n\r\n    return (\r\n      <div className=\"asakaa-bulk-toolbar\">\r\n        <div className=\"asakaa-bulk-toolbar-content\">\r\n          {/* Selection count */}\r\n          <div className=\"asakaa-bulk-toolbar-count\">\r\n            {selectedCards.length} card{selectedCards.length !== 1 ? 's' : ''} selected\r\n          </div>\r\n\r\n          {/* Actions */}\r\n          <div className=\"asakaa-bulk-toolbar-actions\">\r\n            {/* Priority */}\r\n            <div className=\"relative\">\r\n              <button\r\n                className=\"asakaa-bulk-toolbar-button\"\r\n                onClick={() => setShowPriorityMenu(!showPriorityMenu)}\r\n                title=\"Update priority\"\r\n              >\r\n                <span className=\"text-sm\">Priority</span>\r\n              </button>\r\n              {showPriorityMenu && (\r\n                <div className=\"asakaa-bulk-menu\">\r\n                  {(['LOW', 'MEDIUM', 'HIGH', 'URGENT'] as Priority[]).map((priority) => (\r\n                    <button\r\n                      key={priority}\r\n                      className=\"asakaa-bulk-menu-item\"\r\n                      onClick={() => handleUpdatePriority(priority)}\r\n                    >\r\n                      <span\r\n                        className={cn(\r\n                          'asakaa-priority-dot',\r\n                          priority === 'LOW' && 'bg-asakaa-priority-low',\r\n                          priority === 'MEDIUM' && 'bg-asakaa-priority-medium',\r\n                          priority === 'HIGH' && 'bg-asakaa-priority-high',\r\n                          priority === 'URGENT' && 'bg-asakaa-priority-urgent'\r\n                        )}\r\n                      />\r\n                      {priority}\r\n                    </button>\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </div>\r\n\r\n            {/* Move to column */}\r\n            {columns.length > 0 && (\r\n              <div className=\"relative\">\r\n                <button\r\n                  className=\"asakaa-bulk-toolbar-button\"\r\n                  onClick={() => setShowMoveMenu(!showMoveMenu)}\r\n                  title=\"Move to column\"\r\n                >\r\n                  <span className=\"text-sm\">Move</span>\r\n                </button>\r\n                {showMoveMenu && (\r\n                  <div className=\"asakaa-bulk-menu\">\r\n                    {columns.map((column) => (\r\n                      <button\r\n                        key={column.id}\r\n                        className=\"asakaa-bulk-menu-item\"\r\n                        onClick={() => handleMove(column.id)}\r\n                      >\r\n                        {column.title}\r\n                      </button>\r\n                    ))}\r\n                  </div>\r\n                )}\r\n              </div>\r\n            )}\r\n\r\n            {/* Assign users */}\r\n            {availableUsers.length > 0 && (\r\n              <div className=\"relative\">\r\n                <button\r\n                  className=\"asakaa-bulk-toolbar-button\"\r\n                  onClick={() => setShowUserMenu(!showUserMenu)}\r\n                  title=\"Assign users\"\r\n                >\r\n                  <span className=\"text-sm\">Assign</span>\r\n                </button>\r\n                {showUserMenu && (\r\n                  <div className=\"asakaa-bulk-menu\">\r\n                    {availableUsers.map((user) => (\r\n                      <button\r\n                        key={user.id}\r\n                        className=\"asakaa-bulk-menu-item\"\r\n                        onClick={() => handleAssignUsers([user.id])}\r\n                      >\r\n                        <div\r\n                          className=\"w-5 h-5 rounded-full flex items-center justify-center text-xs font-medium\"\r\n                          style={{ backgroundColor: user.color }}\r\n                        >\r\n                          {user.initials}\r\n                        </div>\r\n                        {user.name}\r\n                      </button>\r\n                    ))}\r\n                  </div>\r\n                )}\r\n              </div>\r\n            )}\r\n\r\n            {/* Add labels */}\r\n            {availableLabels.length > 0 && (\r\n              <div className=\"relative\">\r\n                <button\r\n                  className=\"asakaa-bulk-toolbar-button\"\r\n                  onClick={() => setShowLabelMenu(!showLabelMenu)}\r\n                  title=\"Add labels\"\r\n                >\r\n                  <span className=\"text-sm\">Labels</span>\r\n                </button>\r\n                {showLabelMenu && (\r\n                  <div className=\"asakaa-bulk-menu\">\r\n                    {availableLabels.map((label) => (\r\n                      <button\r\n                        key={label}\r\n                        className=\"asakaa-bulk-menu-item\"\r\n                        onClick={() => handleAddLabels([label])}\r\n                      >\r\n                        {label}\r\n                      </button>\r\n                    ))}\r\n                  </div>\r\n                )}\r\n              </div>\r\n            )}\r\n\r\n            {/* Delete */}\r\n            <button\r\n              className=\"asakaa-bulk-toolbar-button asakaa-bulk-toolbar-button-danger\"\r\n              onClick={handleDelete}\r\n              title=\"Delete selected cards\"\r\n            >\r\n              <span className=\"text-sm\">Delete</span>\r\n            </button>\r\n\r\n            {/* Clear selection */}\r\n            <button\r\n              className=\"asakaa-bulk-toolbar-button\"\r\n              onClick={onClearSelection}\r\n              title=\"Clear selection\"\r\n            >\r\n              <span className=\"text-sm\">✕</span>\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n)\r\n\r\nBulkOperationsToolbar.displayName = 'BulkOperationsToolbar'\r\n","/**\r\n * SwimlaneBoardView Component\r\n * Displays board grouped by swimlanes (horizontal rows)\r\n * @module components/Swimlanes\r\n */\r\n\r\nimport { useMemo, useState, useCallback } from 'react'\r\nimport type {\r\n  Board,\r\n  Card,\r\n  Column,\r\n  GroupByOption,\r\n  Swimlane,\r\n  SwimlaneConfig,\r\n} from '../../types'\r\nimport type { User } from '../Card/UserAssignmentSelector'\r\nimport { KanbanBoard } from '../Board'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface SwimlaneBoardViewProps {\r\n  /** Board data */\r\n  board: Board\r\n  /** Swimlane configuration */\r\n  swimlaneConfig: SwimlaneConfig\r\n  /** All available users */\r\n  availableUsers?: User[]\r\n  /** Board callbacks */\r\n  callbacks: {\r\n    onCardMove?: (cardId: string, targetColumnId: string, position: number) => void\r\n    onCardUpdate?: (cardId: string, updates: Partial<Card>) => void\r\n    onColumnUpdate?: (columnId: string, updates: Partial<Column>) => void\r\n    onWipLimitExceeded?: (column: Column, card: Card) => void\r\n  }\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Generate swimlanes based on groupBy option\r\n */\r\nfunction generateSwimlanes(\r\n  cards: Card[],\r\n  groupBy: GroupByOption,\r\n  availableUsers?: User[]\r\n): Swimlane[] {\r\n  if (groupBy === 'none') {\r\n    return []\r\n  }\r\n\r\n  const laneMap = new Map<string, Swimlane>()\r\n\r\n  // Group cards by the selected criteria\r\n  cards.forEach((card) => {\r\n    let groupValue: any\r\n    let laneId: string\r\n    let laneTitle: string\r\n    let laneColor: string | undefined\r\n    let laneIcon: string | undefined\r\n\r\n    switch (groupBy) {\r\n      case 'assignee':\r\n        // Use assignedUserIds or fallback to assigneeId\r\n        const assignedUserIds = card.assignedUserIds || (card.assigneeId ? [card.assigneeId] : [])\r\n\r\n        if (assignedUserIds.length > 0) {\r\n          assignedUserIds.forEach((userId: string) => {\r\n            const user = availableUsers?.find((u) => u.id === userId)\r\n            laneId = `assignee-${userId}`\r\n            laneTitle = user?.name || `User ${userId}`\r\n            laneColor = user?.color\r\n            laneIcon = user?.avatar\r\n\r\n            if (!laneMap.has(laneId)) {\r\n              laneMap.set(laneId, {\r\n                id: laneId,\r\n                title: laneTitle,\r\n                groupValue: userId,\r\n                cardIds: [],\r\n                color: laneColor,\r\n                icon: laneIcon,\r\n              })\r\n            }\r\n            laneMap.get(laneId)!.cardIds.push(card.id)\r\n          })\r\n        } else {\r\n          // Unassigned lane\r\n          laneId = 'assignee-unassigned'\r\n          laneTitle = 'Unassigned'\r\n          laneColor = '#6b7280'\r\n          laneIcon = '👤'\r\n\r\n          if (!laneMap.has(laneId)) {\r\n            laneMap.set(laneId, {\r\n              id: laneId,\r\n              title: laneTitle,\r\n              groupValue: null,\r\n              cardIds: [],\r\n              color: laneColor,\r\n              icon: laneIcon,\r\n            })\r\n          }\r\n          laneMap.get(laneId)!.cardIds.push(card.id)\r\n        }\r\n        break\r\n\r\n      case 'priority':\r\n        groupValue = card.priority || 'NONE'\r\n        laneId = `priority-${groupValue}`\r\n\r\n        // Priority styling\r\n        const priorityConfig = {\r\n          URGENT: { title: '🔴 Urgent', color: '#ef4444' },\r\n          HIGH: { title: '🟠 High', color: '#f97316' },\r\n          MEDIUM: { title: '🟡 Medium', color: '#eab308' },\r\n          LOW: { title: '🟢 Low', color: '#22c55e' },\r\n          NONE: { title: '⚪ No Priority', color: '#6b7280' },\r\n        }\r\n\r\n        const config = priorityConfig[groupValue as keyof typeof priorityConfig]\r\n        laneTitle = config.title\r\n        laneColor = config.color\r\n\r\n        if (!laneMap.has(laneId)) {\r\n          laneMap.set(laneId, {\r\n            id: laneId,\r\n            title: laneTitle,\r\n            groupValue,\r\n            cardIds: [],\r\n            color: laneColor,\r\n          })\r\n        }\r\n        laneMap.get(laneId)!.cardIds.push(card.id)\r\n        break\r\n\r\n      case 'label':\r\n        if (card.labels && card.labels.length > 0) {\r\n          card.labels.forEach((label: string) => {\r\n            laneId = `label-${label}`\r\n            laneTitle = label\r\n            laneColor = '#6b7280' // Default gray color for string labels\r\n\r\n            if (!laneMap.has(laneId)) {\r\n              laneMap.set(laneId, {\r\n                id: laneId,\r\n                title: laneTitle,\r\n                groupValue: label,\r\n                cardIds: [],\r\n                color: laneColor,\r\n              })\r\n            }\r\n            laneMap.get(laneId)!.cardIds.push(card.id)\r\n          })\r\n        } else {\r\n          // No labels lane\r\n          laneId = 'label-none'\r\n          laneTitle = 'No Labels'\r\n          laneColor = '#6b7280'\r\n\r\n          if (!laneMap.has(laneId)) {\r\n            laneMap.set(laneId, {\r\n              id: laneId,\r\n              title: laneTitle,\r\n              groupValue: null,\r\n              cardIds: [],\r\n              color: laneColor,\r\n            })\r\n          }\r\n          laneMap.get(laneId)!.cardIds.push(card.id)\r\n        }\r\n        break\r\n    }\r\n  })\r\n\r\n  return Array.from(laneMap.values()).sort((a, b) => {\r\n    // Sort by title\r\n    return a.title.localeCompare(b.title)\r\n  })\r\n}\r\n\r\n/**\r\n * SwimlaneBoardView Component\r\n */\r\nexport function SwimlaneBoardView({\r\n  board,\r\n  swimlaneConfig,\r\n  availableUsers,\r\n  callbacks,\r\n  className,\r\n}: SwimlaneBoardViewProps) {\r\n  const [collapsedLanes, setCollapsedLanes] = useState<Set<string>>(new Set())\r\n\r\n  // Generate swimlanes\r\n  const swimlanes = useMemo(() => {\r\n    return generateSwimlanes(\r\n      board.cards,\r\n      swimlaneConfig.groupBy,\r\n      availableUsers\r\n    )\r\n  }, [board.cards, swimlaneConfig.groupBy, availableUsers])\r\n\r\n  // Toggle lane collapse\r\n  const toggleLaneCollapse = useCallback((laneId: string) => {\r\n    setCollapsedLanes((prev) => {\r\n      const next = new Set(prev)\r\n      if (next.has(laneId)) {\r\n        next.delete(laneId)\r\n      } else {\r\n        next.add(laneId)\r\n      }\r\n      return next\r\n    })\r\n  }, [])\r\n\r\n  // If no grouping, render standard board\r\n  if (swimlaneConfig.groupBy === 'none' || swimlanes.length === 0) {\r\n    return (\r\n      <KanbanBoard\r\n        board={board}\r\n        callbacks={callbacks}\r\n        availableUsers={availableUsers}\r\n        className={className}\r\n      />\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className={cn('asakaa-swimlane-view', className)}>\r\n      {swimlanes.map((lane) => {\r\n        const isCollapsed = collapsedLanes.has(lane.id)\r\n\r\n        // Filter cards for this lane\r\n        const laneCards = board.cards.filter((card) =>\r\n          lane.cardIds.includes(card.id)\r\n        )\r\n\r\n        // Create filtered board for this lane\r\n        const laneBoard: Board = {\r\n          ...board,\r\n          cards: laneCards,\r\n        }\r\n\r\n        return (\r\n          <div\r\n            key={lane.id}\r\n            className=\"asakaa-swimlane mb-6 rounded-lg border border-white/10 overflow-hidden\"\r\n          >\r\n            {/* Swimlane Header */}\r\n            <div\r\n              className=\"asakaa-swimlane-header px-4 py-3 bg-white/5 backdrop-blur-sm flex items-center justify-between cursor-pointer hover:bg-white/10 transition-colors\"\r\n              onClick={() => swimlaneConfig.collapsible && toggleLaneCollapse(lane.id)}\r\n              style={{\r\n                borderLeft: lane.color ? `4px solid ${lane.color}` : undefined,\r\n              }}\r\n            >\r\n              <div className=\"flex items-center gap-3\">\r\n                {lane.icon && (\r\n                  <span className=\"text-2xl leading-none\">{lane.icon}</span>\r\n                )}\r\n                <h3\r\n                  className=\"text-lg font-semibold\"\r\n                  style={{ color: lane.color }}\r\n                >\r\n                  {lane.title}\r\n                </h3>\r\n                <span className=\"text-sm text-white/50 font-medium\">\r\n                  ({lane.cardIds.length} {lane.cardIds.length === 1 ? 'card' : 'cards'})\r\n                </span>\r\n              </div>\r\n\r\n              {swimlaneConfig.collapsible && (\r\n                <button\r\n                  className=\"text-white/50 hover:text-white transition-colors\"\r\n                  aria-label={isCollapsed ? 'Expand lane' : 'Collapse lane'}\r\n                >\r\n                  {isCollapsed ? '▶' : '▼'}\r\n                </button>\r\n              )}\r\n            </div>\r\n\r\n            {/* Swimlane Content */}\r\n            {!isCollapsed && (\r\n              <div className=\"asakaa-swimlane-content p-4\">\r\n                <KanbanBoard\r\n                  board={laneBoard}\r\n                  callbacks={callbacks}\r\n                  availableUsers={availableUsers}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n        )\r\n      })}\r\n\r\n      {/* Empty state */}\r\n      {swimlanes.length === 0 && (\r\n        <div className=\"text-center py-12 text-white/50\">\r\n          <p className=\"text-lg\">No cards to display</p>\r\n          <p className=\"text-sm mt-2\">\r\n            Cards will appear here when they match the grouping criteria\r\n          </p>\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * GroupBySelector Component\r\n * Dropdown to select swimlane grouping option\r\n * @module components/Swimlanes\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport type { GroupByOption } from '../../types'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface GroupBySelectorProps {\r\n  /** Current groupBy value */\r\n  value: GroupByOption\r\n  /** Change handler */\r\n  onChange: (groupBy: GroupByOption) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\ninterface GroupByConfig {\r\n  value: GroupByOption\r\n  label: string\r\n  icon: string\r\n  description: string\r\n}\r\n\r\nconst GROUP_BY_OPTIONS: GroupByConfig[] = [\r\n  {\r\n    value: 'none',\r\n    label: 'No Grouping',\r\n    icon: '📋',\r\n    description: 'Standard Kanban board view',\r\n  },\r\n  {\r\n    value: 'assignee',\r\n    label: 'By Assignee',\r\n    icon: '👥',\r\n    description: 'Group cards by assigned user',\r\n  },\r\n  {\r\n    value: 'priority',\r\n    label: 'By Priority',\r\n    icon: '🎯',\r\n    description: 'Group cards by priority level',\r\n  },\r\n  {\r\n    value: 'label',\r\n    label: 'By Label',\r\n    icon: '🏷️',\r\n    description: 'Group cards by label/tag',\r\n  },\r\n]\r\n\r\n/**\r\n * GroupBySelector Component\r\n */\r\nexport function GroupBySelector({\r\n  value,\r\n  onChange,\r\n  className,\r\n}: GroupBySelectorProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n\r\n  const currentOption = GROUP_BY_OPTIONS.find((opt) => opt.value === value) || GROUP_BY_OPTIONS[0]!\r\n\r\n  // Close menu on outside click\r\n  useEffect(() => {\r\n    function handleClickOutside(event: MouseEvent): void {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        buttonRef.current &&\r\n        !buttonRef.current.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleSelect = (option: GroupByOption) => {\r\n    onChange(option)\r\n    setIsOpen(false)\r\n  }\r\n\r\n  return (\r\n    <div className={cn('relative inline-block', className)}>\r\n      {/* Trigger Button */}\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center gap-2 px-3 py-2 rounded-lg bg-white/10 hover:bg-white/15 border border-white/20 transition-all text-sm font-medium text-white/90\"\r\n      >\r\n        <span className=\"text-base leading-none\">{currentOption.icon}</span>\r\n        <span>{currentOption.label}</span>\r\n        <svg\r\n          className={cn(\r\n            'w-4 h-4 transition-transform',\r\n            isOpen && 'rotate-180'\r\n          )}\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          viewBox=\"0 0 24 24\"\r\n        >\r\n          <path\r\n            strokeLinecap=\"round\"\r\n            strokeLinejoin=\"round\"\r\n            strokeWidth={2}\r\n            d=\"M19 9l-7 7-7-7\"\r\n          />\r\n        </svg>\r\n      </button>\r\n\r\n      {/* Dropdown Menu */}\r\n      {isOpen && (\r\n        <div\r\n          ref={menuRef}\r\n          className=\"absolute top-full left-0 mt-2 min-w-[280px] rounded-lg bg-gradient-to-br from-gray-900/95 to-gray-800/95 backdrop-blur-xl border border-white/20 shadow-2xl z-50 overflow-hidden\"\r\n        >\r\n          <div className=\"px-3 py-2 border-b border-white/10\">\r\n            <span className=\"text-[10px] font-bold text-white/70 uppercase tracking-wider\">\r\n              Group By\r\n            </span>\r\n          </div>\r\n\r\n          <div className=\"py-1\">\r\n            {GROUP_BY_OPTIONS.map((option) => (\r\n              <button\r\n                key={option.value}\r\n                onClick={() => handleSelect(option.value)}\r\n                className={cn(\r\n                  'w-full px-3 py-2 flex items-start gap-3 text-left transition-all hover:bg-white/10',\r\n                  value === option.value && 'bg-white/5'\r\n                )}\r\n              >\r\n                <span className=\"text-xl leading-none mt-0.5\">\r\n                  {option.icon}\r\n                </span>\r\n                <div className=\"flex-1 min-w-0\">\r\n                  <div className=\"flex items-center gap-2\">\r\n                    <span className=\"font-semibold text-sm text-white\">\r\n                      {option.label}\r\n                    </span>\r\n                    {value === option.value && (\r\n                      <span className=\"text-blue-400 text-xs\">✓</span>\r\n                    )}\r\n                  </div>\r\n                  <p className=\"text-xs text-white/60 mt-0.5\">\r\n                    {option.description}\r\n                  </p>\r\n                </div>\r\n              </button>\r\n            ))}\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * useKeyboardShortcuts Hook\r\n * Global keyboard shortcuts system for board navigation and actions\r\n * @module hooks/keyboard\r\n */\r\n\r\nimport { useEffect, useCallback, useRef } from 'react'\r\nimport type { KeyboardShortcut, KeyboardAction } from '../../types'\r\n\r\nexport interface UseKeyboardShortcutsOptions {\r\n  /** Shortcuts configuration */\r\n  shortcuts?: KeyboardShortcut[]\r\n  /** Enable/disable shortcuts */\r\n  enabled?: boolean\r\n  /** Prevent default browser behavior */\r\n  preventDefault?: boolean\r\n}\r\n\r\nexport interface UseKeyboardShortcutsReturn {\r\n  /** Register a keyboard shortcut dynamically */\r\n  registerShortcut: (shortcut: KeyboardShortcut) => void\r\n  /** Unregister a keyboard shortcut */\r\n  unregisterShortcut: (action: KeyboardAction) => void\r\n  /** Check if shortcuts are enabled */\r\n  isEnabled: boolean\r\n}\r\n\r\n/**\r\n * Default keyboard shortcuts for Kanban board\r\n */\r\nexport const DEFAULT_SHORTCUTS: KeyboardShortcut[] = [\r\n  {\r\n    keys: 'ArrowUp',\r\n    action: 'navigate_up',\r\n    description: 'Navigate to card above',\r\n  },\r\n  {\r\n    keys: 'ArrowDown',\r\n    action: 'navigate_down',\r\n    description: 'Navigate to card below',\r\n  },\r\n  {\r\n    keys: 'ArrowLeft',\r\n    action: 'navigate_left',\r\n    description: 'Navigate to previous column',\r\n  },\r\n  {\r\n    keys: 'ArrowRight',\r\n    action: 'navigate_right',\r\n    description: 'Navigate to next column',\r\n  },\r\n  {\r\n    keys: 'Enter',\r\n    action: 'open_card',\r\n    description: 'Open selected card',\r\n  },\r\n  {\r\n    keys: 'Escape',\r\n    action: 'close_modal',\r\n    description: 'Close modal or dialog',\r\n  },\r\n  {\r\n    keys: 'Delete',\r\n    action: 'delete_card',\r\n    description: 'Delete selected card',\r\n    modifiers: { shift: true },\r\n  },\r\n  {\r\n    keys: 'n',\r\n    action: 'new_card',\r\n    description: 'Create new card',\r\n    modifiers: { ctrl: true },\r\n  },\r\n  {\r\n    keys: 'k',\r\n    action: 'search',\r\n    description: 'Open search/command palette',\r\n    modifiers: { ctrl: true },\r\n  },\r\n  {\r\n    keys: 's',\r\n    action: 'save',\r\n    description: 'Save changes',\r\n    modifiers: { ctrl: true },\r\n  },\r\n  {\r\n    keys: 'z',\r\n    action: 'undo',\r\n    description: 'Undo last action',\r\n    modifiers: { ctrl: true },\r\n  },\r\n  {\r\n    keys: 'y',\r\n    action: 'redo',\r\n    description: 'Redo last undone action',\r\n    modifiers: { ctrl: true },\r\n  },\r\n  {\r\n    keys: 'a',\r\n    action: 'select_all',\r\n    description: 'Select all cards',\r\n    modifiers: { ctrl: true },\r\n  },\r\n  {\r\n    keys: 'Escape',\r\n    action: 'deselect_all',\r\n    description: 'Deselect all cards',\r\n  },\r\n  {\r\n    keys: '?',\r\n    action: 'show_shortcuts',\r\n    description: 'Show keyboard shortcuts help',\r\n    modifiers: { shift: true },\r\n  },\r\n]\r\n\r\n/**\r\n * Check if keyboard event matches shortcut\r\n */\r\nfunction matchesShortcut(event: KeyboardEvent, shortcut: KeyboardShortcut): boolean {\r\n  const keys = Array.isArray(shortcut.keys) ? shortcut.keys : [shortcut.keys]\r\n  const keyMatches = keys.some((key) => event.key === key || event.code === key)\r\n\r\n  if (!keyMatches) return false\r\n\r\n  const modifiers = shortcut.modifiers || {}\r\n  const ctrlMatch = modifiers.ctrl ? (event.ctrlKey || event.metaKey) : !event.ctrlKey && !event.metaKey\r\n  const shiftMatch = modifiers.shift ? event.shiftKey : !event.shiftKey\r\n  const altMatch = modifiers.alt ? event.altKey : !event.altKey\r\n  const metaMatch = modifiers.meta ? event.metaKey : true // Don't enforce meta unless specified\r\n\r\n  return ctrlMatch && shiftMatch && altMatch && metaMatch\r\n}\r\n\r\n/**\r\n * useKeyboardShortcuts Hook\r\n *\r\n * @example\r\n * ```tsx\r\n * const { registerShortcut } = useKeyboardShortcuts({\r\n *   shortcuts: DEFAULT_SHORTCUTS,\r\n *   enabled: true,\r\n *   preventDefault: true,\r\n * })\r\n *\r\n * // Listen for keyboard actions\r\n * useEffect(() => {\r\n *   const handleKeyboardAction = (event: CustomEvent<KeyboardAction>) => {\r\n *     console.log('Action triggered:', event.detail)\r\n *   }\r\n *\r\n *   window.addEventListener('keyboard-action', handleKeyboardAction)\r\n *   return () => window.removeEventListener('keyboard-action', handleKeyboardAction)\r\n * }, [])\r\n * ```\r\n */\r\nexport function useKeyboardShortcuts(\r\n  options: UseKeyboardShortcutsOptions = {}\r\n): UseKeyboardShortcutsReturn {\r\n  const {\r\n    shortcuts = DEFAULT_SHORTCUTS,\r\n    enabled = true,\r\n    preventDefault = true,\r\n  } = options\r\n\r\n  const shortcutsRef = useRef<KeyboardShortcut[]>(shortcuts)\r\n  const enabledRef = useRef(enabled)\r\n\r\n  // Update refs when options change\r\n  useEffect(() => {\r\n    shortcutsRef.current = shortcuts\r\n    enabledRef.current = enabled\r\n  }, [shortcuts, enabled])\r\n\r\n  // Register a new shortcut dynamically\r\n  const registerShortcut = useCallback((shortcut: KeyboardShortcut) => {\r\n    shortcutsRef.current = [...shortcutsRef.current, shortcut]\r\n  }, [])\r\n\r\n  // Unregister a shortcut\r\n  const unregisterShortcut = useCallback((action: KeyboardAction) => {\r\n    shortcutsRef.current = shortcutsRef.current.filter((s) => s.action !== action)\r\n  }, [])\r\n\r\n  // Handle keyboard events\r\n  useEffect(() => {\r\n    function handleKeyDown(event: KeyboardEvent): void {\r\n      if (!enabledRef.current) return\r\n\r\n      // Don't trigger shortcuts when typing in inputs, textareas, or contenteditable\r\n      const target = event.target as HTMLElement\r\n      if (\r\n        target.tagName === 'INPUT' ||\r\n        target.tagName === 'TEXTAREA' ||\r\n        target.isContentEditable\r\n      ) {\r\n        // Allow Escape and Ctrl+shortcuts even in inputs\r\n        if (event.key !== 'Escape' && !event.ctrlKey && !event.metaKey) {\r\n          return\r\n        }\r\n      }\r\n\r\n      // Check each shortcut\r\n      for (const shortcut of shortcutsRef.current) {\r\n        if (matchesShortcut(event, shortcut)) {\r\n          if (preventDefault) {\r\n            event.preventDefault()\r\n          }\r\n\r\n          // Dispatch custom event with action\r\n          const customEvent = new CustomEvent('keyboard-action', {\r\n            detail: shortcut.action,\r\n            bubbles: true,\r\n            cancelable: true,\r\n          })\r\n          window.dispatchEvent(customEvent)\r\n\r\n          break // Only trigger first matching shortcut\r\n        }\r\n      }\r\n    }\r\n\r\n    window.addEventListener('keydown', handleKeyDown)\r\n    return () => window.removeEventListener('keydown', handleKeyDown)\r\n  }, [preventDefault])\r\n\r\n  return {\r\n    registerShortcut,\r\n    unregisterShortcut,\r\n    isEnabled: enabled,\r\n  }\r\n}\r\n","/**\r\n * KeyboardShortcutsHelp Component\r\n * Modal displaying available keyboard shortcuts\r\n * @module components/KeyboardShortcuts\r\n */\r\n\r\nimport { useEffect, useState } from 'react'\r\nimport type { KeyboardShortcut } from '../../types'\r\nimport { DEFAULT_SHORTCUTS } from '../../hooks/keyboard/useKeyboardShortcuts'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface KeyboardShortcutsHelpProps {\r\n  /** Custom shortcuts to display */\r\n  shortcuts?: KeyboardShortcut[]\r\n  /** Is modal open */\r\n  isOpen: boolean\r\n  /** Close handler */\r\n  onClose: () => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Format keyboard key for display\r\n */\r\nfunction formatKey(key: string): string {\r\n  const keyMap: Record<string, string> = {\r\n    ArrowUp: '↑',\r\n    ArrowDown: '↓',\r\n    ArrowLeft: '←',\r\n    ArrowRight: '→',\r\n    Enter: '↵',\r\n    Escape: 'Esc',\r\n    Delete: 'Del',\r\n    ' ': 'Space',\r\n  }\r\n  return keyMap[key] || key.toUpperCase()\r\n}\r\n\r\n/**\r\n * Format modifiers for display\r\n */\r\nfunction formatModifiers(shortcut: KeyboardShortcut): string {\r\n  const parts: string[] = []\r\n  const isMac = typeof navigator !== 'undefined' && navigator.platform.includes('Mac')\r\n\r\n  if (shortcut.modifiers?.ctrl) {\r\n    parts.push(isMac ? '⌘' : 'Ctrl')\r\n  }\r\n  if (shortcut.modifiers?.shift) {\r\n    parts.push('Shift')\r\n  }\r\n  if (shortcut.modifiers?.alt) {\r\n    parts.push(isMac ? '⌥' : 'Alt')\r\n  }\r\n  if (shortcut.modifiers?.meta) {\r\n    parts.push('⌘')\r\n  }\r\n\r\n  return parts.join(' + ')\r\n}\r\n\r\n/**\r\n * Get full shortcut display\r\n */\r\nfunction getShortcutDisplay(shortcut: KeyboardShortcut): string {\r\n  const keys = Array.isArray(shortcut.keys) ? shortcut.keys[0] : shortcut.keys\r\n  const modifiers = formatModifiers(shortcut)\r\n  const key = keys ? formatKey(keys) : ''\r\n\r\n  return modifiers ? `${modifiers} + ${key}` : key\r\n}\r\n\r\n/**\r\n * Group shortcuts by category\r\n */\r\nfunction groupShortcuts(shortcuts: KeyboardShortcut[]): Record<string, KeyboardShortcut[]> {\r\n  const groups: Record<string, KeyboardShortcut[]> = {\r\n    Navigation: [],\r\n    Actions: [],\r\n    Editing: [],\r\n    Selection: [],\r\n  }\r\n\r\n  shortcuts.forEach((shortcut) => {\r\n    if (shortcut.action.includes('navigate')) {\r\n      groups.Navigation?.push(shortcut)\r\n    } else if (shortcut.action.includes('select')) {\r\n      groups.Selection?.push(shortcut)\r\n    } else if (['undo', 'redo', 'save'].includes(shortcut.action)) {\r\n      groups.Editing?.push(shortcut)\r\n    } else {\r\n      groups.Actions?.push(shortcut)\r\n    }\r\n  })\r\n\r\n  return groups\r\n}\r\n\r\n/**\r\n * KeyboardShortcutsHelp Component\r\n */\r\nexport function KeyboardShortcutsHelp({\r\n  shortcuts = DEFAULT_SHORTCUTS,\r\n  isOpen,\r\n  onClose,\r\n  className,\r\n}: KeyboardShortcutsHelpProps) {\r\n  const [isMounted, setIsMounted] = useState(false)\r\n\r\n  useEffect(() => {\r\n    setIsMounted(true)\r\n  }, [])\r\n\r\n  // Close on Escape\r\n  useEffect(() => {\r\n    function handleKeyDown(event: KeyboardEvent): void {\r\n      if (event.key === 'Escape' && isOpen) {\r\n        onClose()\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleKeyDown)\r\n      return () => document.removeEventListener('keydown', handleKeyDown)\r\n    }\r\n    return undefined\r\n  }, [isOpen, onClose])\r\n\r\n  if (!isMounted || !isOpen) return null\r\n\r\n  const groups = groupShortcuts(shortcuts)\r\n\r\n  return (\r\n    <div className={cn('fixed inset-0 z-[9999] flex items-center justify-center', className)}>\r\n      {/* Backdrop */}\r\n      <div\r\n        className=\"absolute inset-0 bg-black/60 backdrop-blur-sm\"\r\n        onClick={onClose}\r\n      />\r\n\r\n      {/* Modal */}\r\n      <div className=\"relative bg-gradient-to-br from-gray-900/95 to-gray-800/95 backdrop-blur-xl rounded-2xl border border-white/20 shadow-2xl max-w-3xl w-full mx-4 max-h-[80vh] overflow-hidden\">\r\n        {/* Header */}\r\n        <div className=\"px-6 py-5 border-b border-white/10 flex items-center justify-between\">\r\n          <div>\r\n            <h2 className=\"text-2xl font-bold text-white flex items-center gap-3\">\r\n              <span className=\"text-3xl\">⌨️</span>\r\n              Keyboard Shortcuts\r\n            </h2>\r\n            <p className=\"text-sm text-white/60 mt-1\">\r\n              Speed up your workflow with these shortcuts\r\n            </p>\r\n          </div>\r\n          <button\r\n            onClick={onClose}\r\n            className=\"text-white/50 hover:text-white transition-colors text-2xl leading-none p-2 hover:bg-white/10 rounded-lg\"\r\n            aria-label=\"Close\"\r\n          >\r\n            ×\r\n          </button>\r\n        </div>\r\n\r\n        {/* Content */}\r\n        <div className=\"px-6 py-6 overflow-y-auto max-h-[calc(80vh-120px)]\">\r\n          <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\r\n            {Object.entries(groups).map(([category, categoryShortcuts]) => {\r\n              if (categoryShortcuts.length === 0) return null\r\n\r\n              return (\r\n                <div key={category}>\r\n                  <h3 className=\"text-lg font-semibold text-white/90 mb-4 flex items-center gap-2\">\r\n                    <span className=\"w-1 h-5 bg-blue-500 rounded-full\" />\r\n                    {category}\r\n                  </h3>\r\n                  <div className=\"space-y-3\">\r\n                    {categoryShortcuts.map((shortcut) => (\r\n                      <div\r\n                        key={shortcut.action}\r\n                        className=\"flex items-center justify-between gap-4 p-3 rounded-lg bg-white/5 hover:bg-white/10 transition-colors\"\r\n                      >\r\n                        <span className=\"text-sm text-white/80\">\r\n                          {shortcut.description}\r\n                        </span>\r\n                        <kbd className=\"px-3 py-1.5 bg-gradient-to-br from-gray-700 to-gray-800 border border-white/20 rounded-md text-xs font-mono text-white/90 shadow-lg whitespace-nowrap\">\r\n                          {getShortcutDisplay(shortcut)}\r\n                        </kbd>\r\n                      </div>\r\n                    ))}\r\n                  </div>\r\n                </div>\r\n              )\r\n            })}\r\n          </div>\r\n        </div>\r\n\r\n        {/* Footer */}\r\n        <div className=\"px-6 py-4 border-t border-white/10 bg-white/5\">\r\n          <p className=\"text-xs text-white/50 text-center\">\r\n            Press <kbd className=\"px-2 py-0.5 bg-white/10 rounded text-white/70\">?</kbd> to toggle this help panel\r\n          </p>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * CardTemplateSelector Component\r\n * Dropdown to select and apply card templates\r\n * @module components/Templates\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport type { CardTemplate } from '../../types'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface CardTemplateSelectorProps {\r\n  /** Available templates */\r\n  templates: CardTemplate[]\r\n  /** Template selection handler */\r\n  onSelectTemplate: (template: CardTemplate) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Default card templates\r\n */\r\nexport const DEFAULT_TEMPLATES: CardTemplate[] = [\r\n  {\r\n    id: 'bug-report',\r\n    name: 'Bug Report',\r\n    description: 'Report a bug or issue',\r\n    icon: '🐛',\r\n    category: 'Development',\r\n    template: {\r\n      title: '[BUG] ',\r\n      description: '**Steps to reproduce:**\\n1. \\n\\n**Expected behavior:**\\n\\n**Actual behavior:**\\n\\n**Screenshots:**',\r\n      priority: 'HIGH',\r\n      labels: ['bug'],\r\n    },\r\n  },\r\n  {\r\n    id: 'feature-request',\r\n    name: 'Feature Request',\r\n    description: 'Propose a new feature',\r\n    icon: '✨',\r\n    category: 'Development',\r\n    template: {\r\n      title: '[FEATURE] ',\r\n      description: '**Problem:**\\n\\n**Proposed solution:**\\n\\n**Alternatives considered:**\\n\\n**Additional context:**',\r\n      priority: 'MEDIUM',\r\n      labels: ['feature', 'enhancement'],\r\n    },\r\n  },\r\n  {\r\n    id: 'task',\r\n    name: 'Task',\r\n    description: 'General task or to-do',\r\n    icon: '📝',\r\n    category: 'General',\r\n    template: {\r\n      title: '',\r\n      description: '**Objective:**\\n\\n**Acceptance criteria:**\\n- [ ] \\n\\n**Notes:**',\r\n      priority: 'MEDIUM',\r\n    },\r\n  },\r\n  {\r\n    id: 'research',\r\n    name: 'Research',\r\n    description: 'Investigation or research task',\r\n    icon: '🔬',\r\n    category: 'General',\r\n    template: {\r\n      title: '[RESEARCH] ',\r\n      description: '**Goal:**\\n\\n**Questions to answer:**\\n- \\n\\n**Resources:**\\n- \\n\\n**Findings:**',\r\n      priority: 'LOW',\r\n      labels: ['research'],\r\n    },\r\n  },\r\n  {\r\n    id: 'documentation',\r\n    name: 'Documentation',\r\n    description: 'Documentation task',\r\n    icon: '📚',\r\n    category: 'Documentation',\r\n    template: {\r\n      title: '[DOCS] ',\r\n      description: '**What needs to be documented:**\\n\\n**Target audience:**\\n\\n**Key points:**\\n- ',\r\n      priority: 'LOW',\r\n      labels: ['documentation'],\r\n    },\r\n  },\r\n  {\r\n    id: 'meeting',\r\n    name: 'Meeting',\r\n    description: 'Meeting or discussion',\r\n    icon: '💬',\r\n    category: 'Communication',\r\n    template: {\r\n      title: 'Meeting: ',\r\n      description: '**Date & Time:**\\n\\n**Participants:**\\n- \\n\\n**Agenda:**\\n1. \\n\\n**Action items:**\\n- [ ] ',\r\n      priority: 'MEDIUM',\r\n      labels: ['meeting'],\r\n    },\r\n  },\r\n]\r\n\r\n/**\r\n * CardTemplateSelector Component\r\n */\r\nexport function CardTemplateSelector({\r\n  templates,\r\n  onSelectTemplate,\r\n  className,\r\n}: CardTemplateSelectorProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n\r\n  // Close menu on outside click\r\n  useEffect(() => {\r\n    function handleClickOutside(event: MouseEvent): void {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        buttonRef.current &&\r\n        !buttonRef.current.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleSelect = (template: CardTemplate) => {\r\n    onSelectTemplate(template)\r\n    setIsOpen(false)\r\n  }\r\n\r\n  // Group templates by category\r\n  const groupedTemplates = templates.reduce((acc, template) => {\r\n    const category = template.category || 'Other'\r\n    if (!acc[category]) {\r\n      acc[category] = []\r\n    }\r\n    acc[category].push(template)\r\n    return acc\r\n  }, {} as Record<string, CardTemplate[]>)\r\n\r\n  return (\r\n    <div className={cn('relative inline-block', className)}>\r\n      {/* Trigger Button */}\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center gap-2 px-3 py-2 rounded-lg border transition-all text-sm font-medium shadow-lg\"\r\n        style={{\r\n          backgroundColor: 'var(--theme-bg-secondary)',\r\n          borderColor: 'var(--theme-border-primary)',\r\n          color: 'var(--theme-text-primary)',\r\n        }}\r\n        onMouseEnter={(e) => {\r\n          e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n          e.currentTarget.style.borderColor = 'var(--theme-border-secondary)'\r\n        }}\r\n        onMouseLeave={(e) => {\r\n          e.currentTarget.style.backgroundColor = 'var(--theme-bg-secondary)'\r\n          e.currentTarget.style.borderColor = 'var(--theme-border-primary)'\r\n        }}\r\n        title=\"Create from template\"\r\n      >\r\n        <span className=\"text-base leading-none\">📋</span>\r\n        <span>Templates</span>\r\n        <svg\r\n          className={cn(\r\n            'w-4 h-4 transition-transform',\r\n            isOpen && 'rotate-180'\r\n          )}\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          viewBox=\"0 0 24 24\"\r\n        >\r\n          <path\r\n            strokeLinecap=\"round\"\r\n            strokeLinejoin=\"round\"\r\n            strokeWidth={2}\r\n            d=\"M19 9l-7 7-7-7\"\r\n          />\r\n        </svg>\r\n      </button>\r\n\r\n      {/* Dropdown Menu */}\r\n      {isOpen && (\r\n        <div\r\n          ref={menuRef}\r\n          className=\"absolute top-full left-0 mt-2 min-w-[320px] max-w-[400px] rounded-xl backdrop-blur-xl border shadow-2xl z-50 overflow-hidden max-h-[500px] overflow-y-auto\"\r\n          style={{\r\n            backgroundColor: 'var(--theme-bg-primary)',\r\n            borderColor: 'var(--theme-border-primary)',\r\n          }}\r\n        >\r\n          <div\r\n            className=\"px-4 py-3 border-b sticky top-0 backdrop-blur-sm\"\r\n            style={{\r\n              borderColor: 'var(--theme-border-primary)',\r\n              backgroundColor: 'var(--theme-bg-secondary)',\r\n            }}\r\n          >\r\n            <span\r\n              className=\"text-sm font-bold uppercase tracking-wider\"\r\n              style={{ color: 'var(--theme-text-primary)' }}\r\n            >\r\n              Card Templates\r\n            </span>\r\n            <p\r\n              className=\"text-xs mt-0.5\"\r\n              style={{ color: 'var(--theme-text-tertiary)' }}\r\n            >\r\n              Quick start with pre-configured cards\r\n            </p>\r\n          </div>\r\n\r\n          {Object.entries(groupedTemplates).map(([category, categoryTemplates]) => (\r\n            <div key={category} className=\"py-2\">\r\n              <div className=\"px-4 py-2\">\r\n                <h4\r\n                  className=\"text-xs font-semibold uppercase tracking-wider\"\r\n                  style={{ color: 'var(--theme-text-secondary)' }}\r\n                >\r\n                  {category}\r\n                </h4>\r\n              </div>\r\n              <div>\r\n                {categoryTemplates.map((template) => (\r\n                  <button\r\n                    key={template.id}\r\n                    onClick={() => handleSelect(template)}\r\n                    className=\"w-full px-4 py-3 flex items-start gap-3 text-left transition-all active:scale-[0.98]\"\r\n                    style={{ color: 'var(--theme-text-primary)' }}\r\n                    onMouseEnter={(e) => {\r\n                      e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n                    }}\r\n                    onMouseLeave={(e) => {\r\n                      e.currentTarget.style.backgroundColor = 'transparent'\r\n                    }}\r\n                  >\r\n                    <span className=\"text-2xl leading-none mt-0.5\">\r\n                      {template.icon}\r\n                    </span>\r\n                    <div className=\"flex-1 min-w-0\">\r\n                      <div\r\n                        className=\"font-semibold text-sm\"\r\n                        style={{ color: 'var(--theme-text-primary)' }}\r\n                      >\r\n                        {template.name}\r\n                      </div>\r\n                      {template.description && (\r\n                        <p\r\n                          className=\"text-xs mt-0.5\"\r\n                          style={{ color: 'var(--theme-text-tertiary)' }}\r\n                        >\r\n                          {template.description}\r\n                        </p>\r\n                      )}\r\n                    </div>\r\n                  </button>\r\n                ))}\r\n              </div>\r\n            </div>\r\n          ))}\r\n\r\n          {templates.length === 0 && (\r\n            <div\r\n              className=\"px-4 py-8 text-center\"\r\n              style={{ color: 'var(--theme-text-tertiary)' }}\r\n            >\r\n              <p className=\"text-sm\">No templates available</p>\r\n            </div>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * ExportImportModal Component\r\n * Modal for exporting and importing board data\r\n * @module components/ExportImport\r\n */\r\n\r\nimport { useState, useRef } from 'react'\r\nimport type { Board, ExportFormat, ImportResult } from '../../types'\r\nimport { exportBoard, downloadExport } from '../../utils/export'\r\nimport { readFile, importBoard } from '../../utils/import'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface ExportImportModalProps {\r\n  /** Board data to export */\r\n  board: Board\r\n  /** Is modal open */\r\n  isOpen: boolean\r\n  /** Close handler */\r\n  onClose: () => void\r\n  /** Import handler */\r\n  onImport?: (result: ImportResult, content: string) => void\r\n  /** Board element ref for PDF export */\r\n  boardElementRef?: React.RefObject<HTMLElement>\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * ExportImportModal Component\r\n */\r\nexport function ExportImportModal({\r\n  board,\r\n  isOpen,\r\n  onClose,\r\n  onImport,\r\n  boardElementRef,\r\n  className,\r\n}: ExportImportModalProps) {\r\n  const [activeTab, setActiveTab] = useState<'export' | 'import'>('export')\r\n  const [selectedFormat, setSelectedFormat] = useState<ExportFormat>('json')\r\n  const [importResult, setImportResult] = useState<ImportResult | null>(null)\r\n  const fileInputRef = useRef<HTMLInputElement>(null)\r\n\r\n  if (!isOpen) return null\r\n\r\n  const handleExport = async () => {\r\n    const boardElement = boardElementRef?.current || undefined\r\n    const content = await exportBoard(board, selectedFormat, boardElement)\r\n    downloadExport(content, selectedFormat)\r\n  }\r\n\r\n  const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\r\n    const file = event.target.files?.[0]\r\n    if (!file) return\r\n\r\n    try {\r\n      const content = await readFile(file)\r\n      const format = file.name.endsWith('.json') ? 'json' : 'csv'\r\n      const result = importBoard(content, format)\r\n\r\n      setImportResult(result)\r\n\r\n      if (result.success && onImport) {\r\n        onImport(result, content)\r\n      }\r\n    } catch (error) {\r\n      setImportResult({\r\n        success: false,\r\n        errors: [`Failed to read file: ${error instanceof Error ? error.message : 'Unknown error'}`],\r\n      })\r\n    }\r\n\r\n    // Reset file input\r\n    if (fileInputRef.current) {\r\n      fileInputRef.current.value = ''\r\n    }\r\n  }\r\n\r\n  return (\r\n    <div className={cn('fixed inset-0 z-[9999] flex items-center justify-center', className)}>\r\n      {/* Backdrop */}\r\n      <div className=\"absolute inset-0 bg-black/60 backdrop-blur-sm\" onClick={onClose} />\r\n\r\n      {/* Modal */}\r\n      <div className=\"relative bg-gradient-to-br from-gray-900/95 to-gray-800/95 backdrop-blur-xl rounded-2xl border border-white/20 shadow-2xl max-w-2xl w-full mx-4\">\r\n        {/* Header */}\r\n        <div className=\"px-6 py-5 border-b border-white/10 flex items-center justify-between\">\r\n          <div>\r\n            <h2 className=\"text-2xl font-bold text-white flex items-center gap-3\">\r\n              <span className=\"text-3xl\">📦</span>\r\n              Export / Import\r\n            </h2>\r\n            <p className=\"text-sm text-white/60 mt-1\">\r\n              Transfer your board data\r\n            </p>\r\n          </div>\r\n          <button\r\n            onClick={onClose}\r\n            className=\"text-white/50 hover:text-white transition-colors text-2xl leading-none p-2 hover:bg-white/10 rounded-lg\"\r\n            aria-label=\"Close\"\r\n          >\r\n            ×\r\n          </button>\r\n        </div>\r\n\r\n        {/* Tabs */}\r\n        <div className=\"flex border-b border-white/10\">\r\n          <button\r\n            onClick={() => setActiveTab('export')}\r\n            className={cn(\r\n              'flex-1 px-6 py-4 font-semibold transition-colors',\r\n              activeTab === 'export'\r\n                ? 'text-white border-b-2 border-blue-500'\r\n                : 'text-white/50 hover:text-white/80'\r\n            )}\r\n          >\r\n            Export\r\n          </button>\r\n          <button\r\n            onClick={() => setActiveTab('import')}\r\n            className={cn(\r\n              'flex-1 px-6 py-4 font-semibold transition-colors',\r\n              activeTab === 'import'\r\n                ? 'text-white border-b-2 border-blue-500'\r\n                : 'text-white/50 hover:text-white/80'\r\n            )}\r\n          >\r\n            Import\r\n          </button>\r\n        </div>\r\n\r\n        {/* Content */}\r\n        <div className=\"p-6\">\r\n          {activeTab === 'export' && (\r\n            <div className=\"space-y-6\">\r\n              <div>\r\n                <label className=\"block text-sm font-semibold text-white/90 mb-3\">\r\n                  Select format\r\n                </label>\r\n                <div className=\"grid grid-cols-3 gap-3\">\r\n                  {(['json', 'csv', 'pdf'] as ExportFormat[]).map((format) => (\r\n                    <button\r\n                      key={format}\r\n                      onClick={() => setSelectedFormat(format)}\r\n                      className={cn(\r\n                        'p-4 rounded-lg border-2 transition-all text-center',\r\n                        selectedFormat === format\r\n                          ? 'border-blue-500 bg-blue-500/20 text-white'\r\n                          : 'border-white/20 hover:border-white/40 text-white/70 hover:text-white'\r\n                      )}\r\n                    >\r\n                      <div className=\"text-2xl mb-2\">\r\n                        {format === 'json' && '📄'}\r\n                        {format === 'csv' && '📊'}\r\n                        {format === 'pdf' && '📝'}\r\n                      </div>\r\n                      <div className=\"font-semibold uppercase text-xs\">\r\n                        {format}\r\n                      </div>\r\n                    </button>\r\n                  ))}\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"bg-white/5 rounded-lg p-4\">\r\n                <h3 className=\"text-sm font-semibold text-white/90 mb-2\">Preview</h3>\r\n                <div className=\"text-xs text-white/60\">\r\n                  <div>Board: <span className=\"text-white/90\">{board.title || 'Untitled'}</span></div>\r\n                  <div>Columns: <span className=\"text-white/90\">{board.columns.length}</span></div>\r\n                  <div>Cards: <span className=\"text-white/90\">{board.cards.length}</span></div>\r\n                </div>\r\n              </div>\r\n\r\n              <button\r\n                onClick={handleExport}\r\n                className=\"w-full py-3 px-4 bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-500 hover:to-blue-600 text-white font-semibold rounded-lg transition-all shadow-lg shadow-blue-500/20\"\r\n              >\r\n                Export Board\r\n              </button>\r\n            </div>\r\n          )}\r\n\r\n          {activeTab === 'import' && (\r\n            <div className=\"space-y-6\">\r\n              <div>\r\n                <label className=\"block text-sm font-semibold text-white/90 mb-3\">\r\n                  Upload file\r\n                </label>\r\n                <input\r\n                  ref={fileInputRef}\r\n                  type=\"file\"\r\n                  accept=\".json,.csv\"\r\n                  onChange={handleFileSelect}\r\n                  className=\"hidden\"\r\n                />\r\n                <button\r\n                  onClick={() => fileInputRef.current?.click()}\r\n                  className=\"w-full py-12 px-4 border-2 border-dashed border-white/30 hover:border-white/50 rounded-lg transition-colors text-white/70 hover:text-white\"\r\n                >\r\n                  <div className=\"text-5xl mb-3\">📁</div>\r\n                  <div className=\"font-semibold mb-1\">Click to select file</div>\r\n                  <div className=\"text-xs text-white/50\">Supports JSON and CSV files</div>\r\n                </button>\r\n              </div>\r\n\r\n              {importResult && (\r\n                <div\r\n                  className={cn(\r\n                    'p-4 rounded-lg',\r\n                    importResult.success\r\n                      ? 'bg-green-500/20 border border-green-500/30'\r\n                      : 'bg-red-500/20 border border-red-500/30'\r\n                  )}\r\n                >\r\n                  <h3\r\n                    className={cn(\r\n                      'font-semibold mb-2',\r\n                      importResult.success ? 'text-green-400' : 'text-red-400'\r\n                    )}\r\n                  >\r\n                    {importResult.success ? '✓ Import Successful' : '✗ Import Failed'}\r\n                  </h3>\r\n                  {importResult.success && (\r\n                    <div className=\"text-sm text-white/80\">\r\n                      <div>Cards imported: {importResult.cardsImported}</div>\r\n                      <div>Columns imported: {importResult.columnsImported}</div>\r\n                    </div>\r\n                  )}\r\n                  {importResult.errors && importResult.errors.length > 0 && (\r\n                    <div className=\"mt-2 text-sm\">\r\n                      {importResult.errors.map((error, index) => (\r\n                        <div key={index} className=\"text-red-300\">\r\n                          • {error}\r\n                        </div>\r\n                      ))}\r\n                    </div>\r\n                  )}\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","import { useCallback, useState } from 'react'\r\nimport type { Priority, User } from '../../types'\r\nimport type { FilterState, SortState, SortBy } from '../../hooks/useFilters'\r\nimport type { GroupByOption } from '../../types'\r\nimport './filter-bar.css'\r\n\r\nexport interface FilterBarProps {\r\n  filters: FilterState\r\n  sort: SortState\r\n  onFiltersChange: (filters: Partial<FilterState>) => void\r\n  onSortChange: (sort: Partial<SortState>) => void\r\n  onReset: () => void\r\n  onFilterMyTasks?: () => void\r\n  onFilterOverdue?: () => void\r\n  onFilterHighPriority?: () => void\r\n  availableUsers?: User[]\r\n  availableLabels?: string[]\r\n  availableColumns?: Array<{ id: string; title: string }>\r\n  showQuickFilters?: boolean\r\n  compact?: boolean\r\n  groupBy?: GroupByOption\r\n  onGroupByChange?: (value: GroupByOption) => void\r\n}\r\n\r\nconst PRIORITY_OPTIONS: Priority[] = ['URGENT', 'HIGH', 'MEDIUM', 'LOW']\r\n\r\nconst SORT_OPTIONS: Array<{ value: SortBy; label: string }> = [\r\n  { value: 'none', label: 'None' },\r\n  { value: 'created', label: 'Date Created' },\r\n  { value: 'priority', label: 'Priority' },\r\n  { value: 'dueDate', label: 'Due Date' },\r\n  { value: 'title', label: 'Title' },\r\n  { value: 'estimate', label: 'Estimate' },\r\n]\r\n\r\nconst GROUPBY_OPTIONS: Array<{ value: GroupByOption; label: string }> = [\r\n  { value: 'none', label: 'No Grouping' },\r\n  { value: 'priority', label: 'By Priority' },\r\n  { value: 'assignee', label: 'By Assignee' },\r\n  { value: 'label', label: 'By Label' },\r\n]\r\n\r\nexport function FilterBar({\r\n  filters,\r\n  sort,\r\n  onFiltersChange,\r\n  onSortChange,\r\n  onReset,\r\n  onFilterMyTasks,\r\n  onFilterOverdue,\r\n  onFilterHighPriority,\r\n  availableUsers = [],\r\n  availableLabels = [],\r\n  availableColumns: _availableColumns = [],\r\n  showQuickFilters = true,\r\n  compact = false,\r\n  groupBy = 'none',\r\n  onGroupByChange,\r\n}: FilterBarProps) {\r\n  const [isCollapsed, setIsCollapsed] = useState(true)\r\n\r\n  const handleSearchChange = useCallback(\r\n    (e: React.ChangeEvent<HTMLInputElement>) => {\r\n      onFiltersChange({ search: e.target.value })\r\n    },\r\n    [onFiltersChange]\r\n  )\r\n\r\n  const handleDateFilterChange = useCallback(\r\n    (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n      onFiltersChange({ dateFilter: e.target.value as any })\r\n    },\r\n    [onFiltersChange]\r\n  )\r\n\r\n  const handleSortChange = useCallback(\r\n    (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n      onSortChange({ by: e.target.value as SortBy })\r\n    },\r\n    [onSortChange]\r\n  )\r\n\r\n  const handleSortOrderToggle = useCallback(() => {\r\n    onSortChange({ order: sort.order === 'asc' ? 'desc' : 'asc' })\r\n  }, [sort.order, onSortChange])\r\n\r\n  const hasActiveFilters =\r\n    filters.search ||\r\n    filters.dateFilter !== 'all' ||\r\n    filters.priorities.length > 0 ||\r\n    filters.assignees.length > 0 ||\r\n    filters.labels.length > 0 ||\r\n    sort.by !== 'none'\r\n\r\n  return (\r\n    <div\r\n      className={`filter-bar ${compact ? 'filter-bar--compact' : ''} ${isCollapsed ? 'filter-bar--collapsed' : ''}`}\r\n    >\r\n      <div\r\n        className=\"filter-bar__header\"\r\n        onClick={() => setIsCollapsed(!isCollapsed)}\r\n        style={{\r\n          cursor: 'pointer',\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          gap: '8px',\r\n          marginBottom: isCollapsed ? '0' : '12px',\r\n          padding: '4px 6px',\r\n          borderRadius: '6px',\r\n          transition: 'all 0.2s ease',\r\n        }}\r\n        onMouseEnter={(e) => {\r\n          e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n        }}\r\n        onMouseLeave={(e) => {\r\n          e.currentTarget.style.backgroundColor = 'transparent'\r\n        }}\r\n      >\r\n        <svg\r\n          width=\"14\"\r\n          height=\"14\"\r\n          viewBox=\"0 0 24 24\"\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          strokeWidth=\"2\"\r\n          style={{\r\n            transform: isCollapsed ? 'rotate(-90deg)' : 'rotate(0deg)',\r\n            transition: 'transform 0.2s',\r\n            color: 'var(--theme-text-secondary)',\r\n          }}\r\n        >\r\n          <polyline points=\"6 9 12 15 18 9\" />\r\n        </svg>\r\n        <span className=\"filter-bar__label\" style={{ fontWeight: 500, fontSize: '0.875rem', color: 'var(--theme-text-primary)' }}>\r\n          Filters & Grouping\r\n        </span>\r\n        {hasActiveFilters && (\r\n          <span\r\n            style={{\r\n              color: 'var(--theme-accent-primary)',\r\n              fontSize: '0.75rem',\r\n              fontWeight: 600,\r\n            }}\r\n          >\r\n            ({[filters.search && 'search', filters.dateFilter !== 'all' && 'date', filters.priorities.length > 0 && 'priority', filters.assignees.length > 0 && 'assignee', filters.labels.length > 0 && 'label', sort.by !== 'none' && 'sort'].filter(Boolean).length} active)\r\n          </span>\r\n        )}\r\n      </div>\r\n\r\n      {!isCollapsed && (\r\n        <div className=\"filter-bar__content\">\r\n          {showQuickFilters && (\r\n            <div className=\"filter-bar__quick\" style={{ marginBottom: '12px' }}>\r\n              <span className=\"filter-bar__label\">Quick:</span>\r\n              {onFilterMyTasks && (\r\n                <button\r\n                  onClick={onFilterMyTasks}\r\n                  className=\"filter-bar__quick-btn\"\r\n                  title=\"Show only my tasks\"\r\n                >\r\n                  My Tasks\r\n                </button>\r\n              )}\r\n              {onFilterOverdue && (\r\n                <button\r\n                  onClick={onFilterOverdue}\r\n                  className=\"filter-bar__quick-btn\"\r\n                  title=\"Show overdue tasks\"\r\n                >\r\n                  Overdue\r\n                </button>\r\n              )}\r\n              {onFilterHighPriority && (\r\n                <button\r\n                  onClick={onFilterHighPriority}\r\n                  className=\"filter-bar__quick-btn\"\r\n                  title=\"Show high priority tasks\"\r\n                >\r\n                  High Priority\r\n                </button>\r\n              )}\r\n            </div>\r\n          )}\r\n\r\n          <div className=\"filter-bar__main\">\r\n            <div className=\"filter-bar__field\">\r\n              <input\r\n                type=\"text\"\r\n                placeholder=\"Search tasks...\"\r\n                value={filters.search}\r\n                onChange={handleSearchChange}\r\n                className=\"filter-bar__search\"\r\n              />\r\n            </div>\r\n\r\n            <div className=\"filter-bar__field\">\r\n              <select\r\n                value={filters.dateFilter}\r\n                onChange={handleDateFilterChange}\r\n                className=\"filter-bar__select\"\r\n              >\r\n                <option value=\"all\">All Dates</option>\r\n                <option value=\"overdue\">Overdue</option>\r\n                <option value=\"today\">Today</option>\r\n                <option value=\"this-week\">This Week</option>\r\n              </select>\r\n            </div>\r\n\r\n            <div className=\"filter-bar__field\">\r\n              <select\r\n                value={filters.priorities[0] || 'all'}\r\n                onChange={(e) => {\r\n                  const value = e.target.value\r\n                  onFiltersChange({\r\n                    priorities: value === 'all' ? [] : [value as Priority],\r\n                  })\r\n                }}\r\n                className=\"filter-bar__select\"\r\n              >\r\n                <option value=\"all\">All Priorities</option>\r\n                {PRIORITY_OPTIONS.map((priority) => (\r\n                  <option key={priority} value={priority}>\r\n                    {priority}\r\n                  </option>\r\n                ))}\r\n              </select>\r\n            </div>\r\n\r\n            {availableUsers.length > 0 && (\r\n              <div className=\"filter-bar__field\">\r\n                <select\r\n                  value={filters.assignees[0] || 'all'}\r\n                  onChange={(e) => {\r\n                    const value = e.target.value\r\n                    onFiltersChange({\r\n                      assignees: value === 'all' ? [] : [value],\r\n                    })\r\n                  }}\r\n                  className=\"filter-bar__select\"\r\n                >\r\n                  <option value=\"all\">All Assignees</option>\r\n                  {availableUsers.map((user) => (\r\n                    <option key={user.id} value={user.id}>\r\n                      {user.name}\r\n                    </option>\r\n                  ))}\r\n                </select>\r\n              </div>\r\n            )}\r\n\r\n            {availableLabels.length > 0 && (\r\n              <div className=\"filter-bar__field\">\r\n                <select\r\n                  value={filters.labels[0] || 'all'}\r\n                  onChange={(e) => {\r\n                    const value = e.target.value\r\n                    onFiltersChange({\r\n                      labels: value === 'all' ? [] : [value],\r\n                    })\r\n                  }}\r\n                  className=\"filter-bar__select\"\r\n                >\r\n                  <option value=\"all\">All Labels</option>\r\n                  {availableLabels.map((label) => (\r\n                    <option key={label} value={label}>\r\n                      {label}\r\n                    </option>\r\n                  ))}\r\n                </select>\r\n              </div>\r\n            )}\r\n\r\n            <div className=\"filter-bar__field filter-bar__sort\">\r\n              <span className=\"filter-bar__label\" style={{ color: 'var(--theme-text-secondary)' }}>Sort:</span>\r\n              <select\r\n                value={sort.by}\r\n                onChange={handleSortChange}\r\n                className=\"filter-bar__select filter-bar__select--sm\"\r\n              >\r\n                {SORT_OPTIONS.map((option) => (\r\n                  <option key={option.value} value={option.value}>\r\n                    {option.label}\r\n                  </option>\r\n                ))}\r\n              </select>\r\n              {sort.by !== 'none' && (\r\n                <button\r\n                  onClick={handleSortOrderToggle}\r\n                  className=\"filter-bar__sort-toggle\"\r\n                  title={`Sort ${sort.order === 'asc' ? 'descending' : 'ascending'}`}\r\n                >\r\n                  {sort.order === 'asc' ? '↑' : '↓'}\r\n                </button>\r\n              )}\r\n            </div>\r\n\r\n            {onGroupByChange && (\r\n              <div className=\"filter-bar__field\">\r\n                <select\r\n                  value={groupBy}\r\n                  onChange={(e) => onGroupByChange(e.target.value as GroupByOption)}\r\n                  className=\"filter-bar__select\"\r\n                  style={{\r\n                    fontWeight: 500,\r\n                    borderWidth: '2px',\r\n                  }}\r\n                >\r\n                  {GROUPBY_OPTIONS.map((option) => (\r\n                    <option key={option.value} value={option.value}>\r\n                      {option.label}\r\n                    </option>\r\n                  ))}\r\n                </select>\r\n              </div>\r\n            )}\r\n\r\n            {hasActiveFilters && (\r\n              <button\r\n                onClick={onReset}\r\n                className=\"filter-bar__reset\"\r\n                title=\"Clear all filters\"\r\n              >\r\n                Clear\r\n              </button>\r\n            )}\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","import { useState, useRef, useEffect } from 'react'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface ConfigMenuProps {\r\n  onOpenExport: () => void\r\n  onOpenThemes: () => void\r\n  onOpenShortcuts: () => void\r\n  className?: string\r\n  // v0.8.1: Gantt-specific exports\r\n  viewMode?: 'kanban' | 'gantt'\r\n  onExportGanttPDF?: () => Promise<void>\r\n  onExportGanttExcel?: () => Promise<void>\r\n  onExportGanttPNG?: () => Promise<void>\r\n  onExportGanttCSV?: () => void\r\n}\r\n\r\nexport function ConfigMenu({\r\n  onOpenExport,\r\n  onOpenThemes,\r\n  onOpenShortcuts,\r\n  className,\r\n  viewMode = 'kanban',\r\n  onExportGanttPDF,\r\n  onExportGanttExcel,\r\n  onExportGanttPNG,\r\n  onExportGanttCSV,\r\n}: ConfigMenuProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n    }\r\n\r\n    return () => {\r\n      document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n  }, [isOpen])\r\n\r\n  const handleItemClick = (action: () => void) => {\r\n    action()\r\n    setIsOpen(false)\r\n  }\r\n\r\n  return (\r\n    <div className={cn('relative', className)} ref={menuRef}>\r\n      <button\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium transition-all border\"\r\n        style={{\r\n          backgroundColor: 'var(--theme-bg-secondary)',\r\n          borderColor: 'var(--theme-border-primary)',\r\n          color: 'var(--theme-text-secondary)'\r\n        }}\r\n        onMouseEnter={(e) => {\r\n          e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n          e.currentTarget.style.color = 'var(--theme-text-primary)'\r\n        }}\r\n        onMouseLeave={(e) => {\r\n          e.currentTarget.style.backgroundColor = 'var(--theme-bg-secondary)'\r\n          e.currentTarget.style.color = 'var(--theme-text-secondary)'\r\n        }}\r\n        aria-label=\"Configuration Menu\"\r\n        aria-expanded={isOpen}\r\n      >\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"3\" />\r\n          <path d=\"M12 1v6m0 6v6M5.6 5.6l4.2 4.2m4.2 4.2l4.2 4.2M1 12h6m6 0h6M5.6 18.4l4.2-4.2m4.2-4.2l4.2-4.2\" />\r\n        </svg>\r\n        <span>Config</span>\r\n      </button>\r\n\r\n      {isOpen && (\r\n        <div\r\n          className=\"absolute right-0 mt-2 w-48 rounded-lg border shadow-lg overflow-hidden z-50\"\r\n          style={{\r\n            backgroundColor: 'var(--theme-bg-secondary)',\r\n            borderColor: 'var(--theme-border-primary)',\r\n          }}\r\n        >\r\n          {/* v0.8.1: Show different export options based on view mode */}\r\n          {viewMode === 'kanban' ? (\r\n            <button\r\n              onClick={() => handleItemClick(onOpenExport)}\r\n              className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n              style={{ color: 'var(--theme-text-primary)' }}\r\n              onMouseEnter={(e) => {\r\n                e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n              }}\r\n              onMouseLeave={(e) => {\r\n                e.currentTarget.style.backgroundColor = 'transparent'\r\n              }}\r\n            >\r\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3\" />\r\n              </svg>\r\n              Export\r\n            </button>\r\n          ) : (\r\n            <>\r\n              <button\r\n                onClick={() => handleItemClick(async () => await onExportGanttPDF?.())}\r\n                className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n                style={{ color: 'var(--theme-text-primary)' }}\r\n                onMouseEnter={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n                }}\r\n                onMouseLeave={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'transparent'\r\n                }}\r\n              >\r\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                  <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\r\n                  <polyline points=\"14 2 14 8 20 8\" />\r\n                  <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\r\n                  <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\r\n                  <polyline points=\"10 9 9 9 8 9\" />\r\n                </svg>\r\n                Export PDF\r\n              </button>\r\n              <button\r\n                onClick={() => handleItemClick(async () => await onExportGanttExcel?.())}\r\n                className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n                style={{ color: 'var(--theme-text-primary)' }}\r\n                onMouseEnter={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n                }}\r\n                onMouseLeave={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'transparent'\r\n                }}\r\n              >\r\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                  <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\r\n                  <polyline points=\"14 2 14 8 20 8\" />\r\n                  <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\" />\r\n                  <line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\" />\r\n                </svg>\r\n                Export Excel\r\n              </button>\r\n              <button\r\n                onClick={() => handleItemClick(async () => await onExportGanttPNG?.())}\r\n                className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n                style={{ color: 'var(--theme-text-primary)' }}\r\n                onMouseEnter={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n                }}\r\n                onMouseLeave={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'transparent'\r\n                }}\r\n              >\r\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                  <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\r\n                  <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\r\n                  <polyline points=\"21 15 16 10 5 21\" />\r\n                </svg>\r\n                Export PNG\r\n              </button>\r\n              <button\r\n                onClick={() => handleItemClick(() => onExportGanttCSV?.())}\r\n                className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n                style={{ color: 'var(--theme-text-primary)' }}\r\n                onMouseEnter={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n                }}\r\n                onMouseLeave={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'transparent'\r\n                }}\r\n              >\r\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                  <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\r\n                  <polyline points=\"14 2 14 8 20 8\" />\r\n                  <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\r\n                  <line x1=\"8\" y1=\"17\" x2=\"16\" y2=\"17\" />\r\n                </svg>\r\n                Export CSV\r\n              </button>\r\n            </>\r\n          )}\r\n\r\n          <button\r\n            onClick={() => handleItemClick(onOpenThemes)}\r\n            className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n            style={{ color: 'var(--theme-text-primary)' }}\r\n            onMouseEnter={(e) => {\r\n              e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n            }}\r\n            onMouseLeave={(e) => {\r\n              e.currentTarget.style.backgroundColor = 'transparent'\r\n            }}\r\n          >\r\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n              <circle cx=\"12\" cy=\"12\" r=\"5\" />\r\n              <path d=\"M12 1v6m0 6v6m8.5-8.5L17 15M7 9L3.5 5.5M7 15l-3.5 3.5M20.5 5.5L17 9m3.5 11.5L17 17\" />\r\n            </svg>\r\n            Themes\r\n          </button>\r\n\r\n          <button\r\n            onClick={() => handleItemClick(onOpenShortcuts)}\r\n            className=\"w-full px-4 py-3 text-left text-sm font-medium transition-colors flex items-center gap-3\"\r\n            style={{ color: 'var(--theme-text-primary)' }}\r\n            onMouseEnter={(e) => {\r\n              e.currentTarget.style.backgroundColor = 'var(--theme-bg-tertiary)'\r\n            }}\r\n            onMouseLeave={(e) => {\r\n              e.currentTarget.style.backgroundColor = 'transparent'\r\n            }}\r\n          >\r\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n              <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\r\n              <path d=\"M6 8h.01M10 8h.01M14 8h.01M18 8h.01M8 12h.01M12 12h.01M16 12h.01M7 16h10\" />\r\n            </svg>\r\n            Shortcuts\r\n          </button>\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Theme Definitions\r\n * ASAKAA v0.5.0 - Elite Theming System\r\n */\r\n\r\nimport type { Theme, ThemeName } from './types'\r\n\r\n/**\r\n * DARK THEME (Enhanced) - DEFAULT\r\n * Philosophy: Speed, efficiency, focus\r\n * Optimized for developer productivity\r\n */\r\nexport const darkTheme: Theme = {\r\n  name: 'dark',\r\n  displayName: 'Dark (Enhanced)',\r\n  emoji: '🌙',\r\n  colors: {\r\n    // Background colors\r\n    bgPrimary: '#222326',\r\n    bgSecondary: '#2A2B2F',\r\n    bgTertiary: '#33343A',\r\n    bgCard: '#2d2d2d',\r\n    bgHover: '#353535',\r\n    bgActive: '#404040',\r\n    bgInput: '#2a2a2a',\r\n\r\n    // Text colors\r\n    textPrimary: '#F4F5F8',\r\n    textSecondary: '#AEB6C0',\r\n    textTertiary: '#7A7F8A',\r\n    textDisabled: '#606060',\r\n    textInverse: '#1a1a1a',\r\n\r\n    // Border colors\r\n    borderPrimary: 'rgba(255, 255, 255, 0.1)',\r\n    borderSecondary: 'rgba(255, 255, 255, 0.05)',\r\n    borderDefault: '#404040',\r\n    borderHover: '#505050',\r\n    borderSubtle: '#2a2a2a',\r\n\r\n    // Interactive colors\r\n    accentPrimary: '#5E6AD2',\r\n    accentHover: '#7780DD',\r\n    interactivePrimary: '#0ea5e9',\r\n    interactivePrimaryHover: '#0284c7',\r\n    interactivePrimaryBorder: 'rgba(14, 165, 233, 0.3)',\r\n    interactivePrimaryBackground: 'rgba(14, 165, 233, 0.1)',\r\n    interactivePrimaryBackgroundHover: 'rgba(14, 165, 233, 0.2)',\r\n\r\n    // Status colors\r\n    success: '#10B981',\r\n    warning: '#F59E0B',\r\n    error: '#EF4444',\r\n    info: '#3B82F6',\r\n    danger: '#ef4444',\r\n    dangerBorder: 'rgba(239, 68, 68, 0.3)',\r\n    dangerBackground: 'rgba(239, 68, 68, 0.1)',\r\n    dangerBackgroundHover: 'rgba(239, 68, 68, 0.2)',\r\n  },\r\n  shadows: {\r\n    sm: '0 1px 2px rgba(0, 0, 0, 0.3)',\r\n    md: '0 4px 12px rgba(0, 0, 0, 0.4)',\r\n    lg: '0 12px 32px rgba(0, 0, 0, 0.5)',\r\n  },\r\n  radii: {\r\n    sm: '6px',\r\n    md: '8px',\r\n    lg: '12px',\r\n    full: '9999px',\r\n  },\r\n  spacing: {\r\n    xs: '4px',\r\n    sm: '8px',\r\n    md: '16px',\r\n    lg: '24px',\r\n    xl: '32px',\r\n  },\r\n}\r\n\r\n/**\r\n * LIGHT THEME (Accessible Standard)\r\n * Philosophy: Clarity, legibility, professionalism\r\n * WCAG AAA compliant (7:1 contrast)\r\n */\r\nexport const lightTheme: Theme = {\r\n  name: 'light',\r\n  displayName: 'Light (Standard)',\r\n  emoji: '☀️',\r\n  colors: {\r\n    // Background colors\r\n    bgPrimary: '#FFFFFF',\r\n    bgSecondary: '#F7F7F8',\r\n    bgTertiary: '#EEEFF1',\r\n    bgCard: '#ffffff',\r\n    bgHover: '#f3f4f6',\r\n    bgActive: '#e5e7eb',\r\n    bgInput: '#f9fafb',\r\n\r\n    // Text colors\r\n    textPrimary: '#1A1A1A',\r\n    textSecondary: '#5A5A5A',\r\n    textTertiary: '#8A8A8A',\r\n    textDisabled: '#d1d5db',\r\n    textInverse: '#ffffff',\r\n\r\n    // Border colors\r\n    borderPrimary: 'rgba(0, 0, 0, 0.1)',\r\n    borderSecondary: 'rgba(0, 0, 0, 0.05)',\r\n    borderDefault: '#e5e7eb',\r\n    borderHover: '#d1d5db',\r\n    borderSubtle: '#f3f4f6',\r\n\r\n    // Interactive colors\r\n    accentPrimary: '#5E6AD2',\r\n    accentHover: '#4A56B8',\r\n    interactivePrimary: '#0ea5e9',\r\n    interactivePrimaryHover: '#0284c7',\r\n    interactivePrimaryBorder: 'rgba(14, 165, 233, 0.3)',\r\n    interactivePrimaryBackground: 'rgba(14, 165, 233, 0.08)',\r\n    interactivePrimaryBackgroundHover: 'rgba(14, 165, 233, 0.15)',\r\n\r\n    // Status colors\r\n    success: '#059669',\r\n    warning: '#D97706',\r\n    error: '#DC2626',\r\n    info: '#2563EB',\r\n    danger: '#dc2626',\r\n    dangerBorder: 'rgba(220, 38, 38, 0.3)',\r\n    dangerBackground: 'rgba(220, 38, 38, 0.08)',\r\n    dangerBackgroundHover: 'rgba(220, 38, 38, 0.15)',\r\n  },\r\n  shadows: {\r\n    sm: '0 1px 3px rgba(0, 0, 0, 0.12)',\r\n    md: '0 4px 12px rgba(0, 0, 0, 0.15)',\r\n    lg: '0 12px 32px rgba(0, 0, 0, 0.2)',\r\n  },\r\n  radii: {\r\n    sm: '6px',\r\n    md: '8px',\r\n    lg: '12px',\r\n    full: '9999px',\r\n  },\r\n  spacing: {\r\n    xs: '4px',\r\n    sm: '8px',\r\n    md: '16px',\r\n    lg: '24px',\r\n    xl: '32px',\r\n  },\r\n}\r\n\r\n/**\r\n * NEUTRAL THEME (Zen Mode)\r\n * Philosophy: Minimalism, calm technology, maximum concentration\r\n * Strictly monochromatic - states communicated via icons/typography\r\n */\r\nexport const neutralTheme: Theme = {\r\n  name: 'neutral',\r\n  emoji: '⚪',\r\n  displayName: 'Neutral (Zen)',\r\n  colors: {\r\n    // Background colors - Light neutral tones (matching Gantt neutral theme)\r\n    bgPrimary: '#FAFAF9',\r\n    bgSecondary: '#F5F5F4',\r\n    bgTertiary: '#E7E5E4',\r\n    bgCard: '#FEFEFE',\r\n    bgHover: '#F0EFEE',\r\n    bgActive: '#E7E5E4',\r\n    bgInput: '#FAFAF9',\r\n\r\n    // Text colors\r\n    textPrimary: '#1C1917',\r\n    textSecondary: '#57534E',\r\n    textTertiary: '#A8A29E',\r\n    textDisabled: '#D6D3D1',\r\n    textInverse: '#FAFAF9',\r\n\r\n    // Border colors\r\n    borderPrimary: '#E7E5E4',\r\n    borderSecondary: '#F0EFEE',\r\n    borderDefault: '#E7E5E4',\r\n    borderHover: '#D6D3D1',\r\n    borderSubtle: '#F5F5F4',\r\n\r\n    // Interactive colors - Neutral with subtle accents\r\n    accentPrimary: '#292524',\r\n    accentHover: '#44403C',\r\n    interactivePrimary: '#292524',\r\n    interactivePrimaryHover: '#44403C',\r\n    interactivePrimaryBorder: 'rgba(41, 37, 36, 0.3)',\r\n    interactivePrimaryBackground: 'rgba(41, 37, 36, 0.06)',\r\n    interactivePrimaryBackgroundHover: 'rgba(41, 37, 36, 0.12)',\r\n\r\n    // Status colors (minimal in Zen mode)\r\n    success: '#15803D',\r\n    warning: '#CA8A04',\r\n    error: '#B91C1C',\r\n    info: '#1D4ED8',\r\n    danger: '#B91C1C',\r\n    dangerBorder: 'rgba(185, 28, 28, 0.3)',\r\n    dangerBackground: 'rgba(185, 28, 28, 0.08)',\r\n    dangerBackgroundHover: 'rgba(185, 28, 28, 0.15)',\r\n  },\r\n  shadows: {\r\n    sm: '0 1px 3px rgba(0, 0, 0, 0.1)',\r\n    md: '0 4px 12px rgba(0, 0, 0, 0.12)',\r\n    lg: '0 12px 32px rgba(0, 0, 0, 0.15)',\r\n  },\r\n  radii: {\r\n    sm: '6px',\r\n    md: '8px',\r\n    lg: '12px',\r\n    full: '9999px',\r\n  },\r\n  spacing: {\r\n    xs: '4px',\r\n    sm: '8px',\r\n    md: '16px',\r\n    lg: '24px',\r\n    xl: '32px',\r\n  },\r\n}\r\n\r\n/**\r\n * All themes registry\r\n */\r\nexport const themes: Record<ThemeName, Theme> = {\r\n  dark: darkTheme,\r\n  light: lightTheme,\r\n  neutral: neutralTheme,\r\n}\r\n\r\n/**\r\n * Default theme\r\n */\r\nexport const defaultTheme: ThemeName = 'dark'\r\n","/**\r\n * Theme Provider\r\n * ASAKAA v0.5.0\r\n */\r\n\r\nimport { createContext, useContext, useEffect, useState, useCallback, type ReactNode } from 'react'\r\nimport type { ThemeName, ThemeContextValue } from './types'\r\nimport { themes, defaultTheme } from './themes'\r\n\r\nexport const ThemeContext = createContext<ThemeContextValue | undefined>(undefined)\r\n\r\nconst STORAGE_KEY = 'asakaa-theme'\r\n\r\nexport interface ThemeProviderProps {\r\n  children: ReactNode\r\n  defaultTheme?: ThemeName\r\n  storageKey?: string\r\n}\r\n\r\nexport function ThemeProvider({\r\n  children,\r\n  defaultTheme: initialTheme = defaultTheme,\r\n  storageKey = STORAGE_KEY,\r\n}: ThemeProviderProps) {\r\n  const [theme, setThemeState] = useState<ThemeName>(() => {\r\n    // Try to load from localStorage\r\n    if (typeof window !== 'undefined') {\r\n      const stored = localStorage.getItem(storageKey)\r\n      if (stored && (stored === 'dark' || stored === 'light' || stored === 'neutral')) {\r\n        return stored as ThemeName\r\n      }\r\n    }\r\n    return initialTheme\r\n  })\r\n\r\n  const setTheme = useCallback(\r\n    (newTheme: ThemeName) => {\r\n      setThemeState(newTheme)\r\n      if (typeof window !== 'undefined') {\r\n        localStorage.setItem(storageKey, newTheme)\r\n      }\r\n    },\r\n    [storageKey]\r\n  )\r\n\r\n  // Apply theme to document\r\n  useEffect(() => {\r\n    if (typeof window === 'undefined') return\r\n\r\n    const root = document.documentElement\r\n    const currentTheme = themes[theme]\r\n\r\n    // DUAL SYSTEM: Generate BOTH --theme-* AND --asakaa-color-* variables\r\n    // This ensures compatibility during migration from old to new system\r\n\r\n    // 1. Generate --theme-* variables (legacy compatibility)\r\n    Object.entries(currentTheme.colors).forEach(([key, value]) => {\r\n      if (value) {\r\n        root.style.setProperty(`--theme-${camelToKebab(key)}`, value)\r\n      }\r\n    })\r\n\r\n    // 2. Generate --asakaa-color-* variables (new system - following tokens.css naming)\r\n    const colorMap: Record<string, string> = {\r\n      // Background\r\n      bgPrimary: '--asakaa-color-background-primary',\r\n      bgSecondary: '--asakaa-color-background-secondary',\r\n      bgTertiary: '--asakaa-color-background-tertiary',\r\n      bgCard: '--asakaa-color-background-card',\r\n      bgHover: '--asakaa-color-background-hover',\r\n      bgActive: '--asakaa-color-background-active',\r\n      bgInput: '--asakaa-color-background-input',\r\n\r\n      // Text\r\n      textPrimary: '--asakaa-color-text-primary',\r\n      textSecondary: '--asakaa-color-text-secondary',\r\n      textTertiary: '--asakaa-color-text-tertiary',\r\n      textDisabled: '--asakaa-color-text-disabled',\r\n      textInverse: '--asakaa-color-text-inverse',\r\n\r\n      // Border\r\n      borderPrimary: '--asakaa-color-border-primary',\r\n      borderSecondary: '--asakaa-color-border-secondary',\r\n      borderDefault: '--asakaa-color-border-default',\r\n      borderHover: '--asakaa-color-border-hover',\r\n      borderSubtle: '--asakaa-color-border-subtle',\r\n\r\n      // Interactive\r\n      accentPrimary: '--asakaa-color-accent-primary',\r\n      accentHover: '--asakaa-color-accent-hover',\r\n      interactivePrimary: '--asakaa-color-interactive-primary',\r\n      interactivePrimaryHover: '--asakaa-color-interactive-primaryHover',\r\n      interactivePrimaryBorder: '--asakaa-color-interactive-primaryBorder',\r\n      interactivePrimaryBackground: '--asakaa-color-interactive-primaryBackground',\r\n      interactivePrimaryBackgroundHover: '--asakaa-color-interactive-primaryBackgroundHover',\r\n\r\n      // Status & Danger\r\n      success: '--asakaa-color-status-success',\r\n      warning: '--asakaa-color-status-warning',\r\n      error: '--asakaa-color-status-error',\r\n      info: '--asakaa-color-status-info',\r\n      danger: '--asakaa-color-danger',\r\n      dangerBorder: '--asakaa-color-danger-border',\r\n      dangerBackground: '--asakaa-color-danger-background',\r\n      dangerBackgroundHover: '--asakaa-color-danger-backgroundHover',\r\n    }\r\n\r\n    Object.entries(colorMap).forEach(([themeKey, cssVar]) => {\r\n      const value = currentTheme.colors[themeKey as keyof typeof currentTheme.colors]\r\n      if (value) {\r\n        root.style.setProperty(cssVar, value)\r\n      }\r\n    })\r\n\r\n    // 3. Set data-theme attribute for CSS selectors\r\n    root.setAttribute('data-theme', theme)\r\n\r\n    // 4. Set class for backward compatibility\r\n    root.classList.remove('theme-dark', 'theme-light', 'theme-neutral')\r\n    root.classList.add(`theme-${theme}`)\r\n  }, [theme])\r\n\r\n  const value: ThemeContextValue = {\r\n    theme,\r\n    setTheme,\r\n    themes,\r\n  }\r\n\r\n  return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/**\r\n * Hook to access theme context\r\n */\r\nexport function useTheme() {\r\n  const context = useContext(ThemeContext)\r\n  if (!context) {\r\n    throw new Error('useTheme must be used within ThemeProvider')\r\n  }\r\n  return context\r\n}\r\n\r\n/**\r\n * Utility: Convert camelCase to kebab-case\r\n */\r\nfunction camelToKebab(str: string): string {\r\n  return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\r\n}\r\n","import { useTheme } from '../../theme/ThemeProvider'\r\nimport { themes } from '../../theme/themes'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface ThemeModalProps {\r\n  isOpen: boolean\r\n  onClose: () => void\r\n  className?: string\r\n}\r\n\r\nexport function ThemeModal({ isOpen, onClose, className }: ThemeModalProps) {\r\n  const { theme, setTheme } = useTheme()\r\n\r\n  if (!isOpen) return null\r\n\r\n  return (\r\n    <div className={cn('fixed inset-0 z-[9999] flex items-center justify-center', className)}>\r\n      <div className=\"absolute inset-0 bg-black/60 backdrop-blur-sm\" onClick={onClose} />\r\n\r\n      <div\r\n        className=\"relative rounded-2xl border shadow-2xl max-w-md w-full mx-4\"\r\n        style={{\r\n          backgroundColor: 'var(--theme-bg-secondary)',\r\n          borderColor: 'var(--theme-border-primary)',\r\n        }}\r\n      >\r\n        <div className=\"px-6 py-5 border-b flex items-center justify-between\" style={{ borderColor: 'var(--theme-border-primary)' }}>\r\n          <h2 className=\"text-2xl font-bold\" style={{ color: 'var(--theme-text-primary)' }}>\r\n            Select Theme\r\n          </h2>\r\n          <button\r\n            onClick={onClose}\r\n            className=\"text-2xl leading-none p-2 hover:bg-white/10 rounded-lg transition-colors\"\r\n            style={{ color: 'var(--theme-text-secondary)' }}\r\n            aria-label=\"Close\"\r\n          >\r\n            ×\r\n          </button>\r\n        </div>\r\n\r\n        <div className=\"p-6 space-y-3\">\r\n          {Object.entries(themes).map(([key, themeData]) => (\r\n            <button\r\n              key={key}\r\n              onClick={() => {\r\n                setTheme(key as any)\r\n                onClose()\r\n              }}\r\n              className={cn(\r\n                'w-full p-4 rounded-lg border-2 transition-all flex items-center gap-4',\r\n                theme === key\r\n                  ? 'border-blue-500 bg-blue-500/20'\r\n                  : 'border-white/20 hover:border-white/40'\r\n              )}\r\n              style={{\r\n                backgroundColor: theme === key ? 'var(--theme-accent-primary)20' : 'transparent',\r\n              }}\r\n            >\r\n              <div className=\"text-3xl\">{themeData.emoji}</div>\r\n              <div className=\"text-left flex-1\">\r\n                <div className=\"font-semibold\" style={{ color: 'var(--theme-text-primary)' }}>\r\n                  {themeData.displayName}\r\n                </div>\r\n                <div className=\"text-xs\" style={{ color: 'var(--theme-text-secondary)' }}>\r\n                  {key === 'dark' && 'Default dark theme with Linear-inspired colors'}\r\n                  {key === 'light' && 'Clean light theme with high contrast'}\r\n                  {key === 'neutral' && 'Monochrome zen theme'}\r\n                </div>\r\n              </div>\r\n              {theme === key && (\r\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\">\r\n                  <path d=\"M20 6L9 17l-5-5\" />\r\n                </svg>\r\n              )}\r\n            </button>\r\n          ))}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","import { GanttTheme } from './types';\r\n\r\nexport const themes: Record<string, GanttTheme> = {\r\n  dark: {\r\n    // Backgrounds\r\n    // v0.14.7: Reduced zebra stripe contrast for more sophisticated look\r\n    bgPrimary: '#1A1D21',\r\n    bgSecondary: '#23272E',\r\n    bgGrid: '#1C1F24',  // Reduced contrast from #1E2228\r\n    bgWeekend: 'rgba(59, 130, 246, 0.02)',\r\n\r\n    // Borders\r\n    border: '#2D3139',\r\n    borderLight: '#26292F',\r\n\r\n    // Text\r\n    textPrimary: '#F5F5F7',\r\n    textSecondary: '#B4B9C5',\r\n    textTertiary: '#7C8394',\r\n\r\n    // Accent & Interactive - Electric Blue brand color\r\n    accent: '#3B82F6',\r\n    accentHover: '#60A5FA',\r\n    accentLight: 'rgba(59, 130, 246, 0.12)',\r\n\r\n    // Task Elements - Electric Blue brand color\r\n    taskBarPrimary: '#3B82F6',\r\n    taskBarProgress: '#2563EB',\r\n    taskBarHandle: '#FFFFFF',\r\n\r\n    // Dependencies & Critical Path\r\n    dependency: 'rgba(180, 185, 197, 0.25)',\r\n    dependencyHover: 'rgba(180, 185, 197, 0.45)',\r\n    criticalPath: '#EF4444',\r\n    criticalPathLight: 'rgba(239, 68, 68, 0.12)',\r\n\r\n    // Special Elements\r\n    today: '#EF4444',\r\n    todayLight: 'rgba(239, 68, 68, 0.08)',\r\n    milestone: '#F59E0B',\r\n    milestoneLight: 'rgba(245, 158, 11, 0.1)',\r\n\r\n    // Status Colors\r\n    statusTodo: '#7C8394',\r\n    statusInProgress: '#3B82F6',\r\n    statusCompleted: '#10B981',\r\n\r\n    // Hover & Focus States\r\n    hoverBg: 'rgba(255, 255, 255, 0.05)',\r\n    focusRing: '#3B82F6',\r\n  },\r\n  \r\n  light: {\r\n    // Backgrounds\r\n    // v0.14.7: Reduced zebra stripe contrast for more sophisticated look\r\n    bgPrimary: '#FFFFFF',\r\n    bgSecondary: '#F9FAFB',\r\n    bgGrid: '#FDFEFE',  // Reduced contrast from #FCFCFD\r\n    bgWeekend: 'rgba(37, 99, 235, 0.02)',\r\n\r\n    // Borders\r\n    border: '#E5E7EB',\r\n    borderLight: '#F0F1F3',\r\n\r\n    // Text\r\n    textPrimary: '#111827',\r\n    textSecondary: '#4B5563',\r\n    textTertiary: '#9CA3AF',\r\n\r\n    // Accent & Interactive\r\n    accent: '#2563EB',\r\n    accentHover: '#1D4ED8',\r\n    accentLight: 'rgba(37, 99, 235, 0.08)',\r\n\r\n    // Task Elements\r\n    taskBarPrimary: '#2563EB',\r\n    taskBarProgress: '#1E40AF',\r\n    taskBarHandle: '#FFFFFF',\r\n\r\n    // Dependencies & Critical Path\r\n    dependency: 'rgba(75, 85, 99, 0.2)',\r\n    dependencyHover: 'rgba(75, 85, 99, 0.4)',\r\n    criticalPath: '#DC2626',\r\n    criticalPathLight: 'rgba(220, 38, 38, 0.1)',\r\n\r\n    // Special Elements - \"Today\" uses accent color (blue) instead of red\r\n    today: '#2563EB',  // Accent blue - reserved red for overdue/at-risk states\r\n    todayLight: 'rgba(37, 99, 235, 0.08)',\r\n    milestone: '#F59E0B',\r\n    milestoneLight: 'rgba(245, 158, 11, 0.08)',\r\n    \r\n    // Status Colors\r\n    statusTodo: '#9CA3AF',\r\n    statusInProgress: '#2563EB',\r\n    statusCompleted: '#059669',\r\n    \r\n    // Hover & Focus States\r\n    hoverBg: 'rgba(0, 0, 0, 0.03)',\r\n    focusRing: '#2563EB',\r\n  },\r\n  \r\n  neutral: {\r\n    // Backgrounds\r\n    // v0.14.7: Reduced zebra stripe contrast for more sophisticated look\r\n    bgPrimary: '#FAFAF9',\r\n    bgSecondary: '#F5F5F4',\r\n    bgGrid: '#FBFBFA',  // Reduced contrast from #FEFEFE\r\n    bgWeekend: 'rgba(41, 37, 36, 0.015)',\r\n\r\n    // Borders\r\n    border: '#E7E5E4',\r\n    borderLight: '#F0EFEE',\r\n\r\n    // Text\r\n    textPrimary: '#1C1917',\r\n    textSecondary: '#57534E',\r\n    textTertiary: '#A8A29E',\r\n\r\n    // Accent & Interactive\r\n    accent: '#292524',\r\n    accentHover: '#44403C',\r\n    accentLight: 'rgba(41, 37, 36, 0.06)',\r\n\r\n    // Task Elements\r\n    taskBarPrimary: '#292524',\r\n    taskBarProgress: '#1C1917',\r\n    taskBarHandle: '#FFFFFF',\r\n\r\n    // Dependencies & Critical Path\r\n    dependency: 'rgba(87, 83, 78, 0.2)',\r\n    dependencyHover: 'rgba(87, 83, 78, 0.35)',\r\n    criticalPath: '#44403C',  // Dark gray instead of red - monochromatic\r\n    criticalPathLight: 'rgba(68, 64, 60, 0.08)',\r\n\r\n    // Special Elements - Zen mode: PURE monochrome, NO color\r\n    today: '#1C1917',  // Black - maintains monochrome philosophy\r\n    todayLight: 'rgba(28, 25, 23, 0.04)',\r\n    milestone: '#57534E',  // Medium gray - no yellow\r\n    milestoneLight: 'rgba(87, 83, 78, 0.06)',\r\n    \r\n    // Status Colors\r\n    statusTodo: '#A8A29E',\r\n    statusInProgress: '#292524',\r\n    statusCompleted: '#15803D',\r\n    \r\n    // Hover & Focus States\r\n    hoverBg: 'rgba(0, 0, 0, 0.025)',\r\n    focusRing: '#292524',\r\n  },\r\n};","import { GanttTheme } from './types';\r\nimport { themes } from './themes';\r\n\r\n/**\r\n * Deriva un objeto GanttTheme desde las variables CSS del ThemeProvider global.\r\n * Si no hay ThemeProvider, retorna el theme especificado o 'dark' por defecto.\r\n *\r\n * @param themeName - Nombre del tema ('dark' | 'light' | 'neutral')\r\n * @returns GanttTheme object con colores derivados de CSS variables\r\n */\r\nexport function deriveThemeFromCSS(themeName: 'dark' | 'light' | 'neutral' = 'dark'): GanttTheme {\r\n  // Si estamos en SSR, retornar theme estático\r\n  if (typeof window === 'undefined' || typeof getComputedStyle === 'undefined') {\r\n    return themes[themeName] || themes.dark;\r\n  }\r\n\r\n  // Obtener valores computados de variables CSS\r\n  const root = document.documentElement;\r\n  const styles = getComputedStyle(root);\r\n\r\n  // Helper para obtener variable CSS con fallback\r\n  const getVar = (varName: string, fallback: string): string => {\r\n    const value = styles.getPropertyValue(varName).trim();\r\n    return value || fallback;\r\n  };\r\n\r\n  // Derivar theme desde variables CSS (sistema --theme-*)\r\n  const derivedTheme: GanttTheme = {\r\n    // Backgrounds\r\n    bgPrimary: getVar('--theme-bg-primary', themes[themeName].bgPrimary),\r\n    bgSecondary: getVar('--theme-bg-secondary', themes[themeName].bgSecondary),\r\n    bgGrid: getVar('--theme-bg-card', themes[themeName].bgGrid),\r\n    bgWeekend: getVar('--theme-bg-hover', themes[themeName].bgWeekend),\r\n\r\n    // Borders\r\n    border: getVar('--theme-border-primary', themes[themeName].border),\r\n    borderLight: getVar('--theme-border-subtle', themes[themeName].borderLight),\r\n\r\n    // Text\r\n    textPrimary: getVar('--theme-text-primary', themes[themeName].textPrimary),\r\n    textSecondary: getVar('--theme-text-secondary', themes[themeName].textSecondary),\r\n    textTertiary: getVar('--theme-text-tertiary', themes[themeName].textTertiary),\r\n\r\n    // Accent & Interactive\r\n    accent: getVar('--theme-accent-primary', themes[themeName].accent),\r\n    accentHover: getVar('--theme-accent-hover', themes[themeName].accentHover),\r\n    accentLight: getVar('--theme-accent-primary', themes[themeName].accentLight), // usaremos opacity\r\n\r\n    // Task Elements\r\n    taskBarPrimary: getVar('--theme-accent-primary', themes[themeName].taskBarPrimary),\r\n    taskBarProgress: getVar('--theme-accent-hover', themes[themeName].taskBarProgress),\r\n    taskBarHandle: getVar('--theme-text-inverse', themes[themeName].taskBarHandle || '#FFFFFF'),\r\n\r\n    // Dependencies & Critical Path\r\n    dependency: getVar('--theme-border-secondary', themes[themeName].dependency),\r\n    dependencyHover: getVar('--theme-border-secondary', themes[themeName].dependencyHover),\r\n    criticalPath: getVar('--theme-error', themes[themeName].criticalPath),\r\n    criticalPathLight: getVar('--theme-error', themes[themeName].criticalPathLight),\r\n\r\n    // Special Elements - Theme-specific today indicator\r\n    // Light: uses accent (blue), Neutral: uses text primary (black), Dark: custom\r\n    today: themeName === 'light'\r\n      ? getVar('--theme-accent-primary', themes[themeName].today)\r\n      : themeName === 'neutral'\r\n      ? getVar('--theme-text-primary', themes[themeName].today)\r\n      : getVar('--theme-error', themes[themeName].today),\r\n    todayLight: themeName === 'light'\r\n      ? getVar('--theme-accent-primary', themes[themeName].todayLight)\r\n      : themeName === 'neutral'\r\n      ? getVar('--theme-text-primary', themes[themeName].todayLight)\r\n      : getVar('--theme-error', themes[themeName].todayLight),\r\n    milestone: getVar('--theme-warning', themes[themeName].milestone),\r\n    milestoneLight: getVar('--theme-warning', themes[themeName].milestoneLight),\r\n\r\n    // Status Colors\r\n    statusTodo: getVar('--theme-text-tertiary', themes[themeName].statusTodo),\r\n    statusInProgress: getVar('--theme-accent-primary', themes[themeName].statusInProgress),\r\n    statusCompleted: getVar('--theme-success', themes[themeName].statusCompleted),\r\n\r\n    // Hover & Focus States\r\n    hoverBg: getVar('--theme-bg-hover', themes[themeName].hoverBg),\r\n    focusRing: getVar('--theme-accent-primary', themes[themeName].focusRing),\r\n  };\r\n\r\n  return derivedTheme;\r\n}\r\n","/**\r\n * Internationalization (i18n) system for GanttBoard\r\n * @version 0.15.0\r\n *\r\n * Supports English (en) and Spanish (es) out of the box.\r\n * Users can provide custom translations via the `locale` config prop.\r\n */\r\n\r\nexport type SupportedLocale = 'en' | 'es';\r\n\r\nexport interface GanttTranslations {\r\n  // Column headers\r\n  columns: {\r\n    taskName: string;\r\n    startDate: string;\r\n    endDate: string;\r\n    duration: string;\r\n    assignees: string;\r\n    status: string;\r\n    progress: string;\r\n  };\r\n\r\n  // Toolbar\r\n  toolbar: {\r\n    today: string;\r\n    day: string;\r\n    week: string;\r\n    month: string;\r\n    export: string;\r\n    exportPdf: string;\r\n    exportPng: string;\r\n    exportCsv: string;\r\n    exportExcel: string;\r\n    exportMsProject: string;\r\n    undo: string;\r\n    redo: string;\r\n    createTask: string;\r\n    // v0.16.0: Density dropdown\r\n    density: string;\r\n    compact: string;\r\n    normal: string;\r\n    spacious: string;\r\n  };\r\n\r\n  // v0.16.0: Context menu labels (right-click menu)\r\n  contextMenu: {\r\n    editTask: string;\r\n    addSubtask: string;\r\n    markIncomplete: string;\r\n    setInProgress: string;\r\n    markComplete: string;\r\n    splitTask: string;\r\n    deleteTask: string;\r\n  };\r\n\r\n  // Task actions (context menu)\r\n  actions: {\r\n    edit: string;\r\n    delete: string;\r\n    duplicate: string;\r\n    addSubtask: string;\r\n    indent: string;\r\n    outdent: string;\r\n    moveUp: string;\r\n    moveDown: string;\r\n    splitTask: string;\r\n    linkTasks: string;\r\n    unlinkTasks: string;\r\n  };\r\n\r\n  // Status labels\r\n  status: {\r\n    todo: string;\r\n    inProgress: string;\r\n    completed: string;\r\n  };\r\n\r\n  // Tooltips and labels\r\n  labels: {\r\n    progress: string;\r\n    duration: string;\r\n    days: string;\r\n    day: string;\r\n    assigned: string;\r\n    milestone: string;\r\n    criticalPath: string;\r\n    subtask: string;\r\n    task: string;\r\n    noTasks: string;\r\n    addTask: string;\r\n    newTask: string;\r\n    loading: string;\r\n    error: string;\r\n    today: string;\r\n  };\r\n\r\n  // AI Assistant\r\n  ai: {\r\n    placeholder: string;\r\n    thinking: string;\r\n    suggestions: {\r\n      moveTask: string;\r\n      extendTask: string;\r\n      renameTask: string;\r\n      setProgress: string;\r\n      linkTasks: string;\r\n      createTask: string;\r\n      deleteTask: string;\r\n      assignTask: string;\r\n    };\r\n    errors: {\r\n      taskNotFound: string;\r\n      invalidDate: string;\r\n      invalidDuration: string;\r\n      invalidProgress: string;\r\n      unknownCommand: string;\r\n      processingError: string;\r\n    };\r\n  };\r\n\r\n  // Export\r\n  export: {\r\n    projectName: string;\r\n    ganttTasks: string;\r\n    taskId: string;\r\n    taskName: string;\r\n    startDate: string;\r\n    endDate: string;\r\n    isMilestone: string;\r\n    parentId: string;\r\n    yes: string;\r\n    no: string;\r\n    noTasksToExport: string;\r\n  };\r\n\r\n  // Date formats (for display)\r\n  dateFormat: {\r\n    short: string; // e.g., 'MM/dd' or 'dd/MM'\r\n    medium: string; // e.g., 'MMM d' or 'd MMM'\r\n    long: string; // e.g., 'MMMM d, yyyy' or 'd de MMMM de yyyy'\r\n  };\r\n}\r\n\r\n/**\r\n * English translations (default)\r\n */\r\nexport const en: GanttTranslations = {\r\n  columns: {\r\n    taskName: 'TASK NAME',\r\n    startDate: 'Start Date',\r\n    endDate: 'End Date',\r\n    duration: 'Duration',\r\n    assignees: 'Assignees',\r\n    status: 'Status',\r\n    progress: '% Complete',\r\n  },\r\n\r\n  toolbar: {\r\n    today: 'Today',\r\n    day: 'Day',\r\n    week: 'Week',\r\n    month: 'Month',\r\n    export: 'Export',\r\n    exportPdf: 'Export to PDF',\r\n    exportPng: 'Export to PNG',\r\n    exportCsv: 'Export to CSV',\r\n    exportExcel: 'Export to Excel',\r\n    exportMsProject: 'Export to MS Project',\r\n    undo: 'Undo',\r\n    redo: 'Redo',\r\n    createTask: 'New Task',\r\n    // v0.16.0: Density dropdown\r\n    density: 'Row Density',\r\n    compact: 'Compact',\r\n    normal: 'Normal',\r\n    spacious: 'Spacious',\r\n  },\r\n\r\n  // v0.16.0: Context menu labels (right-click menu)\r\n  contextMenu: {\r\n    editTask: 'Edit Task',\r\n    addSubtask: 'Add Subtask',\r\n    markIncomplete: 'Mark Incomplete',\r\n    setInProgress: 'Set In Progress',\r\n    markComplete: 'Mark Complete',\r\n    splitTask: 'Split Task',\r\n    deleteTask: 'Delete Task',\r\n  },\r\n\r\n  actions: {\r\n    edit: 'Edit',\r\n    delete: 'Delete',\r\n    duplicate: 'Duplicate',\r\n    addSubtask: 'Add Subtask',\r\n    indent: 'Indent',\r\n    outdent: 'Outdent',\r\n    moveUp: 'Move Up',\r\n    moveDown: 'Move Down',\r\n    splitTask: 'Split Task',\r\n    linkTasks: 'Link Tasks',\r\n    unlinkTasks: 'Unlink Tasks',\r\n  },\r\n\r\n  status: {\r\n    todo: 'To Do',\r\n    inProgress: 'In Progress',\r\n    completed: 'Completed',\r\n  },\r\n\r\n  labels: {\r\n    progress: 'Progress',\r\n    duration: 'Duration',\r\n    days: 'days',\r\n    day: 'day',\r\n    assigned: 'Assigned',\r\n    milestone: 'Milestone',\r\n    criticalPath: 'Critical Path',\r\n    subtask: 'Subtask',\r\n    task: 'Task',\r\n    noTasks: 'No tasks yet',\r\n    addTask: 'Add task',\r\n    newTask: 'New Task',\r\n    loading: 'Loading...',\r\n    error: 'Error',\r\n    today: 'Today',\r\n  },\r\n\r\n  ai: {\r\n    placeholder: 'Ask AI to edit tasks... (e.g., \"Move Design to next week\")',\r\n    thinking: 'Thinking...',\r\n    suggestions: {\r\n      moveTask: 'Move \"Task Name\" to next Monday',\r\n      extendTask: 'Extend \"Task Name\" by 3 days',\r\n      renameTask: 'Rename \"Old Name\" to \"New Name\"',\r\n      setProgress: 'Set \"Task Name\" progress to 50%',\r\n      linkTasks: 'Link \"Task A\" to \"Task B\"',\r\n      createTask: 'Create a new task called \"New Task\"',\r\n      deleteTask: 'Delete \"Task Name\"',\r\n      assignTask: 'Assign John to \"Task Name\"',\r\n    },\r\n    errors: {\r\n      taskNotFound: 'Task not found',\r\n      invalidDate: 'Invalid date',\r\n      invalidDuration: 'Invalid duration',\r\n      invalidProgress: 'Invalid progress value',\r\n      unknownCommand: 'Unknown command',\r\n      processingError: 'Error processing command',\r\n    },\r\n  },\r\n\r\n  export: {\r\n    projectName: 'Gantt Project',\r\n    ganttTasks: 'Gantt Tasks',\r\n    taskId: 'Task ID',\r\n    taskName: 'Task Name',\r\n    startDate: 'Start Date',\r\n    endDate: 'End Date',\r\n    isMilestone: 'Is Milestone',\r\n    parentId: 'Parent ID',\r\n    yes: 'Yes',\r\n    no: 'No',\r\n    noTasksToExport: 'No tasks available to export',\r\n  },\r\n\r\n  dateFormat: {\r\n    short: 'MM/dd',\r\n    medium: 'MMM d',\r\n    long: 'MMMM d, yyyy',\r\n  },\r\n};\r\n\r\n/**\r\n * Spanish translations\r\n */\r\nexport const es: GanttTranslations = {\r\n  columns: {\r\n    taskName: 'NOMBRE DE TAREA',\r\n    startDate: 'Fecha Inicio',\r\n    endDate: 'Fecha Fin',\r\n    duration: 'Duración',\r\n    assignees: 'Asignados',\r\n    status: 'Estado',\r\n    progress: '% Completado',\r\n  },\r\n\r\n  toolbar: {\r\n    today: 'Hoy',\r\n    day: 'Día',\r\n    week: 'Semana',\r\n    month: 'Mes',\r\n    export: 'Exportar',\r\n    exportPdf: 'Exportar a PDF',\r\n    exportPng: 'Exportar a PNG',\r\n    exportCsv: 'Exportar a CSV',\r\n    exportExcel: 'Exportar a Excel',\r\n    exportMsProject: 'Exportar a MS Project',\r\n    undo: 'Deshacer',\r\n    redo: 'Rehacer',\r\n    createTask: 'Nueva Tarea',\r\n    // v0.16.0: Density dropdown\r\n    density: 'Densidad',\r\n    compact: 'Compacto',\r\n    normal: 'Normal',\r\n    spacious: 'Espacioso',\r\n  },\r\n\r\n  // v0.16.0: Context menu labels (right-click menu)\r\n  contextMenu: {\r\n    editTask: 'Editar Tarea',\r\n    addSubtask: 'Agregar Subtarea',\r\n    markIncomplete: 'Marcar Incompleta',\r\n    setInProgress: 'Marcar En Progreso',\r\n    markComplete: 'Marcar Completada',\r\n    splitTask: 'Dividir Tarea',\r\n    deleteTask: 'Eliminar Tarea',\r\n  },\r\n\r\n  actions: {\r\n    edit: 'Editar',\r\n    delete: 'Eliminar',\r\n    duplicate: 'Duplicar',\r\n    addSubtask: 'Agregar Subtarea',\r\n    indent: 'Aumentar Nivel',\r\n    outdent: 'Disminuir Nivel',\r\n    moveUp: 'Mover Arriba',\r\n    moveDown: 'Mover Abajo',\r\n    splitTask: 'Dividir Tarea',\r\n    linkTasks: 'Vincular Tareas',\r\n    unlinkTasks: 'Desvincular Tareas',\r\n  },\r\n\r\n  status: {\r\n    todo: 'Por Hacer',\r\n    inProgress: 'En Progreso',\r\n    completed: 'Completado',\r\n  },\r\n\r\n  labels: {\r\n    progress: 'Progreso',\r\n    duration: 'Duración',\r\n    days: 'días',\r\n    day: 'día',\r\n    assigned: 'Asignado',\r\n    milestone: 'Hito',\r\n    criticalPath: 'Ruta Crítica',\r\n    subtask: 'Subtarea',\r\n    task: 'Tarea',\r\n    noTasks: 'Sin tareas aún',\r\n    addTask: 'Agregar tarea',\r\n    newTask: 'Nueva Tarea',\r\n    loading: 'Cargando...',\r\n    error: 'Error',\r\n    today: 'Hoy',\r\n  },\r\n\r\n  ai: {\r\n    placeholder: 'Pídele a la IA que edite tareas... (ej: \"Mover Diseño a la próxima semana\")',\r\n    thinking: 'Pensando...',\r\n    suggestions: {\r\n      moveTask: 'Mover \"Nombre de Tarea\" al próximo lunes',\r\n      extendTask: 'Extender \"Nombre de Tarea\" por 3 días',\r\n      renameTask: 'Renombrar \"Nombre Anterior\" a \"Nombre Nuevo\"',\r\n      setProgress: 'Establecer progreso de \"Nombre de Tarea\" al 50%',\r\n      linkTasks: 'Vincular \"Tarea A\" con \"Tarea B\"',\r\n      createTask: 'Crear una nueva tarea llamada \"Nueva Tarea\"',\r\n      deleteTask: 'Eliminar \"Nombre de Tarea\"',\r\n      assignTask: 'Asignar a Juan a \"Nombre de Tarea\"',\r\n    },\r\n    errors: {\r\n      taskNotFound: 'Tarea no encontrada',\r\n      invalidDate: 'Fecha inválida',\r\n      invalidDuration: 'Duración inválida',\r\n      invalidProgress: 'Valor de progreso inválido',\r\n      unknownCommand: 'Comando desconocido',\r\n      processingError: 'Error procesando el comando',\r\n    },\r\n  },\r\n\r\n  export: {\r\n    projectName: 'Proyecto Gantt',\r\n    ganttTasks: 'Tareas Gantt',\r\n    taskId: 'ID de Tarea',\r\n    taskName: 'Nombre de Tarea',\r\n    startDate: 'Fecha Inicio',\r\n    endDate: 'Fecha Fin',\r\n    isMilestone: 'Es Hito',\r\n    parentId: 'ID Padre',\r\n    yes: 'Sí',\r\n    no: 'No',\r\n    noTasksToExport: 'No hay tareas disponibles para exportar',\r\n  },\r\n\r\n  dateFormat: {\r\n    short: 'dd/MM',\r\n    medium: 'd MMM',\r\n    long: 'd de MMMM de yyyy',\r\n  },\r\n};\r\n\r\n/**\r\n * All available translations\r\n */\r\nexport const translations: Record<SupportedLocale, GanttTranslations> = {\r\n  en,\r\n  es,\r\n};\r\n\r\n/**\r\n * Get translations for a specific locale\r\n * Falls back to English if locale is not found\r\n */\r\nexport function getTranslations(locale: SupportedLocale | string): GanttTranslations {\r\n  return translations[locale as SupportedLocale] || translations.en;\r\n}\r\n\r\n/**\r\n * Merge custom translations with default translations\r\n * Allows partial overrides while keeping defaults for missing keys\r\n */\r\nexport function mergeTranslations(\r\n  locale: SupportedLocale | string,\r\n  customTranslations?: Partial<GanttTranslations>\r\n): GanttTranslations {\r\n  const base = getTranslations(locale);\r\n\r\n  if (!customTranslations) {\r\n    return base;\r\n  }\r\n\r\n  return {\r\n    columns: { ...base.columns, ...customTranslations.columns },\r\n    toolbar: { ...base.toolbar, ...customTranslations.toolbar },\r\n    contextMenu: { ...base.contextMenu, ...customTranslations.contextMenu }, // v0.16.0\r\n    actions: { ...base.actions, ...customTranslations.actions },\r\n    status: { ...base.status, ...customTranslations.status },\r\n    labels: { ...base.labels, ...customTranslations.labels },\r\n    ai: {\r\n      ...base.ai,\r\n      ...customTranslations.ai,\r\n      suggestions: { ...base.ai.suggestions, ...customTranslations.ai?.suggestions },\r\n      errors: { ...base.ai.errors, ...customTranslations.ai?.errors },\r\n    },\r\n    export: { ...base.export, ...customTranslations.export },\r\n    dateFormat: { ...base.dateFormat, ...customTranslations.dateFormat },\r\n  };\r\n}\r\n","/**\r\n * GanttI18nContext - Provides translations to all Gantt components\r\n * @version 0.15.0\r\n */\r\n\r\nimport { createContext, useContext } from 'react';\r\nimport { GanttTranslations, en } from './i18n';\r\n\r\n/**\r\n * Context for Gantt internationalization\r\n * Default value is English translations\r\n */\r\nexport const GanttI18nContext = createContext<GanttTranslations>(en);\r\n\r\n/**\r\n * Hook to access translations in Gantt components\r\n * @returns The current translations object\r\n *\r\n * @example\r\n * ```tsx\r\n * function MyGanttComponent() {\r\n *   const t = useGanttI18n();\r\n *   return <button>{t.toolbar.createTask}</button>;\r\n * }\r\n * ```\r\n */\r\nexport function useGanttI18n(): GanttTranslations {\r\n  return useContext(GanttI18nContext);\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport { ZoomIn, ZoomOut, Sun, Moon, Palette, Download, FileImage, FileSpreadsheet, FileText, FileJson, ChevronDown, FolderKanban, Plus, Rows3, Check } from 'lucide-react';\r\nimport { TimeScale, Theme, RowDensity } from './types';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { useGanttI18n } from './GanttI18nContext'; // v0.15.0: i18n\r\n\r\n// Export options configuration\r\nexport interface ExportOption {\r\n  id: string;\r\n  label: string;\r\n  description: string;\r\n  icon: React.ReactNode;\r\n  action: () => void | Promise<void>;\r\n}\r\n\r\ninterface GanttToolbarProps {\r\n  theme: any;\r\n  timeScale: TimeScale;\r\n  onTimeScaleChange: (scale: TimeScale) => void;\r\n  zoom: number;\r\n  onZoomChange: (zoom: number) => void;\r\n  currentTheme: Theme;\r\n  onThemeChange: (theme: Theme) => void;\r\n  rowDensity: RowDensity;\r\n  onRowDensityChange: (density: RowDensity) => void;\r\n  showThemeSelector?: boolean;\r\n  // v0.14.3: Create task button\r\n  showCreateTaskButton?: boolean;\r\n  createTaskLabel?: string;\r\n  onCreateTask?: () => void;\r\n  // Export handlers\r\n  onExportPNG?: () => Promise<void>;\r\n  onExportPDF?: () => Promise<void>;\r\n  onExportExcel?: () => Promise<void>;\r\n  onExportCSV?: () => void;\r\n  onExportJSON?: () => void;\r\n  onExportMSProject?: () => void;\r\n}\r\n\r\n// Export Dropdown Component\r\ninterface ExportDropdownProps {\r\n  theme: any;\r\n  onExportPNG?: () => Promise<void>;\r\n  onExportPDF?: () => Promise<void>;\r\n  onExportExcel?: () => Promise<void>;\r\n  onExportCSV?: () => void;\r\n  onExportJSON?: () => void;\r\n  onExportMSProject?: () => void;\r\n}\r\n\r\nfunction ExportDropdown({ theme, onExportPNG, onExportPDF, onExportExcel, onExportCSV, onExportJSON, onExportMSProject }: ExportDropdownProps) {\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const [isExporting, setIsExporting] = useState<string | null>(null);\r\n  const dropdownRef = useRef<HTMLDivElement>(null);\r\n  const t = useGanttI18n(); // v0.15.0: i18n\r\n\r\n  // Close dropdown when clicking outside\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\r\n        setIsOpen(false);\r\n      }\r\n    };\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside);\r\n    }\r\n    return () => document.removeEventListener('mousedown', handleClickOutside);\r\n  }, [isOpen]);\r\n\r\n  const hasAnyExport = onExportPNG || onExportPDF || onExportExcel || onExportCSV || onExportJSON || onExportMSProject;\r\n\r\n  if (!hasAnyExport) return null;\r\n\r\n  const exportOptions = [\r\n    {\r\n      id: 'png',\r\n      label: 'PNG',\r\n      description: 'Image',\r\n      icon: <FileImage className=\"w-4 h-4\" />,\r\n      handler: onExportPNG,\r\n    },\r\n    {\r\n      id: 'pdf',\r\n      label: 'PDF',\r\n      description: 'Document',\r\n      icon: <FileText className=\"w-4 h-4\" />,\r\n      handler: onExportPDF,\r\n    },\r\n    {\r\n      id: 'excel',\r\n      label: 'Excel',\r\n      description: 'Spreadsheet',\r\n      icon: <FileSpreadsheet className=\"w-4 h-4\" />,\r\n      handler: onExportExcel,\r\n    },\r\n    {\r\n      id: 'csv',\r\n      label: 'CSV',\r\n      description: 'Comma-separated',\r\n      icon: <FileText className=\"w-4 h-4\" />,\r\n      handler: onExportCSV,\r\n    },\r\n    {\r\n      id: 'json',\r\n      label: 'JSON',\r\n      description: 'Data',\r\n      icon: <FileJson className=\"w-4 h-4\" />,\r\n      handler: onExportJSON,\r\n    },\r\n    {\r\n      id: 'msproject',\r\n      label: 'MS Project',\r\n      description: 'XML',\r\n      icon: <FolderKanban className=\"w-4 h-4\" />,\r\n      handler: onExportMSProject,\r\n    },\r\n  ].filter(opt => opt.handler);\r\n\r\n  const handleExport = async (id: string, handler: (() => void | Promise<void>) | undefined) => {\r\n    if (!handler) return;\r\n\r\n    setIsExporting(id);\r\n    try {\r\n      await handler();\r\n    } catch (error) {\r\n      console.error(`Export ${id} failed:`, error);\r\n    } finally {\r\n      setIsExporting(null);\r\n      setIsOpen(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div ref={dropdownRef} className=\"relative\">\r\n      <motion.button\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs transition-all\"\r\n        style={{\r\n          backgroundColor: isOpen ? theme.accent : theme.bgSecondary,\r\n          border: `1px solid ${isOpen ? theme.accent : theme.borderLight}`,\r\n          color: isOpen ? '#FFFFFF' : theme.textSecondary,\r\n          fontFamily: 'Inter, sans-serif',\r\n          fontWeight: 500,\r\n        }}\r\n        whileHover={{\r\n          scale: 1.02,\r\n          backgroundColor: theme.accent,\r\n          color: '#FFFFFF',\r\n        }}\r\n        whileTap={{ scale: 0.98 }}\r\n      >\r\n        <Download className=\"w-3.5 h-3.5\" />\r\n        <span>{t.toolbar.export}</span>\r\n        <ChevronDown\r\n          className=\"w-3 h-3 transition-transform\"\r\n          style={{ transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)' }}\r\n        />\r\n      </motion.button>\r\n\r\n      <AnimatePresence>\r\n        {isOpen && (\r\n          <motion.div\r\n            initial={{ opacity: 0, y: -8, scale: 0.95 }}\r\n            animate={{ opacity: 1, y: 0, scale: 1 }}\r\n            exit={{ opacity: 0, y: -8, scale: 0.95 }}\r\n            transition={{ duration: 0.15, ease: 'easeOut' }}\r\n            className=\"absolute right-0 mt-2 w-48 rounded-lg overflow-hidden z-50\"\r\n            style={{\r\n              backgroundColor: theme.bgSecondary,\r\n              border: `1px solid ${theme.border}`,\r\n              boxShadow: '0 10px 40px rgba(0, 0, 0, 0.25)',\r\n            }}\r\n          >\r\n            <div className=\"py-1\">\r\n              {exportOptions.map((option, index) => (\r\n                <motion.button\r\n                  key={option.id}\r\n                  onClick={() => handleExport(option.id, option.handler)}\r\n                  disabled={isExporting !== null}\r\n                  className=\"w-full flex items-center gap-3 px-3 py-2.5 text-left transition-all\"\r\n                  style={{\r\n                    backgroundColor: 'transparent',\r\n                    borderBottom: index < exportOptions.length - 1 ? `1px solid ${theme.borderLight}` : 'none',\r\n                  }}\r\n                  whileHover={{\r\n                    backgroundColor: theme.hoverBg,\r\n                  }}\r\n                  initial={{ opacity: 0, x: -10 }}\r\n                  animate={{ opacity: 1, x: 0 }}\r\n                  transition={{ delay: index * 0.03 }}\r\n                >\r\n                  <div\r\n                    className=\"flex items-center justify-center w-8 h-8 rounded-md\"\r\n                    style={{\r\n                      backgroundColor: theme.accentLight,\r\n                      color: theme.accent,\r\n                    }}\r\n                  >\r\n                    {isExporting === option.id ? (\r\n                      <motion.div\r\n                        animate={{ rotate: 360 }}\r\n                        transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\r\n                      >\r\n                        <Download className=\"w-4 h-4\" />\r\n                      </motion.div>\r\n                    ) : (\r\n                      option.icon\r\n                    )}\r\n                  </div>\r\n                  <div className=\"flex-1 min-w-0\">\r\n                    <div\r\n                      className=\"text-xs font-medium truncate\"\r\n                      style={{ color: theme.textPrimary }}\r\n                    >\r\n                      {option.label}\r\n                    </div>\r\n                    <div\r\n                      className=\"text-[10px] truncate\"\r\n                      style={{ color: theme.textTertiary }}\r\n                    >\r\n                      {option.description}\r\n                    </div>\r\n                  </div>\r\n                </motion.button>\r\n              ))}\r\n            </div>\r\n          </motion.div>\r\n        )}\r\n      </AnimatePresence>\r\n    </div>\r\n  );\r\n}\r\n\r\n// Segmented Control Component (kept for theme selector)\r\ninterface SegmentedControlProps {\r\n  options: Array<{ value: string; label: string; icon?: React.ReactNode }>;\r\n  value: string;\r\n  onChange: (value: string) => void;\r\n  theme: any;\r\n  layoutId?: string;\r\n}\r\n\r\nfunction SegmentedControl({ options, value, onChange, theme, layoutId = 'activeSegment' }: SegmentedControlProps) {\r\n  return (\r\n    <div\r\n      className=\"inline-flex p-1 rounded-lg relative\"\r\n      style={{\r\n        backgroundColor: theme.bgSecondary,\r\n        border: `1px solid ${theme.borderLight}`,\r\n      }}\r\n    >\r\n      {options.map((option) => {\r\n        const isActive = value === option.value;\r\n        return (\r\n          <motion.button\r\n            key={option.value}\r\n            onClick={() => onChange(option.value)}\r\n            className=\"relative px-3 py-1.5 rounded-md text-xs transition-all flex items-center gap-1.5 min-w-[70px] justify-center\"\r\n            style={{\r\n              color: isActive ? theme.textPrimary : theme.textTertiary,\r\n              fontFamily: 'Inter, sans-serif',\r\n              fontWeight: isActive ? 600 : 500,\r\n              zIndex: isActive ? 2 : 1,\r\n            }}\r\n            whileHover={{ scale: 1.02 }}\r\n            whileTap={{ scale: 0.98 }}\r\n          >\r\n            {isActive && (\r\n              <motion.div\r\n                layoutId={layoutId}\r\n                className=\"absolute inset-0 rounded-md\"\r\n                style={{\r\n                  backgroundColor: theme.accent,\r\n                  boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\r\n                }}\r\n                transition={{\r\n                  type: 'spring',\r\n                  stiffness: 400,\r\n                  damping: 30,\r\n                }}\r\n              />\r\n            )}\r\n            {option.icon && (\r\n              <span className=\"relative z-10\" style={{ color: isActive ? '#FFFFFF' : theme.textTertiary }}>\r\n                {option.icon}\r\n              </span>\r\n            )}\r\n            <span className=\"relative z-10\" style={{ color: isActive ? '#FFFFFF' : theme.textTertiary }}>\r\n              {option.label}\r\n            </span>\r\n          </motion.button>\r\n        );\r\n      })}\r\n    </div>\r\n  );\r\n}\r\n\r\n/**\r\n * v0.16.0: Minimal Tabs Component - Linear/Notion style\r\n * Minimalist tab selector with underline indicator\r\n */\r\ninterface MinimalTabsProps {\r\n  options: Array<{ value: string; label: string }>;\r\n  value: string;\r\n  onChange: (value: string) => void;\r\n  theme: any;\r\n}\r\n\r\nfunction MinimalTabs({ options, value, onChange, theme }: MinimalTabsProps) {\r\n  return (\r\n    <div className=\"inline-flex items-center gap-1\">\r\n      {options.map((option) => {\r\n        const isActive = value === option.value;\r\n        return (\r\n          <motion.button\r\n            key={option.value}\r\n            onClick={() => onChange(option.value)}\r\n            className=\"relative px-3 py-1.5 text-xs transition-all\"\r\n            style={{\r\n              color: isActive ? theme.accent : theme.textTertiary,\r\n              fontFamily: 'Inter, sans-serif',\r\n              fontWeight: isActive ? 600 : 500,\r\n            }}\r\n            whileHover={{ color: isActive ? theme.accent : theme.textSecondary }}\r\n            whileTap={{ scale: 0.98 }}\r\n          >\r\n            <span>{option.label}</span>\r\n            {/* Underline indicator */}\r\n            {isActive && (\r\n              <motion.div\r\n                layoutId=\"timeScaleUnderline\"\r\n                className=\"absolute bottom-0 left-1 right-1 h-0.5 rounded-full\"\r\n                style={{ backgroundColor: theme.accent }}\r\n                transition={{\r\n                  type: 'spring',\r\n                  stiffness: 400,\r\n                  damping: 30,\r\n                }}\r\n              />\r\n            )}\r\n          </motion.button>\r\n        );\r\n      })}\r\n    </div>\r\n  );\r\n}\r\n\r\n/**\r\n * v0.16.0: Density Dropdown Component\r\n * Consolidated density selector as a compact dropdown\r\n */\r\ninterface DensityDropdownProps {\r\n  theme: any;\r\n  value: RowDensity;\r\n  onChange: (density: RowDensity) => void;\r\n}\r\n\r\nfunction DensityDropdown({ theme, value, onChange }: DensityDropdownProps) {\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const dropdownRef = useRef<HTMLDivElement>(null);\r\n  const t = useGanttI18n();\r\n\r\n  // Close dropdown when clicking outside\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\r\n        setIsOpen(false);\r\n      }\r\n    };\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside);\r\n    }\r\n    return () => document.removeEventListener('mousedown', handleClickOutside);\r\n  }, [isOpen]);\r\n\r\n  const densityOptions = [\r\n    { value: 'compact' as RowDensity, label: t.toolbar.compact || 'Compact' },\r\n    { value: 'comfortable' as RowDensity, label: t.toolbar.normal || 'Normal' },\r\n    { value: 'spacious' as RowDensity, label: t.toolbar.spacious || 'Spacious' },\r\n  ];\r\n\r\n  const currentLabel = densityOptions.find(opt => opt.value === value)?.label || 'Normal';\r\n\r\n  return (\r\n    <div ref={dropdownRef} className=\"relative\">\r\n      <motion.button\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center justify-center p-2 rounded-lg transition-all\"\r\n        style={{\r\n          backgroundColor: isOpen ? theme.accentLight : theme.bgSecondary,\r\n          border: `1px solid ${isOpen ? theme.accent : theme.borderLight}`,\r\n          color: isOpen ? theme.accent : theme.textSecondary,\r\n        }}\r\n        whileHover={{\r\n          backgroundColor: theme.hoverBg,\r\n          scale: 1.02,\r\n        }}\r\n        whileTap={{ scale: 0.98 }}\r\n        title={`${t.toolbar.density || 'Density'}: ${currentLabel}`}\r\n      >\r\n        <Rows3 className=\"w-4 h-4\" />\r\n      </motion.button>\r\n\r\n      <AnimatePresence>\r\n        {isOpen && (\r\n          <motion.div\r\n            initial={{ opacity: 0, y: -8, scale: 0.95 }}\r\n            animate={{ opacity: 1, y: 0, scale: 1 }}\r\n            exit={{ opacity: 0, y: -8, scale: 0.95 }}\r\n            transition={{ duration: 0.15, ease: 'easeOut' }}\r\n            className=\"absolute left-0 mt-2 w-36 rounded-lg overflow-hidden z-50\"\r\n            style={{\r\n              backgroundColor: theme.bgSecondary,\r\n              border: `1px solid ${theme.border}`,\r\n              boxShadow: '0 10px 40px rgba(0, 0, 0, 0.25)',\r\n            }}\r\n          >\r\n            <div className=\"py-1\">\r\n              {densityOptions.map((option, index) => {\r\n                const isActive = value === option.value;\r\n                return (\r\n                  <motion.button\r\n                    key={option.value}\r\n                    onClick={() => {\r\n                      onChange(option.value);\r\n                      setIsOpen(false);\r\n                    }}\r\n                    className=\"w-full flex items-center justify-between px-3 py-2 text-left transition-all\"\r\n                    style={{\r\n                      backgroundColor: isActive ? theme.accentLight : 'transparent',\r\n                      borderBottom: index < densityOptions.length - 1 ? `1px solid ${theme.borderLight}` : 'none',\r\n                    }}\r\n                    whileHover={{\r\n                      backgroundColor: isActive ? theme.accentLight : theme.hoverBg,\r\n                    }}\r\n                    initial={{ opacity: 0, x: -10 }}\r\n                    animate={{ opacity: 1, x: 0 }}\r\n                    transition={{ delay: index * 0.03 }}\r\n                  >\r\n                    <span\r\n                      className=\"text-xs\"\r\n                      style={{\r\n                        color: isActive ? theme.accent : theme.textPrimary,\r\n                        fontFamily: 'Inter, sans-serif',\r\n                        fontWeight: isActive ? 600 : 500,\r\n                      }}\r\n                    >\r\n                      {option.label}\r\n                    </span>\r\n                    {isActive && (\r\n                      <Check className=\"w-3.5 h-3.5\" style={{ color: theme.accent }} />\r\n                    )}\r\n                  </motion.button>\r\n                );\r\n              })}\r\n            </div>\r\n          </motion.div>\r\n        )}\r\n      </AnimatePresence>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport function GanttToolbar({\r\n  theme,\r\n  timeScale,\r\n  onTimeScaleChange,\r\n  zoom,\r\n  onZoomChange,\r\n  currentTheme,\r\n  onThemeChange,\r\n  rowDensity,\r\n  onRowDensityChange,\r\n  showThemeSelector = true,\r\n  showCreateTaskButton = false,\r\n  createTaskLabel, // v0.15.0: Will use translations if not provided\r\n  onCreateTask,\r\n  onExportPNG,\r\n  onExportPDF,\r\n  onExportExcel,\r\n  onExportCSV,\r\n  onExportJSON,\r\n  onExportMSProject,\r\n}: GanttToolbarProps) {\r\n  const t = useGanttI18n(); // v0.15.0: i18n\r\n  const hasExport = onExportPNG || onExportPDF || onExportExcel || onExportCSV || onExportJSON || onExportMSProject;\r\n\r\n  // v0.16.0: Use minimal tabs for time scale (Linear/Notion style)\r\n  const timeScaleOptions = [\r\n    { value: 'day', label: t.toolbar.day },\r\n    { value: 'week', label: t.toolbar.week },\r\n    { value: 'month', label: t.toolbar.month },\r\n  ];\r\n\r\n  const themeOptions = [\r\n    { value: 'dark', label: 'Dark', icon: <Moon className=\"w-3.5 h-3.5\" /> },\r\n    { value: 'light', label: 'Light', icon: <Sun className=\"w-3.5 h-3.5\" /> },\r\n    { value: 'neutral', label: 'Zen', icon: <Palette className=\"w-3.5 h-3.5\" /> },\r\n  ];\r\n\r\n  return (\r\n    <div\r\n      className=\"h-12 px-4 flex items-center justify-between border-b\"\r\n      style={{\r\n        backgroundColor: theme.bgGrid,\r\n        borderColor: theme.border,\r\n      }}\r\n    >\r\n      {/* Left Section - Time Scale as Minimal Tabs */}\r\n      <div className=\"flex items-center gap-3\">\r\n        {/* v0.16.0: Minimal tabs for time scale */}\r\n        <MinimalTabs\r\n          options={timeScaleOptions}\r\n          value={timeScale}\r\n          onChange={(val) => onTimeScaleChange(val as TimeScale)}\r\n          theme={theme}\r\n        />\r\n\r\n        {/* Divider */}\r\n        <div\r\n          className=\"w-px h-5\"\r\n          style={{ backgroundColor: theme.borderLight }}\r\n        />\r\n\r\n        {/* Zoom Controls - Compact */}\r\n        <div className=\"flex items-center gap-1\">\r\n          <motion.button\r\n            onClick={() => onZoomChange(Math.max(0.5, zoom - 0.1))}\r\n            className=\"p-1.5 rounded-md transition-all\"\r\n            style={{\r\n              backgroundColor: 'transparent',\r\n              color: theme.textSecondary,\r\n            }}\r\n            whileHover={{\r\n              backgroundColor: theme.hoverBg,\r\n              scale: 1.05,\r\n            }}\r\n            whileTap={{ scale: 0.95 }}\r\n          >\r\n            <ZoomOut className=\"w-3.5 h-3.5\" />\r\n          </motion.button>\r\n\r\n          <div\r\n            className=\"px-2 py-0.5 rounded text-xs tabular-nums min-w-[42px] text-center\"\r\n            style={{\r\n              color: theme.textSecondary,\r\n              fontFamily: 'Inter, sans-serif',\r\n              fontWeight: 500,\r\n            }}\r\n          >\r\n            {Math.round(zoom * 100)}%\r\n          </div>\r\n\r\n          <motion.button\r\n            onClick={() => onZoomChange(Math.min(2, zoom + 0.1))}\r\n            className=\"p-1.5 rounded-md transition-all\"\r\n            style={{\r\n              backgroundColor: 'transparent',\r\n              color: theme.textSecondary,\r\n            }}\r\n            whileHover={{\r\n              backgroundColor: theme.hoverBg,\r\n              scale: 1.05,\r\n            }}\r\n            whileTap={{ scale: 0.95 }}\r\n          >\r\n            <ZoomIn className=\"w-3.5 h-3.5\" />\r\n          </motion.button>\r\n        </div>\r\n\r\n        {/* Divider */}\r\n        <div\r\n          className=\"w-px h-5\"\r\n          style={{ backgroundColor: theme.borderLight }}\r\n        />\r\n\r\n        {/* v0.16.0: Row Density as Dropdown Icon */}\r\n        <DensityDropdown\r\n          theme={theme}\r\n          value={rowDensity}\r\n          onChange={onRowDensityChange}\r\n        />\r\n      </div>\r\n\r\n      {/* Right Section - Create Task + Export + Theme Selector */}\r\n      <div className=\"flex items-center gap-3\">\r\n        {/* v0.14.3: Create Task Button */}\r\n        {showCreateTaskButton && onCreateTask && (\r\n          <>\r\n            <motion.button\r\n              onClick={onCreateTask}\r\n              className=\"flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs transition-all\"\r\n              style={{\r\n                background: 'linear-gradient(135deg, #10B981 0%, #059669 100%)',\r\n                color: '#FFFFFF',\r\n                fontFamily: 'Inter, sans-serif',\r\n                fontWeight: 500,\r\n                boxShadow: '0 2px 8px rgba(16, 185, 129, 0.3)',\r\n              }}\r\n              whileHover={{\r\n                scale: 1.02,\r\n                boxShadow: '0 4px 12px rgba(16, 185, 129, 0.4)',\r\n              }}\r\n              whileTap={{ scale: 0.98 }}\r\n            >\r\n              <Plus className=\"w-3.5 h-3.5\" />\r\n              <span>{createTaskLabel || t.toolbar.createTask}</span>\r\n            </motion.button>\r\n            {(hasExport || showThemeSelector) && (\r\n              <div\r\n                className=\"w-px h-6\"\r\n                style={{ backgroundColor: theme.borderLight }}\r\n              />\r\n            )}\r\n          </>\r\n        )}\r\n\r\n        {hasExport && (\r\n          <>\r\n            <ExportDropdown\r\n              theme={theme}\r\n              onExportPNG={onExportPNG}\r\n              onExportPDF={onExportPDF}\r\n              onExportExcel={onExportExcel}\r\n              onExportCSV={onExportCSV}\r\n              onExportJSON={onExportJSON}\r\n              onExportMSProject={onExportMSProject}\r\n            />\r\n            {showThemeSelector && (\r\n              <div\r\n                className=\"w-px h-6\"\r\n                style={{ backgroundColor: theme.borderLight }}\r\n              />\r\n            )}\r\n          </>\r\n        )}\r\n        {showThemeSelector && (\r\n          <SegmentedControl\r\n            options={themeOptions}\r\n            value={currentTheme}\r\n            onChange={(val) => onThemeChange(val as Theme)}\r\n            theme={theme}\r\n          />\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}","import { useState, useRef, useEffect } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { Plus, Check } from 'lucide-react';\r\nimport { Portal } from '../Portal';\r\nimport { GanttColumn, ColumnType } from './types';\r\n\r\ninterface ColumnManagerProps {\r\n  columns: GanttColumn[];\r\n  onToggleColumn: (columnId: ColumnType) => void;\r\n  theme: any;\r\n}\r\n\r\nexport function ColumnManager({ columns, onToggleColumn, theme }: ColumnManagerProps) {\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\r\n  const menuRef = useRef<HTMLDivElement>(null);\r\n  const buttonRef = useRef<HTMLButtonElement>(null);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) return;\r\n\r\n    const handleClickOutside = (e: MouseEvent) => {\r\n      if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\r\n        setIsOpen(false);\r\n      }\r\n    };\r\n\r\n    document.addEventListener('mousedown', handleClickOutside);\r\n    return () => document.removeEventListener('mousedown', handleClickOutside);\r\n  }, [isOpen]);\r\n\r\n  const availableColumns = columns.filter(col => col.id !== 'name');\r\n\r\n  return (\r\n    <>\r\n      <motion.button\r\n        ref={buttonRef}\r\n        onClick={() => {\r\n          if (!isOpen && buttonRef.current) {\r\n            const rect = buttonRef.current.getBoundingClientRect();\r\n            setMenuPosition({ x: rect.left, y: rect.bottom + 4 });\r\n          }\r\n          setIsOpen(!isOpen);\r\n        }}\r\n        className=\"p-2 rounded-md transition-colors flex items-center gap-1\"\r\n        style={{\r\n          backgroundColor: theme.bgSecondary,\r\n          border: `1px solid ${theme.borderLight}`,\r\n          color: theme.textSecondary,\r\n        }}\r\n        whileHover={{\r\n          backgroundColor: theme.hoverBg,\r\n          scale: 1.05,\r\n        }}\r\n        whileTap={{ scale: 0.95 }}\r\n      >\r\n        <Plus className=\"w-4 h-4\" />\r\n      </motion.button>\r\n\r\n      <AnimatePresence>\r\n        {isOpen && (\r\n          <Portal>\r\n            <motion.div\r\n              ref={menuRef}\r\n              initial={{ opacity: 0, scale: 0.95, y: -10 }}\r\n              animate={{ opacity: 1, scale: 1, y: 0 }}\r\n              exit={{ opacity: 0, scale: 0.95, y: -10 }}\r\n              transition={{ duration: 0.15 }}\r\n              className=\"column-manager-menu fixed min-w-[180px] rounded-lg shadow-xl z-[9999]\"\r\n              style={{\r\n                left: `${menuPosition.x}px`,\r\n                top: `${menuPosition.y}px`,\r\n                backgroundColor: theme.bgSecondary,\r\n                border: `1px solid ${theme.border}`,\r\n              }}\r\n            >\r\n              <div className=\"py-1\">\r\n                <div\r\n                  className=\"px-3 py-2 text-xs uppercase tracking-wider\"\r\n                  style={{\r\n                    color: theme.textTertiary,\r\n                    fontFamily: 'Inter, sans-serif',\r\n                    fontWeight: 600,\r\n                  }}\r\n                >\r\n                  Add Column\r\n                </div>\r\n                {availableColumns.map((column) => (\r\n                  <button\r\n                    key={column.id}\r\n                    onClick={() => {\r\n                      onToggleColumn(column.id);\r\n                    }}\r\n                    className=\"w-full px-3 py-2 text-left flex items-center justify-between transition-colors text-sm\"\r\n                    style={{\r\n                      color: theme.textPrimary,\r\n                      backgroundColor: 'transparent',\r\n                      fontFamily: 'Inter, sans-serif',\r\n                    }}\r\n                    onMouseEnter={(e) => {\r\n                      e.currentTarget.style.backgroundColor = theme.hoverBg;\r\n                    }}\r\n                    onMouseLeave={(e) => {\r\n                      e.currentTarget.style.backgroundColor = 'transparent';\r\n                    }}\r\n                  >\r\n                    <span>{column.label}</span>\r\n                    {column.visible && (\r\n                      <Check className=\"w-4 h-4\" style={{ color: theme.accent }} />\r\n                    )}\r\n                  </button>\r\n                ))}\r\n              </div>\r\n            </motion.div>\r\n          </Portal>\r\n        )}\r\n      </AnimatePresence>\r\n    </>\r\n  );\r\n}\r\n","import { useEffect, useRef } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport {\r\n  Plus,\r\n  Minus,\r\n  Edit3,\r\n  Trash2,\r\n  Link2,\r\n  BarChart3,\r\n  ArrowUpDown,\r\n  ArrowUp,\r\n  ArrowDown,\r\n  ChevronRight,\r\n  Eye,\r\n  EyeOff,\r\n  Settings,\r\n  Scissors, // v0.8.0: For Split task\r\n  Circle, // v0.16.0: For Mark Incomplete\r\n  PlayCircle, // v0.16.0: For Set In Progress\r\n  CheckCircle2, // v0.16.0: For Mark Complete\r\n  Pencil, // v0.16.0: Alias for Edit\r\n} from 'lucide-react';\r\n\r\nexport interface ContextMenuItem {\r\n  id: string;\r\n  label: string;\r\n  icon?: React.ReactNode;\r\n  onClick: () => void;\r\n  separator?: boolean;\r\n  disabled?: boolean;\r\n  submenu?: ContextMenuItem[];\r\n}\r\n\r\ninterface ContextMenuProps {\r\n  isOpen: boolean;\r\n  x: number;\r\n  y: number;\r\n  items: ContextMenuItem[];\r\n  onClose: () => void;\r\n  theme: any;\r\n}\r\n\r\nexport function ContextMenu({ isOpen, x, y, items, onClose, theme }: ContextMenuProps) {\r\n  const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n  useEffect(() => {\r\n    if (!isOpen) return;\r\n\r\n    const handleClickOutside = (e: MouseEvent) => {\r\n      if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\r\n        onClose();\r\n      }\r\n    };\r\n\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') {\r\n        onClose();\r\n      }\r\n    };\r\n\r\n    document.addEventListener('mousedown', handleClickOutside);\r\n    document.addEventListener('keydown', handleEscape);\r\n\r\n    return () => {\r\n      document.removeEventListener('mousedown', handleClickOutside);\r\n      document.removeEventListener('keydown', handleEscape);\r\n    };\r\n  }, [isOpen, onClose]);\r\n\r\n  if (!isOpen) return null;\r\n\r\n  return (\r\n    <AnimatePresence>\r\n      <motion.div\r\n        ref={menuRef}\r\n        initial={{ opacity: 0, scale: 0.95, y: -10 }}\r\n        animate={{ opacity: 1, scale: 1, y: 0 }}\r\n        exit={{ opacity: 0, scale: 0.95, y: -10 }}\r\n        transition={{ duration: 0.15, ease: [0.4, 0, 0.2, 1] }}\r\n        className=\"fixed z-[9999] min-w-[200px] rounded-lg shadow-xl\"\r\n        style={{\r\n          left: `${x}px`,\r\n          top: `${y}px`,\r\n          backgroundColor: theme.bgSecondary,\r\n          border: `1px solid ${theme.border}`,\r\n        }}\r\n      >\r\n        <div className=\"py-1\">\r\n          {items.map((item) => (\r\n            <div key={item.id}>\r\n              {item.separator && (\r\n                <div\r\n                  className=\"my-1 h-px\"\r\n                  style={{ backgroundColor: theme.borderLight }}\r\n                />\r\n              )}\r\n              <button\r\n                onClick={() => {\r\n                  if (!item.disabled) {\r\n                    item.onClick();\r\n                    onClose();\r\n                  }\r\n                }}\r\n                disabled={item.disabled}\r\n                className=\"w-full px-3 py-2 text-left flex items-center gap-2 transition-colors text-sm\"\r\n                style={{\r\n                  color: item.disabled ? theme.textTertiary : theme.textPrimary,\r\n                  backgroundColor: 'transparent',\r\n                  fontFamily: 'Inter, sans-serif',\r\n                  cursor: item.disabled ? 'not-allowed' : 'pointer',\r\n                  opacity: item.disabled ? 0.5 : 1,\r\n                }}\r\n                onMouseEnter={(e) => {\r\n                  if (!item.disabled) {\r\n                    e.currentTarget.style.backgroundColor = theme.hoverBg;\r\n                  }\r\n                }}\r\n                onMouseLeave={(e) => {\r\n                  e.currentTarget.style.backgroundColor = 'transparent';\r\n                }}\r\n              >\r\n                {item.icon && (\r\n                  <span style={{ color: theme.textSecondary }}>\r\n                    {item.icon}\r\n                  </span>\r\n                )}\r\n                <span className=\"flex-1\">{item.label}</span>\r\n                {item.submenu && (\r\n                  <ChevronRight className=\"w-3.5 h-3.5\" style={{ color: theme.textTertiary }} />\r\n                )}\r\n              </button>\r\n            </div>\r\n          ))}\r\n        </div>\r\n      </motion.div>\r\n    </AnimatePresence>\r\n  );\r\n}\r\n\r\n// Icon components for menu items\r\nexport const MenuIcons = {\r\n  Edit: <Edit3 className=\"w-4 h-4\" />,\r\n  Pencil: <Pencil className=\"w-4 h-4\" />, // v0.16.0: Alias for Edit\r\n  Delete: <Trash2 className=\"w-4 h-4\" />,\r\n  Add: <Plus className=\"w-4 h-4\" />,\r\n  AddSubtask: <Plus className=\"w-4 h-4\" />, // v0.16.0: Add subtask\r\n  Remove: <Minus className=\"w-4 h-4\" />,\r\n  Link: <Link2 className=\"w-4 h-4\" />,\r\n  Progress: <BarChart3 className=\"w-4 h-4\" />,\r\n  Sort: <ArrowUpDown className=\"w-4 h-4\" />,\r\n  SortAsc: <ArrowUp className=\"w-4 h-4\" />,\r\n  SortDesc: <ArrowDown className=\"w-4 h-4\" />,\r\n  Hide: <EyeOff className=\"w-4 h-4\" />,\r\n  Show: <Eye className=\"w-4 h-4\" />,\r\n  Settings: <Settings className=\"w-4 h-4\" />,\r\n  Split: <Scissors className=\"w-4 h-4\" />, // v0.8.0: Split task\r\n  // v0.16.0: Task status icons\r\n  MarkIncomplete: <Circle className=\"w-4 h-4\" />,\r\n  SetInProgress: <PlayCircle className=\"w-4 h-4\" />,\r\n  MarkComplete: <CheckCircle2 className=\"w-4 h-4\" />,\r\n};\r\n","import { useEffect, useCallback, useRef } from 'react';\r\nimport { Task } from './types';\r\n\r\ninterface UseGanttKeyboardProps {\r\n  tasks: Task[];\r\n  selectedTaskIds: Set<string>;\r\n  onTaskSelect: (taskId: string, multiSelect?: boolean) => void;\r\n  onTaskCreate: (afterTaskId: string, direction: 'above' | 'below') => void;\r\n  onTaskDelete: (taskIds: string[]) => void;\r\n  onTaskDuplicate: (taskIds: string[]) => void;\r\n  onTaskMove: (taskIds: string[], direction: 'up' | 'down') => void;\r\n  onTaskIndent: (taskIds: string[]) => void;\r\n  onTaskOutdent: (taskIds: string[]) => void;\r\n  onTaskRename: (taskId: string) => void;\r\n  onTaskToggleExpand: (taskId: string) => void;\r\n  onOpenTaskModal: (taskId: string) => void;\r\n  enableKeyboard?: boolean;\r\n}\r\n\r\nexport function useGanttKeyboard({\r\n  tasks,\r\n  selectedTaskIds,\r\n  onTaskSelect,\r\n  onTaskCreate,\r\n  onTaskDelete,\r\n  onTaskDuplicate,\r\n  onTaskMove,\r\n  onTaskIndent,\r\n  onTaskOutdent,\r\n  onTaskRename,\r\n  onTaskToggleExpand,\r\n  onOpenTaskModal,\r\n  enableKeyboard = true,\r\n}: UseGanttKeyboardProps) {\r\n  const isEditingRef = useRef(false);\r\n\r\n  // Set editing state from outside\r\n  const setIsEditing = useCallback((editing: boolean) => {\r\n    isEditingRef.current = editing;\r\n  }, []);\r\n\r\n  // Flatten tasks for navigation\r\n  const flattenTasks = useCallback((tasks: Task[]): Task[] => {\r\n    const result: Task[] = [];\r\n    const traverse = (tasks: Task[]) => {\r\n      for (const task of tasks) {\r\n        result.push(task);\r\n        if (task.subtasks && task.subtasks.length > 0 && task.isExpanded) {\r\n          traverse(task.subtasks);\r\n        }\r\n      }\r\n    };\r\n    traverse(tasks);\r\n    return result;\r\n  }, []);\r\n\r\n  // Get first selected task\r\n  const getFirstSelectedTask = useCallback(() => {\r\n    const flatTasks = flattenTasks(tasks);\r\n    for (const task of flatTasks) {\r\n      if (selectedTaskIds.has(task.id)) {\r\n        return task;\r\n      }\r\n    }\r\n    return null;\r\n  }, [tasks, selectedTaskIds, flattenTasks]);\r\n\r\n  // Navigate with arrow keys\r\n  const handleNavigation = useCallback(\r\n    (direction: 'up' | 'down', multiSelect: boolean) => {\r\n      const flatTasks = flattenTasks(tasks);\r\n      if (flatTasks.length === 0) return;\r\n\r\n      const selectedTask = getFirstSelectedTask();\r\n      if (!selectedTask) {\r\n        // No selection, select first task\r\n        onTaskSelect(flatTasks[0].id, false);\r\n        return;\r\n      }\r\n\r\n      const currentIndex = flatTasks.findIndex((t) => t.id === selectedTask.id);\r\n      if (currentIndex === -1) return;\r\n\r\n      const nextIndex = direction === 'up' ? currentIndex - 1 : currentIndex + 1;\r\n      if (nextIndex < 0 || nextIndex >= flatTasks.length) return;\r\n\r\n      const nextTask = flatTasks[nextIndex];\r\n      onTaskSelect(nextTask.id, multiSelect);\r\n    },\r\n    [tasks, getFirstSelectedTask, flattenTasks, onTaskSelect]\r\n  );\r\n\r\n  // Handle keyboard shortcuts\r\n  const handleKeyDown = useCallback(\r\n    (e: KeyboardEvent) => {\r\n      // Ignore if keyboard is disabled\r\n      if (!enableKeyboard) return;\r\n\r\n      // Ignore if user is typing in an input/textarea\r\n      const target = e.target as HTMLElement;\r\n      const isInputField =\r\n        target.tagName === 'INPUT' ||\r\n        target.tagName === 'TEXTAREA' ||\r\n        target.isContentEditable ||\r\n        isEditingRef.current;\r\n\r\n      if (isInputField) {\r\n        // Only allow Escape to cancel editing\r\n        if (e.key === 'Escape') {\r\n          target.blur();\r\n          isEditingRef.current = false;\r\n        }\r\n        return;\r\n      }\r\n\r\n      const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\r\n      const ctrlOrCmd = isMac ? e.metaKey : e.ctrlKey;\r\n      const selectedIds = Array.from(selectedTaskIds);\r\n      const selectedTask = getFirstSelectedTask();\r\n\r\n      // Navigation: Arrow Up/Down\r\n      if (e.key === 'ArrowUp') {\r\n        e.preventDefault();\r\n        handleNavigation('up', e.shiftKey);\r\n        return;\r\n      }\r\n      if (e.key === 'ArrowDown') {\r\n        e.preventDefault();\r\n        handleNavigation('down', e.shiftKey);\r\n        return;\r\n      }\r\n\r\n      // Expand/Collapse: Arrow Right/Left\r\n      if (selectedTask && (e.key === 'ArrowRight' || e.key === 'ArrowLeft')) {\r\n        if (selectedTask.subtasks && selectedTask.subtasks.length > 0) {\r\n          e.preventDefault();\r\n          if (e.key === 'ArrowRight' && !selectedTask.isExpanded) {\r\n            onTaskToggleExpand(selectedTask.id);\r\n          } else if (e.key === 'ArrowLeft' && selectedTask.isExpanded) {\r\n            onTaskToggleExpand(selectedTask.id);\r\n          }\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Move: Alt + Arrow Up/Down\r\n      if (e.altKey && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {\r\n        if (selectedIds.length > 0) {\r\n          e.preventDefault();\r\n          onTaskMove(selectedIds, e.key === 'ArrowUp' ? 'up' : 'down');\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Indent: Tab\r\n      if (e.key === 'Tab' && !e.shiftKey) {\r\n        if (selectedIds.length > 0) {\r\n          e.preventDefault();\r\n          onTaskIndent(selectedIds);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Outdent: Shift + Tab\r\n      if (e.key === 'Tab' && e.shiftKey) {\r\n        if (selectedIds.length > 0) {\r\n          e.preventDefault();\r\n          onTaskOutdent(selectedIds);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Create below: Enter\r\n      if (e.key === 'Enter' && !e.shiftKey && !ctrlOrCmd) {\r\n        if (selectedTask) {\r\n          e.preventDefault();\r\n          onTaskCreate(selectedTask.id, 'below');\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Create above: Shift + Enter\r\n      if (e.key === 'Enter' && e.shiftKey && !ctrlOrCmd) {\r\n        if (selectedTask) {\r\n          e.preventDefault();\r\n          onTaskCreate(selectedTask.id, 'above');\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Open modal: Ctrl/Cmd + Enter\r\n      if (e.key === 'Enter' && ctrlOrCmd) {\r\n        if (selectedTask) {\r\n          e.preventDefault();\r\n          onOpenTaskModal(selectedTask.id);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Rename: F2\r\n      if (e.key === 'F2') {\r\n        if (selectedTask) {\r\n          e.preventDefault();\r\n          onTaskRename(selectedTask.id);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Delete: Delete or Cmd/Ctrl + Backspace\r\n      if (e.key === 'Delete' || (e.key === 'Backspace' && ctrlOrCmd)) {\r\n        if (selectedIds.length > 0) {\r\n          e.preventDefault();\r\n          onTaskDelete(selectedIds);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Duplicate: Ctrl/Cmd + D\r\n      if (e.key === 'd' && ctrlOrCmd && !e.shiftKey) {\r\n        if (selectedIds.length > 0) {\r\n          e.preventDefault();\r\n          onTaskDuplicate(selectedIds);\r\n        }\r\n        return;\r\n      }\r\n    },\r\n    [\r\n      enableKeyboard,\r\n      selectedTaskIds,\r\n      getFirstSelectedTask,\r\n      handleNavigation,\r\n      onTaskCreate,\r\n      onTaskDelete,\r\n      onTaskDuplicate,\r\n      onTaskMove,\r\n      onTaskIndent,\r\n      onTaskOutdent,\r\n      onTaskRename,\r\n      onTaskToggleExpand,\r\n      onOpenTaskModal,\r\n    ]\r\n  );\r\n\r\n  // Register keyboard event listener\r\n  useEffect(() => {\r\n    if (!enableKeyboard) return;\r\n\r\n    window.addEventListener('keydown', handleKeyDown);\r\n    return () => {\r\n      window.removeEventListener('keydown', handleKeyDown);\r\n    };\r\n  }, [enableKeyboard, handleKeyDown]);\r\n\r\n  return { setIsEditing };\r\n}\r\n","import { useState, useCallback } from 'react';\r\n\r\nexport function useGanttSelection() {\r\n  const [selectedTaskIds, setSelectedTaskIds] = useState<Set<string>>(new Set());\r\n  const [lastSelectedId, setLastSelectedId] = useState<string | null>(null);\r\n\r\n  // Select a single task\r\n  const selectTask = useCallback((taskId: string) => {\r\n    setSelectedTaskIds(new Set([taskId]));\r\n    setLastSelectedId(taskId);\r\n  }, []);\r\n\r\n  // Toggle task selection (Ctrl/Cmd + Click)\r\n  const toggleTaskSelection = useCallback((taskId: string) => {\r\n    setSelectedTaskIds((prev) => {\r\n      const next = new Set(prev);\r\n      if (next.has(taskId)) {\r\n        next.delete(taskId);\r\n      } else {\r\n        next.add(taskId);\r\n      }\r\n      return next;\r\n    });\r\n    setLastSelectedId(taskId);\r\n  }, []);\r\n\r\n  // Select range (Shift + Click or Shift + Arrow)\r\n  const selectTaskRange = useCallback(\r\n    (taskId: string, flatTaskIds: string[]) => {\r\n      if (!lastSelectedId) {\r\n        selectTask(taskId);\r\n        return;\r\n      }\r\n\r\n      const lastIndex = flatTaskIds.indexOf(lastSelectedId);\r\n      const currentIndex = flatTaskIds.indexOf(taskId);\r\n\r\n      if (lastIndex === -1 || currentIndex === -1) {\r\n        selectTask(taskId);\r\n        return;\r\n      }\r\n\r\n      const start = Math.min(lastIndex, currentIndex);\r\n      const end = Math.max(lastIndex, currentIndex);\r\n      const rangeIds = flatTaskIds.slice(start, end + 1);\r\n\r\n      setSelectedTaskIds(new Set(rangeIds));\r\n      setLastSelectedId(taskId);\r\n    },\r\n    [lastSelectedId, selectTask]\r\n  );\r\n\r\n  // Handle task click with modifiers\r\n  const handleTaskClick = useCallback(\r\n    (taskId: string, flatTaskIds: string[], ctrlOrCmd: boolean, shift: boolean) => {\r\n      if (shift) {\r\n        selectTaskRange(taskId, flatTaskIds);\r\n      } else if (ctrlOrCmd) {\r\n        toggleTaskSelection(taskId);\r\n      } else {\r\n        selectTask(taskId);\r\n      }\r\n    },\r\n    [selectTask, toggleTaskSelection, selectTaskRange]\r\n  );\r\n\r\n  // Handle selection from keyboard\r\n  const handleKeyboardSelection = useCallback(\r\n    (taskId: string, multiSelect: boolean) => {\r\n      if (multiSelect) {\r\n        setSelectedTaskIds((prev) => {\r\n          const next = new Set(prev);\r\n          next.add(taskId);\r\n          return next;\r\n        });\r\n      } else {\r\n        selectTask(taskId);\r\n      }\r\n    },\r\n    [selectTask]\r\n  );\r\n\r\n  // Clear selection\r\n  const clearSelection = useCallback(() => {\r\n    setSelectedTaskIds(new Set());\r\n    setLastSelectedId(null);\r\n  }, []);\r\n\r\n  // Check if task is selected\r\n  const isTaskSelected = useCallback(\r\n    (taskId: string) => {\r\n      return selectedTaskIds.has(taskId);\r\n    },\r\n    [selectedTaskIds]\r\n  );\r\n\r\n  return {\r\n    selectedTaskIds,\r\n    selectTask,\r\n    toggleTaskSelection,\r\n    selectTaskRange,\r\n    handleTaskClick,\r\n    handleKeyboardSelection,\r\n    clearSelection,\r\n    isTaskSelected,\r\n  };\r\n}\r\n","import { Task } from './types';\r\n\r\n/**\r\n * Flatten tasks into a single array with level information\r\n */\r\nexport function flattenTasks(tasks: Task[]): Task[] {\r\n  const result: Task[] = [];\r\n  const traverse = (tasks: Task[], parentId?: string, level = 0) => {\r\n    for (let i = 0; i < tasks.length; i++) {\r\n      const task = { ...tasks[i], parentId, level, position: i };\r\n      result.push(task);\r\n      if (task.subtasks && task.subtasks.length > 0 && task.isExpanded) {\r\n        traverse(task.subtasks, task.id, level + 1);\r\n      }\r\n    }\r\n  };\r\n  traverse(tasks);\r\n  return result;\r\n}\r\n\r\n/**\r\n * Find task by ID recursively\r\n */\r\nexport function findTask(tasks: Task[], taskId: string): Task | null {\r\n  for (const task of tasks) {\r\n    if (task.id === taskId) return task;\r\n    if (task.subtasks) {\r\n      const found = findTask(task.subtasks, taskId);\r\n      if (found) return found;\r\n    }\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * Find parent task by child ID\r\n */\r\nexport function findParentTask(tasks: Task[], childId: string): Task | null {\r\n  for (const task of tasks) {\r\n    if (task.subtasks) {\r\n      if (task.subtasks.some((t) => t.id === childId)) {\r\n        return task;\r\n      }\r\n      const found = findParentTask(task.subtasks, childId);\r\n      if (found) return found;\r\n    }\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * Indent tasks (make them children of the previous sibling)\r\n */\r\nexport function indentTasks(tasks: Task[], taskIds: string[]): Task[] {\r\n  if (taskIds.length === 0) return tasks;\r\n\r\n  // Get flat list to find positions\r\n  const flatTasks = flattenTasks(tasks);\r\n  const firstTaskId = taskIds[0];\r\n  const taskIndex = flatTasks.findIndex((t) => t.id === firstTaskId);\r\n\r\n  if (taskIndex <= 0) return tasks; // Can't indent first task\r\n\r\n  const targetParent = flatTasks[taskIndex - 1]; // Previous sibling becomes parent\r\n\r\n  // Helper to remove tasks from array\r\n  const removeTasks = (tasks: Task[], ids: Set<string>): { tasks: Task[]; removed: Task[] } => {\r\n    const removed: Task[] = [];\r\n    const filtered = tasks.filter((task) => {\r\n      if (ids.has(task.id)) {\r\n        removed.push(task);\r\n        return false;\r\n      }\r\n      if (task.subtasks) {\r\n        const result = removeTasks(task.subtasks, ids);\r\n        task.subtasks = result.tasks;\r\n        removed.push(...result.removed);\r\n      }\r\n      return true;\r\n    });\r\n    return { tasks: filtered, removed };\r\n  };\r\n\r\n  // Helper to add tasks as children\r\n  const addAsChildren = (tasks: Task[], parentId: string, children: Task[]): Task[] => {\r\n    return tasks.map((task) => {\r\n      if (task.id === parentId) {\r\n        return {\r\n          ...task,\r\n          subtasks: [...(task.subtasks || []), ...children],\r\n          isExpanded: true, // Auto-expand when adding children\r\n        };\r\n      }\r\n      if (task.subtasks) {\r\n        return { ...task, subtasks: addAsChildren(task.subtasks, parentId, children) };\r\n      }\r\n      return task;\r\n    });\r\n  };\r\n\r\n  const idsSet = new Set(taskIds);\r\n  const { tasks: filtered, removed } = removeTasks(tasks, idsSet);\r\n  return addAsChildren(filtered, targetParent.id, removed);\r\n}\r\n\r\n/**\r\n * Outdent tasks (move them up one level in hierarchy)\r\n */\r\nexport function outdentTasks(tasks: Task[], taskIds: string[]): Task[] {\r\n  if (taskIds.length === 0) return tasks;\r\n\r\n  const result = [...tasks];\r\n\r\n  for (const taskId of taskIds) {\r\n    const parent = findParentTask(result, taskId);\r\n    if (!parent) continue; // Already root level\r\n\r\n    const grandparent = findParentTask(result, parent.id);\r\n\r\n    // Helper to remove task from parent\r\n    const removeFromParent = (tasks: Task[], parentId: string, taskId: string): Task | null => {\r\n      for (let i = 0; i < tasks.length; i++) {\r\n        const task = tasks[i];\r\n        if (task.id === parentId && task.subtasks) {\r\n          const taskIndex = task.subtasks.findIndex((t) => t.id === taskId);\r\n          if (taskIndex !== -1) {\r\n            const [removed] = task.subtasks.splice(taskIndex, 1);\r\n            return removed;\r\n          }\r\n        }\r\n        if (task.subtasks) {\r\n          const removed = removeFromParent(task.subtasks, parentId, taskId);\r\n          if (removed) return removed;\r\n        }\r\n      }\r\n      return null;\r\n    };\r\n\r\n    // Helper to insert task after parent\r\n    const insertAfterTask = (tasks: Task[], afterId: string, task: Task): Task[] => {\r\n      const index = tasks.findIndex((t) => t.id === afterId);\r\n      if (index !== -1) {\r\n        tasks.splice(index + 1, 0, task);\r\n        return tasks;\r\n      }\r\n      for (const t of tasks) {\r\n        if (t.subtasks) {\r\n          insertAfterTask(t.subtasks, afterId, task);\r\n        }\r\n      }\r\n      return tasks;\r\n    };\r\n\r\n    const removed = removeFromParent(result, parent.id, taskId);\r\n    if (removed) {\r\n      if (grandparent && grandparent.subtasks) {\r\n        // Move to grandparent's children after parent\r\n        insertAfterTask(grandparent.subtasks, parent.id, removed);\r\n      } else {\r\n        // Move to root level after parent\r\n        insertAfterTask(result, parent.id, removed);\r\n      }\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * Move tasks up or down within their level\r\n */\r\nexport function moveTasks(tasks: Task[], taskIds: string[], direction: 'up' | 'down'): Task[] {\r\n  if (taskIds.length === 0) return tasks;\r\n\r\n  const result = [...tasks];\r\n  const firstTaskId = taskIds[0];\r\n\r\n  // Helper to move task within array\r\n  const moveInArray = (tasks: Task[], taskId: string, direction: 'up' | 'down'): boolean => {\r\n    const index = tasks.findIndex((t) => t.id === taskId);\r\n    if (index === -1) {\r\n      // Try in subtasks\r\n      for (const task of tasks) {\r\n        if (task.subtasks && moveInArray(task.subtasks, taskId, direction)) {\r\n          return true;\r\n        }\r\n      }\r\n      return false;\r\n    }\r\n\r\n    const newIndex = direction === 'up' ? index - 1 : index + 1;\r\n    if (newIndex < 0 || newIndex >= tasks.length) return false;\r\n\r\n    // Swap tasks\r\n    [tasks[index], tasks[newIndex]] = [tasks[newIndex], tasks[index]];\r\n    return true;\r\n  };\r\n\r\n  moveInArray(result, firstTaskId, direction);\r\n  return result;\r\n}\r\n\r\n/**\r\n * Delete tasks by IDs\r\n */\r\nexport function deleteTasks(tasks: Task[], taskIds: string[]): Task[] {\r\n  const idsSet = new Set(taskIds);\r\n\r\n  const filterTasks = (tasks: Task[]): Task[] => {\r\n    return tasks\r\n      .filter((task) => !idsSet.has(task.id))\r\n      .map((task) => {\r\n        if (task.subtasks) {\r\n          return { ...task, subtasks: filterTasks(task.subtasks) };\r\n        }\r\n        return task;\r\n      });\r\n  };\r\n\r\n  return filterTasks(tasks);\r\n}\r\n\r\n/**\r\n * Duplicate tasks\r\n */\r\nexport function duplicateTasks(tasks: Task[], taskIds: string[]): Task[] {\r\n  const result = [...tasks];\r\n\r\n  for (const taskId of taskIds) {\r\n    const duplicateTask = (tasks: Task[]): boolean => {\r\n      const index = tasks.findIndex((t) => t.id === taskId);\r\n      if (index === -1) {\r\n        // Try in subtasks\r\n        for (const task of tasks) {\r\n          if (task.subtasks && duplicateTask(task.subtasks)) {\r\n            return true;\r\n          }\r\n        }\r\n        return false;\r\n      }\r\n\r\n      const original = tasks[index];\r\n      const copy = {\r\n        ...original,\r\n        id: `${original.id}-copy-${Date.now()}`,\r\n        name: `${original.name} (Copy)`,\r\n        subtasks: original.subtasks ? duplicateSubtasks(original.subtasks) : undefined,\r\n      };\r\n\r\n      tasks.splice(index + 1, 0, copy);\r\n      return true;\r\n    };\r\n\r\n    const duplicateSubtasks = (subtasks: Task[]): Task[] => {\r\n      return subtasks.map((task) => ({\r\n        ...task,\r\n        id: `${task.id}-copy-${Date.now()}`,\r\n        subtasks: task.subtasks ? duplicateSubtasks(task.subtasks) : undefined,\r\n      }));\r\n    };\r\n\r\n    duplicateTask(result);\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * Create a new task\r\n * v0.11.0: New tasks start with default blue color\r\n */\r\nexport function createTask(\r\n  tasks: Task[],\r\n  afterTaskId: string,\r\n  direction: 'above' | 'below'\r\n): { tasks: Task[]; newTask: Task } {\r\n  const result = [...tasks];\r\n  const today = new Date();\r\n  const weekFromNow = new Date(today);\r\n  weekFromNow.setDate(weekFromNow.getDate() + 7);\r\n\r\n  const newTask: Task = {\r\n    id: `task-${Date.now()}`,\r\n    name: 'New Task',\r\n    progress: 0,\r\n    status: 'todo',\r\n    startDate: today,\r\n    endDate: weekFromNow,\r\n    color: '#6366F1', // v0.11.0: Default blue pastel color\r\n  };\r\n\r\n  const insertTask = (tasks: Task[]): boolean => {\r\n    const index = tasks.findIndex((t) => t.id === afterTaskId);\r\n    if (index === -1) {\r\n      // Try in subtasks\r\n      for (const task of tasks) {\r\n        if (task.subtasks && insertTask(task.subtasks)) {\r\n          return true;\r\n        }\r\n      }\r\n      return false;\r\n    }\r\n\r\n    const insertIndex = direction === 'above' ? index : index + 1;\r\n    tasks.splice(insertIndex, 0, newTask);\r\n    return true;\r\n  };\r\n\r\n  insertTask(result);\r\n  return { tasks: result, newTask };\r\n}\r\n\r\n/**\r\n * Rename a task\r\n */\r\nexport function renameTask(tasks: Task[], taskId: string, newName: string): Task[] {\r\n  return tasks.map((task) => {\r\n    if (task.id === taskId) {\r\n      return { ...task, name: newName };\r\n    }\r\n    if (task.subtasks) {\r\n      return { ...task, subtasks: renameTask(task.subtasks, taskId, newName) };\r\n    }\r\n    return task;\r\n  });\r\n}\r\n\r\n/**\r\n * Toggle task expansion\r\n */\r\nexport function toggleTaskExpansion(tasks: Task[], taskId: string): Task[] {\r\n  return tasks.map((task) => {\r\n    if (task.id === taskId) {\r\n      return { ...task, isExpanded: !task.isExpanded };\r\n    }\r\n    if (task.subtasks) {\r\n      return { ...task, subtasks: toggleTaskExpansion(task.subtasks, taskId) };\r\n    }\r\n    return task;\r\n  });\r\n}\r\n\r\n/**\r\n * Create a subtask for a parent task\r\n * v0.11.0: Subtasks inherit parent color\r\n */\r\nexport function createSubtask(\r\n  tasks: Task[],\r\n  parentTaskId: string\r\n): { tasks: Task[]; newTask: Task } {\r\n  // Find parent task to inherit properties\r\n  const findParent = (tasks: Task[]): Task | null => {\r\n    for (const task of tasks) {\r\n      if (task.id === parentTaskId) return task;\r\n      if (task.subtasks) {\r\n        const found = findParent(task.subtasks);\r\n        if (found) return found;\r\n      }\r\n    }\r\n    return null;\r\n  };\r\n\r\n  const parentTask = findParent(tasks);\r\n\r\n  // v0.16.7: Inherit dates from parent task (subtask should fit within parent)\r\n  // If parent has dates, use them. Otherwise fall back to today + 7 days\r\n  const today = new Date();\r\n  const weekFromNow = new Date(today);\r\n  weekFromNow.setDate(weekFromNow.getDate() + 7);\r\n\r\n  const startDate = parentTask?.startDate || today;\r\n  const endDate = parentTask?.endDate || weekFromNow;\r\n\r\n  const newTask: Task = {\r\n    id: `task-${Date.now()}`,\r\n    name: 'New Subtask',\r\n    progress: 0,\r\n    status: 'todo',\r\n    startDate: new Date(startDate), // Clone to avoid reference issues\r\n    endDate: new Date(endDate),     // Clone to avoid reference issues\r\n    color: parentTask?.color || '#3B82F6', // v0.16.7: Inherit parent color (default: electric blue)\r\n  };\r\n\r\n  const addSubtask = (tasks: Task[]): Task[] => {\r\n    return tasks.map((task) => {\r\n      if (task.id === parentTaskId) {\r\n        // Add subtask to the end of existing subtasks\r\n        const subtasks = task.subtasks || [];\r\n        return {\r\n          ...task,\r\n          subtasks: [...subtasks, newTask],\r\n          isExpanded: true, // Auto-expand parent to show new subtask\r\n        };\r\n      }\r\n      if (task.subtasks) {\r\n        return { ...task, subtasks: addSubtask(task.subtasks) };\r\n      }\r\n      return task;\r\n    });\r\n  };\r\n\r\n  return { tasks: addSubtask(tasks), newTask };\r\n}\r\n","/**\r\n * Status Selector Component\r\n * Reusable status selector for both Card and Gantt\r\n * Follows the same pattern as PrioritySelector\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\n\r\nexport type TaskStatus = 'todo' | 'in-progress' | 'completed'\r\n\r\nexport interface StatusSelectorProps {\r\n  status?: TaskStatus\r\n  onChange: (status: TaskStatus) => void\r\n  className?: string\r\n}\r\n\r\nconst STATUS_CONFIG = {\r\n  'todo': {\r\n    label: 'To Do',\r\n    color: '#94a3b8',\r\n    icon: 'circle'\r\n  },\r\n  'in-progress': {\r\n    label: 'In Progress',\r\n    color: '#60a5fa',\r\n    icon: 'circle-dot'\r\n  },\r\n  'completed': {\r\n    label: 'Completed',\r\n    color: '#34d399',\r\n    icon: 'check-circle'\r\n  },\r\n} as const\r\n\r\nconst StatusIcon = ({ icon, color }: { icon: string; color: string }) => {\r\n  if (icon === 'circle') {\r\n    return (\r\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n        <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color} strokeWidth=\"1.5\" fill=\"none\" />\r\n      </svg>\r\n    )\r\n  }\r\n\r\n  if (icon === 'circle-dot') {\r\n    return (\r\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n        <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color} strokeWidth=\"1.5\" fill=\"none\" />\r\n        <circle cx=\"8\" cy=\"8\" r=\"3\" fill={color} />\r\n      </svg>\r\n    )\r\n  }\r\n\r\n  // check-circle\r\n  return (\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n      <circle cx=\"8\" cy=\"8\" r=\"6\" stroke={color} strokeWidth=\"1.5\" fill={color} fillOpacity=\"0.2\" />\r\n      <path d=\"M5 8L7 10L11 6\" stroke={color} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n    </svg>\r\n  )\r\n}\r\n\r\nexport function StatusSelector({\r\n  status = 'todo',\r\n  onChange,\r\n  className,\r\n}: StatusSelectorProps) {\r\n  const [isOpen, setIsOpen] = useState(false)\r\n  const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\r\n  const menuRef = useRef<HTMLDivElement>(null)\r\n  const buttonRef = useRef<HTMLButtonElement>(null)\r\n\r\n  useEffect(() => {\r\n    if (isOpen && buttonRef.current) {\r\n      const rect = buttonRef.current.getBoundingClientRect()\r\n      setMenuPosition({\r\n        top: rect.bottom + window.scrollY + 8,\r\n        left: rect.left + window.scrollX,\r\n      })\r\n    }\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (\r\n        menuRef.current &&\r\n        !menuRef.current.contains(event.target as Node) &&\r\n        !buttonRef.current?.contains(event.target as Node)\r\n      ) {\r\n        setIsOpen(false)\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('mousedown', handleClickOutside)\r\n      return () => document.removeEventListener('mousedown', handleClickOutside)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') setIsOpen(false)\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen])\r\n\r\n  const handleSelect = (newStatus: TaskStatus) => {\r\n    onChange(newStatus)\r\n    setIsOpen(false)\r\n  }\r\n\r\n  const currentConfig = STATUS_CONFIG[status]\r\n  const statusColor = currentConfig.color\r\n\r\n  return (\r\n    <div className={`relative ${className || ''}`}>\r\n      <button\r\n        ref={buttonRef}\r\n        onClick={() => setIsOpen(!isOpen)}\r\n        className=\"flex items-center justify-center w-8 h-8 rounded-lg transition-all hover:bg-white/15 hover:scale-110 active:scale-95\"\r\n        style={{\r\n          background: `${statusColor}10`,\r\n          boxShadow: `0 0 0 2px ${statusColor}30 inset`,\r\n        }}\r\n        title={currentConfig.label}\r\n      >\r\n        <StatusIcon icon={currentConfig.icon} color={statusColor} />\r\n      </button>\r\n\r\n      {isOpen && (\r\n        <Portal>\r\n          <div\r\n            ref={menuRef}\r\n            className=\"status-selector-menu\"\r\n            style={{\r\n              position: 'absolute',\r\n              top: `${menuPosition.top}px`,\r\n              left: `${menuPosition.left}px`,\r\n              zIndex: 99999,\r\n              minWidth: '180px',\r\n              borderRadius: '8px',\r\n              background: 'var(--modal-v2-bg, #1f1f1f)',\r\n              border: '1px solid var(--modal-v2-border, rgba(255, 255, 255, 0.15))',\r\n              boxShadow: '0 10px 40px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n            }}\r\n          >\r\n          <div\r\n            className=\"px-3 py-1.5 border-b\"\r\n            style={{ borderColor: 'var(--modal-v2-border, rgba(255, 255, 255, 0.1))' }}\r\n          >\r\n            <span\r\n              className=\"text-[10px] font-bold uppercase tracking-wider\"\r\n              style={{ color: 'var(--modal-v2-text-secondary, rgba(255, 255, 255, 0.7))' }}\r\n            >\r\n              Status\r\n            </span>\r\n          </div>\r\n\r\n          <div className=\"py-1\">\r\n            {(Object.entries(STATUS_CONFIG) as [TaskStatus, typeof STATUS_CONFIG[TaskStatus]][]).map(\r\n              ([key, config]) => (\r\n                <button\r\n                  key={key}\r\n                  onClick={() => handleSelect(key)}\r\n                  className=\"w-full px-3 py-2 flex items-center gap-2.5 text-sm font-medium transition-all active:scale-[0.98] status-option\"\r\n                  style={{\r\n                    color: config.color,\r\n                    background: 'transparent'\r\n                  }}\r\n                  onMouseEnter={(e) => {\r\n                    e.currentTarget.style.background = 'var(--modal-v2-bg-tertiary, rgba(255, 255, 255, 0.15))'\r\n                  }}\r\n                  onMouseLeave={(e) => {\r\n                    e.currentTarget.style.background = 'transparent'\r\n                  }}\r\n                >\r\n                  <StatusIcon icon={config.icon} color={config.color} />\r\n                  <span className=\"font-semibold\">{config.label}</span>\r\n                  {status === key && (\r\n                    <svg className=\"ml-auto\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n                      <path d=\"M13.5 4.5L6 12L2.5 8.5\" stroke=\"#3B82F6\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n                    </svg>\r\n                  )}\r\n                </button>\r\n              )\r\n            )}\r\n          </div>\r\n          </div>\r\n        </Portal>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","import { useState, useEffect, useRef, useContext } from 'react';\r\nimport { ChevronDown, ChevronRight, Keyboard, Plus, Edit3 } from 'lucide-react';\r\nimport { Task, GanttColumn, ColumnType, GanttTemplates } from './types';\r\nimport { motion } from 'framer-motion';\r\nimport { ColumnManager } from './ColumnManager';\r\nimport { ContextMenu, ContextMenuItem, MenuIcons } from './ContextMenu';\r\nimport { useGanttKeyboard } from './useGanttKeyboard';\r\nimport { useGanttSelection } from './useGanttSelection';\r\nimport { flattenTasks as flattenTasksUtil } from './hierarchyUtils';\r\nimport { UserAssignmentSelector } from '../Card/UserAssignmentSelector';\r\nimport { StatusSelector } from '../Card/StatusSelector';\r\nimport { GanttI18nContext } from './GanttI18nContext';\r\nimport type { User } from '../Card/UserAssignmentSelector';\r\n\r\ninterface TaskGridProps {\r\n  tasks: Task[];\r\n  theme: any;\r\n  rowHeight: number;\r\n  availableUsers?: Array<{ id: string; name: string; initials: string; color: string }>;\r\n  templates: Required<GanttTemplates>; // v0.8.0\r\n  onTaskClick?: (task: Task) => void;\r\n  onTaskDblClick?: (task: Task) => void; // v0.8.0\r\n  onTaskContextMenu?: (task: Task, event: React.MouseEvent) => void; // v0.8.0\r\n  onTaskToggle?: (taskId: string) => void;\r\n  scrollTop: number;\r\n  columns: GanttColumn[];\r\n  onToggleColumn: (columnType: ColumnType) => void;\r\n  onColumnResize?: (columnId: ColumnType, newWidth: number) => void; // v0.13.8\r\n  onTaskUpdate?: (taskId: string, updates: Partial<Task>) => void;\r\n\r\n  // Hierarchy handlers\r\n  onTaskIndent?: (taskIds: string[]) => void;\r\n  onTaskOutdent?: (taskIds: string[]) => void;\r\n  onTaskMove?: (taskIds: string[], direction: 'up' | 'down') => void;\r\n  onMultiTaskDelete?: (taskIds: string[]) => void;\r\n  onTaskDuplicate?: (taskIds: string[]) => void;\r\n  onTaskCreate?: (afterTaskId: string, direction: 'above' | 'below') => void;\r\n  onTaskRename?: (taskId: string, newName: string) => void;\r\n  onCreateSubtask?: (parentTaskId: string) => void;\r\n  onOpenTaskModal?: (task: Task) => void;\r\n}\r\n\r\nexport function TaskGrid({\r\n  tasks,\r\n  theme,\r\n  rowHeight: ROW_HEIGHT,\r\n  availableUsers = [],\r\n  templates: _templates, // TODO: Use templates for custom rendering\r\n  onTaskClick,\r\n  onTaskDblClick, // v0.8.0\r\n  onTaskContextMenu, // v0.8.0\r\n  onTaskToggle,\r\n  scrollTop: _scrollTop,\r\n  columns,\r\n  onToggleColumn,\r\n  onColumnResize,\r\n  onTaskUpdate,\r\n  onTaskIndent,\r\n  onTaskOutdent,\r\n  onTaskMove,\r\n  onMultiTaskDelete,\r\n  onTaskDuplicate,\r\n  onTaskCreate,\r\n  onTaskRename,\r\n  onCreateSubtask,\r\n  onOpenTaskModal,\r\n}: TaskGridProps) {\r\n  // v0.16.2: Get translations from context\r\n  const translations = useContext(GanttI18nContext);\r\n\r\n  const [hoveredTaskId, setHoveredTaskId] = useState<string | null>(null);\r\n  const [showKeyboardHelp, setShowKeyboardHelp] = useState(false);\r\n  const [editingTaskId, setEditingTaskId] = useState<string | null>(null);\r\n  const [editingTaskName, setEditingTaskName] = useState('');\r\n  const keyboardHelpRef = useRef<HTMLDivElement>(null);\r\n  const editInputRef = useRef<HTMLInputElement>(null);\r\n\r\n  // v0.13.8: Column resize state\r\n  const [resizingColumn, setResizingColumn] = useState<ColumnType | null>(null);\r\n  const [resizeStartX, setResizeStartX] = useState(0);\r\n  const [resizeStartWidth, setResizeStartWidth] = useState(0);\r\n  const [contextMenu, setContextMenu] = useState<{\r\n    isOpen: boolean;\r\n    x: number;\r\n    y: number;\r\n    type: 'header' | 'task';\r\n    columnId?: ColumnType;\r\n    task?: Task;\r\n  }>({\r\n    isOpen: false,\r\n    x: 0,\r\n    y: 0,\r\n    type: 'header',\r\n  });\r\n\r\n  // Close keyboard help when clicking outside\r\n  useEffect(() => {\r\n    function handleClickOutside(event: MouseEvent) {\r\n      if (keyboardHelpRef.current && !keyboardHelpRef.current.contains(event.target as Node)) {\r\n        setShowKeyboardHelp(false);\r\n      }\r\n    }\r\n\r\n    if (showKeyboardHelp) {\r\n      document.addEventListener('mousedown', handleClickOutside);\r\n      return () => document.removeEventListener('mousedown', handleClickOutside);\r\n    }\r\n    return undefined;\r\n  }, [showKeyboardHelp]);\r\n\r\n  // Focus input when editing starts\r\n  useEffect(() => {\r\n    if (editingTaskId && editInputRef.current) {\r\n      editInputRef.current.focus();\r\n      editInputRef.current.select();\r\n    }\r\n  }, [editingTaskId]);\r\n\r\n  // v0.13.8: Handle column resize mouse events\r\n  useEffect(() => {\r\n    if (!resizingColumn) return;\r\n\r\n    const handleMouseMove = (e: MouseEvent) => {\r\n      const deltaX = e.clientX - resizeStartX;\r\n      const newWidth = resizeStartWidth + deltaX;\r\n      onColumnResize?.(resizingColumn, newWidth);\r\n    };\r\n\r\n    const handleMouseUp = () => {\r\n      setResizingColumn(null);\r\n      document.body.style.cursor = '';\r\n      document.body.style.userSelect = '';\r\n    };\r\n\r\n    document.addEventListener('mousemove', handleMouseMove);\r\n    document.addEventListener('mouseup', handleMouseUp);\r\n    document.body.style.cursor = 'col-resize';\r\n    document.body.style.userSelect = 'none';\r\n\r\n    return () => {\r\n      document.removeEventListener('mousemove', handleMouseMove);\r\n      document.removeEventListener('mouseup', handleMouseUp);\r\n      document.body.style.cursor = '';\r\n      document.body.style.userSelect = '';\r\n    };\r\n  }, [resizingColumn, resizeStartX, resizeStartWidth, onColumnResize]);\r\n\r\n  // Multi-selection hook\r\n  const {\r\n    selectedTaskIds,\r\n    handleTaskClick: handleSelectionClick,\r\n    isTaskSelected,\r\n  } = useGanttSelection();\r\n\r\n  // Keyboard shortcuts hook\r\n  const { setIsEditing } = useGanttKeyboard({\r\n    tasks,\r\n    selectedTaskIds,\r\n    onTaskSelect: (taskId: string, multiSelect?: boolean) => {\r\n      const flatTasks = flattenTasksUtil(tasks);\r\n      const flatTaskIds = flatTasks.map(t => t.id);\r\n      handleSelectionClick(taskId, flatTaskIds, multiSelect || false, false);\r\n    },\r\n    onTaskCreate: onTaskCreate || (() => {}),\r\n    onTaskDelete: onMultiTaskDelete || (() => {}),\r\n    onTaskDuplicate: onTaskDuplicate || (() => {}),\r\n    onTaskMove: onTaskMove || (() => {}),\r\n    onTaskIndent: onTaskIndent || (() => {}),\r\n    onTaskOutdent: onTaskOutdent || (() => {}),\r\n    onTaskRename: (taskId: string) => {\r\n      // Start inline rename when F2 is pressed\r\n      const task = flattenTasksUtil(tasks).find(t => t.id === taskId);\r\n      if (task) {\r\n        handleRenameStart(task);\r\n      }\r\n    },\r\n    onTaskToggleExpand: onTaskToggle || (() => {}),\r\n    onOpenTaskModal: (taskId: string) => {\r\n      const task = flattenTasksUtil(tasks).find(t => t.id === taskId);\r\n      if (task && onOpenTaskModal) {\r\n        onOpenTaskModal(task);\r\n      }\r\n    },\r\n    enableKeyboard: true,\r\n  });\r\n\r\n  const flattenTasks = (tasks: Task[], level = 0): Array<{ task: Task; level: number }> => {\r\n    const result: Array<{ task: Task; level: number }> = [];\r\n    \r\n    for (const task of tasks) {\r\n      result.push({ task, level });\r\n      if (task.subtasks && task.subtasks.length > 0 && task.isExpanded) {\r\n        result.push(...flattenTasks(task.subtasks, level + 1));\r\n      }\r\n    }\r\n    \r\n    return result;\r\n  };\r\n\r\n  const flatTasks = flattenTasks(tasks);\r\n  const HEADER_HEIGHT = 48;\r\n\r\n\r\n  // Calculate duration\r\n  const getDuration = (task: Task) => {\r\n    if (!task.startDate || !task.endDate) return '-';\r\n    const days = Math.ceil((task.endDate.getTime() - task.startDate.getTime()) / (1000 * 60 * 60 * 24));\r\n    return `${days}d`;\r\n  };\r\n\r\n  // Handle rename start\r\n  const handleRenameStart = (task: Task) => {\r\n    setEditingTaskId(task.id);\r\n    setEditingTaskName(task.name);\r\n    setIsEditing(true);\r\n  };\r\n\r\n  // Handle rename save\r\n  const handleRenameSave = (taskId: string) => {\r\n    if (editingTaskName.trim() && editingTaskName !== tasks.find(t => t.id === taskId)?.name) {\r\n      onTaskRename?.(taskId, editingTaskName.trim());\r\n    }\r\n    setEditingTaskId(null);\r\n    setEditingTaskName('');\r\n    setIsEditing(false);\r\n  };\r\n\r\n  // Handle rename cancel\r\n  const handleRenameCancel = () => {\r\n    setEditingTaskId(null);\r\n    setEditingTaskName('');\r\n    setIsEditing(false);\r\n  };\r\n\r\n  // Handle create subtask\r\n  const handleCreateSubtaskClick = (task: Task, e: React.MouseEvent) => {\r\n    e.stopPropagation();\r\n    // Create subtask at the end of parent's children\r\n    onCreateSubtask?.(task.id);\r\n  };\r\n\r\n  // Render cell content based on column type\r\n  const renderCellContent = (column: GanttColumn, task: Task, level: number) => {\r\n    switch (column.id) {\r\n      case 'name':\r\n        const isEditing = editingTaskId === task.id;\r\n        const isHovered = hoveredTaskId === task.id;\r\n\r\n        return (\r\n          <div className=\"flex items-center gap-2 flex-1 min-w-0 relative\" style={{ paddingLeft: `${level * 20}px` }}>\r\n            {/* Expand/Collapse Button - Always show space for alignment */}\r\n            {task.subtasks && task.subtasks.length > 0 ? (\r\n              <button\r\n                onClick={(e) => {\r\n                  e.stopPropagation();\r\n                  onTaskToggle?.(task.id);\r\n                }}\r\n                className=\"p-0.5 hover:bg-opacity-10 rounded transition-colors flex-shrink-0\"\r\n                style={{ color: theme.textSecondary }}\r\n              >\r\n                {task.isExpanded ? (\r\n                  <ChevronDown className=\"w-4 h-4\" />\r\n                ) : (\r\n                  <ChevronRight className=\"w-4 h-4\" />\r\n                )}\r\n              </button>\r\n            ) : (\r\n              /* Spacer for tasks without subtasks to maintain alignment */\r\n              <div className=\"w-5 h-5 flex-shrink-0\" />\r\n            )}\r\n\r\n            {/* v0.11.0: Color Indicator - Simple dot showing task color */}\r\n            {/* v0.14.7: Changed default from #6366F1 (indigo) to #3B82F6 (electric blue) */}\r\n            <div\r\n              className=\"w-3 h-3 rounded-full flex-shrink-0 border\"\r\n              style={{\r\n                backgroundColor: task.color || '#3B82F6',\r\n                opacity: task.parentId ? 0.6 : 1, // Subtasks more transparent\r\n                borderColor: task.isMilestone ? theme.accent : 'transparent',\r\n                borderWidth: task.isMilestone ? '2px' : '0px',\r\n              }}\r\n              title={task.isMilestone ? 'Milestone' : task.parentId ? 'Subtask' : 'Task'}\r\n            />\r\n\r\n            {/* Task Name or Input */}\r\n            {isEditing ? (\r\n              <input\r\n                ref={editInputRef}\r\n                type=\"text\"\r\n                value={editingTaskName}\r\n                onChange={(e) => setEditingTaskName(e.target.value)}\r\n                onKeyDown={(e) => {\r\n                  if (e.key === 'Enter') {\r\n                    handleRenameSave(task.id);\r\n                  } else if (e.key === 'Escape') {\r\n                    handleRenameCancel();\r\n                  }\r\n                }}\r\n                onBlur={() => handleRenameSave(task.id)}\r\n                className=\"flex-1 px-2 py-1 rounded border outline-none\"\r\n                style={{\r\n                  backgroundColor: theme.bgPrimary,\r\n                  borderColor: theme.accent,\r\n                  color: theme.textPrimary,\r\n                  fontFamily: 'Inter, sans-serif',\r\n                  fontSize: '13px',\r\n                  fontWeight: 500,\r\n                }}\r\n                onClick={(e) => e.stopPropagation()}\r\n              />\r\n            ) : (\r\n              <>\r\n                <span\r\n                  className=\"flex-1\"\r\n                  style={{\r\n                    color: theme.textPrimary,\r\n                    fontFamily: 'Inter, sans-serif',\r\n                    fontSize: level === 0 ? '14px' : level === 1 ? '13px' : '12px',\r\n                    // World-class hierarchy: Containers (with subtasks) have more weight\r\n                    fontWeight: task.isMilestone\r\n                      ? 600  // Milestones: Semibold (most important)\r\n                      : (task.subtasks && task.subtasks.length > 0)\r\n                      ? 500  // Containers: Medium (guide the eye)\r\n                      : 400,  // Regular tasks: Normal\r\n                    opacity: level === 0 ? 1 : level === 1 ? 0.95 : 0.88,\r\n                  }}\r\n                  title={task.name} // v0.13.8: Show full name on hover tooltip\r\n                >\r\n                  {task.name}\r\n                </span>\r\n\r\n                {/* Hover Action Buttons */}\r\n                {isHovered && !isEditing && (\r\n                  <div className=\"flex items-center gap-1 ml-2\" onClick={(e) => e.stopPropagation()}>\r\n                    {/* Create Subtask Button */}\r\n                    <button\r\n                      onClick={(e) => handleCreateSubtaskClick(task, e)}\r\n                      className=\"p-1 rounded hover:bg-opacity-20 transition-colors\"\r\n                      style={{\r\n                        color: theme.textTertiary,\r\n                        backgroundColor: 'transparent'\r\n                      }}\r\n                      title=\"Create subtask\"\r\n                    >\r\n                      <Plus className=\"w-3.5 h-3.5\" />\r\n                    </button>\r\n\r\n                    {/* Rename Button */}\r\n                    <button\r\n                      onClick={(e) => {\r\n                        e.stopPropagation();\r\n                        handleRenameStart(task);\r\n                      }}\r\n                      className=\"p-1 rounded hover:bg-opacity-20 transition-colors\"\r\n                      style={{\r\n                        color: theme.textTertiary,\r\n                        backgroundColor: 'transparent'\r\n                      }}\r\n                      title=\"Rename (F2)\"\r\n                    >\r\n                      <Edit3 className=\"w-3.5 h-3.5\" />\r\n                    </button>\r\n                  </div>\r\n                )}\r\n              </>\r\n            )}\r\n          </div>\r\n        );\r\n      \r\n      case 'startDate':\r\n        const startDateValue = task.startDate\r\n          ? typeof task.startDate === 'string'\r\n            ? task.startDate\r\n            : task.startDate.toISOString().split('T')[0]\r\n          : undefined;\r\n        return (\r\n          <div\r\n            className=\"flex items-center justify-center w-full\"\r\n            onClick={(e) => e.stopPropagation()}\r\n          >\r\n            <input\r\n              type=\"date\"\r\n              value={startDateValue || ''}\r\n              onChange={(e) => {\r\n                onTaskUpdate?.(task.id, {\r\n                  startDate: e.target.value ? new Date(e.target.value) : undefined\r\n                });\r\n              }}\r\n              className=\"bg-transparent border-none text-xs cursor-pointer outline-none text-center\"\r\n              style={{\r\n                color: theme.textSecondary,\r\n                fontFamily: 'Inter, sans-serif',\r\n              }}\r\n            />\r\n          </div>\r\n        );\r\n\r\n      case 'endDate':\r\n        const endDateValue = task.endDate\r\n          ? typeof task.endDate === 'string'\r\n            ? task.endDate\r\n            : task.endDate.toISOString().split('T')[0]\r\n          : undefined;\r\n        return (\r\n          <div\r\n            className=\"flex items-center justify-center w-full\"\r\n            onClick={(e) => e.stopPropagation()}\r\n          >\r\n            <input\r\n              type=\"date\"\r\n              value={endDateValue || ''}\r\n              onChange={(e) => {\r\n                onTaskUpdate?.(task.id, {\r\n                  endDate: e.target.value ? new Date(e.target.value) : undefined\r\n                });\r\n              }}\r\n              className=\"bg-transparent border-none text-xs cursor-pointer outline-none text-center\"\r\n              style={{\r\n                color: theme.textSecondary,\r\n                fontFamily: 'Inter, sans-serif',\r\n              }}\r\n            />\r\n          </div>\r\n        );\r\n      \r\n      case 'duration':\r\n        return (\r\n          <div className=\"flex items-center justify-center w-full\">\r\n            <span\r\n              className=\"text-xs tabular-nums\"\r\n              style={{\r\n                color: theme.textSecondary,\r\n                fontFamily: 'Inter, sans-serif',\r\n                fontWeight: 600,\r\n              }}\r\n            >\r\n              {getDuration(task)}\r\n            </span>\r\n          </div>\r\n        );\r\n      \r\n      case 'assignees':\r\n        const taskAssignedUsers: User[] = availableUsers.filter(user =>\r\n          task.assignees?.some(a => a.name === user.name || a.initials === user.initials)\r\n        );\r\n\r\n        return (\r\n          <div\r\n            className=\"flex items-center justify-center w-full\"\r\n            onClick={(e) => e.stopPropagation()}\r\n          >\r\n            <UserAssignmentSelector\r\n              assignedUsers={taskAssignedUsers}\r\n              availableUsers={availableUsers}\r\n              onChange={(users: User[]) => {\r\n                const newAssignees = users.map(u => ({\r\n                  id: u.id,\r\n                  name: u.name,\r\n                  initials: u.initials,\r\n                  color: u.color\r\n                }));\r\n                onTaskUpdate?.(task.id, {\r\n                  assignees: newAssignees.length > 0 ? newAssignees : undefined\r\n                });\r\n              }}\r\n            />\r\n          </div>\r\n        );\r\n      \r\n      case 'status':\r\n        return (\r\n          <div\r\n            className=\"flex items-center justify-center w-full\"\r\n            onClick={(e) => e.stopPropagation()}\r\n          >\r\n            <StatusSelector\r\n              status={task.status || 'todo'}\r\n              onChange={(status) => {\r\n                onTaskUpdate?.(task.id, {\r\n                  status,\r\n                  progress: status === 'completed' ? 100 : task.progress\r\n                });\r\n              }}\r\n            />\r\n          </div>\r\n        );\r\n      \r\n      case 'progress':\r\n        return (\r\n          <div className=\"flex items-center justify-center gap-2 w-full\">\r\n            <div className=\"flex-1 h-1.5 rounded-full overflow-hidden max-w-[60px]\" style={{ backgroundColor: theme.bgSecondary }}>\r\n              <div\r\n                className=\"h-full rounded-full transition-all\"\r\n                style={{\r\n                  width: `${task.progress}%`,\r\n                  backgroundColor: task.progress === 100 ? theme.statusCompleted : theme.accent,\r\n                }}\r\n              />\r\n            </div>\r\n            <span\r\n              className=\"text-xs tabular-nums min-w-[35px] text-right\"\r\n              style={{\r\n                color: theme.textTertiary,\r\n                fontFamily: 'Inter, sans-serif',\r\n                fontWeight: 600,\r\n              }}\r\n            >\r\n              {task.progress}%\r\n            </span>\r\n          </div>\r\n        );\r\n      \r\n      default:\r\n        return null;\r\n    }\r\n  };\r\n\r\n  // Context menu items for header\r\n  const getHeaderContextMenuItems = (columnId: ColumnType): ContextMenuItem[] => {\r\n    return [\r\n      {\r\n        id: 'hide',\r\n        label: 'Hide Column',\r\n        icon: MenuIcons.Hide,\r\n        onClick: () => onToggleColumn(columnId),\r\n        disabled: columnId === 'name',\r\n      },\r\n      { id: 'sep1', label: '', onClick: () => {}, separator: true },\r\n      {\r\n        id: 'sortAsc',\r\n        label: 'Sort Ascending',\r\n        icon: MenuIcons.SortAsc,\r\n        onClick: () => {\r\n          // Implement sorting in parent component if needed\r\n        },\r\n      },\r\n      {\r\n        id: 'sortDesc',\r\n        label: 'Sort Descending',\r\n        icon: MenuIcons.SortDesc,\r\n        onClick: () => {\r\n          // Implement sorting in parent component if needed\r\n        },\r\n      },\r\n    ];\r\n  };\r\n\r\n  // v0.16.2: Context menu items for task row - unified with GanttBoard context menu\r\n  const getTaskContextMenuItems = (task: Task): ContextMenuItem[] => {\r\n    return [\r\n      // Edit Task - opens edit modal via double-click handler\r\n      {\r\n        id: 'edit',\r\n        label: translations?.contextMenu?.editTask || 'Edit Task',\r\n        icon: MenuIcons.Pencil,\r\n        onClick: () => {\r\n          onTaskDblClick?.(task);\r\n        },\r\n      },\r\n      // Add Subtask\r\n      {\r\n        id: 'addSubtask',\r\n        label: translations?.contextMenu?.addSubtask || 'Add Subtask',\r\n        icon: MenuIcons.Add,\r\n        onClick: () => {\r\n          onCreateSubtask?.(task.id);\r\n        },\r\n      },\r\n      // Separator before status changes\r\n      { id: 'sep1', label: '', onClick: () => {}, separator: true },\r\n      // Mark Incomplete (status: 'todo', progress: 0)\r\n      {\r\n        id: 'markIncomplete',\r\n        label: translations?.contextMenu?.markIncomplete || 'Mark Incomplete',\r\n        icon: MenuIcons.MarkIncomplete,\r\n        onClick: () => {\r\n          onTaskUpdate?.(task.id, { status: 'todo', progress: 0 });\r\n        },\r\n        disabled: task.status === 'todo',\r\n      },\r\n      // Set In Progress (status: 'in-progress')\r\n      {\r\n        id: 'setInProgress',\r\n        label: translations?.contextMenu?.setInProgress || 'Set In Progress',\r\n        icon: MenuIcons.SetInProgress,\r\n        onClick: () => {\r\n          onTaskUpdate?.(task.id, { status: 'in-progress' });\r\n        },\r\n        disabled: task.status === 'in-progress',\r\n      },\r\n      // Mark Complete (status: 'completed', progress: 100)\r\n      {\r\n        id: 'markComplete',\r\n        label: translations?.contextMenu?.markComplete || 'Mark Complete',\r\n        icon: MenuIcons.MarkComplete,\r\n        onClick: () => {\r\n          onTaskUpdate?.(task.id, { status: 'completed', progress: 100 });\r\n        },\r\n        disabled: task.status === 'completed',\r\n      },\r\n      // Separator before advanced options\r\n      { id: 'sep2', label: '', onClick: () => {}, separator: true },\r\n      // Split Task\r\n      {\r\n        id: 'split',\r\n        label: translations?.contextMenu?.splitTask || 'Split Task',\r\n        icon: MenuIcons.Split,\r\n        onClick: () => {},\r\n        // Split task is only available via Timeline context menu (right-click on task bar)\r\n        disabled: true,\r\n      },\r\n      // Separator before delete\r\n      { id: 'sep3', label: '', onClick: () => {}, separator: true },\r\n      // Delete Task\r\n      {\r\n        id: 'delete',\r\n        label: translations?.contextMenu?.deleteTask || 'Delete Task',\r\n        icon: MenuIcons.Delete,\r\n        onClick: () => {\r\n          onMultiTaskDelete?.([task.id]);\r\n        },\r\n      },\r\n    ];\r\n  };\r\n\r\n  const visibleColumns = columns.filter(col => col.visible);\r\n\r\n  // v0.13.10: TaskGrid no longer has its own scroll - it syncs with Timeline scroll\r\n  return (\r\n    <div\r\n      className=\"h-full overflow-hidden\"\r\n      style={{\r\n        backgroundColor: theme.bgPrimary,\r\n      }}\r\n    >\r\n      {/* Header */}\r\n      <div\r\n        className=\"sticky top-0 z-10 flex items-center\"\r\n        style={{\r\n          backgroundColor: theme.bgGrid,\r\n          height: `${HEADER_HEIGHT}px`,\r\n          paddingLeft: '3px', // Alinear con el borderLeft de las filas\r\n          borderBottom: `1px solid ${theme.border}`,\r\n          boxSizing: 'border-box', // Border included in height\r\n        }}\r\n      >\r\n        {visibleColumns.map((column, colIndex) => (\r\n          <div\r\n            key={column.id}\r\n            className={`flex items-center px-4 cursor-pointer hover:bg-opacity-50 transition-colors relative ${\r\n              column.id === 'name' ? 'justify-start' : 'justify-center'\r\n            }`}\r\n            style={{\r\n              width: `${column.width}px`,\r\n              minWidth: `${column.width}px`,\r\n              maxWidth: `${column.width}px`,\r\n              // Only add border-right between columns, not on the last one (GanttBoard container has the divider)\r\n              borderRight: colIndex < visibleColumns.length - 1 ? `1px solid ${theme.borderLight}` : 'none',\r\n              height: '100%',\r\n              boxSizing: 'border-box',\r\n            }}\r\n            onContextMenu={(e) => {\r\n              e.preventDefault();\r\n              setContextMenu({\r\n                isOpen: true,\r\n                x: e.clientX,\r\n                y: e.clientY,\r\n                type: 'header',\r\n                columnId: column.id,\r\n              });\r\n            }}\r\n            onMouseEnter={(e) => {\r\n              e.currentTarget.style.backgroundColor = theme.hoverBg;\r\n            }}\r\n            onMouseLeave={(e) => {\r\n              e.currentTarget.style.backgroundColor = 'transparent';\r\n            }}\r\n          >\r\n            <span\r\n              className=\"text-xs uppercase tracking-wider\"\r\n              style={{\r\n                color: theme.textTertiary,\r\n                fontFamily: 'Inter, sans-serif',\r\n                fontWeight: 600,\r\n              }}\r\n            >\r\n              {column.label}\r\n            </span>\r\n\r\n            {/* v0.13.8: Resize handle for resizable columns */}\r\n            {column.resizable && (\r\n              <div\r\n                className=\"absolute right-0 top-0 bottom-0 w-1 cursor-col-resize hover:bg-blue-500 transition-colors group\"\r\n                style={{\r\n                  backgroundColor: resizingColumn === column.id ? theme.accent : 'transparent',\r\n                }}\r\n                onMouseDown={(e) => {\r\n                  e.preventDefault();\r\n                  e.stopPropagation();\r\n                  setResizingColumn(column.id);\r\n                  setResizeStartX(e.clientX);\r\n                  setResizeStartWidth(column.width);\r\n                }}\r\n                title=\"Drag to resize column\"\r\n              >\r\n                {/* Visual indicator line on hover */}\r\n                <div\r\n                  className=\"absolute right-0 top-2 bottom-2 w-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\r\n                  style={{ backgroundColor: theme.accent }}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n        ))}\r\n        \r\n        {/* Add Column Button */}\r\n        <div className=\"px-3 flex items-center gap-2 h-full\">\r\n          <ColumnManager\r\n            columns={columns}\r\n            onToggleColumn={onToggleColumn}\r\n            theme={theme}\r\n          />\r\n\r\n          {/* Keyboard Shortcuts Button */}\r\n          <button\r\n            onClick={() => setShowKeyboardHelp(!showKeyboardHelp)}\r\n            className=\"p-1.5 rounded hover:bg-opacity-10 transition-colors relative group\"\r\n            style={{ color: theme.textTertiary }}\r\n            title=\"Keyboard shortcuts\"\r\n          >\r\n            <Keyboard className=\"w-4 h-4\" />\r\n\r\n            {/* Tooltip */}\r\n            {showKeyboardHelp && (\r\n              <div\r\n                ref={keyboardHelpRef}\r\n                className=\"absolute top-full right-0 mt-2 p-4 rounded-lg shadow-2xl z-50 min-w-[400px]\"\r\n                style={{\r\n                  backgroundColor: theme.bgPrimary,\r\n                  border: `1px solid ${theme.border}`,\r\n                  color: theme.textPrimary,\r\n                }}\r\n                onClick={(e) => e.stopPropagation()}\r\n              >\r\n                <div className=\"flex items-center justify-between mb-3 pb-2 border-b\" style={{ borderColor: theme.border }}>\r\n                  <h3 className=\"font-semibold text-sm\" style={{ color: theme.textPrimary }}>\r\n                    Keyboard Shortcuts\r\n                  </h3>\r\n                  <button\r\n                    onClick={() => setShowKeyboardHelp(false)}\r\n                    className=\"text-xs px-2 py-1 rounded hover:bg-opacity-10\"\r\n                    style={{ color: theme.textTertiary }}\r\n                  >\r\n                    Close\r\n                  </button>\r\n                </div>\r\n\r\n                <div className=\"space-y-3 text-xs\">\r\n                  {/* Navigation */}\r\n                  <div>\r\n                    <div className=\"font-semibold mb-1.5\" style={{ color: theme.textSecondary }}>Navigation</div>\r\n                    <div className=\"space-y-1\">\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Move focus up/down</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>↑ / ↓</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Select range</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Shift + ↑ / ↓</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Toggle selection</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Cmd/Ctrl + Click</kbd>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n\r\n                  {/* Hierarchy */}\r\n                  <div>\r\n                    <div className=\"font-semibold mb-1.5\" style={{ color: theme.textSecondary }}>Hierarchy</div>\r\n                    <div className=\"space-y-1\">\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Indent task</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Tab</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Outdent task</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Shift + Tab</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Expand/Collapse</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>→ / ←</kbd>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n\r\n                  {/* Editing */}\r\n                  <div>\r\n                    <div className=\"font-semibold mb-1.5\" style={{ color: theme.textSecondary }}>Editing</div>\r\n                    <div className=\"space-y-1\">\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Create task below</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Enter</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Create task above</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Shift + Enter</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Open task modal</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Cmd/Ctrl + Enter</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Rename task</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>F2</kbd>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n\r\n                  {/* Actions */}\r\n                  <div>\r\n                    <div className=\"font-semibold mb-1.5\" style={{ color: theme.textSecondary }}>Actions</div>\r\n                    <div className=\"space-y-1\">\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Move task up/down</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Alt + ↑ / ↓</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Delete task</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Delete</kbd>\r\n                      </div>\r\n                      <div className=\"flex justify-between\">\r\n                        <span style={{ color: theme.textTertiary }}>Duplicate task</span>\r\n                        <kbd className=\"px-2 py-0.5 rounded font-mono text-xs\" style={{ backgroundColor: theme.bgGrid, color: theme.textPrimary }}>Cmd/Ctrl + D</kbd>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            )}\r\n          </button>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Task Rows Container - v0.13.11: This container is targeted by CSS transform for scroll sync */}\r\n      <div className=\"gantt-taskgrid-content\">\r\n      {flatTasks.map(({ task, level }, index) => {\r\n        const isSelected = isTaskSelected(task.id);\r\n\r\n        return (\r\n          <motion.div\r\n            key={task.id}\r\n            className=\"flex items-center cursor-pointer group\"\r\n            style={{\r\n              height: `${ROW_HEIGHT}px`,\r\n              borderLeft: isSelected ? `3px solid ${theme.accent}` : `3px solid transparent`,\r\n              backgroundColor: isSelected\r\n                ? theme.accentLight\r\n                : (index % 2 === 0 ? theme.bgPrimary : theme.bgGrid),\r\n            }}\r\n            onMouseEnter={() => setHoveredTaskId(task.id)}\r\n            onMouseLeave={() => setHoveredTaskId(null)}\r\n            onClick={(e) => {\r\n              const flatTasks = flattenTasksUtil(tasks);\r\n              const flatTaskIds = flatTasks.map(t => t.id);\r\n              const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\r\n              const ctrlOrCmd = isMac ? e.metaKey : e.ctrlKey;\r\n\r\n              // Handle multi-selection\r\n              handleSelectionClick(task.id, flatTaskIds, ctrlOrCmd, e.shiftKey);\r\n\r\n              // Also trigger the regular click handler\r\n              onTaskClick?.(task);\r\n            }}\r\n            onDoubleClick={(e) => {\r\n              // v0.8.0: Double-click event\r\n              e.stopPropagation();\r\n              onTaskDblClick?.(task);\r\n            }}\r\n            onContextMenu={(e) => {\r\n              e.preventDefault();\r\n              setContextMenu({\r\n                isOpen: true,\r\n                x: e.clientX,\r\n                y: e.clientY,\r\n                type: 'task',\r\n                task,\r\n              });\r\n\r\n              // v0.8.0: Context menu event\r\n              onTaskContextMenu?.(task, e);\r\n            }}\r\n            whileHover={{\r\n              backgroundColor: isSelected ? theme.accentLight : theme.hoverBg,\r\n            }}\r\n          >\r\n          {visibleColumns.map((column, colIndex) => (\r\n            <div\r\n              key={`${task.id}-${column.id}`}\r\n              className={`px-4 flex items-center ${\r\n                column.id === 'name' ? 'justify-start' : 'justify-center'\r\n              } ${colIndex < visibleColumns.length - 1 ? 'border-r' : ''}`}\r\n              style={{\r\n                width: `${column.width}px`,\r\n                minWidth: `${column.width}px`,\r\n                maxWidth: `${column.width}px`,\r\n                borderColor: hoveredTaskId === task.id ? theme.border : theme.borderLight,\r\n                height: '100%',\r\n                boxSizing: 'border-box',\r\n              }}\r\n            >\r\n              {renderCellContent(column, task, column.id === 'name' ? level : 0)}\r\n            </div>\r\n          ))}\r\n          </motion.div>\r\n        );\r\n      })}\r\n      </div>\r\n\r\n      {/* Context Menu */}\r\n      <ContextMenu\r\n        isOpen={contextMenu.isOpen}\r\n        x={contextMenu.x}\r\n        y={contextMenu.y}\r\n        items={\r\n          contextMenu.type === 'header' && contextMenu.columnId\r\n            ? getHeaderContextMenuItems(contextMenu.columnId)\r\n            : contextMenu.type === 'task' && contextMenu.task\r\n            ? getTaskContextMenuItems(contextMenu.task)\r\n            : []\r\n        }\r\n        onClose={() => setContextMenu({ ...contextMenu, isOpen: false })}\r\n        theme={theme}\r\n      />\r\n    </div>\r\n  );\r\n}\r\n","/**\r\n * useDragState - Centralized drag state management\r\n * Manages all drag-related state in one place\r\n *\r\n * @version 0.8.1\r\n * @version 0.13.6 - Removed dragDaysDelta (direction-based colors removed)\r\n */\r\n\r\nimport { useState } from 'react';\r\n\r\nexport type DragMode = 'none' | 'move' | 'resize-start' | 'resize-end' | 'connect';\r\nexport type ActiveZone = 'move' | 'resize-start' | 'resize-end' | null;\r\n\r\nexport interface DragState {\r\n  // Drag mode\r\n  dragMode: DragMode;\r\n  setDragMode: (mode: DragMode) => void;\r\n\r\n  // Drag offset (distance from click to element origin)\r\n  dragOffset: number;\r\n  setDragOffset: (offset: number) => void;\r\n\r\n  // Ghost position (visual feedback during drag)\r\n  ghostX: number;\r\n  setGhostX: (x: number) => void;\r\n  ghostWidth: number;\r\n  setGhostWidth: (width: number) => void;\r\n\r\n  // Connection line\r\n  connectionLine: { x: number; y: number } | null;\r\n  setConnectionLine: (line: { x: number; y: number } | null) => void;\r\n\r\n  // Hovered task (for dependency creation)\r\n  hoveredTaskId: string | null;\r\n  setHoveredTaskId: (id: string | null) => void;\r\n\r\n  // Active zone (for visual feedback)\r\n  activeZone: ActiveZone;\r\n  setActiveZone: (zone: ActiveZone) => void;\r\n\r\n  // Split task specific state\r\n  draggedSegmentIndex: number | null;\r\n  setDraggedSegmentIndex: (index: number | null) => void;\r\n  draggedSegmentStartX: number;\r\n  setDraggedSegmentStartX: (x: number) => void;\r\n  segmentDragOffsetX: number;\r\n  setSegmentDragOffsetX: (offset: number) => void;\r\n\r\n  // Hover state\r\n  hoveredSegmentIndex: number | null;\r\n  setHoveredSegmentIndex: (index: number | null) => void;\r\n  isHovered: boolean;\r\n  setIsHovered: (hovered: boolean) => void;\r\n\r\n  // Computed state\r\n  isDragging: boolean;\r\n  isResizing: boolean;\r\n  isConnecting: boolean;\r\n\r\n  // Reset all drag state\r\n  resetDragState: (x: number, width: number) => void;\r\n}\r\n\r\nexport function useDragState(initialX: number, initialWidth: number): DragState {\r\n  const [dragMode, setDragMode] = useState<DragMode>('none');\r\n  const [dragOffset, setDragOffset] = useState(0);\r\n  const [ghostX, setGhostX] = useState(initialX);\r\n  const [ghostWidth, setGhostWidth] = useState(initialWidth);\r\n  const [connectionLine, setConnectionLine] = useState<{ x: number; y: number } | null>(null);\r\n  const [hoveredTaskId, setHoveredTaskId] = useState<string | null>(null);\r\n  const [activeZone, setActiveZone] = useState<ActiveZone>(null);\r\n\r\n  // Split task state\r\n  const [draggedSegmentIndex, setDraggedSegmentIndex] = useState<number | null>(null);\r\n  const [draggedSegmentStartX, setDraggedSegmentStartX] = useState(0);\r\n  const [segmentDragOffsetX, setSegmentDragOffsetX] = useState(0);\r\n  const [hoveredSegmentIndex, setHoveredSegmentIndex] = useState<number | null>(null);\r\n  const [isHovered, setIsHovered] = useState(false);\r\n\r\n  // Computed state\r\n  const isDragging = dragMode !== 'none';\r\n  const isResizing = dragMode === 'resize-start' || dragMode === 'resize-end';\r\n  const isConnecting = dragMode === 'connect';\r\n\r\n  // Reset all state to initial values\r\n  const resetDragState = (x: number, width: number) => {\r\n    setDragMode('none');\r\n    setConnectionLine(null);\r\n    setHoveredTaskId(null);\r\n    setGhostX(x);\r\n    setGhostWidth(width);\r\n    setSegmentDragOffsetX(0);\r\n    setDraggedSegmentIndex(null);\r\n    setDraggedSegmentStartX(0);\r\n  };\r\n\r\n  return {\r\n    dragMode,\r\n    setDragMode,\r\n    dragOffset,\r\n    setDragOffset,\r\n    ghostX,\r\n    setGhostX,\r\n    ghostWidth,\r\n    setGhostWidth,\r\n    connectionLine,\r\n    setConnectionLine,\r\n    hoveredTaskId,\r\n    setHoveredTaskId,\r\n    activeZone,\r\n    setActiveZone,\r\n    draggedSegmentIndex,\r\n    setDraggedSegmentIndex,\r\n    draggedSegmentStartX,\r\n    setDraggedSegmentStartX,\r\n    segmentDragOffsetX,\r\n    setSegmentDragOffsetX,\r\n    hoveredSegmentIndex,\r\n    setHoveredSegmentIndex,\r\n    isHovered,\r\n    setIsHovered,\r\n    isDragging,\r\n    isResizing,\r\n    isConnecting,\r\n    resetDragState,\r\n  };\r\n}\r\n","import { useRef, useCallback, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Task, GanttTemplates } from './types';\nimport { TaskPosition } from './Timeline';\nimport { useDragState } from './hooks/useDragState';\n\ninterface TaskBarProps {\n  task: Task;\n  x: number;\n  y: number;\n  width: number;\n  theme: any;\n  dayWidth: number;\n  startDate: Date;\n  templates: Required<GanttTemplates>; // v0.8.0\n  onClick?: (task: Task) => void;\n  onDoubleClick?: (task: Task) => void; // v0.8.0\n  onContextMenu?: (task: Task, event: React.MouseEvent) => void; // v0.8.0\n  onDateChange?: (task: Task, newStart: Date, newEnd: Date) => void;\n  onDependencyCreate?: (fromTask: Task, toTaskId: string) => void;\n  allTaskPositions?: TaskPosition[];\n  // v0.13.0: Callback for dependency cascade preview during drag\n  onDragMove?: (taskId: string, daysDelta: number, isDragging: boolean) => void;\n}\n\ntype DragMode = 'none' | 'move' | 'resize-start' | 'resize-end' | 'connect';\n\nexport function TaskBar({\n  task,\n  x,\n  y,\n  width,\n  theme,\n  dayWidth,\n  startDate,\n  templates,\n  onClick,\n  onDoubleClick, // v0.8.0\n  onContextMenu, // v0.8.0\n  onDateChange,\n  onDependencyCreate,\n  allTaskPositions = [],\n  onDragMove, // v0.13.0\n}: TaskBarProps) {\n  // v0.8.1: Centralized drag state management for better modularity\n  const dragState = useDragState(x, width);\n  const svgRef = useRef<SVGGElement>(null);\n\n  // Destructure for easier access (keeps existing code readable)\n  const {\n    dragMode, setDragMode,\n    dragOffset, setDragOffset,\n    ghostX, setGhostX,\n    ghostWidth, setGhostWidth,\n    connectionLine, setConnectionLine,\n    hoveredTaskId, setHoveredTaskId,\n    activeZone, setActiveZone,\n    draggedSegmentIndex, setDraggedSegmentIndex,\n    draggedSegmentStartX, setDraggedSegmentStartX,\n    segmentDragOffsetX, setSegmentDragOffsetX,\n    hoveredSegmentIndex, setHoveredSegmentIndex,\n    isHovered, setIsHovered,\n    isDragging, isResizing, isConnecting,\n    resetDragState\n  } = dragState;\n\n  const height = 32;\n  const borderRadius = 8;\n\n  // Detect task states for neutral theme visualization\n  const isOverdue = task.endDate && task.endDate < new Date() && task.progress < 100;\n  const isAtRisk = task.isCriticalPath;  // Critical path tasks are \"at risk\"\n  const isNeutralTheme = theme.name === 'neutral' || theme.today === '#1C1917';  // Detect neutral theme\n\n  // Dynamic resize zones based on bar width for better UX\n  const getResizeZone = (barWidth: number): number => {\n    if (barWidth >= 80) return 20;      // Large bars: 20px zones\n    if (barWidth >= 60) return 15;      // Medium bars: 15px zones\n    if (barWidth >= 50) return 12;      // Small bars: 12px zones\n    return 10;                          // Very small bars: 10px zones\n  };\n\n  const RESIZE_ZONE = getResizeZone(width);\n  const isSmallBar = width < 50;          // Flag for special handling\n  const isVerySmallBar = width < 40;      // Flag for ultra-small bars (simplified UX)\n\n  // Format date for tooltip\n  const formatDate = (date: Date) => {\n    return date.toLocaleDateString('en-US', {\n      month: 'short',\n      day: 'numeric',\n      year: 'numeric',\n    });\n  };\n\n  // Calculate duration\n  const getDuration = () => {\n    const days = Math.ceil((task.endDate!.getTime() - task.startDate!.getTime()) / (1000 * 60 * 60 * 24));\n    return `${days} day${days !== 1 ? 's' : ''}`;\n  };\n\n  // Snap position to nearest day\n  const snapToDay = (pixelX: number): number => {\n    const dayOffset = Math.round(pixelX / dayWidth) * dayWidth;\n    return dayOffset;\n  };\n\n  // Convert pixel position to date\n  const pixelToDate = (pixelX: number): Date => {\n    const days = Math.round(pixelX / dayWidth);\n    const newDate = new Date(startDate);\n    newDate.setDate(newDate.getDate() + days);\n    return newDate;\n  };\n\n  // Check if point is inside a task's bounding box\n  const findTaskAtPoint = (pointX: number, pointY: number): string | null => {\n    for (const taskPos of allTaskPositions) {\n      // Skip current task\n      if (taskPos.id === task.id) continue;\n\n      // Check if point is within task bounds (with some padding for easier targeting)\n      const padding = 5;\n      if (\n        pointX >= taskPos.x - padding &&\n        pointX <= taskPos.x + taskPos.width + padding &&\n        pointY >= taskPos.y - padding &&\n        pointY <= taskPos.y + taskPos.height + padding\n      ) {\n        return taskPos.id;\n      }\n    }\n    return null;\n  };\n\n  // TODO: Implement dynamic cursor styling based on mouse position\n  // Determine cursor based on position\n  // const getCursorStyle = (mouseX: number): string => {\n  //   if (dragMode !== 'none') {\n  //     if (dragMode === 'connect') return 'crosshair';\n  //     if (dragMode === 'resize-start' || dragMode === 'resize-end') return 'ew-resize';\n  //     if (dragMode === 'move') return 'grabbing';\n  //   }\n  //   const relativeX = mouseX - x;\n  //   // Resize zones at edges\n  //   if (relativeX <= RESIZE_ZONE) return 'ew-resize';\n  //   if (relativeX >= width - RESIZE_ZONE) return 'ew-resize';\n  //   // Move zone in the middle\n  //   return 'grab';\n  // };\n\n  // Handle mouse down for dragging\n  // v0.8.1: Added segmentX parameter for split tasks - allows segments to calculate their own offset\n  const handleMouseDown = useCallback((e: React.MouseEvent, mode?: DragMode, segmentX?: number) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const svgElement = svgRef.current?.ownerSVGElement;\n    if (!svgElement) return;\n\n    const point = svgElement.createSVGPoint();\n    point.x = e.clientX;\n    point.y = e.clientY;\n    const svgPoint = point.matrixTransform(svgElement.getScreenCTM()?.inverse());\n\n    // v0.8.1: Use segment position if provided (for split tasks), otherwise use global x\n    const effectiveX = segmentX !== undefined ? segmentX : x;\n\n    // Determine mode based on click position if not specified\n    let actualMode = mode;\n    if (!actualMode) {\n      const relativeX = svgPoint.x - effectiveX;\n\n      // Keyboard modifiers for forced modes\n      if (e.shiftKey) {\n        // SHIFT: Connection mode\n        actualMode = 'connect';\n        setConnectionLine({ x: x + width, y: y + height / 2 });\n      } else if (e.ctrlKey || e.metaKey) {\n        // CTRL/CMD: Force MOVE (useful for small bars)\n        actualMode = 'move';\n      } else if (e.altKey) {\n        // ALT: Force RESIZE based on which half of bar is clicked\n        actualMode = relativeX < width / 2 ? 'resize-start' : 'resize-end';\n      }\n      // Auto-detection based on position (adaptive based on bar size)\n      else if (isVerySmallBar) {\n        // Very small bars (<40px): Simple split - left half = move, right half = resize\n        if (relativeX < width / 2) {\n          actualMode = 'move';\n        } else {\n          actualMode = 'resize-end';  // Always resize from end for consistency\n        }\n      } else if (isSmallBar) {\n        // Small bars (40-50px): Only resize if clicking very close to edges\n        if (relativeX <= RESIZE_ZONE / 2) {\n          actualMode = 'resize-start';\n        } else if (relativeX >= width - RESIZE_ZONE / 2) {\n          actualMode = 'resize-end';\n        } else {\n          actualMode = 'move';  // Default to move for small bars\n        }\n      } else {\n        // Normal bars: Standard zone detection\n        if (relativeX <= RESIZE_ZONE) {\n          actualMode = 'resize-start';\n        } else if (relativeX >= width - RESIZE_ZONE) {\n          actualMode = 'resize-end';\n        } else {\n          actualMode = 'move';\n        }\n      }\n    }\n\n    setDragMode(actualMode);\n    setIsHovered(false); // Hide all tooltips when dragging starts\n    setActiveZone(null); // Clear active zone\n\n    if (actualMode === 'move') {\n      // v0.8.1: Use effectiveX (segment position for split tasks, global x otherwise)\n      setDragOffset(svgPoint.x - effectiveX);\n    } else if (actualMode === 'connect') {\n      setConnectionLine({ x: x + width, y: y + height / 2 });\n    } else {\n      setDragOffset(0);\n    }\n\n    setGhostX(effectiveX);\n    setGhostWidth(width);\n  }, [x, width, y, height]);\n\n  // Handle mouse move for dragging\n  const handleMouseMove = useCallback((e: MouseEvent) => {\n    if (dragMode === 'none') return;\n\n    const svgElement = svgRef.current?.ownerSVGElement;\n    if (!svgElement) return;\n\n    const point = svgElement.createSVGPoint();\n    point.x = e.clientX;\n    point.y = e.clientY;\n    const svgPoint = point.matrixTransform(svgElement.getScreenCTM()?.inverse());\n\n    if (dragMode === 'connect') {\n      // Update connection line end point\n      setConnectionLine({ x: svgPoint.x, y: svgPoint.y });\n\n      // Check if hovering over another task\n      const targetTaskId = findTaskAtPoint(svgPoint.x, svgPoint.y);\n      setHoveredTaskId(targetTaskId);\n    } else if (dragMode === 'move') {\n      // Move entire bar (or all segments if split task)\n      const rawNewX = svgPoint.x - dragOffset;\n      const snappedX = snapToDay(rawNewX);\n      setGhostX(snappedX);\n      setGhostWidth(width);\n\n      // v0.13.0: Calculate days delta and notify for cascade preview\n      const daysDelta = Math.round((snappedX - x) / dayWidth);\n      onDragMove?.(task.id, daysDelta, true);\n\n      // v0.8.1: For split tasks, calculate offset relative to the DRAGGED SEGMENT position\n      if (task.segments && task.segments.length > 0 && draggedSegmentIndex !== null) {\n        const segmentOffset = snappedX - draggedSegmentStartX; // Use saved segment position\n        setSegmentDragOffsetX(segmentOffset);\n      }\n    } else if (dragMode === 'resize-start') {\n      // Resize from start\n      const rawNewStart = svgPoint.x;\n      const snappedStart = snapToDay(rawNewStart);\n      const newWidth = (x + width) - snappedStart;\n\n      // Prevent negative or too small width (minimum 1 day)\n      if (newWidth >= dayWidth) {\n        setGhostX(snappedStart);\n        setGhostWidth(newWidth);\n      }\n    } else if (dragMode === 'resize-end') {\n      // Resize from end\n      const rawNewEnd = svgPoint.x;\n      const snappedEnd = snapToDay(rawNewEnd);\n      const newWidth = snappedEnd - x;\n\n      // Prevent negative or too small width (minimum 1 day)\n      if (newWidth >= dayWidth) {\n        setGhostWidth(newWidth);\n      }\n    }\n  }, [dragMode, x, width, dayWidth, dragOffset, task, snapToDay, draggedSegmentIndex, draggedSegmentStartX, findTaskAtPoint, setHoveredTaskId, setConnectionLine, setGhostX, setGhostWidth, setSegmentDragOffsetX, onDragMove]);\n\n  // Handle mouse up to finish dragging\n  const handleMouseUp = useCallback(() => {\n    if (dragMode === 'none') return;\n\n    if (dragMode === 'connect') {\n      // Create dependency if hovering over a valid task\n      if (hoveredTaskId && onDependencyCreate) {\n        onDependencyCreate(task, hoveredTaskId);\n      }\n      setConnectionLine(null);\n      setHoveredTaskId(null);\n    } else {\n      const taskDuration = task.endDate!.getTime() - task.startDate!.getTime();\n      let newStartDate: Date;\n      let newEndDate: Date;\n      let isValid = true;\n\n      if (dragMode === 'move') {\n        // Calculate new dates maintaining duration\n        newStartDate = pixelToDate(ghostX);\n        newEndDate = new Date(newStartDate.getTime() + taskDuration);\n\n        // v0.8.1: Bryntum-style - Update ONLY the dragged segment (independent movement)\n        if (task.segments && task.segments.length > 0 && draggedSegmentIndex !== null) {\n          const dayOffset = Math.round(segmentDragOffsetX / dayWidth);\n          const updatedSegments = task.segments.map((seg, idx) => {\n            // Only update the segment that was dragged\n            if (idx === draggedSegmentIndex) {\n              const newSegStart = new Date(seg.startDate);\n              const newSegEnd = new Date(seg.endDate);\n              newSegStart.setDate(newSegStart.getDate() + dayOffset);\n              newSegEnd.setDate(newSegEnd.getDate() + dayOffset);\n              return { startDate: newSegStart, endDate: newSegEnd };\n            }\n            // Keep other segments unchanged\n            return seg;\n          });\n\n          // Calculate new overall task dates (from all segments)\n          const allDates = updatedSegments.flatMap(s => [s.startDate, s.endDate]);\n          const newTaskStart = new Date(Math.min(...allDates.map(d => d.getTime())));\n          const newTaskEnd = new Date(Math.max(...allDates.map(d => d.getTime())));\n\n          // Update task with new segments\n          onDateChange?.({ ...task, segments: updatedSegments }, newTaskStart, newTaskEnd);\n          // v0.8.1: Use centralized reset function from useDragState hook\n          resetDragState(x, width);\n          return; // Exit early since we handled the update\n        }\n      } else if (dragMode === 'resize-start') {\n        // Change start date, keep end date\n        newStartDate = pixelToDate(ghostX);\n        newEndDate = task.endDate!;\n\n        // Validate: start date must be before end date\n        if (newStartDate >= newEndDate) {\n          console.warn('Invalid date range: start date must be before end date');\n          isValid = false;\n        }\n      } else if (dragMode === 'resize-end') {\n        // Change end date, keep start date\n        newStartDate = task.startDate!;\n        newEndDate = pixelToDate(ghostX + ghostWidth);\n\n        // Validate: end date must be after start date\n        if (newEndDate <= newStartDate) {\n          console.warn('Invalid date range: end date must be after start date');\n          isValid = false;\n        }\n      } else {\n        // Shouldn't reach here, but handle gracefully\n        isValid = false;\n      }\n\n      // Only update if valid\n      if (isValid && newStartDate! && newEndDate!) {\n        // Additional validation: minimum task duration of 1 day\n        const minDuration = 24 * 60 * 60 * 1000; // 1 day in milliseconds\n        if (newEndDate.getTime() - newStartDate.getTime() < minDuration) {\n          console.warn('Invalid date range: task must be at least 1 day long');\n          // Reset to original dates by not calling onDateChange\n        } else {\n          onDateChange?.(task, newStartDate, newEndDate);\n        }\n      }\n    }\n\n    // v0.13.0: Notify drag ended to clear cascade previews\n    onDragMove?.(task.id, 0, false);\n\n    // v0.8.1: Use centralized reset function from useDragState hook\n    resetDragState(x, width);\n  }, [dragMode, ghostX, ghostWidth, task, onDateChange, hoveredTaskId, onDependencyCreate, x, width, dayWidth, pixelToDate, segmentDragOffsetX, draggedSegmentIndex, resetDragState, onDragMove]);\n\n  // Setup global mouse listeners for smooth dragging\n  useEffect(() => {\n    if (dragMode === 'none') return;\n\n    const handleGlobalMouseMove = (e: MouseEvent) => {\n      handleMouseMove(e);\n    };\n\n    const handleGlobalMouseUp = () => {\n      handleMouseUp();\n    };\n\n    window.addEventListener('mousemove', handleGlobalMouseMove);\n    window.addEventListener('mouseup', handleGlobalMouseUp);\n\n    return () => {\n      window.removeEventListener('mousemove', handleGlobalMouseMove);\n      window.removeEventListener('mouseup', handleGlobalMouseUp);\n    };\n  }, [dragMode, handleMouseMove, handleMouseUp]);\n\n  // v0.8.1: isDragging, isResizing, isConnecting now provided by useDragState hook\n  const displayX = isDragging && !isConnecting ? ghostX : x;\n  const displayWidth = isDragging && !isConnecting ? ghostWidth : width;\n\n  // v0.8.0: Generate tooltip and custom class using templates\n  const tooltipContent = templates.taskTooltip(task);\n  const tooltipText = typeof tooltipContent === 'string' ? tooltipContent : '';\n  const customClass = templates.taskClass(task);\n\n  return (\n    <g\n      ref={svgRef}\n      onMouseEnter={() => !isDragging && setIsHovered(true)}\n      onMouseLeave={() => {\n        if (!isDragging) {\n          setIsHovered(false);\n          setActiveZone(null);\n        }\n      }}\n      onClick={() => !isDragging && onClick?.(task)}\n      onDoubleClick={(e) => {\n        // v0.8.0: Double-click event\n        if (!isDragging) {\n          e.stopPropagation();\n          onDoubleClick?.(task);\n        }\n      }}\n      onContextMenu={(e) => {\n        // v0.8.0: Context menu event\n        e.preventDefault();\n        onContextMenu?.(task, e as any);\n      }}\n    >\n      {/* v0.8.0: Tooltip using taskTooltip template */}\n      {tooltipText && <title dangerouslySetInnerHTML={{ __html: tooltipText }} />}\n      {/* Zone Indicators with hover feedback - v0.8.1: Disabled for split tasks (segments are independent) */}\n      {isHovered && !isDragging && !isSmallBar && !task.segments && (\n        <>\n          {/* Left resize zone with subtle highlight on hover */}\n          <rect\n            x={x}\n            y={y}\n            width={RESIZE_ZONE}\n            height={height}\n            fill={activeZone === 'resize-start' ? theme.accent : 'transparent'}\n            opacity={activeZone === 'resize-start' ? 0.15 : 0}\n            style={{ cursor: 'ew-resize', pointerEvents: 'all' }}\n            onMouseEnter={() => setActiveZone('resize-start')}\n            onMouseDown={(e) => handleMouseDown(e as any, 'resize-start')}\n          />\n          {/* Center move zone */}\n          <rect\n            x={x + RESIZE_ZONE}\n            y={y}\n            width={width - RESIZE_ZONE * 2}\n            height={height}\n            fill={activeZone === 'move' ? theme.accent : 'transparent'}\n            opacity={activeZone === 'move' ? 0.1 : 0}\n            style={{ cursor: 'grab', pointerEvents: 'all' }}\n            onMouseEnter={() => setActiveZone('move')}\n            onMouseDown={(e) => handleMouseDown(e as any, 'move')}\n          />\n          {/* Right resize zone with subtle highlight on hover */}\n          <rect\n            x={x + width - RESIZE_ZONE}\n            y={y}\n            width={RESIZE_ZONE}\n            height={height}\n            fill={activeZone === 'resize-end' ? theme.accent : 'transparent'}\n            opacity={activeZone === 'resize-end' ? 0.15 : 0}\n            style={{ cursor: 'ew-resize', pointerEvents: 'all' }}\n            onMouseEnter={() => setActiveZone('resize-end')}\n            onMouseDown={(e) => handleMouseDown(e as any, 'resize-end')}\n          />\n        </>\n      )}\n\n      {/* Simplified zones for very small bars (split in half) */}\n      {isHovered && !isDragging && isVerySmallBar && (\n        <>\n          {/* Left half - MOVE zone */}\n          <rect\n            x={x}\n            y={y}\n            width={width / 2}\n            height={height}\n            fill={activeZone === 'move' ? theme.accent : 'transparent'}\n            opacity={activeZone === 'move' ? 0.2 : 0}\n            style={{ cursor: 'grab', pointerEvents: 'all' }}\n            onMouseEnter={() => setActiveZone('move')}\n            onMouseDown={(e) => handleMouseDown(e as any, 'move')}\n          />\n          {/* Right half - RESIZE zone */}\n          <rect\n            x={x + width / 2}\n            y={y}\n            width={width / 2}\n            height={height}\n            fill={activeZone === 'resize-end' ? theme.accent : 'transparent'}\n            opacity={activeZone === 'resize-end' ? 0.2 : 0}\n            style={{ cursor: 'ew-resize', pointerEvents: 'all' }}\n            onMouseEnter={() => setActiveZone('resize-end')}\n            onMouseDown={(e) => handleMouseDown(e as any, 'resize-end')}\n          />\n          {/* Visual divider line at center */}\n          {isHovered && (\n            <motion.line\n              x1={x + width / 2}\n              y1={y + 4}\n              x2={x + width / 2}\n              y2={y + height - 4}\n              stroke={theme.textTertiary}\n              strokeWidth={1}\n              strokeDasharray=\"2 2\"\n              opacity={0.3}\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 0.3 }}\n              transition={{ duration: 0.2 }}\n              style={{ pointerEvents: 'none' }}\n            />\n          )}\n        </>\n      )}\n\n      {/* Ghost/Preview Bar (shown while dragging) */}\n      {/* v0.8.1: Hide ghost bar for split tasks - segments handle their own visualization */}\n      {/* v0.13.6: Simplified ghost bar - uses theme accent color */}\n      {isDragging && !isConnecting && !task.segments && (\n        <motion.rect\n          x={ghostX}\n          y={y}\n          width={ghostWidth}\n          height={height}\n          rx={borderRadius}\n          fill={theme.accent}\n          opacity={0.5}\n          stroke={theme.accent}\n          strokeWidth={2}\n          strokeDasharray=\"4 4\"\n          initial={{ opacity: 0 }}\n          animate={{ opacity: 0.6 }}\n          transition={{ duration: 0.15 }}\n          style={{ pointerEvents: 'none' }}\n        />\n      )}\n\n      {/* Main Task Bar - Background (light for contrast with progress) - v0.8.0: With custom class */}\n      {/* v0.8.1: Hide main bar when task has segments (split task) */}\n      {/* v0.11.0: Custom task colors with parent/subtask opacity */}\n      {/* v0.13.6: Overdue tasks (past due + not completed) also shown in red */}\n      {!task.segments && (\n        <motion.rect\n          x={displayX}\n          y={y}\n          width={displayWidth}\n          height={height}\n          rx={borderRadius}\n          fill={\n            task.isCriticalPath || isOverdue\n              ? '#DC2626' // Critical path or overdue = red\n              : task.color\n              ? task.color // v0.11.0: Custom color\n              : theme.taskBarPrimary // Fallback to theme\n          }\n          data-task-class={customClass}\n          initial={{ opacity: 0, scale: 0.95 }}\n          animate={{\n            opacity: isDragging && !isConnecting\n              ? 0.15\n              : task.parentId\n              ? 0.6 // v0.11.0: Subtasks more transparent (60%)\n              : isHovered\n              ? 0.9 // Parent tasks more opaque on hover\n              : 0.8, // Parent tasks base opacity (80%)\n            scale: isHovered && !isDragging ? 1.02 : 1,\n          }}\n          transition={{\n            duration: 0.2,\n            ease: [0.4, 0, 0.2, 1],\n          }}\n          onMouseDown={(e) => handleMouseDown(e as any)}\n          style={{\n            cursor: isDragging ? (isConnecting ? 'crosshair' : isResizing ? 'ew-resize' : 'grabbing') : 'grab',\n            pointerEvents: 'all'\n          }}\n        />\n      )}\n\n      {/* Progress Fill - Solid color for instant visual scanning */}\n      {/* Eye processes shape/color faster than text */}\n      {/* v0.11.0: Use custom task color for progress fill */}\n      {/* v0.13.6: Overdue tasks also shown in red */}\n      {!task.segments && (\n        <rect\n          x={displayX}\n          y={y}\n          width={displayWidth * (task.progress / 100)}\n          height={height}\n          rx={borderRadius}\n          fill={\n            task.isCriticalPath || isOverdue\n              ? '#DC2626' // Critical path or overdue = red\n              : task.color\n              ? task.color // v0.11.0: Custom color\n              : theme.taskBarProgress // Fallback to theme\n          }\n          opacity={1}\n          style={{ pointerEvents: 'none' }}\n        />\n      )}\n\n      {/* v0.8.1: Render segments if task is split (has gaps) - Bryntum-style independent segments */}\n      {task.segments && task.segments.map((segment, idx) => {\n        const segmentStartX = ((segment.startDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)) * dayWidth;\n        const segmentEndX = ((segment.endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)) * dayWidth;\n        const segmentWidth = segmentEndX - segmentStartX + dayWidth;\n\n        // v0.8.1: Only apply drag offset to the specific segment being dragged\n        const isThisSegmentDragging = isDragging && dragMode === 'move' && draggedSegmentIndex === idx;\n        const isThisSegmentHovered = hoveredSegmentIndex === idx;\n        const displaySegmentX = isThisSegmentDragging ? segmentStartX + segmentDragOffsetX : segmentStartX;\n\n        return (\n          <g\n            key={`segment-${idx}`}\n            onMouseEnter={() => !isDragging && setHoveredSegmentIndex(idx)}\n            onMouseLeave={() => !isDragging && setHoveredSegmentIndex(null)}\n          >\n            {/* Segment background - interactive */}\n            {/* v0.11.0: Custom task colors for segments */}\n            {/* v0.13.6: Overdue tasks also shown in red */}\n            <motion.rect\n              x={displaySegmentX}\n              y={y}\n              width={segmentWidth}\n              height={height}\n              rx={borderRadius}\n              fill={\n                task.isCriticalPath || isOverdue\n                  ? '#DC2626' // Critical path or overdue = red\n                  : task.color\n                  ? task.color // v0.11.0: Custom color\n                  : theme.taskBarPrimary // Fallback to theme\n              }\n              initial={{ opacity: 0, scale: 0.95 }}\n              animate={{\n                opacity: isThisSegmentDragging\n                  ? 0.6\n                  : task.parentId\n                  ? 0.6 // v0.11.0: Subtask segments more transparent\n                  : isThisSegmentHovered\n                  ? 0.9\n                  : 0.8,\n                scale: isThisSegmentHovered && !isDragging ? 1.02 : 1,\n              }}\n              transition={{\n                duration: 0.2,\n                ease: [0.4, 0, 0.2, 1],\n              }}\n              onMouseDown={(e) => {\n                // v0.8.1: Capture which segment is being dragged and pass its position\n                e.stopPropagation();\n                setDraggedSegmentIndex(idx);\n                setDraggedSegmentStartX(segmentStartX); // Save original position for offset calculation\n                handleMouseDown(e as any, undefined, segmentStartX);\n              }}\n              style={{\n                cursor: isDragging ? (isConnecting ? 'crosshair' : isResizing ? 'ew-resize' : 'grabbing') : 'grab',\n                pointerEvents: 'all'\n              }}\n            />\n            {/* Segment progress - v0.11.0: Use custom task color */}\n            {/* v0.13.6: Overdue tasks also shown in red */}\n            <rect\n              x={displaySegmentX}\n              y={y}\n              width={segmentWidth * (task.progress / 100)}\n              height={height}\n              rx={borderRadius}\n              fill={\n                task.isCriticalPath || isOverdue\n                  ? '#DC2626' // Critical path or overdue = red\n                  : task.color\n                  ? task.color // v0.11.0: Custom color\n                  : theme.taskBarProgress // Fallback to theme\n              }\n              opacity={1}\n              style={{ pointerEvents: 'none' }}\n            />\n          </g>\n        );\n      })}\n\n      {/* Neutral Theme: State visualization without color */}\n      {/* v0.8.1: Hide state visualization for split tasks (shown on segments instead) */}\n      {isNeutralTheme && (isOverdue || isAtRisk) && !task.segments && (\n        <>\n          {/* At Risk: Dotted border */}\n          {isAtRisk && !isOverdue && (\n            <rect\n              x={displayX}\n              y={y}\n              width={displayWidth}\n              height={height}\n              rx={borderRadius}\n              fill=\"none\"\n              stroke={theme.border}\n              strokeWidth={2}\n              strokeDasharray=\"4 4\"\n              opacity={0.8}\n              style={{ pointerEvents: 'none' }}\n            />\n          )}\n\n          {/* Overdue: Diagonal stripes pattern */}\n          {isOverdue && (\n            <rect\n              x={displayX}\n              y={y}\n              width={displayWidth}\n              height={height}\n              rx={borderRadius}\n              fill=\"url(#diagonal-stripes)\"\n              opacity={0.3}\n              style={{ pointerEvents: 'none' }}\n            />\n          )}\n        </>\n      )}\n\n      {/* Task Name Text - v0.8.0: Using taskLabel template */}\n      {/* v0.8.1: Hide text for split tasks to avoid blocking segment clicks */}\n      {displayWidth > 60 && !task.segments && (() => {\n        const label = templates.taskLabel(task);\n        const labelText = typeof label === 'string' ? label : task.name;\n        const truncated = labelText.length > Math.floor(displayWidth / 8)\n          ? `${labelText.substring(0, Math.floor(displayWidth / 8))}...`\n          : labelText;\n\n        return (\n          <text\n            x={displayX + 12}\n            y={y + height / 2}\n            dominantBaseline=\"middle\"\n            fill=\"#FFFFFF\"\n            fontSize=\"13\"\n            fontWeight=\"500\"\n            fontFamily=\"Inter, sans-serif\"\n            style={{ pointerEvents: 'none', userSelect: 'none' }}\n          >\n            {truncated}\n          </text>\n        );\n      })()}\n\n      {/* Progress Percentage */}\n      {/* v0.8.1: Hide progress text for split tasks to avoid blocking segment clicks */}\n      {displayWidth > 100 && task.progress > 0 && task.progress < 100 && !isDragging && !task.segments && (\n        <text\n          x={displayX + displayWidth - 12}\n          y={y + height / 2}\n          dominantBaseline=\"middle\"\n          textAnchor=\"end\"\n          fill=\"rgba(255, 255, 255, 0.9)\"\n          fontSize=\"11\"\n          fontWeight=\"600\"\n          fontFamily=\"Inter, sans-serif\"\n          style={{ pointerEvents: 'none', userSelect: 'none' }}\n        >\n          {task.progress}%\n        </text>\n      )}\n\n      {/* Status Indicator Badge */}\n      {/* v0.8.1: Hide status badge for split tasks to avoid blocking segment clicks */}\n      {task.status && displayWidth > 80 && !isDragging && !task.segments && (\n        <g style={{ pointerEvents: 'none' }}>\n          {task.status === 'completed' && (\n            <circle\n              cx={displayX + displayWidth - 8}\n              cy={y + 8}\n              r={4}\n              fill={theme.statusCompleted}\n              stroke=\"#FFFFFF\"\n              strokeWidth={1.5}\n            />\n          )}\n          {task.status === 'in-progress' && (\n            <circle\n              cx={displayX + displayWidth - 8}\n              cy={y + 8}\n              r={4}\n              fill={theme.statusInProgress}\n              stroke=\"#FFFFFF\"\n              strokeWidth={1.5}\n              opacity={0.8}\n            />\n          )}\n        </g>\n      )}\n\n      {/* Enhanced Resize Handles (larger, easier to grab) */}\n      {/* v0.8.1: Hide resize handles for split tasks */}\n      {(isHovered || isResizing) && !isConnecting && !task.segments && (\n        <>\n          {/* Start Handle - Adaptive positioning for small bars */}\n          <g style={{ pointerEvents: 'all' }}>\n            {/* Invisible larger hit area */}\n            <rect\n              x={isSmallBar ? displayX - 15 : displayX - 10}\n              y={y - 5}\n              width={isSmallBar ? 25 : 20}\n              height={height + 10}\n              fill=\"transparent\"\n              onMouseDown={(e) => handleMouseDown(e as any, 'resize-start')}\n              style={{ cursor: 'ew-resize' }}\n            />\n            {/* Visual indicator - positioned outside for small bars */}\n            <motion.rect\n              x={isSmallBar ? displayX - 8 : displayX - 3}\n              y={y + 6}\n              width={isSmallBar ? 8 : 6}\n              height={isSmallBar ? height - 12 : height - 16}\n              rx={3}\n              fill={dragMode === 'resize-start' ? theme.accent : theme.taskBarHandle}\n              stroke={theme.taskBarPrimary}\n              strokeWidth={1.5}\n              initial={{ opacity: 0, scale: 0 }}\n              animate={{\n                opacity: 1,\n                scale: dragMode === 'resize-start' ? 1.2 : 1\n              }}\n              transition={{\n                duration: 0.2,\n                type: 'spring',\n                stiffness: 400,\n                damping: 25,\n              }}\n              style={{ pointerEvents: 'none' }}\n            />\n          </g>\n\n          {/* End Handle - Adaptive positioning for small bars */}\n          <g style={{ pointerEvents: 'all' }}>\n            {/* Invisible larger hit area */}\n            <rect\n              x={isSmallBar ? displayX + displayWidth - 10 : displayX + displayWidth - 10}\n              y={y - 5}\n              width={isSmallBar ? 25 : 20}\n              height={height + 10}\n              fill=\"transparent\"\n              onMouseDown={(e) => handleMouseDown(e as any, 'resize-end')}\n              style={{ cursor: 'ew-resize' }}\n            />\n            {/* Visual indicator - positioned outside for small bars */}\n            <motion.rect\n              x={isSmallBar ? displayX + displayWidth : displayX + displayWidth - 3}\n              y={y + 6}\n              width={isSmallBar ? 8 : 6}\n              height={isSmallBar ? height - 12 : height - 16}\n              rx={3}\n              fill={dragMode === 'resize-end' ? theme.accent : theme.taskBarHandle}\n              stroke={theme.taskBarPrimary}\n              strokeWidth={1.5}\n              initial={{ opacity: 0, scale: 0 }}\n              animate={{\n                opacity: 1,\n                scale: dragMode === 'resize-end' ? 1.2 : 1\n              }}\n              transition={{\n                duration: 0.2,\n                type: 'spring',\n                stiffness: 400,\n                damping: 25,\n              }}\n              style={{ pointerEvents: 'none' }}\n            />\n          </g>\n        </>\n      )}\n\n      {/* Connection Handle (right side, Shift+Click) - v0.8.1: Disabled for split tasks (segments are independent) */}\n      <AnimatePresence>\n        {isHovered && !isDragging && !task.segments && (\n          <motion.g\n            style={{ pointerEvents: 'all' }}\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: 0.15 }}\n          >\n            <motion.circle\n              cx={x + width + 8}\n              cy={y + height / 2}\n              r={6}\n              fill={theme.accent}\n              stroke=\"#FFFFFF\"\n              strokeWidth={2}\n              initial={{ scale: 0 }}\n              animate={{ scale: 1 }}\n              exit={{ scale: 0 }}\n              transition={{\n                duration: 0.2,\n                type: 'spring',\n                stiffness: 400,\n                damping: 25,\n              }}\n              onMouseDown={(e) => {\n                e.stopPropagation();\n                handleMouseDown(e as any, 'connect');\n              }}\n              style={{ cursor: 'crosshair' }}\n            />\n            {/* Tooltip hint */}\n            <text\n              x={x + width + 20}\n              y={y + height / 2}\n              dominantBaseline=\"middle\"\n              fill={theme.textTertiary}\n              fontSize=\"10\"\n              fontFamily=\"Inter, sans-serif\"\n              style={{ pointerEvents: 'none', userSelect: 'none' }}\n            >\n              Link\n            </text>\n          </motion.g>\n        )}\n      </AnimatePresence>\n\n      {/* Connection Line (while connecting) */}\n      {isConnecting && connectionLine && (\n        <g style={{ pointerEvents: 'none' }}>\n          <motion.line\n            x1={x + width}\n            y1={y + height / 2}\n            x2={connectionLine.x}\n            y2={connectionLine.y}\n            stroke={hoveredTaskId ? theme.statusCompleted : theme.accent}\n            strokeWidth={hoveredTaskId ? 3 : 2}\n            strokeDasharray=\"6 4\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: hoveredTaskId ? 1 : 0.8 }}\n            transition={{ duration: 0.15 }}\n          />\n          <motion.circle\n            cx={connectionLine.x}\n            cy={connectionLine.y}\n            r={hoveredTaskId ? 8 : 6}\n            fill={hoveredTaskId ? theme.statusCompleted : theme.accent}\n            stroke=\"#FFFFFF\"\n            strokeWidth={2}\n            initial={{ scale: 0 }}\n            animate={{ scale: 1 }}\n            transition={{ duration: 0.15 }}\n          />\n          {/* Hover indicator text */}\n          {hoveredTaskId && (\n            <motion.text\n              x={connectionLine.x + 15}\n              y={connectionLine.y}\n              dominantBaseline=\"middle\"\n              fill={theme.statusCompleted}\n              fontSize=\"11\"\n              fontWeight=\"600\"\n              fontFamily=\"Inter, sans-serif\"\n              initial={{ opacity: 0, x: connectionLine.x + 10 }}\n              animate={{ opacity: 1, x: connectionLine.x + 15 }}\n              transition={{ duration: 0.2 }}\n            >\n              Connect\n            </motion.text>\n          )}\n        </g>\n      )}\n\n      {/* Hover Glow Effect - v0.8.1: Disabled for split tasks (segments are independent) */}\n      {(isHovered || isDragging) && !isConnecting && !task.segments && (\n        <motion.rect\n          x={displayX - 2}\n          y={y - 2}\n          width={displayWidth + 4}\n          height={height + 4}\n          rx={borderRadius + 2}\n          fill=\"none\"\n          stroke={isDragging ? theme.accent : theme.taskBarPrimary}\n          strokeWidth={2}\n          opacity={isDragging ? 0.6 : 0.4}\n          initial={{ opacity: 0 }}\n          animate={{ opacity: isDragging ? 0.6 : 0.4 }}\n          transition={{ duration: 0.2 }}\n          style={{ pointerEvents: 'none' }}\n        />\n      )}\n\n      {/* Vertical Snap Guides (shown while resizing) */}\n      {isResizing && (\n        <>\n          <line\n            x1={ghostX}\n            y1={0}\n            x2={ghostX}\n            y2={1000}\n            stroke={theme.accent}\n            strokeWidth={1}\n            strokeDasharray=\"4 4\"\n            opacity={0.3}\n            style={{ pointerEvents: 'none' }}\n          />\n          <line\n            x1={ghostX + ghostWidth}\n            y1={0}\n            x2={ghostX + ghostWidth}\n            y2={1000}\n            stroke={theme.accent}\n            strokeWidth={1}\n            strokeDasharray=\"4 4\"\n            opacity={0.3}\n            style={{ pointerEvents: 'none' }}\n          />\n        </>\n      )}\n\n      {/* Enhanced Detailed Tooltip (shown on hover, hidden while dragging) - v0.8.1: Disabled for split tasks (segments are independent) */}\n      <AnimatePresence>\n        {isHovered && !isDragging && !task.segments && (\n          <motion.g\n            initial={{ opacity: 0, y: 10 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: 10 }}\n            transition={{ duration: 0.2 }}\n            style={{ pointerEvents: 'none' }}\n          >\n            {/* Tooltip Background */}\n            <rect\n              x={displayX + displayWidth / 2 - 120}\n              y={y - 95}\n              width={240}\n              height={82}\n              rx={8}\n              fill={theme.bgSecondary}\n              stroke={theme.border}\n              strokeWidth={1}\n              filter=\"drop-shadow(0 4px 12px rgba(0, 0, 0, 0.15))\"\n            />\n\n            {/* Tooltip Arrow */}\n            <path\n              d={`M ${displayX + displayWidth / 2 - 6} ${y - 13} L ${displayX + displayWidth / 2} ${y - 3} L ${displayX + displayWidth / 2 + 6} ${y - 13}`}\n              fill={theme.bgSecondary}\n              stroke={theme.border}\n              strokeWidth={1}\n            />\n\n            {/* Task Name */}\n            <text\n              x={displayX + displayWidth / 2}\n              y={y - 73}\n              textAnchor=\"middle\"\n              fill={theme.textPrimary}\n              fontSize=\"13\"\n              fontWeight=\"600\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              {task.name.length > 28 ? `${task.name.substring(0, 28)}...` : task.name}\n            </text>\n\n            {/* Dates */}\n            <text\n              x={displayX + displayWidth / 2 - 110}\n              y={y - 55}\n              fill={theme.textTertiary}\n              fontSize=\"11\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              Start:\n            </text>\n            <text\n              x={displayX + displayWidth / 2 - 70}\n              y={y - 55}\n              fill={theme.textSecondary}\n              fontSize=\"11\"\n              fontWeight=\"500\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              {formatDate(task.startDate!)}\n            </text>\n\n            <text\n              x={displayX + displayWidth / 2 - 110}\n              y={y - 40}\n              fill={theme.textTertiary}\n              fontSize=\"11\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              End:\n            </text>\n            <text\n              x={displayX + displayWidth / 2 - 70}\n              y={y - 40}\n              fill={theme.textSecondary}\n              fontSize=\"11\"\n              fontWeight=\"500\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              {formatDate(task.endDate!)}\n            </text>\n\n            {/* Duration */}\n            <text\n              x={displayX + displayWidth / 2 + 10}\n              y={y - 55}\n              fill={theme.textTertiary}\n              fontSize=\"11\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              Duration:\n            </text>\n            <text\n              x={displayX + displayWidth / 2 + 65}\n              y={y - 55}\n              fill={theme.textSecondary}\n              fontSize=\"11\"\n              fontWeight=\"500\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              {getDuration()}\n            </text>\n\n            {/* Progress */}\n            <text\n              x={displayX + displayWidth / 2 + 10}\n              y={y - 40}\n              fill={theme.textTertiary}\n              fontSize=\"11\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              Progress:\n            </text>\n            <text\n              x={displayX + displayWidth / 2 + 65}\n              y={y - 40}\n              fill={theme.textSecondary}\n              fontSize=\"11\"\n              fontWeight=\"500\"\n              fontFamily=\"Inter, sans-serif\"\n            >\n              {task.progress}%\n            </text>\n\n            {/* Assignees */}\n            {task.assignees && task.assignees.length > 0 && (\n              <>\n                <text\n                  x={displayX + displayWidth / 2 - 110}\n                  y={y - 25}\n                  fill={theme.textTertiary}\n                  fontSize=\"11\"\n                  fontFamily=\"Inter, sans-serif\"\n                >\n                  Assignees:\n                </text>\n                <text\n                  x={displayX + displayWidth / 2 - 50}\n                  y={y - 25}\n                  fill={theme.textSecondary}\n                  fontSize=\"11\"\n                  fontWeight=\"500\"\n                  fontFamily=\"Inter, sans-serif\"\n                >\n                  {task.assignees.map(a => a.name).join(', ').substring(0, 30)}\n                  {task.assignees.map(a => a.name).join(', ').length > 30 ? '...' : ''}\n                </text>\n              </>\n            )}\n\n            {/* Interaction Hints - Adaptive for bar size */}\n            <text\n              x={displayX + displayWidth / 2}\n              y={y - 18}\n              textAnchor=\"middle\"\n              fill={theme.textTertiary}\n              fontSize=\"9\"\n              fontFamily=\"Inter, sans-serif\"\n              style={{ opacity: 0.7 }}\n            >\n              {isVerySmallBar\n                ? 'Left: move • Right: resize'\n                : isSmallBar\n                ? 'Drag to move • Hold ALT + drag edge to resize'\n                : 'Drag edges to resize • Drag center to move • Click ⚫ to link'\n              }\n            </text>\n          </motion.g>\n        )}\n      </AnimatePresence>\n    </g>\n  );\n}\n","import { useState } from 'react';\r\nimport { motion } from 'framer-motion';\r\n\r\ninterface DependencyLineProps {\r\n  x1: number;\r\n  y1: number;\r\n  x2: number;\r\n  y2: number;\r\n  theme: any;\r\n  onDelete?: () => void;\r\n}\r\n\r\nexport function DependencyLine({ x1, y1, x2, y2, theme, onDelete }: DependencyLineProps) {\r\n  const [isHovered, setIsHovered] = useState(false);\r\n\r\n  // Calculate control points for smooth Bézier curve\r\n  const dx = x2 - x1;\r\n  const dy = y2 - y1;\r\n  const midX = x1 + dx / 2;\r\n  \r\n  // Create elegant S-curve path\r\n  const path = `M ${x1} ${y1} C ${midX} ${y1}, ${midX} ${y2}, ${x2} ${y2}`;\r\n\r\n  // Arrow marker at the end\r\n  const arrowSize = 6;\r\n  const angle = Math.atan2(dy, dx);\r\n  const arrowX = x2 - arrowSize * Math.cos(angle - Math.PI / 6);\r\n  const arrowY = y2 - arrowSize * Math.sin(angle - Math.PI / 6);\r\n  const arrowX2 = x2 - arrowSize * Math.cos(angle + Math.PI / 6);\r\n  const arrowY2 = y2 - arrowSize * Math.sin(angle + Math.PI / 6);\r\n\r\n  // Dependencies are always gray - critical path only affects TASK BARS, not dependency lines\r\n  const lineColor = theme.dependency;\r\n\r\n  return (\r\n    <g\r\n      onMouseEnter={() => setIsHovered(true)}\r\n      onMouseLeave={() => setIsHovered(false)}\r\n    >\r\n      {/* Invisible wider path for easier hover detection */}\r\n      <path\r\n        d={path}\r\n        fill=\"none\"\r\n        stroke=\"transparent\"\r\n        strokeWidth={20}\r\n        strokeLinecap=\"round\"\r\n        style={{ cursor: 'pointer' }}\r\n      />\r\n\r\n      {/* Main dependency line */}\r\n      <motion.path\r\n        d={path}\r\n        fill=\"none\"\r\n        stroke={lineColor}\r\n        strokeWidth={2}\r\n        strokeLinecap=\"round\"\r\n        initial={{ pathLength: 0, opacity: 0 }}\r\n        animate={{\r\n          pathLength: 1,\r\n          opacity: isHovered ? 1 : 0.6,\r\n          strokeWidth: isHovered ? 2.5 : 2,\r\n        }}\r\n        transition={{\r\n          pathLength: { duration: 0.5, ease: 'easeInOut' },\r\n          opacity: { duration: 0.2 },\r\n          strokeWidth: { duration: 0.2 },\r\n        }}\r\n      />\r\n\r\n      {/* Arrow head */}\r\n      <motion.path\r\n        d={`M ${x2} ${y2} L ${arrowX} ${arrowY} M ${x2} ${y2} L ${arrowX2} ${arrowY2}`}\r\n        fill=\"none\"\r\n        stroke={lineColor}\r\n        strokeWidth={2}\r\n        strokeLinecap=\"round\"\r\n        initial={{ opacity: 0, scale: 0.8 }}\r\n        animate={{\r\n          opacity: isHovered ? 1 : 0.6,\r\n          scale: isHovered ? 1.1 : 1,\r\n          strokeWidth: isHovered ? 2.5 : 2,\r\n        }}\r\n        transition={{ duration: 0.2 }}\r\n      />\r\n\r\n      {/* Endpoint dot */}\r\n      <motion.circle\r\n        cx={x2}\r\n        cy={y2}\r\n        r={3}\r\n        fill={lineColor}\r\n        initial={{ scale: 0 }}\r\n        animate={{\r\n          scale: isHovered ? 1.33 : 1,\r\n        }}\r\n        transition={{\r\n          scale: { delay: 0.3, duration: 0.2 },\r\n        }}\r\n      />\r\n\r\n      {/* Delete button (appears on hover) */}\r\n      {isHovered && onDelete && (\r\n        <motion.g\r\n          initial={{ opacity: 0, scale: 0 }}\r\n          animate={{ opacity: 1, scale: 1 }}\r\n          transition={{ duration: 0.2 }}\r\n          onClick={(e) => {\r\n            e.stopPropagation();\r\n            onDelete();\r\n          }}\r\n          style={{ cursor: 'pointer' }}\r\n        >\r\n          {/* Position delete button at midpoint of the line */}\r\n          <circle\r\n            cx={midX}\r\n            cy={(y1 + y2) / 2}\r\n            r={10}\r\n            fill={theme.bgSecondary}\r\n            stroke={theme.error || '#ef4444'}\r\n            strokeWidth={2}\r\n          />\r\n          {/* X icon */}\r\n          <line\r\n            x1={midX - 4}\r\n            y1={(y1 + y2) / 2 - 4}\r\n            x2={midX + 4}\r\n            y2={(y1 + y2) / 2 + 4}\r\n            stroke={theme.error || '#ef4444'}\r\n            strokeWidth={2}\r\n            strokeLinecap=\"round\"\r\n          />\r\n          <line\r\n            x1={midX + 4}\r\n            y1={(y1 + y2) / 2 - 4}\r\n            x2={midX - 4}\r\n            y2={(y1 + y2) / 2 + 4}\r\n            stroke={theme.error || '#ef4444'}\r\n            strokeWidth={2}\r\n            strokeLinecap=\"round\"\r\n          />\r\n        </motion.g>\r\n      )}\r\n    </g>\r\n  );\r\n}","import { useState } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { Task } from './types';\r\n\r\ninterface MilestoneProps {\r\n  task: Task;\r\n  x: number;\r\n  y: number;\r\n  theme: any;\r\n  onClick?: (task: Task) => void;\r\n}\r\n\r\nexport function Milestone({ task, x, y, theme, onClick }: MilestoneProps) {\r\n  const [isHovered, setIsHovered] = useState(false);\r\n  const size = 16;\r\n\r\n  // Format date for tooltip\r\n  const formatDate = (date: Date) => {\r\n    return date.toLocaleDateString('en-US', {\r\n      month: 'short',\r\n      day: 'numeric',\r\n      year: 'numeric',\r\n    });\r\n  };\r\n\r\n  return (\r\n    <g\r\n      onMouseEnter={() => setIsHovered(true)}\r\n      onMouseLeave={() => setIsHovered(false)}\r\n      onClick={() => onClick?.(task)}\r\n      style={{ cursor: 'pointer' }}\r\n    >\r\n      {/* Critical Path Glow (if applicable) */}\r\n      {task.isCriticalPath && (\r\n        <motion.circle\r\n          cx={x}\r\n          cy={y + 16}\r\n          r={size + 4}\r\n          fill={theme.criticalPathLight}\r\n          initial={{ scale: 0 }}\r\n          animate={{ scale: isHovered ? 1.2 : 1 }}\r\n          transition={{ duration: 0.3 }}\r\n        />\r\n      )}\r\n\r\n      {/* Diamond Shape (rotated square) */}\r\n      <motion.rect\r\n        x={x - size / 2}\r\n        y={y + 16 - size / 2}\r\n        width={size}\r\n        height={size}\r\n        fill={task.isCriticalPath ? theme.criticalPath : theme.milestone}\r\n        stroke={theme.bgGrid}\r\n        strokeWidth={2}\r\n        transform={`rotate(45 ${x} ${y + 16})`}\r\n        initial={{ scale: 0, rotate: 0 }}\r\n        animate={{\r\n          scale: isHovered ? 1.15 : 1,\r\n          rotate: 45,\r\n        }}\r\n        transition={{\r\n          duration: 0.3,\r\n          type: 'spring',\r\n          stiffness: 300,\r\n          damping: 20,\r\n        }}\r\n      />\r\n\r\n      {/* Hover Effect - Outer Ring */}\r\n      {isHovered && (\r\n        <motion.rect\r\n          x={x - (size + 4) / 2}\r\n          y={y + 16 - (size + 4) / 2}\r\n          width={size + 4}\r\n          height={size + 4}\r\n          fill=\"none\"\r\n          stroke={task.isCriticalPath ? theme.criticalPath : theme.milestone}\r\n          strokeWidth={2}\r\n          opacity={0.5}\r\n          transform={`rotate(45 ${x} ${y + 16})`}\r\n          initial={{ scale: 0.8, opacity: 0 }}\r\n          animate={{ scale: 1, opacity: 0.5 }}\r\n          transition={{ duration: 0.2 }}\r\n        />\r\n      )}\r\n\r\n      {/* Enhanced Tooltip */}\r\n      <AnimatePresence>\r\n        {isHovered && (\r\n          <motion.g\r\n            initial={{ opacity: 0, y: 10 }}\r\n            animate={{ opacity: 1, y: 0 }}\r\n            exit={{ opacity: 0, y: 10 }}\r\n            transition={{ duration: 0.2 }}\r\n          >\r\n            {/* Tooltip Background */}\r\n            <rect\r\n              x={x - 80}\r\n              y={y - 50}\r\n              width={160}\r\n              height={44}\r\n              rx={8}\r\n              fill={theme.bgSecondary}\r\n              stroke={theme.border}\r\n              strokeWidth={1}\r\n              filter=\"drop-shadow(0 4px 12px rgba(0, 0, 0, 0.15))\"\r\n            />\r\n\r\n            {/* Tooltip Arrow */}\r\n            <path\r\n              d={`M ${x - 6} ${y - 6} L ${x} ${y + 4} L ${x + 6} ${y - 6}`}\r\n              fill={theme.bgSecondary}\r\n              stroke={theme.border}\r\n              strokeWidth={1}\r\n            />\r\n\r\n            {/* Milestone Icon in Tooltip */}\r\n            <rect\r\n              x={x - 70}\r\n              y={y - 38}\r\n              width={8}\r\n              height={8}\r\n              fill={task.isCriticalPath ? theme.criticalPath : theme.milestone}\r\n              transform={`rotate(45 ${x - 66} ${y - 34})`}\r\n            />\r\n\r\n            {/* Task Name */}\r\n            <text\r\n              x={x - 55}\r\n              y={y - 32}\r\n              fill={theme.textPrimary}\r\n              fontSize=\"12\"\r\n              fontWeight=\"600\"\r\n              fontFamily=\"Inter, sans-serif\"\r\n            >\r\n              {task.name.length > 18 ? `${task.name.substring(0, 18)}...` : task.name}\r\n            </text>\r\n\r\n            {/* Date */}\r\n            <text\r\n              x={x - 55}\r\n              y={y - 18}\r\n              fill={theme.textTertiary}\r\n              fontSize=\"10\"\r\n              fontFamily=\"Inter, sans-serif\"\r\n            >\r\n              {formatDate(task.startDate!)}\r\n            </text>\r\n\r\n            {/* Critical Path Badge */}\r\n            {task.isCriticalPath && (\r\n              <g>\r\n                <rect\r\n                  x={x + 10}\r\n                  y={y - 40}\r\n                  width={60}\r\n                  height={16}\r\n                  rx={4}\r\n                  fill={theme.criticalPathLight}\r\n                />\r\n                <text\r\n                  x={x + 40}\r\n                  y={y - 30}\r\n                  textAnchor=\"middle\"\r\n                  fill={theme.criticalPath}\r\n                  fontSize=\"9\"\r\n                  fontWeight=\"700\"\r\n                  fontFamily=\"Inter, sans-serif\"\r\n                  letterSpacing=\"0.5\"\r\n                >\r\n                  CRITICAL\r\n                </text>\r\n              </g>\r\n            )}\r\n          </motion.g>\r\n        )}\r\n      </AnimatePresence>\r\n    </g>\r\n  );\r\n}","import { Task, TaskSegment } from './types';\r\n\r\n/**\r\n * Public utility functions for Gantt operations\r\n * Similar to DHTMLX gantt.* utility methods\r\n */\r\nexport const ganttUtils = {\r\n  /**\r\n   * Calculate end date based on start date and duration in days\r\n   * @param start - Start date\r\n   * @param durationDays - Duration in days\r\n   * @returns End date\r\n   */\r\n  calculateEndDate: (start: Date, durationDays: number): Date => {\r\n    const end = new Date(start);\r\n    end.setDate(end.getDate() + durationDays);\r\n    return end;\r\n  },\r\n\r\n  /**\r\n   * Calculate duration in days between two dates\r\n   * @param start - Start date\r\n   * @param end - End date\r\n   * @returns Duration in days (rounded up)\r\n   */\r\n  calculateDuration: (start: Date, end: Date): number => {\r\n    const diffMs = end.getTime() - start.getTime();\r\n    return Math.ceil(diffMs / (1000 * 60 * 60 * 24));\r\n  },\r\n\r\n  /**\r\n   * Calculate working days between two dates (excluding weekends)\r\n   * @param start - Start date\r\n   * @param end - End date\r\n   * @returns Number of working days\r\n   */\r\n  calculateWorkingDays: (start: Date, end: Date): number => {\r\n    let count = 0;\r\n    const current = new Date(start);\r\n\r\n    while (current <= end) {\r\n      const dayOfWeek = current.getDay();\r\n      if (dayOfWeek !== 0 && dayOfWeek !== 6) { // Not Sunday (0) or Saturday (6)\r\n        count++;\r\n      }\r\n      current.setDate(current.getDate() + 1);\r\n    }\r\n\r\n    return count;\r\n  },\r\n\r\n  /**\r\n   * Add working days to a date (excluding weekends)\r\n   * @param start - Start date\r\n   * @param workingDays - Number of working days to add\r\n   * @returns End date\r\n   */\r\n  addWorkingDays: (start: Date, workingDays: number): Date => {\r\n    const result = new Date(start);\r\n    let daysAdded = 0;\r\n\r\n    while (daysAdded < workingDays) {\r\n      result.setDate(result.getDate() + 1);\r\n      const dayOfWeek = result.getDay();\r\n      if (dayOfWeek !== 0 && dayOfWeek !== 6) {\r\n        daysAdded++;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  },\r\n\r\n  /**\r\n   * Check if a date is a weekend\r\n   * @param date - Date to check\r\n   * @returns True if weekend\r\n   */\r\n  isWeekend: (date: Date): boolean => {\r\n    const dayOfWeek = date.getDay();\r\n    return dayOfWeek === 0 || dayOfWeek === 6;\r\n  },\r\n\r\n  /**\r\n   * Validate if creating a dependency would create a circular reference\r\n   * Uses Depth-First Search (DFS) algorithm\r\n   * @param tasks - All tasks\r\n   * @param fromTaskId - Source task ID\r\n   * @param toTaskId - Target task ID\r\n   * @returns True if would create circular dependency\r\n   */\r\n  validateDependencies: (tasks: Task[], fromTaskId: string, toTaskId: string): boolean => {\r\n    // Build dependency map\r\n    const dependencyMap = new Map<string, string[]>();\r\n\r\n    const buildMap = (taskList: Task[]) => {\r\n      taskList.forEach(task => {\r\n        if (task.dependencies) {\r\n          dependencyMap.set(task.id, task.dependencies);\r\n        }\r\n        if (task.subtasks) {\r\n          buildMap(task.subtasks);\r\n        }\r\n      });\r\n    };\r\n\r\n    buildMap(tasks);\r\n\r\n    // Simulate adding the new dependency\r\n    const existingDeps = dependencyMap.get(toTaskId) || [];\r\n    dependencyMap.set(toTaskId, [...existingDeps, fromTaskId]);\r\n\r\n    // DFS to detect cycle\r\n    const visited = new Set<string>();\r\n    const recStack = new Set<string>();\r\n\r\n    const hasCycle = (taskId: string): boolean => {\r\n      if (!visited.has(taskId)) {\r\n        visited.add(taskId);\r\n        recStack.add(taskId);\r\n\r\n        const deps = dependencyMap.get(taskId) || [];\r\n        for (const depId of deps) {\r\n          if (!visited.has(depId) && hasCycle(depId)) {\r\n            return true;\r\n          } else if (recStack.has(depId)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n      recStack.delete(taskId);\r\n      return false;\r\n    };\r\n\r\n    return hasCycle(toTaskId);\r\n  },\r\n\r\n  /**\r\n   * Flatten nested tasks into a single array\r\n   * @param tasks - Tasks with potential subtasks\r\n   * @returns Flat array of all tasks\r\n   */\r\n  flattenTasks: (tasks: Task[]): Task[] => {\r\n    const result: Task[] = [];\r\n\r\n    const flatten = (taskList: Task[]) => {\r\n      taskList.forEach(task => {\r\n        result.push(task);\r\n        if (task.subtasks && task.subtasks.length > 0) {\r\n          flatten(task.subtasks);\r\n        }\r\n      });\r\n    };\r\n\r\n    flatten(tasks);\r\n    return result;\r\n  },\r\n\r\n  /**\r\n   * Find a task by ID in nested structure\r\n   * @param tasks - Tasks to search\r\n   * @param taskId - ID to find\r\n   * @returns Task if found, undefined otherwise\r\n   */\r\n  findTaskById: (tasks: Task[], taskId: string): Task | undefined => {\r\n    for (const task of tasks) {\r\n      if (task.id === taskId) {\r\n        return task;\r\n      }\r\n      if (task.subtasks) {\r\n        const found = ganttUtils.findTaskById(task.subtasks, taskId);\r\n        if (found) return found;\r\n      }\r\n    }\r\n    return undefined;\r\n  },\r\n\r\n  /**\r\n   * Get all parent tasks recursively\r\n   * @param tasks - All tasks\r\n   * @param taskId - Child task ID\r\n   * @returns Array of parent tasks\r\n   */\r\n  getParentTasks: (tasks: Task[], taskId: string): Task[] => {\r\n    const parents: Task[] = [];\r\n    const task = ganttUtils.findTaskById(tasks, taskId);\r\n\r\n    if (!task || !task.parentId) return parents;\r\n\r\n    let currentId: string | undefined = task.parentId;\r\n    while (currentId) {\r\n      const parent = ganttUtils.findTaskById(tasks, currentId);\r\n      if (parent) {\r\n        parents.unshift(parent);\r\n        currentId = parent.parentId;\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    return parents;\r\n  },\r\n\r\n  /**\r\n   * Export tasks to JSON string\r\n   * @param tasks - Tasks to export\r\n   * @returns JSON string\r\n   */\r\n  exportToJSON: (tasks: Task[]): string => {\r\n    return JSON.stringify(tasks, null, 2);\r\n  },\r\n\r\n  /**\r\n   * Import tasks from JSON string\r\n   * @param json - JSON string\r\n   * @returns Parsed tasks\r\n   */\r\n  importFromJSON: (json: string): Task[] => {\r\n    try {\r\n      const parsed = JSON.parse(json);\r\n\r\n      // Validate it's an array\r\n      if (!Array.isArray(parsed)) {\r\n        throw new Error('Invalid JSON: expected an array of tasks');\r\n      }\r\n\r\n      // Basic validation of task structure\r\n      parsed.forEach((task, index) => {\r\n        if (!task.id || !task.name) {\r\n          throw new Error(`Invalid task at index ${index}: missing required fields (id, name)`);\r\n        }\r\n      });\r\n\r\n      return parsed;\r\n    } catch (error) {\r\n      throw new Error(`Failed to import tasks: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Export tasks to CSV format\r\n   * @param tasks - Tasks to export\r\n   * @returns CSV string\r\n   */\r\n  exportToCSV: (tasks: Task[]): string => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n\r\n    // CSV Headers\r\n    const headers = ['ID', 'Name', 'Start Date', 'End Date', 'Progress', 'Status', 'Dependencies'];\r\n    const rows: string[] = [headers.join(',')];\r\n\r\n    // CSV Data\r\n    flat.forEach(task => {\r\n      const row = [\r\n        task.id,\r\n        `\"${task.name.replace(/\"/g, '\"\"')}\"`, // Escape quotes in name\r\n        task.startDate ? task.startDate.toISOString().split('T')[0] : '',\r\n        task.endDate ? task.endDate.toISOString().split('T')[0] : '',\r\n        task.progress.toString(),\r\n        task.status || '',\r\n        task.dependencies?.join(';') || '',\r\n      ];\r\n      rows.push(row.join(','));\r\n    });\r\n\r\n    return rows.join('\\n');\r\n  },\r\n\r\n  /**\r\n   * Format date to string (YYYY-MM-DD)\r\n   * @param date - Date to format\r\n   * @returns Formatted string\r\n   */\r\n  formatDate: (date: Date): string => {\r\n    const year = date.getFullYear();\r\n    const month = String(date.getMonth() + 1).padStart(2, '0');\r\n    const day = String(date.getDate()).padStart(2, '0');\r\n    return `${year}-${month}-${day}`;\r\n  },\r\n\r\n  /**\r\n   * Parse date from string (YYYY-MM-DD)\r\n   * @param dateString - Date string\r\n   * @returns Parsed Date\r\n   */\r\n  parseDate: (dateString: string): Date => {\r\n    return new Date(dateString);\r\n  },\r\n\r\n  /**\r\n   * Get date range for a task\r\n   * @param task - Task to get range for\r\n   * @returns Object with start and end dates, or null if no dates\r\n   */\r\n  getTaskDateRange: (task: Task): { start: Date; end: Date } | null => {\r\n    if (!task.startDate || !task.endDate) return null;\r\n    return {\r\n      start: task.startDate,\r\n      end: task.endDate,\r\n    };\r\n  },\r\n\r\n  /**\r\n   * Get the earliest start date from tasks\r\n   * @param tasks - Tasks to search\r\n   * @returns Earliest date or null\r\n   */\r\n  getEarliestStartDate: (tasks: Task[]): Date | null => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n    const tasksWithDates = flat.filter(t => t.startDate);\r\n\r\n    if (tasksWithDates.length === 0) return null;\r\n\r\n    return new Date(Math.min(...tasksWithDates.map(t => t.startDate!.getTime())));\r\n  },\r\n\r\n  /**\r\n   * Get the latest end date from tasks\r\n   * @param tasks - Tasks to search\r\n   * @returns Latest date or null\r\n   */\r\n  getLatestEndDate: (tasks: Task[]): Date | null => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n    const tasksWithDates = flat.filter(t => t.endDate);\r\n\r\n    if (tasksWithDates.length === 0) return null;\r\n\r\n    return new Date(Math.max(...tasksWithDates.map(t => t.endDate!.getTime())));\r\n  },\r\n\r\n  /**\r\n   * Check if two tasks overlap in time\r\n   * @param task1 - First task\r\n   * @param task2 - Second task\r\n   * @returns True if tasks overlap\r\n   */\r\n  tasksOverlap: (task1: Task, task2: Task): boolean => {\r\n    if (!task1.startDate || !task1.endDate || !task2.startDate || !task2.endDate) {\r\n      return false;\r\n    }\r\n\r\n    return task1.startDate <= task2.endDate && task2.startDate <= task1.endDate;\r\n  },\r\n\r\n  /**\r\n   * Get all tasks that depend on a given task (children in dependency tree)\r\n   * @param tasks - All tasks\r\n   * @param taskId - Task ID to find dependents for\r\n   * @returns Array of tasks that depend on this task\r\n   */\r\n  getDependentTasks: (tasks: Task[], taskId: string): Task[] => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n    return flat.filter(task =>\r\n      task.dependencies && task.dependencies.includes(taskId)\r\n    );\r\n  },\r\n\r\n  /**\r\n   * Get all tasks that a given task depends on (parents in dependency tree)\r\n   * @param tasks - All tasks\r\n   * @param taskId - Task ID to find dependencies for\r\n   * @returns Array of tasks this task depends on\r\n   */\r\n  getDependencyTasks: (tasks: Task[], taskId: string): Task[] => {\r\n    const task = ganttUtils.findTaskById(tasks, taskId);\r\n    if (!task || !task.dependencies) return [];\r\n\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n    return flat.filter(t => task.dependencies!.includes(t.id));\r\n  },\r\n\r\n  /**\r\n   * Filter tasks by status\r\n   * @param tasks - Tasks to filter\r\n   * @param status - Status to filter by\r\n   * @returns Filtered tasks\r\n   */\r\n  filterByStatus: (tasks: Task[], status: 'todo' | 'in-progress' | 'completed'): Task[] => {\r\n    return ganttUtils.flattenTasks(tasks).filter(t => t.status === status);\r\n  },\r\n\r\n  /**\r\n   * Filter tasks by date range\r\n   * @param tasks - Tasks to filter\r\n   * @param startDate - Range start\r\n   * @param endDate - Range end\r\n   * @returns Tasks that fall within the date range\r\n   */\r\n  filterByDateRange: (tasks: Task[], startDate: Date, endDate: Date): Task[] => {\r\n    return ganttUtils.flattenTasks(tasks).filter(task => {\r\n      if (!task.startDate || !task.endDate) return false;\r\n      return task.startDate <= endDate && task.endDate >= startDate;\r\n    });\r\n  },\r\n\r\n  /**\r\n   * Sort tasks by start date\r\n   * @param tasks - Tasks to sort\r\n   * @param ascending - Sort ascending (default) or descending\r\n   * @returns Sorted tasks\r\n   */\r\n  sortByStartDate: (tasks: Task[], ascending = true): Task[] => {\r\n    return [...tasks].sort((a, b) => {\r\n      if (!a.startDate || !b.startDate) return 0;\r\n      const diff = a.startDate.getTime() - b.startDate.getTime();\r\n      return ascending ? diff : -diff;\r\n    });\r\n  },\r\n\r\n  /**\r\n   * Sort tasks by end date\r\n   * @param tasks - Tasks to sort\r\n   * @param ascending - Sort ascending (default) or descending\r\n   * @returns Sorted tasks\r\n   */\r\n  sortByEndDate: (tasks: Task[], ascending = true): Task[] => {\r\n    return [...tasks].sort((a, b) => {\r\n      if (!a.endDate || !b.endDate) return 0;\r\n      const diff = a.endDate.getTime() - b.endDate.getTime();\r\n      return ascending ? diff : -diff;\r\n    });\r\n  },\r\n\r\n  /**\r\n   * Sort tasks by progress\r\n   * @param tasks - Tasks to sort\r\n   * @param ascending - Sort ascending (default) or descending\r\n   * @returns Sorted tasks\r\n   */\r\n  sortByProgress: (tasks: Task[], ascending = true): Task[] => {\r\n    return [...tasks].sort((a, b) => {\r\n      const diff = a.progress - b.progress;\r\n      return ascending ? diff : -diff;\r\n    });\r\n  },\r\n\r\n  /**\r\n   * Calculate total progress across all tasks\r\n   * @param tasks - Tasks to calculate\r\n   * @returns Average progress percentage\r\n   */\r\n  calculateTotalProgress: (tasks: Task[]): number => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n    if (flat.length === 0) return 0;\r\n\r\n    const total = flat.reduce((sum, task) => sum + task.progress, 0);\r\n    return Math.round(total / flat.length);\r\n  },\r\n\r\n  /**\r\n   * Get task by path (array of indices in nested structure)\r\n   * @param tasks - Root tasks\r\n   * @param path - Array of indices [0, 2, 1] means tasks[0].subtasks[2].subtasks[1]\r\n   * @returns Task at path or undefined\r\n   */\r\n  getTaskByPath: (tasks: Task[], path: number[]): Task | undefined => {\r\n    let current: Task[] = tasks;\r\n    let task: Task | undefined;\r\n\r\n    for (let i = 0; i < path.length; i++) {\r\n      const index = path[i];\r\n      if (!current || index === undefined || index >= current.length) return undefined;\r\n\r\n      task = current[index];\r\n      if (!task) return undefined;\r\n\r\n      if (i < path.length - 1) {\r\n        current = task.subtasks || [];\r\n      }\r\n    }\r\n\r\n    return task;\r\n  },\r\n\r\n  /**\r\n   * Clone a task deeply (including subtasks)\r\n   * @param task - Task to clone\r\n   * @param newId - Optional new ID for the clone\r\n   * @returns Cloned task\r\n   */\r\n  cloneTask: (task: Task, newId?: string): Task => {\r\n    return {\r\n      ...task,\r\n      id: newId || `${task.id}-copy`,\r\n      subtasks: task.subtasks?.map(st => ganttUtils.cloneTask(st)),\r\n    };\r\n  },\r\n\r\n  /**\r\n   * Export tasks to PDF format\r\n   * @param tasks - Tasks to export\r\n   * @param filename - Optional filename (default: 'gantt-chart.pdf')\r\n   * @returns Promise<void>\r\n   */\r\n  exportToPDF: async (tasks: Task[], filename = 'gantt-chart.pdf'): Promise<void> => {\r\n    try {\r\n      if (!tasks || tasks.length === 0) {\r\n        alert('No tasks available to export to PDF');\r\n        return;\r\n      }\r\n\r\n      // v0.8.1: FIXED - Use correct jspdf-autotable v5.0 API\r\n      const { jsPDF } = await import('jspdf');\r\n      const { default: autoTable } = await import('jspdf-autotable');\r\n\r\n      const doc = new jsPDF();\r\n      const flat = ganttUtils.flattenTasks(tasks);\r\n\r\n      if (flat.length === 0) {\r\n        alert('No tasks found to export');\r\n        return;\r\n      }\r\n\r\n      // Title\r\n      doc.setFontSize(16);\r\n      doc.text('Gantt Chart - Task List', 14, 20);\r\n\r\n      // Table data\r\n      const headers = [['Task Name', 'Start Date', 'End Date', 'Duration', 'Progress', 'Status']];\r\n      const data = flat.map(task => {\r\n        const duration = task.startDate && task.endDate\r\n          ? ganttUtils.calculateDuration(task.startDate, task.endDate)\r\n          : 0;\r\n\r\n        return [\r\n          task.name,\r\n          task.startDate ? ganttUtils.formatDate(task.startDate) : 'N/A',\r\n          task.endDate ? ganttUtils.formatDate(task.endDate) : 'N/A',\r\n          duration > 0 ? `${duration} days` : 'N/A',\r\n          `${task.progress}%`,\r\n          task.status || 'N/A',\r\n        ];\r\n      });\r\n\r\n      // v0.8.1: Use autoTable function (v5.0 API) instead of doc.autoTable() (old API)\r\n      autoTable(doc, {\r\n        head: headers,\r\n        body: data,\r\n        startY: 30,\r\n        styles: {\r\n          fontSize: 9,\r\n          cellPadding: 3,\r\n        },\r\n        headStyles: {\r\n          fillColor: [66, 139, 202],\r\n          textColor: 255,\r\n          fontStyle: 'bold',\r\n        },\r\n        alternateRowStyles: {\r\n          fillColor: [245, 245, 245],\r\n        },\r\n        columnStyles: {\r\n          0: { cellWidth: 60 }, // Task Name\r\n          1: { cellWidth: 30 }, // Start Date\r\n          2: { cellWidth: 30 }, // End Date\r\n          3: { cellWidth: 25 }, // Duration\r\n          4: { cellWidth: 20 }, // Progress\r\n          5: { cellWidth: 25 }, // Status\r\n        },\r\n      });\r\n\r\n      // Save the PDF\r\n      doc.save(filename);\r\n    } catch (error) {\r\n      throw error;\r\n    }\r\n  },\r\n\r\n  /**\r\n   * Export tasks to Excel format\r\n   * @param tasks - Tasks to export\r\n   * @param filename - Optional filename (default: 'gantt-chart.xlsx')\r\n   * @returns Promise<void>\r\n   */\r\n  exportToExcel: async (tasks: Task[], filename = 'gantt-chart.xlsx'): Promise<void> => {\r\n    const XLSX = await import('xlsx');\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n\r\n    // Prepare data\r\n    const data = flat.map(task => {\r\n      const duration = task.startDate && task.endDate\r\n        ? ganttUtils.calculateDuration(task.startDate, task.endDate)\r\n        : 0;\r\n\r\n      return {\r\n        'Task ID': task.id,\r\n        'Task Name': task.name,\r\n        'Start Date': task.startDate ? ganttUtils.formatDate(task.startDate) : '',\r\n        'End Date': task.endDate ? ganttUtils.formatDate(task.endDate) : '',\r\n        'Duration (days)': duration > 0 ? duration : '',\r\n        'Progress (%)': task.progress,\r\n        'Status': task.status || '',\r\n        'Assignees': task.assignees?.map(a => a.name).join(', ') || '',\r\n        'Dependencies': task.dependencies?.join(', ') || '',\r\n        'Is Milestone': task.isMilestone ? 'Yes' : 'No',\r\n        'Parent ID': task.parentId || '',\r\n        'Level': task.level || 0,\r\n      };\r\n    });\r\n\r\n    // Create worksheet\r\n    const worksheet = XLSX.utils.json_to_sheet(data);\r\n\r\n    // Set column widths\r\n    const columnWidths = [\r\n      { wch: 15 }, // Task ID\r\n      { wch: 40 }, // Task Name\r\n      { wch: 12 }, // Start Date\r\n      { wch: 12 }, // End Date\r\n      { wch: 15 }, // Duration\r\n      { wch: 12 }, // Progress\r\n      { wch: 15 }, // Status\r\n      { wch: 30 }, // Assignees\r\n      { wch: 20 }, // Dependencies\r\n      { wch: 12 }, // Is Milestone\r\n      { wch: 15 }, // Parent ID\r\n      { wch: 8 },  // Level\r\n    ];\r\n    worksheet['!cols'] = columnWidths;\r\n\r\n    // Create workbook\r\n    const workbook = XLSX.utils.book_new();\r\n    XLSX.utils.book_append_sheet(workbook, worksheet, 'Gantt Tasks');\r\n\r\n    // Save the file\r\n    XLSX.writeFile(workbook, filename);\r\n  },\r\n\r\n  /**\r\n   * Export tasks to Microsoft Project XML format\r\n   * Compatible with MS Project 2010+ and other project management tools\r\n   * @param tasks - Tasks to export\r\n   * @param projectName - Project name (default: 'Gantt Project')\r\n   * @param filename - Optional filename (default: 'project.xml')\r\n   * @returns void - Downloads the XML file\r\n   */\r\n  exportToMSProject: (tasks: Task[], projectName = 'Gantt Project', filename = 'project.xml'): void => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n\r\n    // Generate unique UIDs for tasks (MS Project requires numeric UIDs)\r\n    const taskUIDMap = new Map<string, number>();\r\n    flat.forEach((task, index) => {\r\n      taskUIDMap.set(task.id, index + 1); // UID starts at 1\r\n    });\r\n\r\n    // Format date for MS Project XML (ISO 8601)\r\n    const formatMSDate = (date: Date): string => {\r\n      return date.toISOString().replace('Z', '');\r\n    };\r\n\r\n    // Calculate project start and end dates\r\n    const projectStart = ganttUtils.getEarliestStartDate(tasks) || new Date();\r\n    const projectEnd = ganttUtils.getLatestEndDate(tasks) || new Date();\r\n\r\n    // Build XML structure\r\n    const xmlTasks = flat.map((task, index) => {\r\n      const uid = taskUIDMap.get(task.id)!;\r\n      const duration = task.startDate && task.endDate\r\n        ? ganttUtils.calculateDuration(task.startDate, task.endDate)\r\n        : 0;\r\n\r\n      // Build predecessor links (dependencies)\r\n      const predecessorLinks = (task.dependencies || [])\r\n        .filter(depId => taskUIDMap.has(depId))\r\n        .map(depId => `\r\n        <PredecessorLink>\r\n          <PredecessorUID>${taskUIDMap.get(depId)}</PredecessorUID>\r\n          <Type>1</Type>\r\n          <CrossProject>0</CrossProject>\r\n          <LinkLag>0</LinkLag>\r\n          <LagFormat>7</LagFormat>\r\n        </PredecessorLink>`).join('');\r\n\r\n      return `\r\n    <Task>\r\n      <UID>${uid}</UID>\r\n      <ID>${index + 1}</ID>\r\n      <Name>${task.name.replace(/[<>&'\"]/g, c => ({ '<': '&lt;', '>': '&gt;', '&': '&amp;', \"'\": '&apos;', '\"': '&quot;' })[c] || c)}</Name>\r\n      <Type>0</Type>\r\n      <IsNull>0</IsNull>\r\n      <CreateDate>${formatMSDate(new Date())}</CreateDate>\r\n      <WBS>${index + 1}</WBS>\r\n      <OutlineNumber>${index + 1}</OutlineNumber>\r\n      <OutlineLevel>${task.level || 0}</OutlineLevel>\r\n      <Priority>500</Priority>\r\n      <Start>${task.startDate ? formatMSDate(task.startDate) : ''}</Start>\r\n      <Finish>${task.endDate ? formatMSDate(task.endDate) : ''}</Finish>\r\n      <Duration>PT${duration * 8}H0M0S</Duration>\r\n      <DurationFormat>7</DurationFormat>\r\n      <Work>PT${duration * 8}H0M0S</Work>\r\n      <Stop>${task.endDate ? formatMSDate(task.endDate) : ''}</Stop>\r\n      <Resume>${task.startDate ? formatMSDate(task.startDate) : ''}</Resume>\r\n      <ResumeValid>0</ResumeValid>\r\n      <EffortDriven>1</EffortDriven>\r\n      <Recurring>0</Recurring>\r\n      <OverAllocated>0</OverAllocated>\r\n      <Estimated>0</Estimated>\r\n      <Milestone>${task.isMilestone ? '1' : '0'}</Milestone>\r\n      <Summary>${(task.subtasks && task.subtasks.length > 0) ? '1' : '0'}</Summary>\r\n      <Critical>${task.isCriticalPath ? '1' : '0'}</Critical>\r\n      <IsSubproject>0</IsSubproject>\r\n      <IsSubprojectReadOnly>0</IsSubprojectReadOnly>\r\n      <ExternalTask>0</ExternalTask>\r\n      <EarlyStart>${task.startDate ? formatMSDate(task.startDate) : ''}</EarlyStart>\r\n      <EarlyFinish>${task.endDate ? formatMSDate(task.endDate) : ''}</EarlyFinish>\r\n      <LateStart>${task.startDate ? formatMSDate(task.startDate) : ''}</LateStart>\r\n      <LateFinish>${task.endDate ? formatMSDate(task.endDate) : ''}</LateFinish>\r\n      <StartVariance>0</StartVariance>\r\n      <FinishVariance>0</FinishVariance>\r\n      <WorkVariance>0</WorkVariance>\r\n      <FreeSlack>0</FreeSlack>\r\n      <TotalSlack>0</TotalSlack>\r\n      <FixedCost>0</FixedCost>\r\n      <FixedCostAccrual>3</FixedCostAccrual>\r\n      <PercentComplete>${task.progress}</PercentComplete>\r\n      <PercentWorkComplete>${task.progress}</PercentWorkComplete>\r\n      <Cost>0</Cost>\r\n      <OvertimeCost>0</OvertimeCost>\r\n      <OvertimeWork>PT0H0M0S</OvertimeWork>\r\n      <ActualStart>${task.progress > 0 && task.startDate ? formatMSDate(task.startDate) : ''}</ActualStart>\r\n      <ActualFinish>${task.progress === 100 && task.endDate ? formatMSDate(task.endDate) : ''}</ActualFinish>\r\n      <ActualDuration>PT${Math.round(duration * task.progress / 100) * 8}H0M0S</ActualDuration>\r\n      <ActualCost>0</ActualCost>\r\n      <ActualOvertimeCost>0</ActualOvertimeCost>\r\n      <ActualWork>PT${Math.round(duration * task.progress / 100) * 8}H0M0S</ActualWork>\r\n      <ActualOvertimeWork>PT0H0M0S</ActualOvertimeWork>\r\n      <RegularWork>PT${duration * 8}H0M0S</RegularWork>\r\n      <RemainingDuration>PT${Math.round(duration * (100 - task.progress) / 100) * 8}H0M0S</RemainingDuration>\r\n      <RemainingCost>0</RemainingCost>\r\n      <RemainingWork>PT${Math.round(duration * (100 - task.progress) / 100) * 8}H0M0S</RemainingWork>\r\n      <RemainingOvertimeCost>0</RemainingOvertimeCost>\r\n      <RemainingOvertimeWork>PT0H0M0S</RemainingOvertimeWork>\r\n      <ACWP>0</ACWP>\r\n      <CV>0</CV>\r\n      <ConstraintType>0</ConstraintType>\r\n      <CalendarUID>-1</CalendarUID>\r\n      <LevelAssignments>1</LevelAssignments>\r\n      <LevelingCanSplit>1</LevelingCanSplit>\r\n      <LevelingDelay>0</LevelingDelay>\r\n      <LevelingDelayFormat>8</LevelingDelayFormat>\r\n      <IgnoreResourceCalendar>0</IgnoreResourceCalendar>\r\n      <HideBar>0</HideBar>\r\n      <Rollup>0</Rollup>\r\n      <BCWS>0</BCWS>\r\n      <BCWP>0</BCWP>\r\n      <PhysicalPercentComplete>0</PhysicalPercentComplete>\r\n      <EarnedValueMethod>0</EarnedValueMethod>\r\n      <IsPublished>1</IsPublished>\r\n      <CommitmentType>0</CommitmentType>${predecessorLinks}\r\n    </Task>`;\r\n    }).join('');\r\n\r\n    // Complete MS Project XML structure\r\n    const xml = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/project\">\r\n  <SaveVersion>14</SaveVersion>\r\n  <Name>${projectName.replace(/[<>&'\"]/g, c => ({ '<': '&lt;', '>': '&gt;', '&': '&amp;', \"'\": '&apos;', '\"': '&quot;' })[c] || c)}</Name>\r\n  <Title>${projectName.replace(/[<>&'\"]/g, c => ({ '<': '&lt;', '>': '&gt;', '&': '&amp;', \"'\": '&apos;', '\"': '&quot;' })[c] || c)}</Title>\r\n  <CreationDate>${formatMSDate(new Date())}</CreationDate>\r\n  <LastSaved>${formatMSDate(new Date())}</LastSaved>\r\n  <ScheduleFromStart>1</ScheduleFromStart>\r\n  <StartDate>${formatMSDate(projectStart)}</StartDate>\r\n  <FinishDate>${formatMSDate(projectEnd)}</FinishDate>\r\n  <FYStartDate>1</FYStartDate>\r\n  <CriticalSlackLimit>0</CriticalSlackLimit>\r\n  <CurrencyDigits>2</CurrencyDigits>\r\n  <CurrencySymbol>$</CurrencySymbol>\r\n  <CurrencyCode>USD</CurrencyCode>\r\n  <CurrencySymbolPosition>0</CurrencySymbolPosition>\r\n  <CalendarUID>1</CalendarUID>\r\n  <DefaultStartTime>08:00:00</DefaultStartTime>\r\n  <DefaultFinishTime>17:00:00</DefaultFinishTime>\r\n  <MinutesPerDay>480</MinutesPerDay>\r\n  <MinutesPerWeek>2400</MinutesPerWeek>\r\n  <DaysPerMonth>20</DaysPerMonth>\r\n  <DefaultTaskType>1</DefaultTaskType>\r\n  <DefaultFixedCostAccrual>3</DefaultFixedCostAccrual>\r\n  <DefaultStandardRate>0</DefaultStandardRate>\r\n  <DefaultOvertimeRate>0</DefaultOvertimeRate>\r\n  <DurationFormat>7</DurationFormat>\r\n  <WorkFormat>2</WorkFormat>\r\n  <EditableActualCosts>0</EditableActualCosts>\r\n  <HonorConstraints>1</HonorConstraints>\r\n  <InsertedProjectsLikeSummary>1</InsertedProjectsLikeSummary>\r\n  <MultipleCriticalPaths>0</MultipleCriticalPaths>\r\n  <NewTasksEffortDriven>1</NewTasksEffortDriven>\r\n  <NewTasksEstimated>1</NewTasksEstimated>\r\n  <SplitsInProgressTasks>1</SplitsInProgressTasks>\r\n  <SpreadActualCost>0</SpreadActualCost>\r\n  <SpreadPercentComplete>0</SpreadPercentComplete>\r\n  <TaskUpdatesResource>1</TaskUpdatesResource>\r\n  <FiscalYearStart>0</FiscalYearStart>\r\n  <WeekStartDay>1</WeekStartDay>\r\n  <MoveCompletedEndsBack>0</MoveCompletedEndsBack>\r\n  <MoveRemainingStartsBack>0</MoveRemainingStartsBack>\r\n  <MoveRemainingStartsForward>0</MoveRemainingStartsForward>\r\n  <MoveCompletedEndsForward>0</MoveCompletedEndsForward>\r\n  <BaselineForEarnedValue>0</BaselineForEarnedValue>\r\n  <AutoAddNewResourcesAndTasks>1</AutoAddNewResourcesAndTasks>\r\n  <CurrentDate>${formatMSDate(new Date())}</CurrentDate>\r\n  <MicrosoftProjectServerURL>1</MicrosoftProjectServerURL>\r\n  <Autolink>1</Autolink>\r\n  <NewTaskStartDate>0</NewTaskStartDate>\r\n  <DefaultTaskEVMethod>0</DefaultTaskEVMethod>\r\n  <ProjectExternallyEdited>0</ProjectExternallyEdited>\r\n  <ExtendedCreationDate>${formatMSDate(new Date())}</ExtendedCreationDate>\r\n  <ActualsInSync>0</ActualsInSync>\r\n  <RemoveFileProperties>0</RemoveFileProperties>\r\n  <AdminProject>0</AdminProject>\r\n  <Calendars>\r\n    <Calendar>\r\n      <UID>1</UID>\r\n      <Name>Standard</Name>\r\n      <IsBaseCalendar>1</IsBaseCalendar>\r\n      <IsBaselineCalendar>0</IsBaselineCalendar>\r\n      <BaseCalendarUID>-1</BaseCalendarUID>\r\n      <WeekDays>\r\n        <WeekDay>\r\n          <DayType>1</DayType>\r\n          <DayWorking>0</DayWorking>\r\n        </WeekDay>\r\n        <WeekDay>\r\n          <DayType>2</DayType>\r\n          <DayWorking>1</DayWorking>\r\n          <WorkingTimes>\r\n            <WorkingTime>\r\n              <FromTime>08:00:00</FromTime>\r\n              <ToTime>12:00:00</ToTime>\r\n            </WorkingTime>\r\n            <WorkingTime>\r\n              <FromTime>13:00:00</FromTime>\r\n              <ToTime>17:00:00</ToTime>\r\n            </WorkingTime>\r\n          </WorkingTimes>\r\n        </WeekDay>\r\n        <WeekDay>\r\n          <DayType>3</DayType>\r\n          <DayWorking>1</DayWorking>\r\n          <WorkingTimes>\r\n            <WorkingTime>\r\n              <FromTime>08:00:00</FromTime>\r\n              <ToTime>12:00:00</ToTime>\r\n            </WorkingTime>\r\n            <WorkingTime>\r\n              <FromTime>13:00:00</FromTime>\r\n              <ToTime>17:00:00</ToTime>\r\n            </WorkingTime>\r\n          </WorkingTimes>\r\n        </WeekDay>\r\n        <WeekDay>\r\n          <DayType>4</DayType>\r\n          <DayWorking>1</DayWorking>\r\n          <WorkingTimes>\r\n            <WorkingTime>\r\n              <FromTime>08:00:00</FromTime>\r\n              <ToTime>12:00:00</ToTime>\r\n            </WorkingTime>\r\n            <WorkingTime>\r\n              <FromTime>13:00:00</FromTime>\r\n              <ToTime>17:00:00</ToTime>\r\n            </WorkingTime>\r\n          </WorkingTimes>\r\n        </WeekDay>\r\n        <WeekDay>\r\n          <DayType>5</DayType>\r\n          <DayWorking>1</DayWorking>\r\n          <WorkingTimes>\r\n            <WorkingTime>\r\n              <FromTime>08:00:00</FromTime>\r\n              <ToTime>12:00:00</ToTime>\r\n            </WorkingTime>\r\n            <WorkingTime>\r\n              <FromTime>13:00:00</FromTime>\r\n              <ToTime>17:00:00</ToTime>\r\n            </WorkingTime>\r\n          </WorkingTimes>\r\n        </WeekDay>\r\n        <WeekDay>\r\n          <DayType>6</DayType>\r\n          <DayWorking>1</DayWorking>\r\n          <WorkingTimes>\r\n            <WorkingTime>\r\n              <FromTime>08:00:00</FromTime>\r\n              <ToTime>12:00:00</ToTime>\r\n            </WorkingTime>\r\n            <WorkingTime>\r\n              <FromTime>13:00:00</FromTime>\r\n              <ToTime>17:00:00</ToTime>\r\n            </WorkingTime>\r\n          </WorkingTimes>\r\n        </WeekDay>\r\n        <WeekDay>\r\n          <DayType>7</DayType>\r\n          <DayWorking>0</DayWorking>\r\n        </WeekDay>\r\n      </WeekDays>\r\n    </Calendar>\r\n  </Calendars>\r\n  <Tasks>${xmlTasks}\r\n  </Tasks>\r\n</Project>`;\r\n\r\n    // Download the file\r\n    const blob = new Blob([xml], { type: 'application/xml;charset=utf-8;' });\r\n    const link = document.createElement('a');\r\n    link.href = URL.createObjectURL(blob);\r\n    link.download = filename;\r\n    link.click();\r\n    URL.revokeObjectURL(link.href);\r\n  },\r\n\r\n  /**\r\n   * Calculate Critical Path Method (CPM) - identifies tasks with zero slack\r\n   * @param tasks - All tasks\r\n   * @returns Array of task IDs on the critical path\r\n   */\r\n  calculateCriticalPath: (tasks: Task[]): string[] => {\r\n    const flat = ganttUtils.flattenTasks(tasks);\r\n    const tasksWithDates = flat.filter(t => t.startDate && t.endDate);\r\n\r\n    if (tasksWithDates.length === 0) return [];\r\n\r\n    // Step 1: Calculate Early Start (ES) and Early Finish (EF) - Forward Pass\r\n    const earlyDates = new Map<string, { es: number; ef: number }>();\r\n\r\n    const calculateEarlyDates = (task: Task): void => {\r\n      if (earlyDates.has(task.id)) return;\r\n\r\n      const duration = task.startDate && task.endDate\r\n        ? ganttUtils.calculateDuration(task.startDate, task.endDate)\r\n        : 0;\r\n\r\n      let es = 0;\r\n\r\n      // If task has dependencies, ES = max(EF of all predecessors)\r\n      if (task.dependencies && task.dependencies.length > 0) {\r\n        for (const depId of task.dependencies) {\r\n          const depTask = flat.find(t => t.id === depId);\r\n          if (depTask) {\r\n            calculateEarlyDates(depTask);\r\n            const depEF = earlyDates.get(depId)?.ef || 0;\r\n            es = Math.max(es, depEF);\r\n          }\r\n        }\r\n      }\r\n\r\n      const ef = es + duration;\r\n      earlyDates.set(task.id, { es, ef });\r\n    };\r\n\r\n    tasksWithDates.forEach(calculateEarlyDates);\r\n\r\n    // Step 2: Find project end date (max EF)\r\n    const projectEnd = Math.max(...Array.from(earlyDates.values()).map(d => d.ef));\r\n\r\n    // Step 3: Calculate Late Start (LS) and Late Finish (LF) - Backward Pass\r\n    const lateDates = new Map<string, { ls: number; lf: number }>();\r\n\r\n    const calculateLateDates = (task: Task): void => {\r\n      if (lateDates.has(task.id)) return;\r\n\r\n      const duration = task.startDate && task.endDate\r\n        ? ganttUtils.calculateDuration(task.startDate, task.endDate)\r\n        : 0;\r\n\r\n      // Find all tasks that depend on this task\r\n      const successors = flat.filter(t =>\r\n        t.dependencies && t.dependencies.includes(task.id)\r\n      );\r\n\r\n      let lf = projectEnd;\r\n\r\n      // If task has successors, LF = min(LS of all successors)\r\n      if (successors.length > 0) {\r\n        for (const successor of successors) {\r\n          calculateLateDates(successor);\r\n          const succLS = lateDates.get(successor.id)?.ls || 0;\r\n          lf = Math.min(lf, succLS);\r\n        }\r\n      }\r\n\r\n      const ls = lf - duration;\r\n      lateDates.set(task.id, { ls, lf });\r\n    };\r\n\r\n    tasksWithDates.forEach(calculateLateDates);\r\n\r\n    // Step 4: Calculate Slack (Float) = LS - ES = LF - EF\r\n    // Tasks with slack = 0 are on the critical path\r\n    const criticalPath: string[] = [];\r\n\r\n    for (const task of tasksWithDates) {\r\n      const early = earlyDates.get(task.id);\r\n      const late = lateDates.get(task.id);\r\n\r\n      if (early && late) {\r\n        const slack = late.ls - early.es;\r\n        if (Math.abs(slack) < 0.01) { // Float point comparison\r\n          criticalPath.push(task.id);\r\n        }\r\n      }\r\n    }\r\n\r\n    return criticalPath;\r\n  },\r\n\r\n  /**\r\n   * Calculate slack (float) time for a task\r\n   * @param tasks - All tasks\r\n   * @param taskId - Task ID to calculate slack for\r\n   * @returns Slack in days, or null if cannot be calculated\r\n   */\r\n  calculateSlack: (tasks: Task[], taskId: string): number | null => {\r\n    const task = ganttUtils.findTaskById(tasks, taskId);\r\n    if (!task || !task.startDate || !task.endDate) return null;\r\n\r\n    const criticalPath = ganttUtils.calculateCriticalPath(tasks);\r\n\r\n    // If on critical path, slack is 0\r\n    if (criticalPath.includes(taskId)) return 0;\r\n\r\n    // Otherwise calculate slack using CPM algorithm\r\n    // This is simplified - in production would use full CPM\r\n    // For now, we approximate: slack = time until next dependent task\r\n    const dependents = ganttUtils.getDependentTasks(tasks, taskId);\r\n\r\n    if (dependents.length === 0) {\r\n      // No dependents = float until project end\r\n      const projectEnd = ganttUtils.getLatestEndDate(tasks);\r\n      if (!projectEnd) return null;\r\n\r\n      const daysToEnd = ganttUtils.calculateDuration(task.endDate, projectEnd);\r\n      return Math.max(0, daysToEnd);\r\n    }\r\n\r\n    // Find earliest dependent\r\n    const earliestDepStart = dependents\r\n      .filter(d => d.startDate)\r\n      .map(d => d.startDate!.getTime())\r\n      .sort((a, b) => a - b)[0];\r\n\r\n    if (!earliestDepStart) return null;\r\n\r\n    const slack = ganttUtils.calculateDuration(\r\n      task.endDate,\r\n      new Date(earliestDepStart)\r\n    );\r\n\r\n    return Math.max(0, slack);\r\n  },\r\n\r\n  /**\r\n   * Check if a task is on the critical path\r\n   * @param tasks - All tasks\r\n   * @param taskId - Task ID to check\r\n   * @returns True if task is on critical path\r\n   */\r\n  isOnCriticalPath: (tasks: Task[], taskId: string): boolean => {\r\n    const criticalPath = ganttUtils.calculateCriticalPath(tasks);\r\n    return criticalPath.includes(taskId);\r\n  },\r\n\r\n  /**\r\n   * Auto-schedule dependent tasks when a task changes\r\n   * v0.13.3: Now takes optional daysDelta to shift dependents by same amount (preserves gap)\r\n   * @param tasks - All tasks\r\n   * @param changedTaskId - Task that was changed\r\n   * @param daysDelta - Optional: days the parent moved (for preserving relative gaps)\r\n   * @returns Updated tasks with rescheduled dependencies\r\n   */\r\n  autoScheduleDependents: (tasks: Task[], changedTaskId: string, daysDelta?: number): Task[] => {\r\n    const changedTask = ganttUtils.findTaskById(tasks, changedTaskId);\r\n    if (!changedTask || !changedTask.endDate) return tasks;\r\n\r\n    const dependents = ganttUtils.getDependentTasks(tasks, changedTaskId);\r\n    if (dependents.length === 0) return tasks;\r\n\r\n    let updatedTasks = [...tasks];\r\n\r\n    // For each dependent, shift by the same daysDelta (preserves relative gap)\r\n    for (const dependent of dependents) {\r\n      if (!dependent.startDate || !dependent.endDate) continue;\r\n\r\n      // Calculate duration of dependent task\r\n      const duration = ganttUtils.calculateDuration(dependent.startDate, dependent.endDate);\r\n\r\n      let newStartDate: Date;\r\n\r\n      if (daysDelta !== undefined) {\r\n        // v0.13.3: Shift by same delta as parent (preserves relative gap)\r\n        newStartDate = new Date(dependent.startDate);\r\n        newStartDate.setDate(newStartDate.getDate() + daysDelta);\r\n      } else {\r\n        // Legacy behavior: New start date = changed task end date + 1 day\r\n        newStartDate = new Date(changedTask.endDate);\r\n        newStartDate.setDate(newStartDate.getDate() + 1);\r\n      }\r\n\r\n      // Calculate new end date based on duration\r\n      const newEndDate = ganttUtils.calculateEndDate(newStartDate, duration);\r\n\r\n      // Update the task recursively in nested structure\r\n      const updateTaskRec = (tasks: Task[]): Task[] => {\r\n        return tasks.map(t => {\r\n          if (t.id === dependent.id) {\r\n            return { ...t, startDate: newStartDate, endDate: newEndDate };\r\n          }\r\n          if (t.subtasks) {\r\n            return { ...t, subtasks: updateTaskRec(t.subtasks) };\r\n          }\r\n          return t;\r\n        });\r\n      };\r\n\r\n      updatedTasks = updateTaskRec(updatedTasks);\r\n\r\n      // Recursively update dependents of this task (pass same delta)\r\n      updatedTasks = ganttUtils.autoScheduleDependents(updatedTasks, dependent.id, daysDelta);\r\n    }\r\n\r\n    return updatedTasks;\r\n  },\r\n\r\n  /**\r\n   * v0.13.0: Calculate cascade preview positions for dependent tasks during drag\r\n   * v0.13.3: FIXED - Preview shows ONLY actual movement needed (keeps same relative gap)\r\n   * Dependents shift by the same daysDelta as their parent, preserving the original gap\r\n   * @param tasks - All tasks (nested structure)\r\n   * @param draggedTaskId - Task being dragged\r\n   * @param daysDelta - How many days the dragged task is being moved\r\n   * @param flatTasks - Flattened task list with row indices\r\n   * @param timelineStartDate - Start date of the timeline\r\n   * @param scaledDayWidth - Width of one day in pixels (already includes zoom: dayWidth * zoom)\r\n   * @param rowHeight - Height of each row\r\n   * @param headerHeight - Height of the header\r\n   * @returns Array of DependentTaskPreview objects\r\n   */\r\n  calculateCascadePreview: (\r\n    tasks: Task[],\r\n    draggedTaskId: string,\r\n    daysDelta: number,\r\n    flatTasks: Task[],\r\n    timelineStartDate: Date,\r\n    scaledDayWidth: number, // Note: This already includes zoom (dayWidth * zoom)\r\n    rowHeight: number,\r\n    headerHeight: number\r\n  ): Array<{\r\n    taskId: string;\r\n    taskName: string;\r\n    originalX: number;\r\n    previewX: number;\r\n    width: number;\r\n    y: number;\r\n    rowIndex: number;\r\n    daysDelta: number;\r\n    color?: string;\r\n  }> => {\r\n    if (daysDelta === 0) return [];\r\n\r\n    const previews: Array<{\r\n      taskId: string;\r\n      taskName: string;\r\n      originalX: number;\r\n      previewX: number;\r\n      width: number;\r\n      y: number;\r\n      rowIndex: number;\r\n      daysDelta: number;\r\n      color?: string;\r\n    }> = [];\r\n\r\n    const rangeStart = timelineStartDate.getTime();\r\n    const msPerDay = 1000 * 60 * 60 * 24;\r\n\r\n    // Get dragged task info\r\n    const draggedTask = ganttUtils.findTaskById(tasks, draggedTaskId);\r\n    if (!draggedTask || !draggedTask.endDate) return [];\r\n\r\n    // v0.13.3: Dependents move by the SAME daysDelta as their parent\r\n    // This preserves the relative gap between tasks, making preview accurate\r\n    const getAffectedTasks = (parentTaskId: string, parentDelta: number, visited = new Set<string>()): void => {\r\n      if (visited.has(parentTaskId)) return; // Prevent infinite loops\r\n      visited.add(parentTaskId);\r\n\r\n      const dependents = ganttUtils.getDependentTasks(tasks, parentTaskId);\r\n\r\n      for (const dependent of dependents) {\r\n        if (!dependent.startDate || !dependent.endDate) continue;\r\n\r\n        // Find row index in flattened list\r\n        const rowIndex = flatTasks.findIndex(t => t.id === dependent.id);\r\n        if (rowIndex === -1) continue;\r\n\r\n        // Calculate task duration and current position\r\n        const taskStart = dependent.startDate.getTime();\r\n        const taskEnd = dependent.endDate.getTime();\r\n        const durationDays = (taskEnd - taskStart) / msPerDay;\r\n\r\n        // Original X position\r\n        const daysFromStart = (taskStart - rangeStart) / msPerDay;\r\n        const originalX = daysFromStart * scaledDayWidth;\r\n\r\n        // v0.13.3: Preview X = Original X + daysDelta (same shift as parent)\r\n        // This shows the task moving exactly with its parent, preserving the gap\r\n        const previewX = originalX + (parentDelta * scaledDayWidth);\r\n\r\n        // Width calculation - minimum 1 day width for visibility\r\n        const width = Math.max(durationDays * scaledDayWidth, scaledDayWidth);\r\n\r\n        // Y position - same formula as Timeline.tsx: HEADER_HEIGHT + index * ROW_HEIGHT + 12\r\n        const y = headerHeight + rowIndex * rowHeight + 12;\r\n\r\n        previews.push({\r\n          taskId: dependent.id,\r\n          taskName: dependent.name,\r\n          originalX,\r\n          previewX,\r\n          width,\r\n          y,\r\n          rowIndex,\r\n          daysDelta: parentDelta,\r\n          color: dependent.color,\r\n        });\r\n\r\n        // Recursively get dependents of this task (same delta propagates)\r\n        getAffectedTasks(dependent.id, parentDelta, visited);\r\n      }\r\n    };\r\n\r\n    getAffectedTasks(draggedTaskId, daysDelta);\r\n\r\n    return previews;\r\n  },\r\n\r\n  /**\r\n   * 🚀 KILLER FEATURE #3: Split a task (create GAP in the middle, like Bryntum/DHTMLX)\r\n   * Same task, but work is paused for some days then continues\r\n   * Example: Jan 1-10 → Split at Jan 5 with 3 day gap → Jan 1-4 [GAP] Jan 8-13\r\n   * @param tasks - All tasks\r\n   * @param taskId - Task to split\r\n   * @param splitDate - Date where gap starts\r\n   * @param gapDays - Number of days to pause (default: 3)\r\n   * @returns Updated tasks with split segments\r\n   */\r\n  splitTask: (tasks: Task[], taskId: string, splitDate: Date, gapDays = 3): Task[] => {\r\n    const task = ganttUtils.findTaskById(tasks, taskId);\r\n    if (!task || !task.startDate || !task.endDate) return tasks;\r\n\r\n    // Validate split date is within task range\r\n    if (splitDate <= task.startDate || splitDate >= task.endDate) {\r\n      console.warn('Split date must be between task start and end dates');\r\n      return tasks;\r\n    }\r\n\r\n    // Calculate the split point (end of first segment)\r\n    const firstSegmentEnd = new Date(splitDate);\r\n    firstSegmentEnd.setDate(firstSegmentEnd.getDate() - 1); // Day before split\r\n\r\n    // Calculate second segment start (after gap)\r\n    const secondSegmentStart = new Date(splitDate);\r\n    secondSegmentStart.setDate(secondSegmentStart.getDate() + gapDays);\r\n\r\n    // Calculate new end date (original end + gap days to preserve work duration)\r\n    const newEndDate = new Date(task.endDate);\r\n    newEndDate.setDate(newEndDate.getDate() + gapDays);\r\n\r\n    // Create segments array\r\n    const segments: TaskSegment[] = [\r\n      {\r\n        startDate: new Date(task.startDate),\r\n        endDate: firstSegmentEnd,\r\n      },\r\n      {\r\n        startDate: secondSegmentStart,\r\n        endDate: newEndDate,\r\n      },\r\n    ];\r\n\r\n    // Update task with segments\r\n    const updateTaskRec = (tasksList: Task[]): Task[] => {\r\n      return tasksList.map(t => {\r\n        if (t.id === task.id) {\r\n          return {\r\n            ...t,\r\n            endDate: newEndDate, // Overall end date extends\r\n            segments, // Add segments to show gaps\r\n          };\r\n        }\r\n        if (t.subtasks) {\r\n          return { ...t, subtasks: updateTaskRec(t.subtasks) };\r\n        }\r\n        return t;\r\n      });\r\n    };\r\n\r\n    return updateTaskRec(tasks);\r\n  },\r\n};\r\n","import { useMemo, useCallback, useState } from 'react';\nimport { TimeScale, Task, GanttTemplates, DependentTaskPreview } from './types';\nimport { TaskBar } from './TaskBar';\nimport { DependencyLine } from './DependencyLine';\nimport { Milestone } from './Milestone';\nimport { ganttUtils } from './ganttUtils';\n\ninterface TimelineProps {\n  tasks: Task[];\n  theme: any;\n  rowHeight: number;\n  timeScale: TimeScale;\n  startDate: Date;\n  endDate: Date;\n  zoom: number;\n  templates: Required<GanttTemplates>; // v0.8.0\n  onTaskClick?: (task: Task) => void;\n  onTaskDblClick?: (task: Task) => void; // v0.8.0\n  onTaskContextMenu?: (task: Task, event: React.MouseEvent) => void; // v0.8.0\n  onTaskDateChange?: (task: Task, newStart: Date, newEnd: Date) => void;\n  onDependencyCreate?: (fromTask: Task, toTaskId: string) => void;\n  onDependencyDelete?: (taskId: string, dependencyId: string) => void;\n}\n\nexport interface TaskPosition {\n  id: string;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\nexport function Timeline({\n  tasks,\n  theme,\n  rowHeight: ROW_HEIGHT,\n  timeScale,\n  startDate,\n  endDate,\n  zoom,\n  templates,\n  onTaskClick,\n  onTaskDblClick, // v0.8.0\n  onTaskContextMenu, // v0.8.0\n  onTaskDateChange,\n  onDependencyCreate,\n  onDependencyDelete,\n}: TimelineProps) {\n  const HEADER_HEIGHT = 48; // Must match TaskGrid's HEADER_HEIGHT for alignment\n\n  // v0.13.0: State for dependency cascade preview\n  const [cascadePreviews, setCascadePreviews] = useState<DependentTaskPreview[]>([]);\n\n  // Calculate dimensions\n  const totalDays = Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));\n  const dayWidth = timeScale === 'day' ? 60 : timeScale === 'week' ? 20 : 8;\n  const timelineWidth = totalDays * dayWidth * zoom;\n\n  // Get week number - moved before useMemo\n  const getWeekNumber = (date: Date): number => {\n    const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n    const dayNum = d.getUTCDay() || 7;\n    d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n    const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n    return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n  };\n\n  // Check if date is weekend\n  const isWeekend = (date: Date): boolean => {\n    const day = date.getDay();\n    return day === 0 || day === 6;\n  };\n\n  // Convert pixel position to date\n  const pixelToDate = useCallback((pixelX: number): Date => {\n    const days = Math.round(pixelX / (dayWidth * zoom));\n    const newDate = new Date(startDate);\n    newDate.setDate(newDate.getDate() + days);\n    return newDate;\n  }, [startDate, dayWidth, zoom]);\n\n  // Handle click on timeline to create task bar for tasks without dates\n  const handleTimelineClick = useCallback((e: React.MouseEvent<SVGRectElement>, task: Task) => {\n    // Only create bar if task doesn't have dates (no existing bar)\n    if (task.startDate && task.endDate) {\n      return; // Task already has dates, do nothing\n    }\n\n    const svgElement = e.currentTarget.ownerSVGElement;\n    if (!svgElement) return;\n\n    const point = svgElement.createSVGPoint();\n    point.x = e.clientX;\n    point.y = e.clientY;\n    const svgPoint = point.matrixTransform(svgElement.getScreenCTM()?.inverse());\n\n    // Calculate the clicked date\n    const clickedDate = pixelToDate(svgPoint.x);\n\n    // Create a 1-day task bar\n    const endDate = new Date(clickedDate);\n    endDate.setDate(endDate.getDate() + 1);\n\n    // Call the date change handler to create the task bar\n    onTaskDateChange?.(task, clickedDate, endDate);\n  }, [pixelToDate, onTaskDateChange]);\n\n  // Calculate parent task dates from subtasks and flatten for rendering\n  const flatTasks = useMemo(() => {\n    // Helper function to calculate parent dates from subtasks\n    // v0.11.9: IMPORTANT - Only calculate dates if parent doesn't already have dates set\n    // This allows AI commands and manual edits to move parent tasks independently\n    const calculateParentDates = (tasks: Task[]): Task[] => {\n      return tasks.map(task => {\n        // If task has subtasks, calculate dates from them\n        if (task.subtasks && task.subtasks.length > 0) {\n          // First, recursively calculate dates for nested subtasks\n          const updatedSubtasks = calculateParentDates(task.subtasks);\n\n          // Filter subtasks that have dates\n          const subtasksWithDates = updatedSubtasks.filter(st => st.startDate && st.endDate);\n\n          if (subtasksWithDates.length > 0) {\n            // Calculate earliest start and latest end from subtasks\n            const startDates = subtasksWithDates.map(st => st.startDate!.getTime());\n            const endDates = subtasksWithDates.map(st => st.endDate!.getTime());\n\n            const earliestStart = new Date(Math.min(...startDates));\n            const latestEnd = new Date(Math.max(...endDates));\n\n            // v0.11.9: Only set dates if parent doesn't already have them\n            // This preserves dates set by AI commands or manual edits\n            return {\n              ...task,\n              subtasks: updatedSubtasks,\n              startDate: task.startDate || earliestStart,\n              endDate: task.endDate || latestEnd,\n            };\n          }\n\n          return { ...task, subtasks: updatedSubtasks };\n        }\n\n        return task;\n      });\n    };\n\n    // Helper function to flatten tasks for rendering\n    const flattenTasks = (tasks: Task[], result: Task[] = []): Task[] => {\n      for (const task of tasks) {\n        result.push(task);\n        // Only include subtasks if parent is expanded (or if isExpanded is undefined, default to true)\n        if (task.subtasks && task.subtasks.length > 0 && (task.isExpanded === undefined || task.isExpanded)) {\n          flattenTasks(task.subtasks, result);\n        }\n      }\n      return result;\n    };\n\n    // Apply parent date calculation before flattening\n    const tasksWithCalculatedDates = calculateParentDates(tasks);\n    const flattened = flattenTasks(tasksWithCalculatedDates);\n\n    return flattened;\n  }, [tasks]);\n\n  // Calculate task position\n  const getTaskPosition = useCallback((task: Task) => {\n    // Return null position for tasks without dates\n    if (!task.startDate || !task.endDate) {\n      return { x: 0, width: 0 };\n    }\n\n    const taskStart = task.startDate.getTime();\n    const taskEnd = task.endDate.getTime();\n    const rangeStart = startDate.getTime();\n\n    const daysFromStart = (taskStart - rangeStart) / (1000 * 60 * 60 * 24);\n    const duration = (taskEnd - taskStart) / (1000 * 60 * 60 * 24);\n\n    const x = daysFromStart * dayWidth * zoom;\n    // Minimum width: allow 1 day minimum, but ensure at least 40px for visibility\n    const minWidth = Math.max(dayWidth * zoom, 40);\n    const width = Math.max(duration * dayWidth * zoom, minWidth);\n\n    return { x, width };\n  }, [startDate, dayWidth, zoom]);\n\n  // Build task positions map for collision detection\n  // v0.13.7: Y positions no longer include HEADER_HEIGHT (header is now separate sticky element)\n  const taskPositions = useMemo((): TaskPosition[] => {\n    return flatTasks\n      .filter(task => task.startDate && task.endDate) // Only include tasks with dates\n      .map((task) => {\n        const { x, width } = getTaskPosition(task);\n        const actualIndex = flatTasks.findIndex(t => t.id === task.id);\n        const y = actualIndex * ROW_HEIGHT + 12;\n        return {\n          id: task.id,\n          x,\n          y,\n          width,\n          height: 32, // TaskBar height\n        };\n      });\n  }, [flatTasks, getTaskPosition]);\n\n  // v0.13.0: Handle drag move for dependency cascade preview\n  const handleTaskDragMove = useCallback((taskId: string, daysDelta: number, isDragging: boolean) => {\n    if (!isDragging || daysDelta === 0) {\n      setCascadePreviews([]);\n      return;\n    }\n\n    // Calculate cascade preview positions for all dependent tasks\n    const previews = ganttUtils.calculateCascadePreview(\n      tasks,\n      taskId,\n      daysDelta,\n      flatTasks,\n      startDate,\n      dayWidth * zoom,\n      ROW_HEIGHT,\n      HEADER_HEIGHT\n    );\n\n    setCascadePreviews(previews);\n  }, [tasks, flatTasks, startDate, dayWidth, zoom, ROW_HEIGHT, HEADER_HEIGHT]);\n\n  // Generate timeline headers\n  const headers = useMemo(() => {\n    const result: Array<{ date: Date; label: string; x: number }> = [];\n    const current = new Date(startDate);\n    let index = 0;\n\n    while (current <= endDate) {\n      const daysFromStart =\n        (current.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24);\n      const x = daysFromStart * dayWidth * zoom;\n\n      if (timeScale === 'day') {\n        result.push({\n          date: new Date(current),\n          label: current.toLocaleDateString('en-US', { day: 'numeric', month: 'short' }),\n          x,\n        });\n        current.setDate(current.getDate() + 1);\n      } else if (timeScale === 'week') {\n        const weekNum = getWeekNumber(current);\n        result.push({\n          date: new Date(current),\n          label: `Week ${weekNum}`,\n          x,\n        });\n        current.setDate(current.getDate() + 7);\n      } else {\n        result.push({\n          date: new Date(current),\n          label: current.toLocaleDateString('en-US', { month: 'short', year: 'numeric' }),\n          x,\n        });\n        current.setMonth(current.getMonth() + 1);\n      }\n      index++;\n    }\n\n    return result;\n  }, [startDate, endDate, timeScale, dayWidth, zoom]);\n\n  // Today position\n  const todayX = useMemo(() => {\n    const today = new Date();\n    const daysFromStart = (today.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24);\n    return daysFromStart * dayWidth * zoom;\n  }, [startDate, dayWidth, zoom]);\n\n  // v0.13.7: Content height calculation (without header - header is now separate)\n  const contentHeight = Math.max(flatTasks.length * ROW_HEIGHT, 600 - HEADER_HEIGHT);\n\n  return (\n    <div\n      className=\"w-full h-full flex flex-col\"\n      data-gantt-chart\n      style={{ backgroundColor: theme.bgPrimary }}\n    >\n      {/* v0.13.7: Sticky Header - stays visible during vertical scroll */}\n      <div\n        style={{\n          position: 'sticky',\n          top: 0,\n          zIndex: 10,\n          backgroundColor: theme.bgGrid,\n          flexShrink: 0,\n          height: `${HEADER_HEIGHT}px`,\n          borderBottom: `1px solid ${theme.border}`,\n          boxSizing: 'border-box', // Border included in height\n        }}\n      >\n        <svg\n          width={Math.max(timelineWidth, 1000)}\n          height={HEADER_HEIGHT - 1} // -1 for border\n          style={{ display: 'block' }}\n        >\n          {/* Header Background */}\n          <rect\n            x={0}\n            y={0}\n            width={Math.max(timelineWidth, 1000)}\n            height={HEADER_HEIGHT}\n            fill={theme.bgGrid}\n          />\n\n          {/* Header Grid Lines and Text */}\n          {headers.map((header, index) => (\n            <g key={`header-${index}`}>\n              {/* Grid line in header - skip first line since TaskGrid border serves as divider */}\n              {index > 0 && (\n                <line\n                  x1={header.x}\n                  y1={0}\n                  x2={header.x}\n                  y2={HEADER_HEIGHT}\n                  stroke={theme.border}\n                  strokeWidth={1}\n                  opacity={0.1}\n                />\n              )}\n\n              {/* Header text - JetBrains Mono for technical/date display */}\n              <text\n                x={header.x + 8}\n                y={HEADER_HEIGHT / 2}\n                fill={theme.textTertiary}\n                fontSize=\"11\"\n                fontFamily=\"'JetBrains Mono', ui-monospace, monospace\"\n                fontWeight=\"500\"\n                dominantBaseline=\"middle\"\n              >\n                {header.label}\n              </text>\n            </g>\n          ))}\n\n          {/* Today marker in header */}\n          {todayX >= 0 && todayX <= timelineWidth && (\n            <circle cx={todayX} cy={HEADER_HEIGHT - 10} r={6} fill={theme.today} opacity={1} />\n          )}\n        </svg>\n      </div>\n\n      {/* Scrollable Content Area */}\n      <svg\n        width={Math.max(timelineWidth, 1000)}\n        height={contentHeight}\n        style={{ display: 'block', flexShrink: 0 }}\n      >\n        <defs>\n          <filter id=\"shadow\">\n            <feDropShadow dx=\"0\" dy=\"1\" stdDeviation=\"2\" floodOpacity=\"0.1\" />\n          </filter>\n\n          {/* Neutral theme: Diagonal stripes pattern for critical/overdue tasks */}\n          <pattern id=\"diagonal-stripes\" width=\"8\" height=\"8\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\">\n            <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"8\" stroke={theme.border} strokeWidth=\"2\" />\n          </pattern>\n        </defs>\n\n        {/* Full SVG Background */}\n        <rect\n          x={0}\n          y={0}\n          width={Math.max(timelineWidth, 1000)}\n          height={contentHeight}\n          fill={theme.bgPrimary}\n        />\n\n        {/* Grid Lines and Weekend Backgrounds - v0.13.7: Adjusted Y positions (no header offset) */}\n        {headers.map((header, index) => {\n          const nextX = headers[index + 1]?.x || timelineWidth;\n          const isWeekendDay = isWeekend(header.date);\n\n          return (\n            <g key={index}>\n              {/* Weekend background - subtle highlight */}\n              {isWeekendDay && (\n                <rect\n                  x={header.x}\n                  y={0}\n                  width={nextX - header.x}\n                  height={flatTasks.length * ROW_HEIGHT}\n                  fill={theme.bgWeekend}\n                  opacity={1}\n                />\n              )}\n\n              {/* Grid line - skip first line since TaskGrid border serves as divider */}\n              {index > 0 && (\n                <line\n                  x1={header.x}\n                  y1={0}\n                  x2={header.x}\n                  y2={flatTasks.length * ROW_HEIGHT}\n                  stroke={theme.border}\n                  strokeWidth={1}\n                  opacity={0.1}\n                />\n              )}\n            </g>\n          );\n        })}\n\n        {/* Today Line - Solid, prominent indicator - v0.13.7: Adjusted Y (no header offset) */}\n        {todayX >= 0 && todayX <= timelineWidth && (\n          <line\n            x1={todayX}\n            y1={0}\n            x2={todayX}\n            y2={flatTasks.length * ROW_HEIGHT}\n            stroke={theme.today}\n            strokeWidth={2}\n            opacity={1}\n          />\n        )}\n\n        {/* Row Backgrounds with Click-to-Create functionality - v0.13.7: Adjusted Y positions */}\n        {flatTasks.map((task, index) => {\n          const hasTaskBar = task.startDate && task.endDate;\n\n          return (\n            <g key={`row-group-${task.id}`}>\n              {/* Background stripe - alternating rows for better readability */}\n              <rect\n                key={`row-${task.id}`}\n                x={0}\n                y={index * ROW_HEIGHT}\n                width={timelineWidth}\n                height={ROW_HEIGHT}\n                fill={index % 2 === 0 ? 'transparent' : theme.bgSecondary}\n                opacity={1}\n                style={{ pointerEvents: 'none' }}\n              />\n\n              {/* Clickable area for tasks without dates */}\n              {!hasTaskBar && (\n                <>\n                  <rect\n                    key={`clickable-${task.id}`}\n                    x={0}\n                    y={index * ROW_HEIGHT}\n                    width={timelineWidth}\n                    height={ROW_HEIGHT}\n                    fill=\"transparent\"\n                    style={{\n                      cursor: 'pointer',\n                      pointerEvents: 'all'\n                    }}\n                    onClick={(e) => handleTimelineClick(e, task)}\n                    onMouseEnter={(e) => {\n                      e.currentTarget.setAttribute('fill', theme.accentLight);\n                      e.currentTarget.setAttribute('opacity', '0.5');\n                    }}\n                    onMouseLeave={(e) => {\n                      e.currentTarget.setAttribute('fill', 'transparent');\n                      e.currentTarget.setAttribute('opacity', '1');\n                    }}\n                  />\n                  {/* Placeholder text for empty tasks */}\n                  <text\n                    key={`placeholder-${task.id}`}\n                    x={todayX > 0 ? todayX : 100}\n                    y={index * ROW_HEIGHT + ROW_HEIGHT / 2}\n                    fill={theme.textTertiary}\n                    fontSize=\"12\"\n                    fontFamily=\"Inter, sans-serif\"\n                    fontStyle=\"italic\"\n                    dominantBaseline=\"middle\"\n                    opacity={0.4}\n                    style={{ pointerEvents: 'none', userSelect: 'none' }}\n                  >\n                    Click to set dates...\n                  </text>\n                </>\n              )}\n            </g>\n          );\n        })}\n\n        {/* Dependencies - v0.13.7: Adjusted Y positions */}\n        {flatTasks.map((task, toIndex) => {\n          if (!task.dependencies || task.dependencies.length === 0) return null;\n          // Skip if task doesn't have dates\n          if (!task.startDate || !task.endDate) return null;\n\n          return task.dependencies.map((depId) => {\n            const depTask = flatTasks.find((t) => t.id === depId);\n            if (!depTask) return null;\n            // Skip if dependency task doesn't have dates\n            if (!depTask.startDate || !depTask.endDate) return null;\n\n            const fromIndex = flatTasks.findIndex((t) => t.id === depId);\n            const fromPos = getTaskPosition(depTask);\n            const toPos = getTaskPosition(task);\n\n            return (\n              <DependencyLine\n                key={`dep-${depId}-${task.id}`}\n                x1={fromPos.x + fromPos.width}\n                y1={fromIndex * ROW_HEIGHT + ROW_HEIGHT / 2}\n                x2={toPos.x}\n                y2={toIndex * ROW_HEIGHT + ROW_HEIGHT / 2}\n                theme={theme}\n                onDelete={() => onDependencyDelete?.(task.id, depId)}\n              />\n            );\n          });\n        })}\n\n        {/* Tasks - v0.13.7: Adjusted Y positions */}\n        {flatTasks.map((task, index) => {\n          // Don't render task bar if task doesn't have dates\n          if (!task.startDate || !task.endDate) {\n            return null;\n          }\n\n          const { x, width } = getTaskPosition(task);\n          const y = index * ROW_HEIGHT + 12;\n\n          // Container phase (has subtasks): render as bracket bar\n          const isContainer = task.subtasks && task.subtasks.length > 0 && !task.isMilestone;\n\n          if (task.isMilestone) {\n            return (\n              <Milestone\n                key={task.id}\n                task={task}\n                x={x + width / 2}\n                y={y + 16}\n                theme={theme}\n                onClick={onTaskClick}\n              />\n            );\n          }\n\n          if (isContainer) {\n            // Render container as elegant bracket bar with task name\n            return (\n              <g key={task.id} onClick={() => onTaskClick?.(task)} style={{ cursor: 'pointer' }}>\n                {/* Background fill - elegant and visible */}\n                <rect\n                  x={x}\n                  y={y}\n                  width={width}\n                  height={32}\n                  fill={theme.primary}\n                  opacity={0.25}\n                  rx={6}\n                />\n                {/* Top bracket line */}\n                <line\n                  x1={x}\n                  y1={y}\n                  x2={x + width}\n                  y2={y}\n                  stroke={theme.primary}\n                  strokeWidth={3}\n                  opacity={0.9}\n                  strokeLinecap=\"round\"\n                />\n                {/* Left vertical */}\n                <line\n                  x1={x}\n                  y1={y}\n                  x2={x}\n                  y2={y + 32}\n                  stroke={theme.primary}\n                  strokeWidth={3}\n                  opacity={0.9}\n                  strokeLinecap=\"round\"\n                />\n                {/* Right vertical */}\n                <line\n                  x1={x + width}\n                  y1={y}\n                  x2={x + width}\n                  y2={y + 32}\n                  stroke={theme.primary}\n                  strokeWidth={3}\n                  opacity={0.9}\n                  strokeLinecap=\"round\"\n                />\n                {/* Bottom bracket line */}\n                <line\n                  x1={x}\n                  y1={y + 32}\n                  x2={x + width}\n                  y2={y + 32}\n                  stroke={theme.primary}\n                  strokeWidth={3}\n                  opacity={0.9}\n                  strokeLinecap=\"round\"\n                />\n                {/* Task name text - Matching TaskBar pattern */}\n                {width > 60 && (\n                  <text\n                    x={x + 12}\n                    y={y + 16}\n                    dominantBaseline=\"middle\"\n                    fill=\"#FFFFFF\"\n                    fontSize=\"13\"\n                    fontWeight=\"500\"\n                    fontFamily=\"Inter, sans-serif\"\n                    style={{ pointerEvents: 'none', userSelect: 'none' }}\n                  >\n                    {task.name}\n                  </text>\n                )}\n              </g>\n            );\n          }\n\n          return (\n            <TaskBar\n              key={task.id}\n              task={task}\n              x={x}\n              y={y}\n              width={width}\n              theme={theme}\n              dayWidth={dayWidth * zoom}\n              startDate={startDate}\n              templates={templates}\n              onClick={onTaskClick}\n              onDoubleClick={onTaskDblClick} // v0.8.0\n              onContextMenu={onTaskContextMenu} // v0.8.0\n              onDateChange={onTaskDateChange}\n              onDependencyCreate={onDependencyCreate}\n              allTaskPositions={taskPositions}\n              onDragMove={handleTaskDragMove} // v0.13.0\n            />\n          );\n        })}\n\n        {/* v0.13.0: Dependency Cascade Preview - Ghost bars showing where dependent tasks will move */}\n        {/* v0.13.4: Simplified - no conflicting animation, direct position */}\n        {/* v0.13.7: Adjusted Y positions for cascade previews */}\n        {cascadePreviews.map((preview) => (\n          <g\n            key={`cascade-preview-${preview.taskId}`}\n            style={{ pointerEvents: 'none' }}\n          >\n            {/* Ghost bar at exact preview position - v0.13.7: Y adjusted (subtract HEADER_HEIGHT) */}\n            <rect\n              x={preview.previewX}\n              y={preview.y - HEADER_HEIGHT}\n              width={preview.width}\n              height={32}\n              rx={8}\n              fill={preview.color || theme.accent}\n              opacity={0.3}\n              stroke={theme.accent}\n              strokeWidth={2}\n              strokeDasharray=\"4 2\"\n            />\n            {/* Days delta label */}\n            {Math.abs(preview.daysDelta) > 0 && (\n              <text\n                x={preview.previewX + preview.width / 2}\n                y={preview.y - HEADER_HEIGHT + 16}\n                textAnchor=\"middle\"\n                dominantBaseline=\"middle\"\n                fill={theme.accent}\n                fontSize=\"10\"\n                fontWeight=\"600\"\n                fontFamily=\"Inter, sans-serif\"\n                style={{ userSelect: 'none' }}\n              >\n                {preview.daysDelta > 0 ? `+${preview.daysDelta}d` : `${preview.daysDelta}d`}\n              </text>\n            )}\n          </g>\n        ))}\n      </svg>\n    </div>\n  );\n}","/**\r\n * ColorPicker Component - v0.11.0\r\n * Professional color selector for tasks with pastel palette\r\n */\r\n\r\nimport { motion } from 'framer-motion';\r\nimport { Check } from 'lucide-react';\r\n\r\nexport interface TaskColor {\r\n  name: string;\r\n  value: string;\r\n  light: string;\r\n}\r\n\r\n// Professional pastel color palette - carefully curated for task management\r\nexport const TASK_COLORS: TaskColor[] = [\r\n  { name: 'Azul', value: '#6366F1', light: '#818CF8' },\r\n  { name: 'Púrpura', value: '#A855F7', light: '#C084FC' },\r\n  { name: 'Rosa', value: '#EC4899', light: '#F472B6' },\r\n  { name: 'Rojo', value: '#EF4444', light: '#F87171' },\r\n  { name: 'Naranja', value: '#F59E0B', light: '#FBBF24' },\r\n  { name: 'Amarillo', value: '#EAB308', light: '#FACC15' },\r\n  { name: 'Lima', value: '#84CC16', light: '#A3E635' },\r\n  { name: 'Verde', value: '#10B981', light: '#34D399' },\r\n  { name: 'Esmeralda', value: '#059669', light: '#10B981' },\r\n  { name: 'Cyan', value: '#06B6D4', light: '#22D3EE' },\r\n  { name: 'Azul Cielo', value: '#0EA5E9', light: '#38BDF8' },\r\n  { name: 'Índigo', value: '#4F46E5', light: '#6366F1' },\r\n  { name: 'Violeta', value: '#8B5CF6', light: '#A78BFA' },\r\n  { name: 'Fucsia', value: '#D946EF', light: '#E879F9' },\r\n  { name: 'Gris', value: '#6B7280', light: '#9CA3AF' },\r\n  { name: 'Piedra', value: '#78716C', light: '#A8A29E' },\r\n];\r\n\r\ninterface ColorPickerProps {\r\n  value?: string;\r\n  onChange: (color: string) => void;\r\n  disabled?: boolean;\r\n}\r\n\r\nexport function ColorPicker({ value = '#6366F1', onChange, disabled = false }: ColorPickerProps) {\r\n  return (\r\n    <div className=\"space-y-2\">\r\n      <div className=\"flex flex-wrap gap-2\">\r\n        {TASK_COLORS.map((color) => {\r\n          const isSelected = value === color.value;\r\n\r\n          return (\r\n            <motion.button\r\n              key={color.value}\r\n              type=\"button\"\r\n              onClick={() => !disabled && onChange(color.value)}\r\n              className=\"relative rounded-full transition-all focus:outline-none focus:ring-2 focus:ring-offset-2\"\r\n              style={{\r\n                width: '32px',\r\n                height: '32px',\r\n                backgroundColor: color.value,\r\n                boxShadow: isSelected\r\n                  ? `0 0 0 2px #FFFFFF, 0 0 0 4px ${color.value}`\r\n                  : '0 1px 3px rgba(0, 0, 0, 0.12)',\r\n                opacity: disabled ? 0.5 : 1,\r\n                cursor: disabled ? 'not-allowed' : 'pointer',\r\n              }}\r\n              whileHover={disabled ? {} : { scale: 1.1 }}\r\n              whileTap={disabled ? {} : { scale: 0.95 }}\r\n              title={color.name}\r\n              disabled={disabled}\r\n            >\r\n              {isSelected && (\r\n                <motion.div\r\n                  initial={{ scale: 0 }}\r\n                  animate={{ scale: 1 }}\r\n                  className=\"absolute inset-0 flex items-center justify-center\"\r\n                >\r\n                  <Check className=\"w-4 h-4 text-white drop-shadow-md\" strokeWidth={3} />\r\n                </motion.div>\r\n              )}\r\n            </motion.button>\r\n          );\r\n        })}\r\n      </div>\r\n\r\n      {/* Color name label */}\r\n      {value && (\r\n        <div className=\"text-xs text-center font-medium\" style={{ color: value }}>\r\n          {TASK_COLORS.find(c => c.value === value)?.name || 'Personalizado'}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","/**\r\n * Task Form Modal - Complete CRUD for Gantt Tasks\r\n * Full-featured task creation/editing with user assignment, dates, dependencies, etc.\r\n * Similar to DHTMLX Gantt lightbox\r\n */\r\n\r\nimport { useState, useEffect } from 'react'\r\nimport { motion, AnimatePresence } from 'framer-motion'\r\nimport {\r\n  X,\r\n  Calendar,\r\n  Users,\r\n  Link2,\r\n  CheckCircle2,\r\n  Clock,\r\n  AlertCircle,\r\n  Milestone as MilestoneIcon,\r\n  Palette,\r\n} from 'lucide-react'\r\nimport { Task, Theme } from './types'\r\nimport { themes } from './themes'\r\nimport { ColorPicker } from './ColorPicker'\r\n\r\nexport interface TaskFormData {\r\n  name: string\r\n  startDate?: Date\r\n  endDate?: Date\r\n  progress: number\r\n  status: 'todo' | 'in-progress' | 'completed'\r\n  isMilestone: boolean\r\n  color?: string // v0.11.0: Custom task color\r\n  assignees?: Array<{ name: string; avatar?: string; initials: string; color: string }>\r\n  dependencies?: string[]\r\n}\r\n\r\nexport interface TaskFormModalProps {\r\n  /** Is modal open */\r\n  isOpen: boolean\r\n  /** Close handler */\r\n  onClose: () => void\r\n  /** Task to edit (undefined for create mode) */\r\n  task?: Task\r\n  /** Available tasks for dependencies */\r\n  availableTasks?: Task[]\r\n  /** Available users for assignment */\r\n  availableUsers?: Array<{ id: string; name: string; avatar?: string }>\r\n  /** Submit handler */\r\n  onSubmit: (data: TaskFormData) => void | Promise<void>\r\n  /** Is submitting */\r\n  isLoading?: boolean\r\n  /** Mode: create or edit */\r\n  mode?: 'create' | 'edit'\r\n  /** Theme: dark, light, or neutral (zen) */\r\n  theme?: Theme\r\n}\r\n\r\nexport function TaskFormModal({\r\n  isOpen,\r\n  onClose,\r\n  task,\r\n  availableTasks = [],\r\n  availableUsers = [],\r\n  onSubmit,\r\n  isLoading = false,\r\n  mode = task ? 'edit' : 'create',\r\n  theme = 'dark',\r\n}: TaskFormModalProps) {\r\n  // Get theme colors (with fallback to dark theme)\r\n  const themeColors = (themes[theme] || themes.dark)!\r\n\r\n  // Common styles\r\n  const inputStyle = {\r\n    backgroundColor: themeColors.bgSecondary,\r\n    border: `1px solid ${themeColors.borderLight}`,\r\n    color: themeColors.textPrimary,\r\n  }\r\n\r\n  const labelStyle = {\r\n    color: themeColors.textSecondary,\r\n  }\r\n\r\n  const [formData, setFormData] = useState<TaskFormData>({\r\n    name: '',\r\n    progress: 0,\r\n    status: 'todo',\r\n    isMilestone: false,\r\n    color: '#6366F1', // v0.11.0: Default blue pastel color\r\n    assignees: [],\r\n    dependencies: [],\r\n  })\r\n\r\n  const [errors, setErrors] = useState<Record<string, string>>({})\r\n\r\n  // Initialize form with task data (edit mode)\r\n  useEffect(() => {\r\n    if (task) {\r\n      setFormData({\r\n        name: task.name,\r\n        startDate: task.startDate,\r\n        endDate: task.endDate,\r\n        progress: task.progress,\r\n        status: task.status || 'todo',\r\n        isMilestone: task.isMilestone || false,\r\n        color: task.color || '#6366F1', // v0.11.0: Use task color or default\r\n        assignees: task.assignees || [],\r\n        dependencies: task.dependencies || [],\r\n      })\r\n    } else {\r\n      // Reset for create mode\r\n      setFormData({\r\n        name: '',\r\n        progress: 0,\r\n        status: 'todo',\r\n        isMilestone: false,\r\n        color: '#6366F1', // v0.11.0: Default blue pastel color\r\n        assignees: [],\r\n        dependencies: [],\r\n      })\r\n    }\r\n  }, [task, isOpen])\r\n\r\n  const validate = (): boolean => {\r\n    const newErrors: Record<string, string> = {}\r\n\r\n    if (!formData.name.trim()) {\r\n      newErrors.name = 'El nombre es requerido'\r\n    }\r\n\r\n    if (formData.startDate && formData.endDate && formData.startDate > formData.endDate) {\r\n      newErrors.endDate = 'La fecha de fin debe ser posterior a la de inicio'\r\n    }\r\n\r\n    setErrors(newErrors)\r\n    return Object.keys(newErrors).length === 0\r\n  }\r\n\r\n  const handleSubmit = async (e: React.FormEvent) => {\r\n    e.preventDefault()\r\n\r\n    if (!validate()) return\r\n\r\n    try {\r\n      await onSubmit(formData)\r\n      onClose()\r\n    } catch (error) {\r\n      console.error('Error submitting task:', error)\r\n    }\r\n  }\r\n\r\n  const handleChange = (field: keyof TaskFormData, value: any) => {\r\n    setFormData((prev) => {\r\n      const updated = { ...prev, [field]: value }\r\n\r\n      // Smart status updates based on progress\r\n      if (field === 'progress') {\r\n        const progressValue = typeof value === 'number' ? value : parseInt(value, 10)\r\n\r\n        // Auto-complete task when progress reaches 100%\r\n        if (progressValue === 100 && prev.status !== 'completed') {\r\n          updated.status = 'completed'\r\n        }\r\n        // Auto-start task when progress > 0 and status is still 'todo'\r\n        else if (progressValue > 0 && progressValue < 100 && prev.status === 'todo') {\r\n          updated.status = 'in-progress'\r\n        }\r\n        // Auto-reset to todo when progress is 0 and status is in-progress\r\n        else if (progressValue === 0 && prev.status === 'in-progress') {\r\n          updated.status = 'todo'\r\n        }\r\n      }\r\n\r\n      return updated\r\n    })\r\n\r\n    // Clear error when user starts typing\r\n    if (errors[field]) {\r\n      setErrors((prev) => {\r\n        const newErrors = { ...prev }\r\n        delete newErrors[field]\r\n        return newErrors\r\n      })\r\n    }\r\n  }\r\n\r\n  return (\r\n    <AnimatePresence>\r\n      {isOpen && (\r\n        <>\r\n          {/* Backdrop */}\r\n          <motion.div\r\n            initial={{ opacity: 0 }}\r\n            animate={{ opacity: 1 }}\r\n            exit={{ opacity: 0 }}\r\n            className=\"fixed inset-0 bg-black/50 z-50\"\r\n            onClick={onClose}\r\n          />\r\n\r\n          {/* Modal */}\r\n          <motion.div\r\n            initial={{ opacity: 0, scale: 0.95, y: 20 }}\r\n            animate={{ opacity: 1, scale: 1, y: 0 }}\r\n            exit={{ opacity: 0, scale: 0.95, y: 20 }}\r\n            transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\r\n            className=\"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none\"\r\n          >\r\n            <div\r\n              className=\"w-full max-w-2xl rounded-xl shadow-2xl pointer-events-auto overflow-hidden\"\r\n              style={{\r\n                backgroundColor: themeColors.bgPrimary,\r\n                border: `1px solid ${themeColors.border}`,\r\n              }}\r\n              onClick={(e) => e.stopPropagation()}\r\n            >\r\n              {/* Header */}\r\n              <div\r\n                className=\"flex items-center justify-between px-6 py-4\"\r\n                style={{ borderBottom: `1px solid ${themeColors.border}` }}\r\n              >\r\n                <h2 className=\"text-lg font-semibold\" style={{ color: themeColors.textPrimary }}>\r\n                  {mode === 'create' ? 'Crear Nueva Tarea' : 'Editar Tarea'}\r\n                </h2>\r\n                <button\r\n                  onClick={onClose}\r\n                  className=\"p-2 rounded-lg transition-colors\"\r\n                  style={{\r\n                    color: themeColors.textSecondary,\r\n                  }}\r\n                  onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = themeColors.hoverBg)}\r\n                  onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'transparent')}\r\n                  disabled={isLoading}\r\n                >\r\n                  <X className=\"w-5 h-5\" />\r\n                </button>\r\n              </div>\r\n\r\n              {/* Form */}\r\n              <form onSubmit={handleSubmit} className=\"p-6 space-y-6 max-h-[calc(100vh-200px)] overflow-y-auto\">\r\n                {/* Task Name */}\r\n                <div>\r\n                  <label className=\"block text-sm font-medium mb-2\" style={labelStyle}>\r\n                    Nombre de la Tarea *\r\n                  </label>\r\n                  <input\r\n                    type=\"text\"\r\n                    value={formData.name}\r\n                    onChange={(e) => handleChange('name', e.target.value)}\r\n                    className=\"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent\"\r\n                    style={inputStyle}\r\n                    onFocus={(e) => (e.currentTarget.style.borderColor = themeColors.accent)}\r\n                    onBlur={(e) => (e.currentTarget.style.borderColor = themeColors.borderLight)}\r\n                    placeholder=\"Ej: Diseñar mockups de la aplicación\"\r\n                    disabled={isLoading}\r\n                  />\r\n                  {errors.name && (\r\n                    <p className=\"mt-1 text-sm text-red-400 flex items-center gap-1\">\r\n                      <AlertCircle className=\"w-4 h-4\" />\r\n                      {errors.name}\r\n                    </p>\r\n                  )}\r\n                </div>\r\n\r\n                {/* Dates Row */}\r\n                <div className=\"grid grid-cols-2 gap-4\">\r\n                  {/* Start Date */}\r\n                  <div>\r\n                    <label className=\"block text-sm font-medium mb-2 flex items-center gap-2\" style={labelStyle}>\r\n                      <Calendar className=\"w-4 h-4\" />\r\n                      Fecha de Inicio\r\n                    </label>\r\n                    <input\r\n                      type=\"date\"\r\n                      value={formData.startDate ? formData.startDate.toISOString().split('T')[0] : ''}\r\n                      onChange={(e) => handleChange('startDate', e.target.value ? new Date(e.target.value) : undefined)}\r\n                      className=\"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent\"\r\n                      style={inputStyle}\r\n                      disabled={isLoading || formData.isMilestone}\r\n                    />\r\n                  </div>\r\n\r\n                  {/* End Date */}\r\n                  <div>\r\n                    <label className=\"block text-sm font-medium mb-2 flex items-center gap-2\" style={labelStyle}>\r\n                      <Calendar className=\"w-4 h-4\" />\r\n                      Fecha de Fin\r\n                    </label>\r\n                    <input\r\n                      type=\"date\"\r\n                      value={formData.endDate ? formData.endDate.toISOString().split('T')[0] : ''}\r\n                      onChange={(e) => handleChange('endDate', e.target.value ? new Date(e.target.value) : undefined)}\r\n                      className=\"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent\"\r\n                      style={inputStyle}\r\n                      disabled={isLoading || formData.isMilestone}\r\n                    />\r\n                    {errors.endDate && (\r\n                      <p className=\"mt-1 text-sm text-red-400 flex items-center gap-1\">\r\n                        <AlertCircle className=\"w-4 h-4\" />\r\n                        {errors.endDate}\r\n                      </p>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n\r\n                {/* Status */}\r\n                <div>\r\n                  <label className=\"block text-sm font-medium mb-2 flex items-center gap-2\" style={labelStyle}>\r\n                    <CheckCircle2 className=\"w-4 h-4\" />\r\n                    Estado\r\n                  </label>\r\n                  <select\r\n                    value={formData.status}\r\n                    onChange={(e) => handleChange('status', e.target.value)}\r\n                    className=\"w-full px-4 py-2.5 rounded-lg focus:outline-none focus:ring-2 focus:border-transparent\"\r\n                    style={inputStyle}\r\n                    disabled={isLoading}\r\n                  >\r\n                    <option value=\"todo\">Por Hacer</option>\r\n                    <option value=\"in-progress\">En Progreso</option>\r\n                    <option value=\"completed\">Completada</option>\r\n                  </select>\r\n                </div>\r\n\r\n                {/* v0.11.0: Color Picker */}\r\n                <div>\r\n                  <label className=\"block text-sm font-medium mb-3 flex items-center gap-2\" style={labelStyle}>\r\n                    <Palette className=\"w-4 h-4\" />\r\n                    Color de la Tarea\r\n                  </label>\r\n                  <ColorPicker\r\n                    value={formData.color}\r\n                    onChange={(color) => handleChange('color', color)}\r\n                    disabled={isLoading}\r\n                  />\r\n                  <p className=\"text-xs mt-2\" style={{ color: themeColors.textTertiary }}>\r\n                    {task?.parentId\r\n                      ? 'Esta subtarea hereda el color de su tarea padre'\r\n                      : task?.subtasks && task.subtasks.length > 0\r\n                      ? 'Las subtareas heredarán este color con menor opacidad'\r\n                      : 'Elige un color para organizar visualmente tus tareas'\r\n                    }\r\n                  </p>\r\n                </div>\r\n\r\n                {/* Progress */}\r\n                <div>\r\n                  <label className=\"block text-sm font-medium mb-2 flex items-center justify-between\" style={labelStyle}>\r\n                    <span className=\"flex items-center gap-2\">\r\n                      <Clock className=\"w-4 h-4\" />\r\n                      Progreso\r\n                    </span>\r\n                    <span\r\n                      className=\"font-semibold px-2 py-0.5 rounded text-sm\"\r\n                      style={{\r\n                        color: formData.progress < 30 ? '#EF4444' : formData.progress < 70 ? '#F59E0B' : '#10B981',\r\n                        backgroundColor: formData.progress < 30 ? 'rgba(239, 68, 68, 0.1)' : formData.progress < 70 ? 'rgba(245, 158, 11, 0.1)' : 'rgba(16, 185, 129, 0.1)',\r\n                      }}\r\n                    >\r\n                      {formData.progress}%\r\n                    </span>\r\n                  </label>\r\n\r\n                  {/* Progress Slider with Color Gradient */}\r\n                  <div className=\"relative\">\r\n                    <input\r\n                      type=\"range\"\r\n                      min=\"0\"\r\n                      max=\"100\"\r\n                      step=\"5\"\r\n                      value={formData.progress}\r\n                      onChange={(e) => handleChange('progress', parseInt(e.target.value))}\r\n                      className=\"w-full h-2 rounded-lg appearance-none cursor-pointer\"\r\n                      style={{\r\n                        backgroundColor: themeColors.bgSecondary,\r\n                        accentColor: formData.progress < 30 ? '#EF4444' : formData.progress < 70 ? '#F59E0B' : '#10B981',\r\n                      }}\r\n                      disabled={isLoading}\r\n                    />\r\n                    {/* Visual progress bar underneath */}\r\n                    <div\r\n                      className=\"absolute top-0 left-0 h-2 rounded-lg pointer-events-none transition-all duration-300\"\r\n                      style={{\r\n                        width: `${formData.progress}%`,\r\n                        backgroundColor: formData.progress < 30 ? 'rgba(239, 68, 68, 0.3)' : formData.progress < 70 ? 'rgba(245, 158, 11, 0.3)' : 'rgba(16, 185, 129, 0.3)',\r\n                      }}\r\n                    />\r\n                  </div>\r\n\r\n                  {/* Quick Progress Buttons */}\r\n                  <div className=\"flex items-center justify-between mt-3 gap-2\">\r\n                    <span className=\"text-xs\" style={{ color: themeColors.textTertiary }}>Accesos rápidos:</span>\r\n                    <div className=\"flex gap-1.5\">\r\n                      {[0, 25, 50, 75, 100].map((value) => (\r\n                        <button\r\n                          key={value}\r\n                          type=\"button\"\r\n                          onClick={() => handleChange('progress', value)}\r\n                          disabled={isLoading}\r\n                          className=\"px-3 py-1 text-xs font-medium rounded-md transition-all duration-200 hover:scale-105 active:scale-95\"\r\n                          style={{\r\n                            backgroundColor: formData.progress === value\r\n                              ? (value < 30 ? '#EF4444' : value < 70 ? '#F59E0B' : '#10B981')\r\n                              : themeColors.bgSecondary,\r\n                            color: formData.progress === value\r\n                              ? '#FFFFFF'\r\n                              : themeColors.textSecondary,\r\n                            border: `1px solid ${formData.progress === value\r\n                              ? (value < 30 ? '#EF4444' : value < 70 ? '#F59E0B' : '#10B981')\r\n                              : themeColors.borderLight}`,\r\n                          }}\r\n                        >\r\n                          {value}%\r\n                        </button>\r\n                      ))}\r\n                    </div>\r\n                  </div>\r\n\r\n                  {/* Progress Labels */}\r\n                  <div className=\"flex justify-between text-xs mt-2\" style={{ color: themeColors.textTertiary }}>\r\n                    <span>0%</span>\r\n                    <span>25%</span>\r\n                    <span>50%</span>\r\n                    <span>75%</span>\r\n                    <span>100%</span>\r\n                  </div>\r\n                </div>\r\n\r\n                {/* Milestone Checkbox */}\r\n                <div\r\n                  className=\"flex items-center gap-3 p-4 rounded-lg\"\r\n                  style={{\r\n                    backgroundColor: themeColors.bgSecondary,\r\n                    border: `1px solid ${themeColors.borderLight}`,\r\n                  }}\r\n                >\r\n                  <input\r\n                    type=\"checkbox\"\r\n                    id=\"isMilestone\"\r\n                    checked={formData.isMilestone}\r\n                    onChange={(e) => handleChange('isMilestone', e.target.checked)}\r\n                    className=\"w-4 h-4 rounded focus:ring-2\"\r\n                    style={{\r\n                      accentColor: themeColors.accent,\r\n                    }}\r\n                    disabled={isLoading}\r\n                  />\r\n                  <label htmlFor=\"isMilestone\" className=\"flex items-center gap-2 text-sm cursor-pointer\" style={{ color: themeColors.textPrimary }}>\r\n                    <MilestoneIcon className=\"w-4 h-4 text-yellow-500\" />\r\n                    Marcar como Hito (Milestone)\r\n                  </label>\r\n                </div>\r\n\r\n                {/* Assignees */}\r\n                {availableUsers.length > 0 && (\r\n                  <div>\r\n                    <label className=\"block text-sm font-medium mb-2 flex items-center gap-2\" style={labelStyle}>\r\n                      <Users className=\"w-4 h-4\" />\r\n                      Asignar a\r\n                    </label>\r\n                    <div\r\n                      className=\"space-y-2 max-h-32 overflow-y-auto p-3 rounded-lg\"\r\n                      style={{\r\n                        backgroundColor: themeColors.bgSecondary,\r\n                        border: `1px solid ${themeColors.borderLight}`,\r\n                      }}\r\n                    >\r\n                      {availableUsers.map((user) => (\r\n                        <label\r\n                          key={user.id}\r\n                          className=\"flex items-center gap-3 cursor-pointer p-2 rounded\"\r\n                          onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = themeColors.hoverBg)}\r\n                          onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'transparent')}\r\n                        >\r\n                          <input\r\n                            type=\"checkbox\"\r\n                            checked={formData.assignees?.some((a) => a.name === user.name)}\r\n                            onChange={(e) => {\r\n                              const newAssignees = e.target.checked\r\n                                ? [\r\n                                    ...(formData.assignees || []),\r\n                                    {\r\n                                      name: user.name,\r\n                                      avatar: user.avatar,\r\n                                      initials: user.name\r\n                                        .split(' ')\r\n                                        .map((n) => n[0])\r\n                                        .join('')\r\n                                        .toUpperCase()\r\n                                        .slice(0, 2),\r\n                                      color: themeColors.accent,\r\n                                    },\r\n                                  ]\r\n                                : (formData.assignees || []).filter((a) => a.name !== user.name)\r\n                              handleChange('assignees', newAssignees)\r\n                            }}\r\n                            className=\"w-4 h-4 rounded\"\r\n                            style={{\r\n                              accentColor: themeColors.accent,\r\n                            }}\r\n                            disabled={isLoading}\r\n                          />\r\n                          <div className=\"flex items-center gap-2\">\r\n                            <div\r\n                              className=\"w-6 h-6 rounded-full flex items-center justify-center text-xs text-white font-semibold\"\r\n                              style={{ backgroundColor: themeColors.accent }}\r\n                            >\r\n                              {user.name.charAt(0).toUpperCase()}\r\n                            </div>\r\n                            <span className=\"text-sm\" style={{ color: themeColors.textPrimary }}>{user.name}</span>\r\n                          </div>\r\n                        </label>\r\n                      ))}\r\n                    </div>\r\n                  </div>\r\n                )}\r\n\r\n                {/* Dependencies */}\r\n                {availableTasks.length > 0 && (\r\n                  <div>\r\n                    <label className=\"block text-sm font-medium mb-2 flex items-center gap-2\" style={labelStyle}>\r\n                      <Link2 className=\"w-4 h-4\" />\r\n                      Dependencias\r\n                    </label>\r\n                    <div\r\n                      className=\"space-y-2 max-h-32 overflow-y-auto p-3 rounded-lg\"\r\n                      style={{\r\n                        backgroundColor: themeColors.bgSecondary,\r\n                        border: `1px solid ${themeColors.borderLight}`,\r\n                      }}\r\n                    >\r\n                      {availableTasks\r\n                        .filter((t) => t.id !== task?.id)\r\n                        .map((t) => (\r\n                          <label\r\n                            key={t.id}\r\n                            className=\"flex items-center gap-3 cursor-pointer p-2 rounded\"\r\n                            onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = themeColors.hoverBg)}\r\n                            onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'transparent')}\r\n                          >\r\n                            <input\r\n                              type=\"checkbox\"\r\n                              checked={formData.dependencies?.includes(t.id)}\r\n                              onChange={(e) => {\r\n                                const newDeps = e.target.checked\r\n                                  ? [...(formData.dependencies || []), t.id]\r\n                                  : (formData.dependencies || []).filter((id) => id !== t.id)\r\n                                handleChange('dependencies', newDeps)\r\n                              }}\r\n                              className=\"w-4 h-4 rounded\"\r\n                              style={{\r\n                                accentColor: themeColors.accent,\r\n                              }}\r\n                              disabled={isLoading}\r\n                            />\r\n                            <span className=\"text-sm\" style={{ color: themeColors.textPrimary }}>{t.name}</span>\r\n                          </label>\r\n                        ))}\r\n                    </div>\r\n                  </div>\r\n                )}\r\n              </form>\r\n\r\n              {/* Footer */}\r\n              <div\r\n                className=\"flex items-center justify-end gap-3 px-6 py-4\"\r\n                style={{\r\n                  borderTop: `1px solid ${themeColors.border}`,\r\n                  backgroundColor: themeColors.bgPrimary,\r\n                }}\r\n              >\r\n                <button\r\n                  type=\"button\"\r\n                  onClick={onClose}\r\n                  className=\"px-4 py-2 text-sm font-medium rounded-lg transition-colors\"\r\n                  style={{ color: themeColors.textSecondary }}\r\n                  onMouseEnter={(e) => {\r\n                    e.currentTarget.style.color = themeColors.textPrimary\r\n                    e.currentTarget.style.backgroundColor = themeColors.hoverBg\r\n                  }}\r\n                  onMouseLeave={(e) => {\r\n                    e.currentTarget.style.color = themeColors.textSecondary\r\n                    e.currentTarget.style.backgroundColor = 'transparent'\r\n                  }}\r\n                  disabled={isLoading}\r\n                >\r\n                  Cancelar\r\n                </button>\r\n                <button\r\n                  onClick={handleSubmit}\r\n                  disabled={isLoading}\r\n                  className=\"px-4 py-2 text-sm font-medium rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2\"\r\n                  style={{\r\n                    backgroundColor: themeColors.accent,\r\n                    color: '#FFFFFF',\r\n                  }}\r\n                  onMouseEnter={(e) => !isLoading && (e.currentTarget.style.backgroundColor = themeColors.accentHover)}\r\n                  onMouseLeave={(e) => !isLoading && (e.currentTarget.style.backgroundColor = themeColors.accent)}\r\n                >\r\n                  {isLoading ? (\r\n                    <>\r\n                      <div className=\"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin\" />\r\n                      Guardando...\r\n                    </>\r\n                  ) : (\r\n                    <>\r\n                      <CheckCircle2 className=\"w-4 h-4\" />\r\n                      {mode === 'create' ? 'Crear Tarea' : 'Guardar Cambios'}\r\n                    </>\r\n                  )}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          </motion.div>\r\n        </>\r\n      )}\r\n    </AnimatePresence>\r\n  )\r\n}\r\n","/**\r\n * GanttAIAssistant - AI-powered natural language task editor\r\n * Allows users to edit Gantt tasks using natural language commands\r\n *\r\n * @version 0.14.0\r\n *\r\n * @example\r\n * // In GanttBoard with AI assistant\r\n * <GanttBoard\r\n *   tasks={tasks}\r\n *   config={{\r\n *     aiAssistant: {\r\n *       enabled: true,\r\n *       onCommand: async (command, tasks) => {\r\n *         // Call your AI API and return task updates\r\n *         const response = await fetch('/api/gantt-ai', {\r\n *           method: 'POST',\r\n *           body: JSON.stringify({ command, tasks })\r\n *         });\r\n *         return response.json();\r\n *       }\r\n *     }\r\n *   }}\r\n * />\r\n */\r\n\r\nimport { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { Portal } from '../Portal';\r\nimport { Task, GanttTheme } from './types';\r\n\r\n// AI Command types for task operations\r\nexport type AICommandType =\r\n  | 'move_task'      // Move a task to a different date\r\n  | 'resize_task'    // Change task duration\r\n  | 'rename_task'    // Rename a task\r\n  | 'delete_task'    // Delete a task\r\n  | 'create_task'    // Create a new task\r\n  | 'link_tasks'     // Create dependency between tasks\r\n  | 'unlink_tasks'   // Remove dependency\r\n  | 'assign_task'    // Assign users to task\r\n  | 'set_progress'   // Update task progress\r\n  | 'set_status'     // Change task status\r\n  | 'split_task'     // Split a task\r\n  | 'group_tasks'    // Create subtasks\r\n  | 'unknown';       // Unknown command\r\n\r\n// Parsed AI command result\r\nexport interface AICommandResult {\r\n  type: AICommandType;\r\n  taskId?: string;\r\n  taskName?: string;\r\n  updates?: Partial<Task>;\r\n  newTask?: Task;\r\n  dependencyFrom?: string;\r\n  dependencyTo?: string;\r\n  message: string;\r\n  success: boolean;\r\n  error?: string;\r\n}\r\n\r\n// Chat message interface\r\nexport interface AIMessage {\r\n  id: string;\r\n  role: 'user' | 'assistant';\r\n  content: string;\r\n  timestamp: Date;\r\n  command?: AICommandResult;\r\n  isLoading?: boolean;\r\n}\r\n\r\n// AI Assistant configuration\r\nexport interface GanttAIAssistantConfig {\r\n  /** Enable AI assistant */\r\n  enabled?: boolean;\r\n  /** Custom placeholder text */\r\n  placeholder?: string;\r\n  /** Position of the chat button */\r\n  position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\r\n  /** Handler for AI commands - should return task updates */\r\n  onCommand?: (command: string, tasks: Task[]) => Promise<AICommandResult>;\r\n  /** Custom suggestions for the command palette */\r\n  suggestions?: string[];\r\n  /** Maximum messages to keep in history */\r\n  maxHistory?: number;\r\n}\r\n\r\nexport interface GanttAIAssistantProps {\r\n  /** All current tasks in the Gantt */\r\n  tasks: Task[];\r\n  /** Theme configuration */\r\n  theme: GanttTheme;\r\n  /** AI assistant configuration */\r\n  config: GanttAIAssistantConfig;\r\n  /** Callback when tasks should be updated */\r\n  onTasksUpdate: (updatedTasks: Task[]) => void;\r\n  /** Callback for single task update */\r\n  onTaskUpdate?: (taskId: string, updates: Partial<Task>) => void;\r\n  /** Callback for task creation */\r\n  onTaskCreate?: (task: Task) => void;\r\n  /** Callback for task deletion */\r\n  onTaskDelete?: (taskId: string) => void;\r\n  /** Callback for dependency creation */\r\n  onDependencyCreate?: (fromTaskId: string, toTaskId: string) => void;\r\n  /** Callback for dependency deletion */\r\n  onDependencyDelete?: (taskId: string, dependencyId: string) => void;\r\n}\r\n\r\n// Default suggestions for the command palette\r\nconst DEFAULT_SUGGESTIONS = [\r\n  'Move \"Task Name\" to next Monday',\r\n  'Extend \"Task Name\" by 3 days',\r\n  'Rename \"Old Name\" to \"New Name\"',\r\n  'Set \"Task Name\" progress to 50%',\r\n  'Link \"Task A\" to \"Task B\"',\r\n  'Create a new task called \"New Task\"',\r\n  'Delete \"Task Name\"',\r\n  'Assign John to \"Task Name\"',\r\n];\r\n\r\n// Sparkle/AI icon component\r\nconst AIIcon = () => (\r\n  <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n    <path d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707\" />\r\n    <circle cx=\"12\" cy=\"12\" r=\"4\" />\r\n  </svg>\r\n);\r\n\r\n// Send icon\r\nconst SendIcon = () => (\r\n  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n    <path d=\"M22 2L11 13M22 2L15 22L11 13M22 2L2 9L11 13\" />\r\n  </svg>\r\n);\r\n\r\n// Close icon\r\nconst CloseIcon = () => (\r\n  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n    <path d=\"M18 6L6 18M6 6L18 18\" />\r\n  </svg>\r\n);\r\n\r\n// Minimize icon\r\nconst MinimizeIcon = () => (\r\n  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n    <path d=\"M5 12h14\" />\r\n  </svg>\r\n);\r\n\r\n// Loading dots animation\r\nconst LoadingDots = () => (\r\n  <div className=\"flex gap-1 items-center\">\r\n    {[0, 1, 2].map((i) => (\r\n      <motion.div\r\n        key={i}\r\n        className=\"w-2 h-2 rounded-full bg-current\"\r\n        animate={{\r\n          scale: [1, 1.2, 1],\r\n          opacity: [0.5, 1, 0.5],\r\n        }}\r\n        transition={{\r\n          duration: 0.8,\r\n          repeat: Infinity,\r\n          delay: i * 0.15,\r\n        }}\r\n      />\r\n    ))}\r\n  </div>\r\n);\r\n\r\nexport function GanttAIAssistant({\r\n  tasks,\r\n  theme,\r\n  config,\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  onTasksUpdate: _onTasksUpdate, // Reserved for batch updates\r\n  onTaskUpdate,\r\n  onTaskCreate,\r\n  onTaskDelete,\r\n  onDependencyCreate,\r\n  onDependencyDelete,\r\n}: GanttAIAssistantProps) {\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const [isMinimized, setIsMinimized] = useState(false);\r\n  const [messages, setMessages] = useState<AIMessage[]>([]);\r\n  const [inputValue, setInputValue] = useState('');\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [showSuggestions, setShowSuggestions] = useState(true);\r\n\r\n  const inputRef = useRef<HTMLInputElement>(null);\r\n  const messagesEndRef = useRef<HTMLDivElement>(null);\r\n  const chatContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n  const {\r\n    enabled = true,\r\n    placeholder = 'Ask AI to edit tasks... (e.g., \"Move Design to next week\")',\r\n    position = 'bottom-right',\r\n    onCommand,\r\n    suggestions = DEFAULT_SUGGESTIONS,\r\n    maxHistory = 50,\r\n  } = config;\r\n\r\n  // Auto-scroll to bottom on new messages\r\n  useEffect(() => {\r\n    if (messagesEndRef.current) {\r\n      messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });\r\n    }\r\n  }, [messages]);\r\n\r\n  // Focus input when chat opens\r\n  useEffect(() => {\r\n    if (isOpen && !isMinimized && inputRef.current) {\r\n      setTimeout(() => inputRef.current?.focus(), 100);\r\n    }\r\n  }, [isOpen, isMinimized]);\r\n\r\n  // Apply task updates based on AI command result\r\n  const applyCommandResult = useCallback((result: AICommandResult) => {\r\n    if (!result.success) return;\r\n\r\n    switch (result.type) {\r\n      case 'move_task':\r\n      case 'resize_task':\r\n      case 'rename_task':\r\n      case 'set_progress':\r\n      case 'set_status':\r\n      case 'assign_task':\r\n        if (result.taskId && result.updates) {\r\n          onTaskUpdate?.(result.taskId, result.updates);\r\n        }\r\n        break;\r\n\r\n      case 'create_task':\r\n        if (result.newTask) {\r\n          onTaskCreate?.(result.newTask);\r\n        }\r\n        break;\r\n\r\n      case 'delete_task':\r\n        if (result.taskId) {\r\n          onTaskDelete?.(result.taskId);\r\n        }\r\n        break;\r\n\r\n      case 'link_tasks':\r\n        if (result.dependencyFrom && result.dependencyTo) {\r\n          onDependencyCreate?.(result.dependencyFrom, result.dependencyTo);\r\n        }\r\n        break;\r\n\r\n      case 'unlink_tasks':\r\n        if (result.taskId && result.dependencyFrom) {\r\n          onDependencyDelete?.(result.taskId, result.dependencyFrom);\r\n        }\r\n        break;\r\n    }\r\n  }, [onTaskUpdate, onTaskCreate, onTaskDelete, onDependencyCreate, onDependencyDelete]);\r\n\r\n  // Handle sending a command\r\n  const handleSendCommand = useCallback(async (command: string) => {\r\n    if (!command.trim() || isLoading) return;\r\n\r\n    // Add user message\r\n    const userMessage: AIMessage = {\r\n      id: `user-${Date.now()}`,\r\n      role: 'user',\r\n      content: command,\r\n      timestamp: new Date(),\r\n    };\r\n\r\n    setMessages((prev) => [...prev.slice(-(maxHistory - 1)), userMessage]);\r\n    setInputValue('');\r\n    setShowSuggestions(false);\r\n    setIsLoading(true);\r\n\r\n    // Add loading message\r\n    const loadingMessage: AIMessage = {\r\n      id: `loading-${Date.now()}`,\r\n      role: 'assistant',\r\n      content: '',\r\n      timestamp: new Date(),\r\n      isLoading: true,\r\n    };\r\n    setMessages((prev) => [...prev, loadingMessage]);\r\n\r\n    try {\r\n      if (onCommand) {\r\n        const result = await onCommand(command, tasks);\r\n\r\n        // Remove loading message and add response\r\n        setMessages((prev) => {\r\n          const withoutLoading = prev.filter((m) => !m.isLoading);\r\n          const assistantMessage: AIMessage = {\r\n            id: `assistant-${Date.now()}`,\r\n            role: 'assistant',\r\n            content: result.message,\r\n            timestamp: new Date(),\r\n            command: result,\r\n          };\r\n          return [...withoutLoading, assistantMessage];\r\n        });\r\n\r\n        // Apply the command result\r\n        applyCommandResult(result);\r\n      } else {\r\n        // No handler provided - show helpful message\r\n        setMessages((prev) => {\r\n          const withoutLoading = prev.filter((m) => !m.isLoading);\r\n          return [\r\n            ...withoutLoading,\r\n            {\r\n              id: `assistant-${Date.now()}`,\r\n              role: 'assistant',\r\n              content: 'AI handler not configured. Please provide an onCommand handler in the aiAssistant config.',\r\n              timestamp: new Date(),\r\n            },\r\n          ];\r\n        });\r\n      }\r\n    } catch (error) {\r\n      // Handle error\r\n      setMessages((prev) => {\r\n        const withoutLoading = prev.filter((m) => !m.isLoading);\r\n        return [\r\n          ...withoutLoading,\r\n          {\r\n            id: `error-${Date.now()}`,\r\n            role: 'assistant',\r\n            content: `Sorry, I encountered an error: ${error instanceof Error ? error.message : 'Unknown error'}`,\r\n            timestamp: new Date(),\r\n          },\r\n        ];\r\n      });\r\n    } finally {\r\n      setIsLoading(false);\r\n    }\r\n  }, [isLoading, maxHistory, onCommand, tasks, applyCommandResult]);\r\n\r\n  // Handle input submit\r\n  const handleSubmit = (e: React.FormEvent) => {\r\n    e.preventDefault();\r\n    handleSendCommand(inputValue);\r\n  };\r\n\r\n  // Handle suggestion click\r\n  const handleSuggestionClick = (suggestion: string) => {\r\n    setInputValue(suggestion);\r\n    inputRef.current?.focus();\r\n  };\r\n\r\n  // Handle keyboard shortcuts\r\n  useEffect(() => {\r\n    const handleKeyDown = (e: KeyboardEvent) => {\r\n      // Toggle chat with Cmd/Ctrl + K\r\n      if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\r\n        e.preventDefault();\r\n        setIsOpen((prev) => !prev);\r\n        if (!isOpen) {\r\n          setIsMinimized(false);\r\n        }\r\n      }\r\n      // Close on Escape\r\n      if (e.key === 'Escape' && isOpen) {\r\n        setIsOpen(false);\r\n      }\r\n    };\r\n\r\n    document.addEventListener('keydown', handleKeyDown);\r\n    return () => document.removeEventListener('keydown', handleKeyDown);\r\n  }, [isOpen]);\r\n\r\n  if (!enabled) return null;\r\n\r\n  // Position classes\r\n  const positionClasses = {\r\n    'bottom-right': 'bottom-4 right-4',\r\n    'bottom-left': 'bottom-4 left-4',\r\n    'top-right': 'top-4 right-4',\r\n    'top-left': 'top-4 left-4',\r\n  };\r\n\r\n  return (\r\n    <Portal>\r\n      {/* Floating AI Assistant Button */}\r\n      <AnimatePresence>\r\n        {!isOpen && (\r\n          <motion.button\r\n            initial={{ scale: 0, opacity: 0 }}\r\n            animate={{ scale: 1, opacity: 1 }}\r\n            exit={{ scale: 0, opacity: 0 }}\r\n            whileHover={{ scale: 1.05 }}\r\n            whileTap={{ scale: 0.95 }}\r\n            className={`fixed ${positionClasses[position]} z-[99999] flex items-center gap-2 px-4 py-3 rounded-full shadow-lg transition-colors`}\r\n            style={{\r\n              background: 'linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)',\r\n              color: 'white',\r\n              boxShadow: '0 4px 20px rgba(59, 130, 246, 0.4)',\r\n            }}\r\n            onClick={() => setIsOpen(true)}\r\n          >\r\n            <AIIcon />\r\n            <span className=\"text-sm font-medium\">AI Assistant</span>\r\n            <kbd className=\"hidden sm:inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[10px] font-mono rounded bg-white/20\">\r\n              ⌘K\r\n            </kbd>\r\n          </motion.button>\r\n        )}\r\n      </AnimatePresence>\r\n\r\n      {/* Chat Panel */}\r\n      <AnimatePresence>\r\n        {isOpen && (\r\n          <motion.div\r\n            ref={chatContainerRef}\r\n            initial={{ opacity: 0, y: 20, scale: 0.95 }}\r\n            animate={{\r\n              opacity: 1,\r\n              y: 0,\r\n              scale: 1,\r\n              height: isMinimized ? 'auto' : 500,\r\n            }}\r\n            exit={{ opacity: 0, y: 20, scale: 0.95 }}\r\n            transition={{ type: 'spring', damping: 25, stiffness: 300 }}\r\n            className={`fixed ${positionClasses[position]} z-[99999] w-96 rounded-2xl overflow-hidden shadow-2xl flex flex-col`}\r\n            style={{\r\n              background: theme.bgPrimary,\r\n              border: `1px solid ${theme.border}`,\r\n              boxShadow: `0 20px 60px rgba(0, 0, 0, 0.3), 0 0 0 1px ${theme.border}`,\r\n            }}\r\n          >\r\n            {/* Header */}\r\n            <div\r\n              className=\"flex items-center justify-between px-4 py-3\"\r\n              style={{\r\n                background: 'linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)',\r\n              }}\r\n            >\r\n              <div className=\"flex items-center gap-2 text-white\">\r\n                <AIIcon />\r\n                <span className=\"font-semibold\">Gantt AI Assistant</span>\r\n              </div>\r\n              <div className=\"flex items-center gap-1\">\r\n                <button\r\n                  onClick={() => setIsMinimized((prev) => !prev)}\r\n                  className=\"p-1.5 rounded-lg hover:bg-white/20 text-white/80 hover:text-white transition-colors\"\r\n                >\r\n                  <MinimizeIcon />\r\n                </button>\r\n                <button\r\n                  onClick={() => setIsOpen(false)}\r\n                  className=\"p-1.5 rounded-lg hover:bg-white/20 text-white/80 hover:text-white transition-colors\"\r\n                >\r\n                  <CloseIcon />\r\n                </button>\r\n              </div>\r\n            </div>\r\n\r\n            {/* Chat Content */}\r\n            <AnimatePresence>\r\n              {!isMinimized && (\r\n                <motion.div\r\n                  initial={{ height: 0, opacity: 0 }}\r\n                  animate={{ height: 'auto', opacity: 1 }}\r\n                  exit={{ height: 0, opacity: 0 }}\r\n                  className=\"flex flex-col flex-1 min-h-0\"\r\n                >\r\n                  {/* Messages */}\r\n                  <div\r\n                    className=\"flex-1 overflow-y-auto p-4 space-y-4\"\r\n                    style={{ maxHeight: 350 }}\r\n                  >\r\n                    {messages.length === 0 && showSuggestions && (\r\n                      <div className=\"space-y-3\">\r\n                        <p\r\n                          className=\"text-sm text-center\"\r\n                          style={{ color: theme.textSecondary }}\r\n                        >\r\n                          Try asking me to edit your Gantt chart:\r\n                        </p>\r\n                        <div className=\"flex flex-wrap gap-2\">\r\n                          {suggestions.slice(0, 4).map((suggestion, index) => (\r\n                            <button\r\n                              key={index}\r\n                              onClick={() => handleSuggestionClick(suggestion)}\r\n                              className=\"text-xs px-3 py-1.5 rounded-full transition-colors\"\r\n                              style={{\r\n                                background: theme.bgSecondary,\r\n                                color: theme.textSecondary,\r\n                                border: `1px solid ${theme.border}`,\r\n                              }}\r\n                            >\r\n                              {suggestion.length > 30\r\n                                ? suggestion.slice(0, 30) + '...'\r\n                                : suggestion}\r\n                            </button>\r\n                          ))}\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n\r\n                    {messages.map((message) => (\r\n                      <motion.div\r\n                        key={message.id}\r\n                        initial={{ opacity: 0, y: 10 }}\r\n                        animate={{ opacity: 1, y: 0 }}\r\n                        className={`flex ${\r\n                          message.role === 'user' ? 'justify-end' : 'justify-start'\r\n                        }`}\r\n                      >\r\n                        <div\r\n                          className={`max-w-[85%] rounded-2xl px-4 py-2.5 ${\r\n                            message.role === 'user'\r\n                              ? 'rounded-br-md'\r\n                              : 'rounded-bl-md'\r\n                          }`}\r\n                          style={{\r\n                            background:\r\n                              message.role === 'user'\r\n                                ? 'linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)'\r\n                                : theme.bgSecondary,\r\n                            color:\r\n                              message.role === 'user'\r\n                                ? 'white'\r\n                                : theme.textPrimary,\r\n                          }}\r\n                        >\r\n                          {message.isLoading ? (\r\n                            <LoadingDots />\r\n                          ) : (\r\n                            <p className=\"text-sm whitespace-pre-wrap\">\r\n                              {message.content}\r\n                            </p>\r\n                          )}\r\n\r\n                          {/* Command result badge */}\r\n                          {message.command && (\r\n                            <div\r\n                              className=\"mt-2 text-xs px-2 py-1 rounded-md inline-flex items-center gap-1\"\r\n                              style={{\r\n                                background: message.command.success\r\n                                  ? 'rgba(16, 185, 129, 0.2)'\r\n                                  : 'rgba(239, 68, 68, 0.2)',\r\n                                color: message.command.success\r\n                                  ? '#10B981'\r\n                                  : '#EF4444',\r\n                              }}\r\n                            >\r\n                              {message.command.success ? '✓' : '✗'}\r\n                              <span className=\"capitalize\">\r\n                                {message.command.type.replace(/_/g, ' ')}\r\n                              </span>\r\n                            </div>\r\n                          )}\r\n                        </div>\r\n                      </motion.div>\r\n                    ))}\r\n                    <div ref={messagesEndRef} />\r\n                  </div>\r\n\r\n                  {/* Input */}\r\n                  <form\r\n                    onSubmit={handleSubmit}\r\n                    className=\"p-3 border-t\"\r\n                    style={{ borderColor: theme.border }}\r\n                  >\r\n                    <div\r\n                      className=\"flex items-center gap-2 rounded-xl px-4 py-2\"\r\n                      style={{\r\n                        background: theme.bgSecondary,\r\n                        border: `1px solid ${theme.border}`,\r\n                      }}\r\n                    >\r\n                      <input\r\n                        ref={inputRef}\r\n                        type=\"text\"\r\n                        value={inputValue}\r\n                        onChange={(e) => setInputValue(e.target.value)}\r\n                        placeholder={placeholder}\r\n                        disabled={isLoading}\r\n                        className=\"flex-1 bg-transparent text-sm outline-none\"\r\n                        style={{ color: theme.textPrimary }}\r\n                      />\r\n                      <button\r\n                        type=\"submit\"\r\n                        disabled={!inputValue.trim() || isLoading}\r\n                        className=\"p-2 rounded-lg transition-all disabled:opacity-50\"\r\n                        style={{\r\n                          background: inputValue.trim()\r\n                            ? 'linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)'\r\n                            : 'transparent',\r\n                          color: inputValue.trim() ? 'white' : theme.textSecondary,\r\n                        }}\r\n                      >\r\n                        <SendIcon />\r\n                      </button>\r\n                    </div>\r\n                    <p\r\n                      className=\"text-[10px] text-center mt-2\"\r\n                      style={{ color: theme.textTertiary }}\r\n                    >\r\n                      Press Enter to send • Esc to close\r\n                    </p>\r\n                  </form>\r\n                </motion.div>\r\n              )}\r\n            </AnimatePresence>\r\n          </motion.div>\r\n        )}\r\n      </AnimatePresence>\r\n    </Portal>\r\n  );\r\n}\r\n\r\nexport default GanttAIAssistant;\r\n","import { useState, useCallback, useRef } from 'react';\r\n\r\ninterface HistoryState<T> {\r\n  past: T[];\r\n  present: T;\r\n  future: T[];\r\n}\r\n\r\ninterface UseUndoRedoResult<T> {\r\n  state: T;\r\n  setState: (newStateOrUpdater: T | ((prev: T) => T), addToHistory?: boolean) => void;\r\n  undo: () => void;\r\n  redo: () => void;\r\n  canUndo: boolean;\r\n  canRedo: boolean;\r\n  clearHistory: () => void;\r\n}\r\n\r\n/**\r\n * Custom hook for undo/redo functionality\r\n * @param initialState - Initial state value\r\n * @param maxHistorySize - Maximum number of history entries (default: 50)\r\n */\r\nexport function useUndoRedo<T>(\r\n  initialState: T,\r\n  maxHistorySize: number = 50\r\n): UseUndoRedoResult<T> {\r\n  const [history, setHistory] = useState<HistoryState<T>>({\r\n    past: [],\r\n    present: initialState,\r\n    future: [],\r\n  });\r\n\r\n  // Track if we're currently applying undo/redo to avoid infinite loops\r\n  const isApplyingHistory = useRef(false);\r\n\r\n  const setState = useCallback(\r\n    (newStateOrUpdater: T | ((prev: T) => T), addToHistory: boolean = true) => {\r\n      setHistory((currentHistory) => {\r\n        // Resolve the new state (handle both direct values and updater functions)\r\n        const resolvedNewState =\r\n          typeof newStateOrUpdater === 'function'\r\n            ? (newStateOrUpdater as (prev: T) => T)(currentHistory.present)\r\n            : newStateOrUpdater;\r\n\r\n        if (isApplyingHistory.current) {\r\n          // If we're applying history, just update present without adding to history\r\n          return {\r\n            ...currentHistory,\r\n            present: resolvedNewState,\r\n          };\r\n        }\r\n\r\n        if (!addToHistory) {\r\n          // Direct state update without history\r\n          return {\r\n            ...currentHistory,\r\n            present: resolvedNewState,\r\n          };\r\n        }\r\n\r\n        const newPast = [...currentHistory.past, currentHistory.present];\r\n\r\n        // Limit history size\r\n        if (newPast.length > maxHistorySize) {\r\n          newPast.shift();\r\n        }\r\n\r\n        return {\r\n          past: newPast,\r\n          present: resolvedNewState,\r\n          future: [], // Clear future when making a new change\r\n        };\r\n      });\r\n    },\r\n    [maxHistorySize]\r\n  );\r\n\r\n  const undo = useCallback(() => {\r\n    setHistory((currentHistory) => {\r\n      if (currentHistory.past.length === 0) {\r\n        return currentHistory;\r\n      }\r\n\r\n      const previous = currentHistory.past[currentHistory.past.length - 1];\r\n      const newPast = currentHistory.past.slice(0, currentHistory.past.length - 1);\r\n\r\n      isApplyingHistory.current = true;\r\n      setTimeout(() => {\r\n        isApplyingHistory.current = false;\r\n      }, 0);\r\n\r\n      return {\r\n        past: newPast,\r\n        present: previous,\r\n        future: [currentHistory.present, ...currentHistory.future],\r\n      };\r\n    });\r\n  }, []);\r\n\r\n  const redo = useCallback(() => {\r\n    setHistory((currentHistory) => {\r\n      if (currentHistory.future.length === 0) {\r\n        return currentHistory;\r\n      }\r\n\r\n      const next = currentHistory.future[0];\r\n      const newFuture = currentHistory.future.slice(1);\r\n\r\n      isApplyingHistory.current = true;\r\n      setTimeout(() => {\r\n        isApplyingHistory.current = false;\r\n      }, 0);\r\n\r\n      return {\r\n        past: [...currentHistory.past, currentHistory.present],\r\n        present: next,\r\n        future: newFuture,\r\n      };\r\n    });\r\n  }, []);\r\n\r\n  const clearHistory = useCallback(() => {\r\n    setHistory((currentHistory) => ({\r\n      past: [],\r\n      present: currentHistory.present,\r\n      future: [],\r\n    }));\r\n  }, []);\r\n\r\n  return {\r\n    state: history.present,\r\n    setState,\r\n    undo,\r\n    redo,\r\n    canUndo: history.past.length > 0,\r\n    canRedo: history.future.length > 0,\r\n    clearHistory,\r\n  };\r\n}\r\n","import { useEffect } from 'react';\r\n\r\ninterface UseGanttUndoRedoKeysOptions {\r\n  undo: () => void;\r\n  redo: () => void;\r\n  canUndo: boolean;\r\n  canRedo: boolean;\r\n  enabled?: boolean;\r\n}\r\n\r\n/**\r\n * Hook to handle keyboard shortcuts for undo/redo\r\n * Ctrl+Z / Cmd+Z for undo\r\n * Ctrl+Y / Cmd+Shift+Z for redo\r\n */\r\nexport function useGanttUndoRedoKeys({\r\n  undo,\r\n  redo,\r\n  canUndo,\r\n  canRedo,\r\n  enabled = true,\r\n}: UseGanttUndoRedoKeysOptions) {\r\n  useEffect(() => {\r\n    if (!enabled) return;\r\n\r\n    const handleKeyDown = (e: KeyboardEvent) => {\r\n      const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\r\n      const ctrlKey = isMac ? e.metaKey : e.ctrlKey;\r\n\r\n      // Undo: Ctrl+Z (Windows/Linux) or Cmd+Z (Mac)\r\n      if (ctrlKey && e.key === 'z' && !e.shiftKey && canUndo) {\r\n        e.preventDefault();\r\n        undo();\r\n        return;\r\n      }\r\n\r\n      // Redo: Ctrl+Y (Windows/Linux) or Cmd+Shift+Z (Mac)\r\n      if (canRedo) {\r\n        if (!isMac && ctrlKey && e.key === 'y') {\r\n          e.preventDefault();\r\n          redo();\r\n          return;\r\n        }\r\n        if (isMac && ctrlKey && e.shiftKey && e.key === 'z') {\r\n          e.preventDefault();\r\n          redo();\r\n          return;\r\n        }\r\n      }\r\n    };\r\n\r\n    window.addEventListener('keydown', handleKeyDown);\r\n\r\n    return () => {\r\n      window.removeEventListener('keydown', handleKeyDown);\r\n    };\r\n  }, [undo, redo, canUndo, canRedo, enabled]);\r\n}\r\n","import { Task, GanttTemplates } from './types';\r\nimport { ganttUtils } from './ganttUtils';\r\n\r\n/**\r\n * Default templates for Gantt rendering\r\n * Users can override these with custom templates\r\n */\r\nexport const defaultTemplates: Required<GanttTemplates> = {\r\n  taskTooltip: (task: Task) => {\r\n    const lines: string[] = [\r\n      `<strong>${task.name}</strong>`,\r\n    ];\r\n\r\n    if (task.startDate && task.endDate) {\r\n      lines.push(\r\n        `${ganttUtils.formatDate(task.startDate)} - ${ganttUtils.formatDate(task.endDate)}`\r\n      );\r\n      const duration = ganttUtils.calculateDuration(task.startDate, task.endDate);\r\n      lines.push(`Duration: ${duration} days`);\r\n    }\r\n\r\n    if (task.progress !== undefined) {\r\n      lines.push(`Progress: ${task.progress}%`);\r\n    }\r\n\r\n    if (task.status) {\r\n      lines.push(`Status: ${task.status}`);\r\n    }\r\n\r\n    if (task.assignees && task.assignees.length > 0) {\r\n      const assigneeNames = task.assignees.map(a => a.name).join(', ');\r\n      lines.push(`Assigned: ${assigneeNames}`);\r\n    }\r\n\r\n    if (task.dependencies && task.dependencies.length > 0) {\r\n      lines.push(`Dependencies: ${task.dependencies.length}`);\r\n    }\r\n\r\n    return lines.join('<br/>');\r\n  },\r\n\r\n  taskLabel: (task: Task) => {\r\n    return task.name;\r\n  },\r\n\r\n  gridCell: (task: Task, column, value) => {\r\n    // Return default value as-is\r\n    return value;\r\n  },\r\n\r\n  taskClass: (task: Task) => {\r\n    const classes: string[] = [];\r\n\r\n    if (task.isCriticalPath) {\r\n      classes.push('critical-path');\r\n    }\r\n\r\n    if (task.status === 'completed') {\r\n      classes.push('completed');\r\n    } else if (task.status === 'in-progress') {\r\n      classes.push('in-progress');\r\n    } else if (task.status === 'todo') {\r\n      classes.push('todo');\r\n    }\r\n\r\n    if (task.isMilestone) {\r\n      classes.push('milestone');\r\n    }\r\n\r\n    return classes.join(' ');\r\n  },\r\n\r\n  milestoneContent: (task: Task) => {\r\n    return `◆ ${task.name}`;\r\n  },\r\n\r\n  dateFormat: (date: Date) => {\r\n    return ganttUtils.formatDate(date);\r\n  },\r\n\r\n  durationFormat: (days: number) => {\r\n    if (days === 1) return '1 day';\r\n    return `${days} days`;\r\n  },\r\n\r\n  progressFormat: (progress: number) => {\r\n    return `${progress}%`;\r\n  },\r\n};\r\n\r\n/**\r\n * Merge user templates with defaults\r\n */\r\nexport function mergeTemplates(\r\n  userTemplates?: Partial<GanttTemplates>\r\n): Required<GanttTemplates> {\r\n  return {\r\n    ...defaultTemplates,\r\n    ...userTemplates,\r\n  };\r\n}\r\n","import { useState, useRef, useEffect, useCallback, useMemo, useContext, forwardRef, useImperativeHandle } from 'react';\nimport { Task, TimeScale, Theme, GanttConfig, GanttColumn, ColumnType, RowDensity } from './types';\nimport { deriveThemeFromCSS } from './deriveThemeFromCSS';\nimport { GanttToolbar } from './GanttToolbar';\nimport { TaskGrid } from './TaskGrid';\nimport { Timeline } from './Timeline';\nimport { ContextMenu, MenuIcons } from './ContextMenu'; // v0.8.0: Split task context menu\nimport { TaskFormModal } from './TaskFormModal'; // v0.10.0: Task edit modal\nimport { GanttAIAssistant } from './GanttAIAssistant'; // v0.14.0: AI Assistant\nimport { useUndoRedo } from './useUndoRedo';\nimport { useGanttUndoRedoKeys } from './useGanttUndoRedoKeys';\nimport { ThemeContext } from '../../theme/ThemeProvider';\nimport { GanttThemeContext } from './GanttThemeContext';\nimport { GanttI18nContext } from './GanttI18nContext'; // v0.15.0: i18n context\nimport { mergeTranslations, GanttTranslations } from './i18n'; // v0.15.0: i18n\nimport { GanttBoardRef } from './GanttBoardRef';\nimport { ganttUtils } from './ganttUtils';\nimport { mergeTemplates } from './defaultTemplates';\nimport html2canvas from 'html2canvas';\nimport {\n  indentTasks,\n  outdentTasks,\n  moveTasks,\n  deleteTasks,\n  duplicateTasks,\n  createTask,\n  renameTask,\n  toggleTaskExpansion,\n  createSubtask,\n} from './hierarchyUtils';\n\ninterface GanttBoardProps {\n  tasks: Task[];\n  config?: GanttConfig;\n  onTasksChange?: (tasks: Task[]) => void;\n}\n\n// Utility function to get row height based on density\nconst getRowHeight = (density: RowDensity): number => {\n  switch (density) {\n    case 'compact':\n      return 40;\n    case 'comfortable':\n      return 48;\n    case 'spacious':\n      return 56;\n    default:\n      return 48;\n  }\n};\n\nexport const GanttBoard = forwardRef<GanttBoardRef, GanttBoardProps>(function GanttBoard(\n  { tasks, config = {}, onTasksChange },\n  ref\n) {\n  const {\n    theme: initialTheme,\n    timeScale: initialTimeScale = 'week',\n    rowDensity: initialRowDensity = 'comfortable',\n    showThemeSelector = true,\n    showExportButton = true, // v0.12.0: Show export dropdown in toolbar\n    availableUsers = [],\n    templates,\n    enableAutoCriticalPath = true, // v0.11.1: Allow disabling automatic CPM calculation\n    aiAssistant, // v0.14.0: AI Assistant configuration\n    // v0.15.0: Internationalization\n    locale = 'en',\n    customTranslations,\n    // v0.14.3: Create Task button in toolbar\n    showCreateTaskButton = false,\n    createTaskLabel,\n    onCreateTask,\n    // UI events\n    onThemeChange, // v0.9.0\n    // Basic events\n    onTaskClick,\n    onTaskDblClick, // v0.8.0\n    onTaskContextMenu, // v0.8.0\n    onTaskUpdate,\n    onProgressChange, // v0.8.0\n    // v0.16.0: Context menu action callbacks\n    onTaskEdit,\n    onTaskAddSubtask,\n    onTaskMarkIncomplete,\n    onTaskSetInProgress,\n    // Dependency events\n    onDependencyCreate,\n    onDependencyDelete,\n    // Lifecycle events (v0.8.0)\n    onBeforeTaskAdd,\n    onAfterTaskAdd,\n    onBeforeTaskUpdate,\n    onAfterTaskUpdate,\n    onBeforeTaskDelete,\n    onAfterTaskDelete,\n  } = config;\n\n  // Try to get global theme from ThemeProvider (will return undefined if not in ThemeProvider)\n  const themeContext = useContext(ThemeContext);\n  const globalTheme = themeContext?.theme as Theme | undefined;\n\n  // Use global theme if available, otherwise fall back to initialTheme or 'dark'\n  const [currentTheme, setCurrentTheme] = useState<Theme>(globalTheme || initialTheme || 'dark');\n\n  const [timeScale, setTimeScale] = useState<TimeScale>(initialTimeScale);\n  const [rowDensity, setRowDensity] = useState<RowDensity>(initialRowDensity);\n  const [zoom, setZoom] = useState(1);\n  const [scrollTop, setScrollTop] = useState(0);\n  const [isResizing, setIsResizing] = useState(false);\n  const [gridWidthOverride, setGridWidthOverride] = useState<number | null>(null);\n\n  // v0.8.0: Context menu state for Split task feature\n  const [contextMenu, setContextMenu] = useState<{ isOpen: boolean; x: number; y: number; task: Task | null }>({\n    isOpen: false,\n    x: 0,\n    y: 0,\n    task: null,\n  });\n\n  // v0.10.0: Task form modal state for editing\n  const [editingTask, setEditingTask] = useState<Task | null>(null);\n\n  // Sync with global theme changes (from ThemeContext)\n  useEffect(() => {\n    if (globalTheme && globalTheme !== currentTheme) {\n      setCurrentTheme(globalTheme);\n    }\n  }, [globalTheme]);\n\n  // v0.11.6: Sync with initialTheme prop changes (for external theme control)\n  useEffect(() => {\n    if (initialTheme && initialTheme !== currentTheme) {\n      setCurrentTheme(initialTheme);\n    }\n  }, [initialTheme]);\n\n  // v0.9.0: Handle theme change with callback\n  const handleThemeChange = useCallback(\n    (newTheme: Theme) => {\n      setCurrentTheme(newTheme);\n      onThemeChange?.(newTheme);\n    },\n    [onThemeChange]\n  );\n\n  // Use undo/redo hook for task management\n  const {\n    state: localTasks,\n    setState: setLocalTasks,\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n    clearHistory,\n  } = useUndoRedo<Task[]>(tasks, 50);\n\n  // Sync parent tasks prop changes to local state (e.g., after external DB operations)\n  useEffect(() => {\n    setLocalTasks(tasks);\n  }, [tasks, setLocalTasks]);\n\n  // v0.17.19: Track previous tasks for comparison to avoid unnecessary onTasksChange calls\n  const prevTasksRef = useRef<Task[]>(tasks);\n  const isInitialMount = useRef(true);\n\n  // Sync local tasks with parent when they change (optimized to avoid unnecessary calls)\n  useEffect(() => {\n    // Skip on initial mount - parent already has the tasks\n    if (isInitialMount.current) {\n      isInitialMount.current = false;\n      prevTasksRef.current = localTasks;\n      return;\n    }\n\n    if (!onTasksChange) return;\n\n    // Compare tasks to detect meaningful changes (not just reference changes)\n    // We use JSON stringify for deep comparison - this catches:\n    // - Added/removed tasks\n    // - Changed task properties (name, dates, progress, etc.)\n    // - But NOT just reordering of the same data in memory\n    const prevJson = JSON.stringify(prevTasksRef.current);\n    const currentJson = JSON.stringify(localTasks);\n\n    if (prevJson !== currentJson) {\n      prevTasksRef.current = localTasks;\n      onTasksChange(localTasks);\n    }\n  }, [localTasks, onTasksChange]);\n\n  // v0.15.0: Compute translations based on locale (must be before columns)\n  const translations: GanttTranslations = useMemo(() => {\n    return mergeTranslations(locale, customTranslations);\n  }, [locale, customTranslations]);\n\n  // Column configuration - Default: Only show task name\n  // v0.13.8: Name column is resizable with min/max width constraints\n  // v0.13.9: Increased default width to 320px for better readability of long task names\n  // v0.15.0: Column labels now use translations\n  const getDefaultColumns = useCallback((t: GanttTranslations): GanttColumn[] => [\n    { id: 'name', label: t.columns.taskName, width: 400, minWidth: 200, maxWidth: 2000, visible: true, sortable: true, resizable: false },\n    { id: 'startDate', label: t.columns.startDate, width: 110, visible: false, sortable: true },\n    { id: 'endDate', label: t.columns.endDate, width: 110, visible: false, sortable: true },\n    { id: 'duration', label: t.columns.duration, width: 80, visible: false, sortable: true },\n    { id: 'assignees', label: t.columns.assignees, width: 120, visible: false, sortable: false },\n    { id: 'status', label: t.columns.status, width: 80, visible: false, sortable: true },\n    { id: 'progress', label: t.columns.progress, width: 120, visible: false, sortable: true },\n  ], []);\n\n  const [columns, setColumns] = useState<GanttColumn[]>(() => getDefaultColumns(translations));\n\n  // Update column labels when locale changes\n  useEffect(() => {\n    setColumns(prev => prev.map(col => ({\n      ...col,\n      label: translations.columns[col.id === 'name' ? 'taskName' : col.id as keyof typeof translations.columns] || col.label,\n    })));\n  }, [translations]);\n\n  // Calculate grid width based on visible columns (memoized)\n  const calculatedGridWidth = useMemo(() =>\n    columns\n      .filter(col => col.visible)\n      .reduce((sum, col) => sum + col.width, 0) + 60, // +60 for add button and padding\n    [columns]\n  );\n\n  const gridWidth = gridWidthOverride || calculatedGridWidth;\n\n  const gridScrollRef = useRef<HTMLDivElement>(null);\n  const timelineScrollRef = useRef<HTMLDivElement>(null);\n  const ganttContainerRef = useRef<HTMLDivElement>(null);\n\n  // Derivar theme desde CSS variables si hay ThemeProvider, sino usar theme estático\n  const theme = useMemo(() => {\n    return deriveThemeFromCSS(currentTheme);\n  }, [currentTheme]);\n\n  // Crear valor del contexto del tema para componentes hijos (Portal, etc.)\n  const ganttThemeContextValue = useMemo(() => ({\n    theme,\n    themeName: currentTheme,\n  }), [theme, currentTheme]);\n\n  // Merge user templates with defaults\n  const mergedTemplates = useMemo(() => {\n    return mergeTemplates(templates);\n  }, [templates]);\n\n  // 🚀 KILLER FEATURE #1: Calculate Critical Path (auto-updates when tasks change)\n  // This is BETTER than DHTMLX - we recalculate CPM automatically on every change\n  // v0.11.1: Can be disabled via enableAutoCriticalPath prop to preserve custom colors\n  const tasksWithCriticalPath = useMemo(() => {\n    // If auto critical path is disabled, return tasks as-is (preserve custom colors)\n    if (!enableAutoCriticalPath) {\n      return localTasks;\n    }\n\n    const criticalPathIds = ganttUtils.calculateCriticalPath(localTasks);\n\n    const markCritical = (tasks: Task[]): Task[] => {\n      return tasks.map(task => ({\n        ...task,\n        isCriticalPath: criticalPathIds.includes(task.id),\n        subtasks: task.subtasks ? markCritical(task.subtasks) : undefined,\n      }));\n    };\n\n    return markCritical(localTasks);\n  }, [localTasks, enableAutoCriticalPath]);\n\n  // Calculate row height based on density\n  const rowHeight = getRowHeight(rowDensity);\n\n  // Enable undo/redo keyboard shortcuts\n  useGanttUndoRedoKeys({\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n    enabled: true,\n  });\n\n  // Expose imperative API via ref (similar to DHTMLX gantt.* methods)\n  useImperativeHandle(ref, () => ({\n    // ==================== CRUD Methods ====================\n    getTask: (id: string) => ganttUtils.findTaskById(localTasks, id),\n\n    addTask: (task: Task, parentId?: string) => {\n      setLocalTasks((prev) => {\n        if (!parentId) {\n          // Add as root-level task\n          return [...prev, { ...task, level: 0 }];\n        }\n\n        // Add as subtask\n        const addToParent = (tasks: Task[]): Task[] => {\n          return tasks.map((t) => {\n            if (t.id === parentId) {\n              return {\n                ...t,\n                subtasks: [...(t.subtasks || []), { ...task, parentId, level: (t.level || 0) + 1 }],\n                isExpanded: true,\n              };\n            }\n            if (t.subtasks) {\n              return { ...t, subtasks: addToParent(t.subtasks) };\n            }\n            return t;\n          });\n        };\n        return addToParent(prev);\n      });\n    },\n\n    updateTask: (id: string, updates: Partial<Task>) => {\n      setLocalTasks((prev) => {\n        const update = (tasks: Task[]): Task[] => {\n          return tasks.map((task) => {\n            if (task.id === id) {\n              return { ...task, ...updates };\n            }\n            if (task.subtasks) {\n              return { ...task, subtasks: update(task.subtasks) };\n            }\n            return task;\n          });\n        };\n        return update(prev);\n      });\n    },\n\n    deleteTask: (id: string) => {\n      setLocalTasks((prev) => {\n        const remove = (tasks: Task[]): Task[] => {\n          return tasks.filter((task) => {\n            if (task.id === id) return false;\n            if (task.subtasks) {\n              task.subtasks = remove(task.subtasks);\n            }\n            return true;\n          });\n        };\n        return remove(prev);\n      });\n    },\n\n    deleteTasks: (ids: string[]) => {\n      setLocalTasks((prev) => deleteTasks(prev, ids));\n    },\n\n    duplicateTask: (id: string) => {\n      setLocalTasks((prev) => duplicateTasks(prev, [id]));\n    },\n\n    // v0.8.1: Split task feature (creates GAP like Bryntum)\n    splitTask: (id: string, splitDate: Date, gapDays = 3) => {\n      setLocalTasks((prev) => ganttUtils.splitTask(prev, id, splitDate, gapDays));\n    },\n\n    // ==================== Utility Methods ====================\n    calculateEndDate: ganttUtils.calculateEndDate,\n    calculateDuration: ganttUtils.calculateDuration,\n    validateDependency: (fromTaskId: string, toTaskId: string) => {\n      return !ganttUtils.validateDependencies(localTasks, fromTaskId, toTaskId);\n    },\n\n    // ==================== Data Methods ====================\n    getAllTasks: () => ganttUtils.flattenTasks(localTasks),\n\n    getTasksByStatus: (status: 'todo' | 'in-progress' | 'completed') => {\n      return ganttUtils.flattenTasks(localTasks).filter((t) => t.status === status);\n    },\n\n    getTasksByParent: (parentId?: string) => {\n      if (!parentId) {\n        // Return root-level tasks\n        return localTasks.filter((t) => !t.parentId);\n      }\n      const parent = ganttUtils.findTaskById(localTasks, parentId);\n      return parent?.subtasks || [];\n    },\n\n    getCriticalPath: () => {\n      return ganttUtils.flattenTasks(localTasks).filter((t) => t.isCriticalPath);\n    },\n\n    // ==================== Hierarchy Methods ====================\n    indentTask: (taskId: string) => {\n      setLocalTasks((prev) => indentTasks(prev, [taskId]));\n    },\n\n    outdentTask: (taskId: string) => {\n      setLocalTasks((prev) => outdentTasks(prev, [taskId]));\n    },\n\n    moveTask: (taskId: string, direction: 'up' | 'down') => {\n      setLocalTasks((prev) => moveTasks(prev, [taskId], direction));\n    },\n\n    createSubtask: async (parentId: string) => {\n      // Create subtask first\n      const { tasks: newTasks, newTask } = createSubtask(localTasks, parentId);\n\n      // v0.8.0: Before event (cancelable, supports async)\n      if (onBeforeTaskAdd) {\n        const result = onBeforeTaskAdd({ ...newTask, parentId });\n        // Handle both sync and async callbacks\n        const shouldContinue = result instanceof Promise ? await result : result;\n        if (shouldContinue === false) {\n          return; // Cancel creation\n        }\n      }\n\n      // Only update state if not cancelled\n      setLocalTasks(newTasks);\n\n      // v0.8.0: After event (non-cancelable)\n      if (onAfterTaskAdd) {\n        onAfterTaskAdd({ ...newTask, parentId });\n      }\n    },\n\n    // ==================== UI Methods ====================\n    scrollToTask: (id: string) => {\n      // Find task index in flattened list\n      const flatTasks = ganttUtils.flattenTasks(localTasks);\n      const index = flatTasks.findIndex((t) => t.id === id);\n\n      if (index !== -1 && gridScrollRef.current) {\n        const scrollTop = index * rowHeight;\n        gridScrollRef.current.scrollTo({ top: scrollTop, behavior: 'smooth' });\n        if (timelineScrollRef.current) {\n          timelineScrollRef.current.scrollTo({ top: scrollTop, behavior: 'smooth' });\n        }\n      }\n    },\n\n    highlightTask: (id: string, duration = 2000) => {\n      // TODO: Implement visual highlighting - currently a no-op\n      void id;\n      void duration;\n    },\n\n    expandTask: (id: string) => {\n      setLocalTasks((prev) => {\n        const expand = (tasks: Task[]): Task[] => {\n          return tasks.map((task) => {\n            if (task.id === id) {\n              return { ...task, isExpanded: true };\n            }\n            if (task.subtasks) {\n              return { ...task, subtasks: expand(task.subtasks) };\n            }\n            return task;\n          });\n        };\n        return expand(prev);\n      });\n    },\n\n    collapseTask: (id: string) => {\n      setLocalTasks((prev) => {\n        const collapse = (tasks: Task[]): Task[] => {\n          return tasks.map((task) => {\n            if (task.id === id) {\n              return { ...task, isExpanded: false };\n            }\n            if (task.subtasks) {\n              return { ...task, subtasks: collapse(task.subtasks) };\n            }\n            return task;\n          });\n        };\n        return collapse(prev);\n      });\n    },\n\n    expandAll: () => {\n      setLocalTasks((prev) => {\n        const expandAll = (tasks: Task[]): Task[] => {\n          return tasks.map((task) => ({\n            ...task,\n            isExpanded: true,\n            subtasks: task.subtasks ? expandAll(task.subtasks) : undefined,\n          }));\n        };\n        return expandAll(prev);\n      });\n    },\n\n    collapseAll: () => {\n      setLocalTasks((prev) => {\n        const collapseAll = (tasks: Task[]): Task[] => {\n          return tasks.map((task) => ({\n            ...task,\n            isExpanded: false,\n            subtasks: task.subtasks ? collapseAll(task.subtasks) : undefined,\n          }));\n        };\n        return collapseAll(prev);\n      });\n    },\n\n    // ==================== Undo/Redo ====================\n    undo,\n    redo,\n    canUndo: () => canUndo,\n    canRedo: () => canRedo,\n    clearHistory,\n\n    // ==================== Export/Import ====================\n    exportToPNG: async () => {\n      if (!ganttContainerRef.current) {\n        throw new Error('Gantt container not found');\n      }\n\n      const canvas = await html2canvas(ganttContainerRef.current, {\n        backgroundColor: theme.bgPrimary,\n        scale: 2, // Higher quality\n      });\n\n      return new Promise<Blob>((resolve, reject) => {\n        canvas.toBlob((blob) => {\n          if (blob) {\n            resolve(blob);\n          } else {\n            reject(new Error('Failed to create blob from canvas'));\n          }\n        }, 'image/png');\n      });\n    },\n\n    exportToPDF: async (filename?: string) => {\n      await ganttUtils.exportToPDF(localTasks, filename);\n    },\n\n    exportToExcel: async (filename?: string) => {\n      await ganttUtils.exportToExcel(localTasks, filename);\n    },\n\n    exportToJSON: () => ganttUtils.exportToJSON(localTasks),\n    exportToCSV: () => ganttUtils.exportToCSV(localTasks),\n\n    importFromJSON: (json: string) => {\n      const imported = ganttUtils.importFromJSON(json);\n      setLocalTasks(imported);\n    },\n\n    // ==================== State Methods ====================\n    getTasks: () => localTasks,\n\n    refresh: () => {\n      // Force re-render by creating a new reference\n      setLocalTasks((prev) => [...prev]);\n    },\n\n    clearAll: () => {\n      setLocalTasks([]);\n    },\n  }), [localTasks, undo, redo, canUndo, canRedo, clearHistory, theme, rowHeight]);\n\n  // Handle column toggle (memoized)\n  const handleToggleColumn = useCallback((columnId: ColumnType) => {\n    setColumns(prev =>\n      prev.map(col =>\n        col.id === columnId ? { ...col, visible: !col.visible } : col\n      )\n    );\n  }, []);\n\n  // v0.13.8: Handle column resize (memoized)\n  const handleColumnResize = useCallback((columnId: ColumnType, newWidth: number) => {\n    setColumns(prev =>\n      prev.map(col => {\n        if (col.id !== columnId) return col;\n        // Clamp width to min/max constraints\n        const minW = col.minWidth ?? 100;\n        const maxW = col.maxWidth ?? 800;\n        const clampedWidth = Math.max(minW, Math.min(maxW, newWidth));\n        return { ...col, width: clampedWidth };\n      })\n    );\n  }, []);\n\n  // Handle task toggle (memoized)\n  const handleTaskToggle = useCallback((taskId: string) => {\n    setLocalTasks((prev) => toggleTaskExpansion(prev, taskId));\n    config.onTaskToggleExpand?.(taskId);\n  }, [config]);\n\n  // Handle task updates from context menu (memoized)\n  const handleTaskUpdate = useCallback((taskId: string, updates: Partial<Task>) => {\n    // v0.8.0: Before event (cancelable)\n    if (onBeforeTaskUpdate) {\n      const shouldContinue = onBeforeTaskUpdate(taskId, updates);\n      if (shouldContinue === false) {\n        return; // Cancel the update\n      }\n    }\n\n    // Find current task to detect progress change\n    const currentTask = ganttUtils.findTaskById(localTasks, taskId);\n    const oldProgress = currentTask?.progress;\n\n    const updateTask = (tasks: Task[]): Task[] => {\n      return tasks.map((task) => {\n        if (task.id === taskId) {\n          return { ...task, ...updates };\n        }\n        if (task.subtasks) {\n          return { ...task, subtasks: updateTask(task.subtasks) };\n        }\n        return task;\n      });\n    };\n    setLocalTasks(updateTask(localTasks));\n\n    // Call callback events\n    const updatedTask = ganttUtils.findTaskById(updateTask(localTasks), taskId);\n    if (updatedTask) {\n      onTaskUpdate?.(updatedTask);\n\n      // v0.8.0: After event\n      onAfterTaskUpdate?.(updatedTask);\n\n      // v0.8.0: Progress change event\n      if (updates.progress !== undefined && oldProgress !== undefined && updates.progress !== oldProgress) {\n        onProgressChange?.(taskId, oldProgress, updates.progress);\n      }\n    }\n  }, [localTasks, onTaskUpdate, onBeforeTaskUpdate, onAfterTaskUpdate, onProgressChange]);\n\n  // Hierarchy handlers\n  const handleTaskIndent = useCallback((taskIds: string[]) => {\n    if (taskIds.length === 0) return;\n    setLocalTasks((prev) => indentTasks(prev, taskIds));\n    config.onTaskIndent?.(taskIds[0]!);\n  }, [config]);\n\n  const handleTaskOutdent = useCallback((taskIds: string[]) => {\n    if (taskIds.length === 0) return;\n    setLocalTasks((prev) => outdentTasks(prev, taskIds));\n    config.onTaskOutdent?.(taskIds[0]!);\n  }, [config]);\n\n  const handleTaskMove = useCallback((taskIds: string[], direction: 'up' | 'down') => {\n    if (taskIds.length === 0) return;\n    setLocalTasks((prev) => moveTasks(prev, taskIds, direction));\n    config.onTaskMove?.(taskIds[0]!, direction);\n  }, [config]);\n\n  const handleMultiTaskDelete = useCallback(async (taskIds: string[]) => {\n    // v0.17.19: Support lifecycle callbacks for delete operations\n    // Filter out tasks that are blocked by onBeforeTaskDelete\n    const allowedTaskIds: string[] = [];\n\n    for (const taskId of taskIds) {\n      if (onBeforeTaskDelete) {\n        const result = await Promise.resolve(onBeforeTaskDelete(taskId));\n        if (result === false) {\n          // Skip this task - deletion was cancelled\n          continue;\n        }\n      }\n      allowedTaskIds.push(taskId);\n    }\n\n    // If no tasks are allowed to be deleted, return early\n    if (allowedTaskIds.length === 0) {\n      return;\n    }\n\n    // Call the consumer's onMultiTaskDelete handler if provided\n    if (config.onMultiTaskDelete) {\n      config.onMultiTaskDelete(allowedTaskIds);\n    } else {\n      // Fallback: update local state and call individual delete handlers\n      setLocalTasks((prev) => deleteTasks(prev, allowedTaskIds));\n      allowedTaskIds.forEach(id => config.onTaskDelete?.(id));\n    }\n\n    // v0.17.19: Call onAfterTaskDelete for each successfully deleted task\n    if (onAfterTaskDelete) {\n      allowedTaskIds.forEach(id => onAfterTaskDelete(id));\n    }\n  }, [config, onBeforeTaskDelete, onAfterTaskDelete]);\n\n  const handleTaskDuplicate = useCallback((taskIds: string[]) => {\n    setLocalTasks((prev) => duplicateTasks(prev, taskIds));\n    taskIds.forEach(id => config.onTaskDuplicate?.(id));\n  }, [config]);\n\n  const handleTaskCreate = useCallback((afterTaskId: string, direction: 'above' | 'below') => {\n    setLocalTasks((prev) => {\n      const { tasks, newTask } = createTask(prev, afterTaskId, direction);\n\n      // v0.8.0: Before event (cancelable)\n      if (onBeforeTaskAdd) {\n        const shouldContinue = onBeforeTaskAdd(newTask);\n        if (shouldContinue === false) {\n          return prev; // Cancel the addition, return unchanged tasks\n        }\n      }\n\n      config.onTaskCreate?.(newTask.parentId, newTask.position || 0);\n\n      // v0.8.0: After event\n      onAfterTaskAdd?.(newTask);\n\n      return tasks;\n    });\n  }, [config, onBeforeTaskAdd, onAfterTaskAdd]);\n\n  const handleTaskRename = useCallback((taskId: string, newName: string) => {\n    setLocalTasks((prev) => renameTask(prev, taskId, newName));\n    config.onTaskRename?.(taskId, newName);\n  }, [config]);\n\n  const handleCreateSubtask = useCallback((parentTaskId: string) => {\n    setLocalTasks((prev) => {\n      const { tasks } = createSubtask(prev, parentTaskId);\n      config.onTaskCreate?.(parentTaskId, 0);\n      return tasks;\n    });\n  }, [config]);\n\n  // 🚀 KILLER FEATURE #2: Handle task date changes WITH auto-scheduling\n  // When you move a task, all dependent tasks are automatically rescheduled\n  // This is BETTER than DHTMLX - they require manual configuration\n  const handleTaskDateChange = useCallback((task: Task, newStart: Date, newEnd: Date) => {\n    // v0.13.3: Calculate daysDelta to preserve relative gaps in cascade\n    const daysDelta = task.startDate\n      ? Math.round((newStart.getTime() - task.startDate.getTime()) / (1000 * 60 * 60 * 24))\n      : 0;\n\n    const updateTaskDates = (tasks: Task[]): Task[] => {\n      return tasks.map((t) => {\n        if (t.id === task.id) {\n          // v0.8.1: Preserve segments array when updating task dates\n          // This is critical for split tasks - we must keep the updated segments\n          return {\n            ...t,\n            startDate: newStart,\n            endDate: newEnd,\n            ...(task.segments && { segments: task.segments }) // Preserve segments if they exist\n          };\n        }\n        if (t.subtasks) {\n          return { ...t, subtasks: updateTaskDates(t.subtasks) };\n        }\n        return t;\n      });\n    };\n\n    // First, update the dragged task's dates\n    let updatedTasks = updateTaskDates(localTasks);\n\n    // Then, auto-schedule all dependent tasks (cascade effect)\n    // v0.13.3: Pass daysDelta to preserve relative gaps between tasks\n    updatedTasks = ganttUtils.autoScheduleDependents(updatedTasks, task.id, daysDelta);\n\n    setLocalTasks(updatedTasks);\n\n    // v0.8.1: Pass full updated task object including segments\n    const updatedTask = { ...task, startDate: newStart, endDate: newEnd };\n    onTaskUpdate?.(updatedTask);\n  }, [localTasks, onTaskUpdate]);\n\n  // 🚀 KILLER FEATURE #3: Handle context menu for Split task\n  // This is BETTER than DHTMLX - they don't have a built-in split task feature\n  const handleTaskContextMenu = useCallback((task: Task, event: React.MouseEvent) => {\n    // Call user's custom handler if provided\n    onTaskContextMenu?.(task, event);\n\n    // Show our built-in context menu with Split option\n    setContextMenu({\n      isOpen: true,\n      x: event.clientX,\n      y: event.clientY,\n      task,\n    });\n  }, [onTaskContextMenu]);\n\n  // Handle split task action\n  const handleSplitTask = useCallback((task: Task, splitDate: Date) => {\n    // Call ganttUtils.splitTask to split the task\n    const updatedTasks = ganttUtils.splitTask(localTasks, task.id, splitDate);\n    setLocalTasks(updatedTasks);\n\n    // Close context menu\n    setContextMenu({ isOpen: false, x: 0, y: 0, task: null });\n  }, [localTasks]);\n\n  // v0.10.0: Handle task double click - open edit modal\n  // v0.16.1: If onTaskEdit is provided, let the user handle editing (don't open built-in modal)\n  const handleTaskDblClickInternal = useCallback((task: Task) => {\n    // Call user's custom handler if provided\n    onTaskDblClick?.(task);\n\n    // Only open built-in edit modal if user hasn't provided a custom edit handler\n    // This prevents double modals when user handles editing themselves\n    if (!onTaskEdit) {\n      setEditingTask(task);\n    }\n  }, [onTaskDblClick, onTaskEdit]);\n\n  // Helper function to detect circular dependencies using DFS\n  const wouldCreateCircularDependency = useCallback((fromTaskId: string, toTaskId: string, tasks: Task[]): boolean => {\n    // Build dependency map\n    const dependencyMap = new Map<string, string[]>();\n\n    const buildMap = (taskList: Task[]) => {\n      taskList.forEach(task => {\n        if (task.dependencies) {\n          dependencyMap.set(task.id, task.dependencies);\n        }\n        if (task.subtasks) {\n          buildMap(task.subtasks);\n        }\n      });\n    };\n\n    buildMap(tasks);\n\n    // Simulate adding the new dependency\n    const existingDeps = dependencyMap.get(toTaskId) || [];\n    dependencyMap.set(toTaskId, [...existingDeps, fromTaskId]);\n\n    // DFS to detect cycle\n    const visited = new Set<string>();\n    const recStack = new Set<string>();\n\n    const hasCycle = (taskId: string): boolean => {\n      if (!visited.has(taskId)) {\n        visited.add(taskId);\n        recStack.add(taskId);\n\n        const deps = dependencyMap.get(taskId) || [];\n        for (const depId of deps) {\n          if (!visited.has(depId) && hasCycle(depId)) {\n            return true;\n          } else if (recStack.has(depId)) {\n            return true;\n          }\n        }\n      }\n      recStack.delete(taskId);\n      return false;\n    };\n\n    return hasCycle(toTaskId);\n  }, []);\n\n  // Handle dependency creation (memoized)\n  const handleDependencyCreate = useCallback((fromTask: Task, toTaskId: string) => {\n    // Check for circular dependency\n    if (wouldCreateCircularDependency(fromTask.id, toTaskId, localTasks)) {\n      // Show error feedback - you could integrate a toast notification here\n      console.warn('Cannot create dependency: would create a circular dependency');\n      alert('Cannot create this dependency: it would create a circular dependency chain.\\n\\nTask dependencies must flow in one direction only.');\n      return;\n    }\n\n    const updateTaskDependencies = (tasks: Task[]): Task[] => {\n      return tasks.map((t) => {\n        if (t.id === toTaskId) {\n          const dependencies = t.dependencies || [];\n          // Avoid duplicate dependencies\n          if (!dependencies.includes(fromTask.id)) {\n            return { ...t, dependencies: [...dependencies, fromTask.id] };\n          }\n        }\n        if (t.subtasks) {\n          return { ...t, subtasks: updateTaskDependencies(t.subtasks) };\n        }\n        return t;\n      });\n    };\n    setLocalTasks(updateTaskDependencies(localTasks));\n    onDependencyCreate?.(fromTask.id, toTaskId);\n  }, [localTasks, onDependencyCreate, wouldCreateCircularDependency]);\n\n  // Handle dependency deletion (memoized)\n  const handleDependencyDelete = useCallback((taskId: string, dependencyId: string) => {\n    const removeTaskDependency = (tasks: Task[]): Task[] => {\n      return tasks.map((t) => {\n        if (t.id === taskId && t.dependencies) {\n          const dependencies = t.dependencies.filter((depId) => depId !== dependencyId);\n          return { ...t, dependencies };\n        }\n        if (t.subtasks) {\n          return { ...t, subtasks: removeTaskDependency(t.subtasks) };\n        }\n        return t;\n      });\n    };\n    setLocalTasks(removeTaskDependency(localTasks));\n    onDependencyDelete?.(taskId, dependencyId);\n  }, [localTasks, onDependencyDelete]);\n\n  // Calculate date range (memoized)\n  const { startDate, endDate } = useMemo(() => {\n    // Filter tasks that have dates\n    const tasksWithDates = localTasks.filter(t => t.startDate && t.endDate);\n\n    if (tasksWithDates.length === 0) {\n      // Default range if no tasks have dates\n      const today = new Date();\n      const start = new Date(today);\n      start.setDate(start.getDate() - 30);\n      const end = new Date(today);\n      end.setDate(end.getDate() + 60);\n      return { startDate: start, endDate: end };\n    }\n\n    const allDates = tasksWithDates.flatMap((t) => [t.startDate, t.endDate]).filter((d): d is Date => d !== undefined);\n    const minDate = new Date(Math.min(...allDates.map((d) => d.getTime())));\n    const maxDate = new Date(Math.max(...allDates.map((d) => d.getTime())));\n\n    const padding = timeScale === 'day' ? 7 : timeScale === 'week' ? 14 : 30;\n    minDate.setDate(minDate.getDate() - padding);\n    maxDate.setDate(maxDate.getDate() + padding);\n\n    return { startDate: minDate, endDate: maxDate };\n  }, [localTasks, timeScale]);\n\n  // Handlers (future implementation - currently unused but kept for future features)\n  // TODO: Implement zoom controls in toolbar\n  // const handleZoomIn = () => setZoom((z) => Math.min(z + 0.2, 2));\n  // const handleZoomOut = () => setZoom((z) => Math.max(z - 0.2, 0.5));\n\n  // TODO: Implement \"Today\" button in toolbar\n  // const handleTodayClick = () => {\n  //   if (timelineScrollRef.current) {\n  //     const today = new Date();\n  //     const dayWidth = timeScale === 'day' ? 60 : timeScale === 'week' ? 20 : 8;\n  //     const daysFromStart = (today.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24);\n  //     const scrollX = daysFromStart * dayWidth * zoom - 300;\n  //     timelineScrollRef.current.scrollTo({ left: Math.max(0, scrollX), behavior: 'smooth' });\n  //   }\n  // };\n\n  // TODO: Implement add task functionality\n  // const handleAddTask = () => {\n  //   // Placeholder - implement in parent component if needed\n  // };\n\n  // v0.12.0: Export handlers for toolbar\n  const handleExportPNG = useCallback(async () => {\n    if (!ganttContainerRef.current) return;\n\n    const canvas = await html2canvas(ganttContainerRef.current, {\n      backgroundColor: theme.bgPrimary,\n      scale: 2,\n    });\n\n    // Create download link\n    const link = document.createElement('a');\n    link.download = 'gantt-chart.png';\n    link.href = canvas.toDataURL('image/png');\n    link.click();\n  }, [theme]);\n\n  const handleExportPDF = useCallback(async () => {\n    await ganttUtils.exportToPDF(localTasks);\n  }, [localTasks]);\n\n  const handleExportExcel = useCallback(async () => {\n    await ganttUtils.exportToExcel(localTasks);\n  }, [localTasks]);\n\n  const handleExportCSV = useCallback(() => {\n    const csv = ganttUtils.exportToCSV(localTasks);\n    const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n    const link = document.createElement('a');\n    link.href = URL.createObjectURL(blob);\n    link.download = 'gantt-chart.csv';\n    link.click();\n    URL.revokeObjectURL(link.href);\n  }, [localTasks]);\n\n  const handleExportJSON = useCallback(() => {\n    const json = ganttUtils.exportToJSON(localTasks);\n    const blob = new Blob([json], { type: 'application/json;charset=utf-8;' });\n    const link = document.createElement('a');\n    link.href = URL.createObjectURL(blob);\n    link.download = 'gantt-chart.json';\n    link.click();\n    URL.revokeObjectURL(link.href);\n  }, [localTasks]);\n\n  const handleExportMSProject = useCallback(() => {\n    ganttUtils.exportToMSProject(localTasks, 'Gantt Project', 'project.xml');\n  }, [localTasks]);\n\n  // Handle separator resize\n  const handleMouseDown = (e: React.MouseEvent) => {\n    e.preventDefault();\n    setIsResizing(true);\n  };\n\n  // v0.13.9: Timeline has the scrollbar, TaskGrid syncs via CSS transform\n  // This ensures only ONE scrollbar on the right side of the entire component\n  useEffect(() => {\n    const timelineScroll = timelineScrollRef.current;\n    const gridContainer = gridScrollRef.current;\n\n    if (!timelineScroll || !gridContainer) return;\n\n    // v0.13.11: Find the TaskGrid CONTENT container (not the whole grid) to apply transform\n    // This keeps the header fixed while only the task rows move\n    const taskGridContent = gridContainer.querySelector('.gantt-taskgrid-content');\n\n    const handleTimelineScroll = () => {\n      const scrollY = timelineScroll.scrollTop;\n      setScrollTop(scrollY);\n\n      // Sync TaskGrid content position via CSS transform (header stays fixed)\n      if (taskGridContent) {\n        (taskGridContent as HTMLElement).style.transform = `translateY(-${scrollY}px)`;\n      }\n    };\n\n    const handleMouseMove = (e: MouseEvent) => {\n      if (isResizing && gridContainer) {\n        // Calculate width relative to the container's left edge for accuracy\n        const containerRect = gridContainer.parentElement?.getBoundingClientRect();\n        const containerLeft = containerRect?.left || 0;\n        const newWidth = e.clientX - containerLeft;\n\n        // Clamp between reasonable min/max values\n        const minWidth = 200;\n        const maxWidth = Math.min(window.innerWidth - 300, 800);\n\n        if (newWidth >= minWidth && newWidth <= maxWidth) {\n          setGridWidthOverride(newWidth);\n        }\n      }\n    };\n\n    const handleMouseUp = () => {\n      setIsResizing(false);\n    };\n\n    timelineScroll.addEventListener('scroll', handleTimelineScroll);\n    document.addEventListener('mousemove', handleMouseMove);\n    document.addEventListener('mouseup', handleMouseUp);\n\n    return () => {\n      timelineScroll.removeEventListener('scroll', handleTimelineScroll);\n      document.removeEventListener('mousemove', handleMouseMove);\n      document.removeEventListener('mouseup', handleMouseUp);\n    };\n  }, [isResizing]);\n\n  return (\n    <GanttI18nContext.Provider value={translations}>\n    <GanttThemeContext.Provider value={ganttThemeContextValue}>\n    <div\n      ref={ganttContainerRef}\n      className=\"flex flex-col h-full w-full\"\n      style={{\n        backgroundColor: theme.bgPrimary,\n        fontFamily: 'Inter, sans-serif',\n        minHeight: 0, // Critical for flex children to shrink\n        // v0.9.1: Prevent browser auto-scroll when disableScrollSync is enabled\n        ...(config.disableScrollSync && {\n          scrollBehavior: 'auto',\n          overflowAnchor: 'none',\n        }),\n      }}\n    >\n      {/* Toolbar */}\n      <GanttToolbar\n        theme={theme}\n        timeScale={timeScale}\n        onTimeScaleChange={setTimeScale}\n        zoom={zoom}\n        onZoomChange={setZoom}\n        currentTheme={currentTheme}\n        onThemeChange={handleThemeChange}\n        rowDensity={rowDensity}\n        onRowDensityChange={setRowDensity}\n        showThemeSelector={showThemeSelector}\n        // v0.14.3: Create Task button\n        showCreateTaskButton={showCreateTaskButton}\n        createTaskLabel={createTaskLabel}\n        onCreateTask={onCreateTask}\n        // v0.12.0: Export handlers\n        onExportPNG={showExportButton ? handleExportPNG : undefined}\n        onExportPDF={showExportButton ? handleExportPDF : undefined}\n        onExportExcel={showExportButton ? handleExportExcel : undefined}\n        onExportCSV={showExportButton ? handleExportCSV : undefined}\n        onExportJSON={showExportButton ? handleExportJSON : undefined}\n        onExportMSProject={showExportButton ? handleExportMSProject : undefined}\n      />\n\n      {/* Main Content - v0.13.9: TaskGrid has no scroll, Timeline has the unified vertical scroll */}\n      <div\n        ref={gridScrollRef}\n        className=\"flex-1 flex min-h-0\"\n        style={{\n          overflow: 'hidden',\n        }}\n      >\n        {/* Task Grid - v0.13.9: No scroll at all, content syncs with Timeline scroll */}\n        <div\n          className=\"gantt-grid-scroll flex-shrink-0\"\n          style={{\n            width: gridWidth,\n            overflow: 'hidden',\n            // v0.17.5: Removed borderRight - causes ghost line in header\n          }}\n        >\n          <TaskGrid\n            tasks={tasksWithCriticalPath}\n            theme={theme}\n            rowHeight={rowHeight}\n            availableUsers={availableUsers}\n            templates={mergedTemplates}\n            onTaskClick={onTaskClick}\n            onTaskDblClick={handleTaskDblClickInternal} // v0.10.0: Use internal handler that opens modal\n            onTaskContextMenu={onTaskContextMenu} // v0.8.0\n            onTaskToggle={handleTaskToggle}\n            scrollTop={scrollTop}\n            columns={columns}\n            onToggleColumn={handleToggleColumn}\n            onColumnResize={handleColumnResize}\n            onTaskUpdate={handleTaskUpdate}\n            onTaskIndent={handleTaskIndent}\n            onTaskOutdent={handleTaskOutdent}\n            onTaskMove={handleTaskMove}\n            onMultiTaskDelete={handleMultiTaskDelete}\n            onTaskDuplicate={handleTaskDuplicate}\n            onTaskCreate={handleTaskCreate}\n            onTaskRename={handleTaskRename}\n            onCreateSubtask={handleCreateSubtask}\n            onOpenTaskModal={onTaskClick ? (task: Task) => onTaskClick(task) : undefined}\n          />\n        </div>\n\n        {/* Resize handle - invisible but draggable area over the border */}\n        <div\n          className=\"flex-shrink-0 cursor-col-resize\"\n          style={{\n            width: 6,\n            marginLeft: -3, // Center over the border line\n            zIndex: 10,\n          }}\n          onMouseDown={handleMouseDown}\n        />\n\n        {/* Timeline - v0.13.9: Has both scrolls, TaskGrid syncs to this scroll */}\n        <div\n          ref={timelineScrollRef}\n          className=\"gantt-timeline-scroll flex-1 overflow-auto\"\n          style={{\n            minHeight: 0,\n            // v0.9.1: Prevent browser auto-scroll when disableScrollSync is enabled\n            ...(config.disableScrollSync && {\n              scrollBehavior: 'auto',\n              overflowAnchor: 'none',\n            }),\n          }}\n        >\n          <Timeline\n            tasks={tasksWithCriticalPath}\n            theme={theme}\n            rowHeight={rowHeight}\n            timeScale={timeScale}\n            startDate={startDate}\n            endDate={endDate}\n            zoom={zoom}\n            templates={mergedTemplates}\n            onTaskClick={onTaskClick}\n            onTaskDblClick={handleTaskDblClickInternal} // v0.10.0: Use internal handler that opens modal\n            onTaskContextMenu={handleTaskContextMenu} // v0.8.0: Now uses our handler for Split feature\n            onTaskDateChange={handleTaskDateChange}\n            onDependencyCreate={handleDependencyCreate}\n            onDependencyDelete={handleDependencyDelete}\n          />\n        </div>\n      </div>\n\n      {/* v0.8.0: Context Menu for task operations (v0.16.0: Enhanced with Edit, Add Subtask, Status changes) */}\n      {contextMenu.task && (\n        <ContextMenu\n          isOpen={contextMenu.isOpen}\n          x={contextMenu.x}\n          y={contextMenu.y}\n          theme={theme}\n          onClose={() => setContextMenu({ isOpen: false, x: 0, y: 0, task: null })}\n          items={[\n            // v0.16.0: Edit Task - opens edit modal or calls custom handler\n            {\n              id: 'edit',\n              label: translations.contextMenu?.editTask || 'Edit Task',\n              icon: MenuIcons.Pencil,\n              onClick: () => {\n                if (!contextMenu.task) return;\n                if (onTaskEdit) {\n                  // Use custom handler if provided\n                  onTaskEdit(contextMenu.task);\n                } else {\n                  // Use built-in edit modal\n                  setEditingTask(contextMenu.task);\n                }\n              },\n            },\n            // v0.16.0: Add Subtask\n            {\n              id: 'addSubtask',\n              label: translations.contextMenu?.addSubtask || 'Add Subtask',\n              icon: MenuIcons.Add,\n              onClick: () => {\n                if (!contextMenu.task) return;\n                if (onTaskAddSubtask) {\n                  // Use custom handler if provided\n                  onTaskAddSubtask(contextMenu.task);\n                } else {\n                  // Use built-in subtask creation\n                  handleCreateSubtask(contextMenu.task.id);\n                }\n              },\n            },\n            // Separator before status changes\n            {\n              id: 'separator-status',\n              label: '',\n              separator: true,\n              onClick: () => {},\n            },\n            // v0.16.0: Mark Incomplete (status: 'todo', progress: 0)\n            {\n              id: 'markIncomplete',\n              label: translations.contextMenu?.markIncomplete || 'Mark Incomplete',\n              icon: MenuIcons.MarkIncomplete,\n              onClick: () => {\n                if (!contextMenu.task) return;\n                if (onTaskMarkIncomplete) {\n                  onTaskMarkIncomplete(contextMenu.task);\n                } else {\n                  handleTaskUpdate(contextMenu.task.id, { status: 'todo', progress: 0 });\n                }\n              },\n              disabled: contextMenu.task?.status === 'todo',\n            },\n            // v0.16.0: Set In Progress (status: 'in-progress')\n            {\n              id: 'setInProgress',\n              label: translations.contextMenu?.setInProgress || 'Set In Progress',\n              icon: MenuIcons.SetInProgress,\n              onClick: () => {\n                if (!contextMenu.task) return;\n                if (onTaskSetInProgress) {\n                  onTaskSetInProgress(contextMenu.task);\n                } else {\n                  handleTaskUpdate(contextMenu.task.id, { status: 'in-progress' });\n                }\n              },\n              disabled: contextMenu.task?.status === 'in-progress',\n            },\n            // v0.16.0: Mark Complete (status: 'completed', progress: 100)\n            {\n              id: 'markComplete',\n              label: translations.contextMenu?.markComplete || 'Mark Complete',\n              icon: MenuIcons.MarkComplete,\n              onClick: () => {\n                if (!contextMenu.task) return;\n                handleTaskUpdate(contextMenu.task.id, { status: 'completed', progress: 100 });\n              },\n              disabled: contextMenu.task?.status === 'completed',\n            },\n            // Separator before advanced options\n            {\n              id: 'separator-advanced',\n              label: '',\n              separator: true,\n              onClick: () => {},\n            },\n            // Split Task (existing feature from v0.8.0)\n            {\n              id: 'split',\n              label: translations.contextMenu?.splitTask || 'Split Task',\n              icon: MenuIcons.Split,\n              onClick: () => {\n                if (!contextMenu.task?.startDate || !contextMenu.task?.endDate) {\n                  console.warn('Cannot split task without dates');\n                  return;\n                }\n\n                // Calculate midpoint date for split\n                const startTime = contextMenu.task.startDate.getTime();\n                const endTime = contextMenu.task.endDate.getTime();\n                const midTime = startTime + (endTime - startTime) / 2;\n                const splitDate = new Date(midTime);\n\n                // Call split handler\n                handleSplitTask(contextMenu.task, splitDate);\n              },\n              disabled: !contextMenu.task?.startDate || !contextMenu.task?.endDate,\n            },\n            // Separator before delete\n            {\n              id: 'separator-delete',\n              label: '',\n              separator: true,\n              onClick: () => {},\n            },\n            // Delete Task\n            {\n              id: 'delete',\n              label: translations.contextMenu?.deleteTask || 'Delete Task',\n              icon: MenuIcons.Delete,\n              onClick: () => {\n                if (!contextMenu.task) return;\n                handleMultiTaskDelete([contextMenu.task.id]);\n              },\n            },\n          ]}\n        />\n      )}\n\n      {/* v0.10.0: Task Edit Modal */}\n      {editingTask && (\n        <TaskFormModal\n          isOpen={true}\n          onClose={() => setEditingTask(null)}\n          task={editingTask}\n          onSubmit={(updates) => {\n            handleTaskUpdate(editingTask.id, updates);\n            setEditingTask(null);\n          }}\n          mode=\"edit\"\n          theme={currentTheme}\n        />\n      )}\n\n      {/* v0.14.0: AI Assistant for natural language task editing */}\n      {aiAssistant?.enabled && (\n        <GanttAIAssistant\n          tasks={localTasks}\n          theme={theme}\n          config={aiAssistant}\n          onTasksUpdate={setLocalTasks}\n          onTaskUpdate={handleTaskUpdate}\n          onTaskCreate={(task) => {\n            setLocalTasks((prev) => [...prev, task]);\n          }}\n          onTaskDelete={(taskId) => {\n            // v0.17.19: Use handleMultiTaskDelete to respect lifecycle hooks\n            handleMultiTaskDelete([taskId]);\n          }}\n          onDependencyCreate={(fromTaskId, toTaskId) => {\n            const fromTask = ganttUtils.findTaskById(localTasks, fromTaskId);\n            if (fromTask) {\n              handleDependencyCreate(fromTask, toTaskId);\n            }\n          }}\n          onDependencyDelete={handleDependencyDelete}\n        />\n      )}\n    </div>\n    </GanttThemeContext.Provider>\n    </GanttI18nContext.Provider>\n  );\n})","/**\r\n * AI Command Parser for Gantt Chart\r\n * Parses natural language commands and converts them to task operations\r\n *\r\n * This module provides utilities for parsing AI responses and generating\r\n * prompts for natural language task editing.\r\n *\r\n * @version 0.14.0\r\n */\r\n\r\nimport { Task, AICommandResult } from './types';\r\n\r\n/**\r\n * System prompt for the AI model to understand Gantt task commands\r\n */\r\nexport const GANTT_AI_SYSTEM_PROMPT = `You are a Gantt chart AI assistant. You help users edit project tasks using natural language commands.\r\n\r\nAVAILABLE COMMANDS:\r\n1. move_task - Move a task to a different date\r\n2. resize_task - Change task duration (extend/shorten)\r\n3. rename_task - Rename a task\r\n4. delete_task - Delete a task\r\n5. create_task - Create a new task\r\n6. link_tasks - Create dependency between tasks\r\n7. unlink_tasks - Remove dependency\r\n8. assign_task - Assign users to task\r\n9. set_progress - Update task progress (0-100%)\r\n10. set_status - Change task status (todo, in-progress, completed)\r\n\r\nRESPONSE FORMAT (JSON):\r\n{\r\n  \"type\": \"command_type\",\r\n  \"taskId\": \"id of the task to modify (if found)\",\r\n  \"taskName\": \"name of the task mentioned\",\r\n  \"updates\": { /* partial task updates */ },\r\n  \"newTask\": { /* for create_task only */ },\r\n  \"dependencyFrom\": \"source task id (for link/unlink)\",\r\n  \"dependencyTo\": \"target task id (for link/unlink)\",\r\n  \"message\": \"Human-readable response explaining what was done\",\r\n  \"success\": true/false,\r\n  \"error\": \"error message if failed\"\r\n}\r\n\r\nEXAMPLES:\r\n- \"Move Design to next Monday\" -> move_task with startDate update\r\n- \"Extend Testing by 3 days\" -> resize_task with endDate update\r\n- \"Rename 'Old Task' to 'New Task'\" -> rename_task with name update\r\n- \"Set Development progress to 50%\" -> set_progress with progress: 50\r\n- \"Link Design to Development\" -> link_tasks\r\n- \"Create a new task called 'Review'\" -> create_task\r\n\r\nTASK DATA FORMAT:\r\nTasks have: id, name, startDate, endDate, progress, status, dependencies[], assignees[]\r\n\r\nAlways try to match task names case-insensitively and handle partial matches.\r\nIf you can't find a task by name, search through the provided task list.\r\nIf ambiguous, ask for clarification in the message field.`;\r\n\r\n/**\r\n * Generate the user prompt with current tasks context\r\n */\r\nexport function generateTasksContext(tasks: Task[]): string {\r\n  const flatTasks = flattenTasks(tasks);\r\n  const taskList = flatTasks\r\n    .map((t) => {\r\n      const start = t.startDate ? t.startDate.toISOString().split('T')[0] : 'no date';\r\n      const end = t.endDate ? t.endDate.toISOString().split('T')[0] : 'no date';\r\n      const deps = t.dependencies?.length ? `deps: [${t.dependencies.join(', ')}]` : '';\r\n      return `- ${t.id}: \"${t.name}\" (${start} to ${end}, ${t.progress}%, ${t.status || 'todo'}) ${deps}`;\r\n    })\r\n    .join('\\n');\r\n\r\n  return `CURRENT TASKS:\\n${taskList}\\n\\nToday's date: ${new Date().toISOString().split('T')[0]}`;\r\n}\r\n\r\n/**\r\n * Flatten nested tasks into a single array\r\n */\r\nfunction flattenTasks(tasks: Task[]): Task[] {\r\n  const result: Task[] = [];\r\n  const flatten = (taskList: Task[]) => {\r\n    for (const task of taskList) {\r\n      result.push(task);\r\n      if (task.subtasks?.length) {\r\n        flatten(task.subtasks);\r\n      }\r\n    }\r\n  };\r\n  flatten(tasks);\r\n  return result;\r\n}\r\n\r\n/**\r\n * Find a task by name (case-insensitive, partial match)\r\n */\r\nexport function findTaskByName(tasks: Task[], name: string): Task | undefined {\r\n  const flatTasks = flattenTasks(tasks);\r\n  const normalizedName = name.toLowerCase().trim();\r\n\r\n  // Exact match first\r\n  const exact = flatTasks.find((t) => t.name.toLowerCase() === normalizedName);\r\n  if (exact) return exact;\r\n\r\n  // Partial match\r\n  const partial = flatTasks.find((t) => t.name.toLowerCase().includes(normalizedName));\r\n  if (partial) return partial;\r\n\r\n  // Fuzzy match (contains all words)\r\n  const words = normalizedName.split(/\\s+/);\r\n  return flatTasks.find((t) => {\r\n    const taskName = t.name.toLowerCase();\r\n    return words.every((word) => taskName.includes(word));\r\n  });\r\n}\r\n\r\n/**\r\n * Parse date from natural language\r\n */\r\nexport function parseNaturalDate(text: string, referenceDate = new Date()): Date | null {\r\n  const normalized = text.toLowerCase().trim();\r\n  const today = new Date(referenceDate);\r\n  today.setHours(0, 0, 0, 0);\r\n\r\n  // Today\r\n  if (normalized === 'today' || normalized === 'hoy') {\r\n    return today;\r\n  }\r\n\r\n  // Tomorrow\r\n  if (normalized === 'tomorrow' || normalized === 'mañana') {\r\n    const date = new Date(today);\r\n    date.setDate(date.getDate() + 1);\r\n    return date;\r\n  }\r\n\r\n  // Yesterday\r\n  if (normalized === 'yesterday' || normalized === 'ayer') {\r\n    const date = new Date(today);\r\n    date.setDate(date.getDate() - 1);\r\n    return date;\r\n  }\r\n\r\n  // Next week\r\n  if (normalized === 'next week' || normalized === 'la próxima semana') {\r\n    const date = new Date(today);\r\n    date.setDate(date.getDate() + 7);\r\n    return date;\r\n  }\r\n\r\n  // Day of week (next Monday, next Tuesday, etc.)\r\n  const dayMatch = normalized.match(/(?:next\\s+)?(monday|tuesday|wednesday|thursday|friday|saturday|sunday|lunes|martes|miércoles|miercoles|jueves|viernes|sábado|sabado|domingo)/i);\r\n  if (dayMatch) {\r\n    const dayNames: Record<string, number> = {\r\n      sunday: 0, domingo: 0,\r\n      monday: 1, lunes: 1,\r\n      tuesday: 2, martes: 2,\r\n      wednesday: 3, miércoles: 3, miercoles: 3,\r\n      thursday: 4, jueves: 4,\r\n      friday: 5, viernes: 5,\r\n      saturday: 6, sábado: 6, sabado: 6,\r\n    };\r\n    const targetDay = dayNames[dayMatch[1]!.toLowerCase()];\r\n    if (targetDay !== undefined) {\r\n      const date = new Date(today);\r\n      const currentDay = date.getDay();\r\n      let daysToAdd = targetDay - currentDay;\r\n      if (daysToAdd <= 0) daysToAdd += 7; // Always next occurrence\r\n      date.setDate(date.getDate() + daysToAdd);\r\n      return date;\r\n    }\r\n  }\r\n\r\n  // In X days/weeks/months\r\n  const inMatch = normalized.match(/in\\s+(\\d+)\\s+(day|week|month|día|dias|semana|semanas|mes|meses)s?/i);\r\n  if (inMatch && inMatch[1] && inMatch[2]) {\r\n    const amount = parseInt(inMatch[1], 10);\r\n    const unit = inMatch[2].toLowerCase();\r\n    const date = new Date(today);\r\n\r\n    if (unit === 'day' || unit === 'día' || unit === 'dias') {\r\n      date.setDate(date.getDate() + amount);\r\n    } else if (unit === 'week' || unit === 'semana' || unit === 'semanas') {\r\n      date.setDate(date.getDate() + amount * 7);\r\n    } else if (unit === 'month' || unit === 'mes' || unit === 'meses') {\r\n      date.setMonth(date.getMonth() + amount);\r\n    }\r\n    return date;\r\n  }\r\n\r\n  // ISO date (YYYY-MM-DD)\r\n  const isoMatch = normalized.match(/(\\d{4})-(\\d{2})-(\\d{2})/);\r\n  if (isoMatch) {\r\n    return new Date(normalized);\r\n  }\r\n\r\n  // DD/MM/YYYY or MM/DD/YYYY\r\n  const dateMatch = normalized.match(/(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})/);\r\n  if (dateMatch && dateMatch[1] && dateMatch[2] && dateMatch[3]) {\r\n    // Assume DD/MM/YYYY for non-US locales\r\n    const day = parseInt(dateMatch[1], 10);\r\n    const month = parseInt(dateMatch[2], 10) - 1;\r\n    const year = parseInt(dateMatch[3], 10);\r\n    return new Date(year, month, day);\r\n  }\r\n\r\n  // Spanish date format: \"1 de diciembre de 2025\", \"15 de enero\", \"20 de marzo de 2024\"\r\n  const spanishMonths: Record<string, number> = {\r\n    enero: 0, febrero: 1, marzo: 2, abril: 3, mayo: 4, junio: 5,\r\n    julio: 6, agosto: 7, septiembre: 8, octubre: 9, noviembre: 10, diciembre: 11,\r\n  };\r\n  const spanishDateMatch = normalized.match(/(\\d{1,2})\\s+de\\s+(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)(?:\\s+de\\s+(\\d{4}))?/i);\r\n  if (spanishDateMatch && spanishDateMatch[1] && spanishDateMatch[2]) {\r\n    const day = parseInt(spanishDateMatch[1], 10);\r\n    const month = spanishMonths[spanishDateMatch[2].toLowerCase()];\r\n    const year = spanishDateMatch[3] ? parseInt(spanishDateMatch[3], 10) : today.getFullYear();\r\n    if (month !== undefined) {\r\n      return new Date(year, month, day);\r\n    }\r\n  }\r\n\r\n  // English date format: \"December 1, 2025\", \"January 15\", \"March 20 2024\"\r\n  const englishMonths: Record<string, number> = {\r\n    january: 0, february: 1, march: 2, april: 3, may: 4, june: 5,\r\n    july: 6, august: 7, september: 8, october: 9, november: 10, december: 11,\r\n  };\r\n  const englishDateMatch = normalized.match(/(january|february|march|april|may|june|july|august|september|october|november|december)\\s+(\\d{1,2})(?:,?\\s+(\\d{4}))?/i);\r\n  if (englishDateMatch && englishDateMatch[1] && englishDateMatch[2]) {\r\n    const month = englishMonths[englishDateMatch[1].toLowerCase()];\r\n    const day = parseInt(englishDateMatch[2], 10);\r\n    const year = englishDateMatch[3] ? parseInt(englishDateMatch[3], 10) : today.getFullYear();\r\n    if (month !== undefined) {\r\n      return new Date(year, month, day);\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\n/**\r\n * Parse duration from natural language\r\n */\r\nexport function parseNaturalDuration(text: string): number | null {\r\n  const normalized = text.toLowerCase().trim();\r\n\r\n  // X days/weeks/months\r\n  const match = normalized.match(/(\\d+)\\s*(day|week|month|día|dias|semana|semanas|mes|meses)s?/i);\r\n  if (match && match[1] && match[2]) {\r\n    const amount = parseInt(match[1], 10);\r\n    const unit = match[2].toLowerCase();\r\n\r\n    if (unit === 'day' || unit === 'día' || unit === 'dias') {\r\n      return amount;\r\n    } else if (unit === 'week' || unit === 'semana' || unit === 'semanas') {\r\n      return amount * 7;\r\n    } else if (unit === 'month' || unit === 'mes' || unit === 'meses') {\r\n      return amount * 30;\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\n/**\r\n * Parse progress percentage from natural language\r\n */\r\nexport function parseProgress(text: string): number | null {\r\n  const match = text.match(/(\\d+)(?:\\s*%)?/);\r\n  if (match && match[1]) {\r\n    const value = parseInt(match[1], 10);\r\n    return Math.max(0, Math.min(100, value));\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * Parse task status from natural language\r\n */\r\nexport function parseStatus(text: string): 'todo' | 'in-progress' | 'completed' | null {\r\n  const normalized = text.toLowerCase().trim();\r\n\r\n  if (normalized.includes('todo') || normalized.includes('pendiente') || normalized.includes('por hacer')) {\r\n    return 'todo';\r\n  }\r\n  if (normalized.includes('in progress') || normalized.includes('in-progress') || normalized.includes('en progreso') || normalized.includes('working') || normalized.includes('trabajando')) {\r\n    return 'in-progress';\r\n  }\r\n  if (normalized.includes('done') || normalized.includes('complete') || normalized.includes('finished') || normalized.includes('completado') || normalized.includes('terminado') || normalized.includes('hecho')) {\r\n    return 'completed';\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\n/**\r\n * Local command parser (for offline/simple commands without AI)\r\n * This can handle basic commands without needing an AI API call\r\n */\r\nexport function parseLocalCommand(command: string, tasks: Task[]): AICommandResult | null {\r\n  const normalized = command.toLowerCase().trim();\r\n\r\n  // Move task pattern: \"move X to Y\" or \"mueve la tarea X a la fecha Y\"\r\n  // Handles: \"move Task to Monday\", \"mover Diseño a próximo lunes\", \"mueve la tarea Fase 1 a la fecha 1 de diciembre\"\r\n  const moveMatch = normalized.match(/(?:move|mover|mueve)\\s+(?:la\\s+tarea\\s+)?[\"\"\"]?(.+?)[\"\"\"]?\\s+(?:to|a|para)\\s+(?:la\\s+fecha\\s+)?(.+)/i);\r\n  if (moveMatch && moveMatch[1] && moveMatch[2]) {\r\n    const taskName = moveMatch[1].trim();\r\n    const dateText = moveMatch[2].trim();\r\n    const task = findTaskByName(tasks, taskName);\r\n    const newDate = parseNaturalDate(dateText);\r\n\r\n    if (!task) {\r\n      return {\r\n        type: 'move_task',\r\n        taskName,\r\n        message: `Could not find a task named \"${taskName}\". Please check the task name and try again.`,\r\n        success: false,\r\n        error: 'Task not found',\r\n      };\r\n    }\r\n\r\n    if (!newDate) {\r\n      return {\r\n        type: 'move_task',\r\n        taskId: task.id,\r\n        taskName: task.name,\r\n        message: `Could not parse the date \"${dateText}\". Try using formats like \"next Monday\", \"in 3 days\", or \"2024-01-15\".`,\r\n        success: false,\r\n        error: 'Invalid date',\r\n      };\r\n    }\r\n\r\n    // Calculate new end date maintaining duration\r\n    const duration = task.startDate && task.endDate\r\n      ? Math.round((task.endDate.getTime() - task.startDate.getTime()) / (1000 * 60 * 60 * 24))\r\n      : 1;\r\n    const newEndDate = new Date(newDate);\r\n    newEndDate.setDate(newEndDate.getDate() + duration);\r\n\r\n    return {\r\n      type: 'move_task',\r\n      taskId: task.id,\r\n      taskName: task.name,\r\n      updates: {\r\n        startDate: newDate,\r\n        endDate: newEndDate,\r\n      },\r\n      message: `Moved \"${task.name}\" to ${newDate.toLocaleDateString()}.`,\r\n      success: true,\r\n    };\r\n  }\r\n\r\n  // Extend task pattern: \"extend X by Y days\"\r\n  const extendMatch = normalized.match(/(?:extend|extender|extiende|alargar)\\s+[\"\"\"]?(.+?)[\"\"\"]?\\s+(?:by|por)\\s+(.+)/i);\r\n  if (extendMatch && extendMatch[1] && extendMatch[2]) {\r\n    const taskName = extendMatch[1].trim();\r\n    const durationText = extendMatch[2].trim();\r\n    const task = findTaskByName(tasks, taskName);\r\n    const days = parseNaturalDuration(durationText);\r\n\r\n    if (!task) {\r\n      return {\r\n        type: 'resize_task',\r\n        taskName,\r\n        message: `Could not find a task named \"${taskName}\".`,\r\n        success: false,\r\n        error: 'Task not found',\r\n      };\r\n    }\r\n\r\n    if (!days || !task.endDate) {\r\n      return {\r\n        type: 'resize_task',\r\n        taskId: task.id,\r\n        taskName: task.name,\r\n        message: `Could not parse the duration \"${durationText}\".`,\r\n        success: false,\r\n        error: 'Invalid duration',\r\n      };\r\n    }\r\n\r\n    const newEndDate = new Date(task.endDate);\r\n    newEndDate.setDate(newEndDate.getDate() + days);\r\n\r\n    return {\r\n      type: 'resize_task',\r\n      taskId: task.id,\r\n      taskName: task.name,\r\n      updates: { endDate: newEndDate },\r\n      message: `Extended \"${task.name}\" by ${days} days. New end date: ${newEndDate.toLocaleDateString()}.`,\r\n      success: true,\r\n    };\r\n  }\r\n\r\n  // Set progress pattern: \"set X progress to Y%\"\r\n  const progressMatch = normalized.match(/(?:set|establecer|poner)\\s+[\"\"\"]?(.+?)[\"\"\"]?\\s+(?:progress|progreso)\\s+(?:to|a|en)\\s+(.+)/i);\r\n  if (progressMatch && progressMatch[1] && progressMatch[2]) {\r\n    const taskName = progressMatch[1].trim();\r\n    const progressText = progressMatch[2].trim();\r\n    const task = findTaskByName(tasks, taskName);\r\n    const progress = parseProgress(progressText);\r\n\r\n    if (!task) {\r\n      return {\r\n        type: 'set_progress',\r\n        taskName,\r\n        message: `Could not find a task named \"${taskName}\".`,\r\n        success: false,\r\n        error: 'Task not found',\r\n      };\r\n    }\r\n\r\n    if (progress === null) {\r\n      return {\r\n        type: 'set_progress',\r\n        taskId: task.id,\r\n        taskName: task.name,\r\n        message: `Could not parse the progress value \"${progressText}\".`,\r\n        success: false,\r\n        error: 'Invalid progress',\r\n      };\r\n    }\r\n\r\n    return {\r\n      type: 'set_progress',\r\n      taskId: task.id,\r\n      taskName: task.name,\r\n      updates: { progress },\r\n      message: `Set \"${task.name}\" progress to ${progress}%.`,\r\n      success: true,\r\n    };\r\n  }\r\n\r\n  // Rename pattern: \"rename X to Y\"\r\n  const renameMatch = normalized.match(/(?:rename|renombrar|cambiar nombre de)\\s+[\"\"\"]?(.+?)[\"\"\"]?\\s+(?:to|a|por)\\s+[\"\"\"]?(.+?)[\"\"\"]?$/i);\r\n  if (renameMatch && renameMatch[1] && renameMatch[2]) {\r\n    const oldName = renameMatch[1].trim();\r\n    const newName = renameMatch[2].trim();\r\n    const task = findTaskByName(tasks, oldName);\r\n\r\n    if (!task) {\r\n      return {\r\n        type: 'rename_task',\r\n        taskName: oldName,\r\n        message: `Could not find a task named \"${oldName}\".`,\r\n        success: false,\r\n        error: 'Task not found',\r\n      };\r\n    }\r\n\r\n    return {\r\n      type: 'rename_task',\r\n      taskId: task.id,\r\n      taskName: task.name,\r\n      updates: { name: newName },\r\n      message: `Renamed \"${task.name}\" to \"${newName}\".`,\r\n      success: true,\r\n    };\r\n  }\r\n\r\n  // Link tasks pattern: \"link X to Y\"\r\n  const linkMatch = normalized.match(/(?:link|vincular|conectar)\\s+[\"\"\"]?(.+?)[\"\"\"]?\\s+(?:to|a|con)\\s+[\"\"\"]?(.+?)[\"\"\"]?$/i);\r\n  if (linkMatch && linkMatch[1] && linkMatch[2]) {\r\n    const fromName = linkMatch[1].trim();\r\n    const toName = linkMatch[2].trim();\r\n    const fromTask = findTaskByName(tasks, fromName);\r\n    const toTask = findTaskByName(tasks, toName);\r\n\r\n    if (!fromTask) {\r\n      return {\r\n        type: 'link_tasks',\r\n        taskName: fromName,\r\n        message: `Could not find a task named \"${fromName}\".`,\r\n        success: false,\r\n        error: 'Source task not found',\r\n      };\r\n    }\r\n\r\n    if (!toTask) {\r\n      return {\r\n        type: 'link_tasks',\r\n        taskName: toName,\r\n        message: `Could not find a task named \"${toName}\".`,\r\n        success: false,\r\n        error: 'Target task not found',\r\n      };\r\n    }\r\n\r\n    return {\r\n      type: 'link_tasks',\r\n      taskId: toTask.id,\r\n      taskName: toTask.name,\r\n      dependencyFrom: fromTask.id,\r\n      dependencyTo: toTask.id,\r\n      message: `Linked \"${fromTask.name}\" → \"${toTask.name}\".`,\r\n      success: true,\r\n    };\r\n  }\r\n\r\n  // Delete pattern: \"delete X\"\r\n  const deleteMatch = normalized.match(/(?:delete|eliminar|borrar|remove|quitar)\\s+[\"\"\"]?(.+?)[\"\"\"]?$/i);\r\n  if (deleteMatch && deleteMatch[1]) {\r\n    const taskName = deleteMatch[1].trim();\r\n    const task = findTaskByName(tasks, taskName);\r\n\r\n    if (!task) {\r\n      return {\r\n        type: 'delete_task',\r\n        taskName,\r\n        message: `Could not find a task named \"${taskName}\".`,\r\n        success: false,\r\n        error: 'Task not found',\r\n      };\r\n    }\r\n\r\n    return {\r\n      type: 'delete_task',\r\n      taskId: task.id,\r\n      taskName: task.name,\r\n      message: `Deleted \"${task.name}\".`,\r\n      success: true,\r\n    };\r\n  }\r\n\r\n  // No local pattern matched - return null to indicate AI should handle it\r\n  return null;\r\n}\r\n\r\n/**\r\n * Validate and sanitize AI response\r\n */\r\nexport function validateAIResponse(response: unknown): AICommandResult {\r\n  if (!response || typeof response !== 'object') {\r\n    return {\r\n      type: 'unknown',\r\n      message: 'Invalid response from AI',\r\n      success: false,\r\n      error: 'Invalid response format',\r\n    };\r\n  }\r\n\r\n  const r = response as Record<string, unknown>;\r\n\r\n  return {\r\n    type: (r.type as AICommandResult['type']) || 'unknown',\r\n    taskId: typeof r.taskId === 'string' ? r.taskId : undefined,\r\n    taskName: typeof r.taskName === 'string' ? r.taskName : undefined,\r\n    updates: r.updates as Partial<Task> | undefined,\r\n    newTask: r.newTask as Task | undefined,\r\n    dependencyFrom: typeof r.dependencyFrom === 'string' ? r.dependencyFrom : undefined,\r\n    dependencyTo: typeof r.dependencyTo === 'string' ? r.dependencyTo : undefined,\r\n    message: typeof r.message === 'string' ? r.message : 'Command processed',\r\n    success: typeof r.success === 'boolean' ? r.success : false,\r\n    error: typeof r.error === 'string' ? r.error : undefined,\r\n  };\r\n}\r\n","/**\r\n * Type adapters for converting between ASAKAA Card types and Gantt Task types\r\n * @module Gantt/adapters\r\n */\r\n\r\nimport type { Card } from '../../types'\r\nimport type { Task, Assignee } from './types'\r\n\r\n/**\r\n * Maps ASAKAA CardStatus to Gantt task status\r\n */\r\nfunction mapCardStatusToTaskStatus(\r\n  status?: string\r\n): 'todo' | 'in-progress' | 'completed' | undefined {\r\n  if (!status) return undefined\r\n\r\n  switch (status.toUpperCase()) {\r\n    case 'TODO':\r\n    case 'BLOCKED':\r\n      return 'todo'\r\n    case 'IN_PROGRESS':\r\n    case 'REVIEW':\r\n      return 'in-progress'\r\n    case 'DONE':\r\n      return 'completed'\r\n    default:\r\n      return 'todo'\r\n  }\r\n}\r\n\r\n/**\r\n * Maps Gantt task status to ASAKAA CardStatus\r\n */\r\nfunction mapTaskStatusToCardStatus(\r\n  status?: 'todo' | 'in-progress' | 'completed'\r\n): 'TODO' | 'IN_PROGRESS' | 'DONE' {\r\n  switch (status) {\r\n    case 'todo':\r\n      return 'TODO'\r\n    case 'in-progress':\r\n      return 'IN_PROGRESS'\r\n    case 'completed':\r\n      return 'DONE'\r\n    default:\r\n      return 'TODO'\r\n  }\r\n}\r\n\r\n/**\r\n * Converts an ASAKAA Card to a Gantt Task\r\n *\r\n * @param card - ASAKAA Card object\r\n * @param allCards - All cards in the board (for resolving subtasks)\r\n * @param users - Available users for assignee mapping\r\n * @returns Gantt Task object\r\n */\r\nexport function cardToGanttTask(\r\n  card: Card,\r\n  allCards: Card[] = [],\r\n  users: Array<{ id: string; name: string; initials: string; color: string }> = []\r\n): Task {\r\n  // Map assignees\r\n  const assignees: Assignee[] | undefined = card.assignedUserIds\r\n    ?.map((userId) => {\r\n      const user = users.find((u) => u.id === userId)\r\n      if (!user) return null\r\n      return {\r\n        name: user.name,\r\n        initials: user.initials,\r\n        color: user.color,\r\n      }\r\n    })\r\n    .filter((a): a is Assignee => a !== null)\r\n\r\n  // Find subtasks (cards that reference this card as parent)\r\n  const subtasks: Task[] | undefined = allCards\r\n    .filter((c) => c.metadata?.parentCardId === card.id)\r\n    .map((c) => cardToGanttTask(c, allCards, users))\r\n\r\n  // Extract dependency IDs\r\n  let dependencies: string[] | undefined\r\n  if (card.dependencies) {\r\n    if (typeof card.dependencies[0] === 'string') {\r\n      // Legacy format: string[]\r\n      dependencies = card.dependencies as string[]\r\n    } else {\r\n      // New format: Dependency[] - only use finish-to-start\r\n      dependencies = (card.dependencies as any[])\r\n        .filter((dep) => dep.type === 'finish-to-start')\r\n        .map((dep) => dep.taskId)\r\n    }\r\n  }\r\n\r\n  // Parse dates (handle both Date and string) - allow undefined for tasks without dates\r\n  const parseDate = (date: Date | string | undefined): Date | undefined => {\r\n    if (!date) return undefined\r\n    return typeof date === 'string' ? new Date(date) : date\r\n  }\r\n\r\n  const startDate = parseDate(card.startDate)\r\n  const endDate = parseDate(card.endDate)\r\n\r\n  // Determine if this is a milestone (0 or 1 day duration, or explicitly marked)\r\n  const isMilestone = card.metadata?.isMilestone === true ||\r\n    (startDate && endDate && Math.abs(endDate.getTime() - startDate.getTime()) <= 86400000)\r\n\r\n  return {\r\n    id: card.id,\r\n    name: card.title,\r\n    startDate,\r\n    endDate,\r\n    progress: card.progress || 0,\r\n    status: mapCardStatusToTaskStatus(card.metadata?.status as string),\r\n    assignees: assignees?.length ? assignees : undefined,\r\n    dependencies: dependencies?.length ? dependencies : undefined,\r\n    subtasks: subtasks?.length ? subtasks : undefined,\r\n    isExpanded: card.metadata?.isExpanded === true,\r\n    isMilestone,\r\n    isCriticalPath: card.metadata?.isCriticalPath === true,\r\n  }\r\n}\r\n\r\n/**\r\n * Converts a Gantt Task back to an ASAKAA Card (partial update)\r\n * Note: This only returns the fields that Gantt can modify\r\n *\r\n * @param task - Gantt Task object\r\n * @param users - Available users for reverse mapping assignees to userIds\r\n * @returns Partial Card update object\r\n */\r\nexport function ganttTaskToCardUpdate(\r\n  task: Task,\r\n  users: Array<{ id: string; name: string; initials: string; color: string }> = []\r\n): Partial<Card> {\r\n  // Convert assignees back to userIds\r\n  let assignedUserIds: string[] | undefined\r\n  if (task.assignees && task.assignees.length > 0) {\r\n    assignedUserIds = task.assignees\r\n      .map((assignee) => {\r\n        // Find user by name or initials\r\n        const user = users.find(\r\n          (u) => u.name === assignee.name || u.initials === assignee.initials\r\n        )\r\n        return user?.id\r\n      })\r\n      .filter((id): id is string => id !== undefined)\r\n  }\r\n\r\n  return {\r\n    id: task.id,\r\n    title: task.name,\r\n    startDate: task.startDate,\r\n    endDate: task.endDate,\r\n    progress: task.progress,\r\n    assignedUserIds: assignedUserIds?.length ? assignedUserIds : undefined,\r\n    metadata: {\r\n      status: mapTaskStatusToCardStatus(task.status),\r\n      isExpanded: task.isExpanded,\r\n      isMilestone: task.isMilestone,\r\n      isCriticalPath: task.isCriticalPath,\r\n    },\r\n  }\r\n}\r\n\r\n/**\r\n * Converts an array of Cards to an array of Gantt Tasks\r\n *\r\n * @param cards - Array of ASAKAA Card objects\r\n * @param users - Available users for assignee mapping\r\n * @returns Array of Gantt Task objects\r\n */\r\nexport function cardsToGanttTasks(\r\n  cards: Card[],\r\n  users: Array<{ id: string; name: string; initials: string; color: string }> = []\r\n): Task[] {\r\n  // Filter out cards that are subtasks (have parentCardId)\r\n  const topLevelCards = cards.filter((c) => !c.metadata?.parentCardId)\r\n\r\n  return topLevelCards.map((card) => cardToGanttTask(card, cards, users))\r\n}\r\n","/**\r\n * Internationalization (i18n) for ListView\r\n * @version 0.17.0\r\n */\r\n\r\nimport type { ListViewTranslations } from './types';\r\n\r\nexport type ListViewSupportedLocale = 'en' | 'es';\r\n\r\n/**\r\n * English translations\r\n */\r\nexport const en: ListViewTranslations = {\r\n  columns: {\r\n    name: 'Task Name',\r\n    startDate: 'Start Date',\r\n    endDate: 'End Date',\r\n    progress: 'Progress',\r\n    status: 'Status',\r\n    assignees: 'Assignees',\r\n    priority: 'Priority',\r\n    actions: 'Actions',\r\n  },\r\n\r\n  toolbar: {\r\n    search: 'Search',\r\n    searchPlaceholder: 'Search tasks...',\r\n    filter: 'Filter',\r\n    clearFilters: 'Clear Filters',\r\n    export: 'Export',\r\n    columns: 'Columns',\r\n    newTask: 'New Task',\r\n  },\r\n\r\n  filters: {\r\n    status: 'Status',\r\n    assignees: 'Assignees',\r\n    dateRange: 'Date Range',\r\n    showCompleted: 'Show Completed',\r\n    all: 'All',\r\n    none: 'None',\r\n  },\r\n\r\n  status: {\r\n    todo: 'To Do',\r\n    inProgress: 'In Progress',\r\n    completed: 'Completed',\r\n  },\r\n\r\n  actions: {\r\n    edit: 'Edit',\r\n    delete: 'Delete',\r\n    duplicate: 'Duplicate',\r\n    viewDetails: 'View Details',\r\n  },\r\n\r\n  empty: {\r\n    noTasks: 'No tasks yet',\r\n    noResults: 'No tasks match your filters',\r\n    addFirstTask: 'Add your first task',\r\n  },\r\n\r\n  pagination: {\r\n    showing: 'Showing',\r\n    of: 'of',\r\n    tasks: 'tasks',\r\n    previous: 'Previous',\r\n    next: 'Next',\r\n  },\r\n\r\n  bulk: {\r\n    selected: 'selected',\r\n    delete: 'Delete',\r\n    move: 'Move to',\r\n    assignTo: 'Assign to',\r\n  },\r\n};\r\n\r\n/**\r\n * Spanish translations\r\n */\r\nexport const es: ListViewTranslations = {\r\n  columns: {\r\n    name: 'Nombre de Tarea',\r\n    startDate: 'Fecha Inicio',\r\n    endDate: 'Fecha Fin',\r\n    progress: 'Progreso',\r\n    status: 'Estado',\r\n    assignees: 'Asignados',\r\n    priority: 'Prioridad',\r\n    actions: 'Acciones',\r\n  },\r\n\r\n  toolbar: {\r\n    search: 'Buscar',\r\n    searchPlaceholder: 'Buscar tareas...',\r\n    filter: 'Filtrar',\r\n    clearFilters: 'Limpiar Filtros',\r\n    export: 'Exportar',\r\n    columns: 'Columnas',\r\n    newTask: 'Nueva Tarea',\r\n  },\r\n\r\n  filters: {\r\n    status: 'Estado',\r\n    assignees: 'Asignados',\r\n    dateRange: 'Rango de Fechas',\r\n    showCompleted: 'Mostrar Completadas',\r\n    all: 'Todos',\r\n    none: 'Ninguno',\r\n  },\r\n\r\n  status: {\r\n    todo: 'Por Hacer',\r\n    inProgress: 'En Progreso',\r\n    completed: 'Completado',\r\n  },\r\n\r\n  actions: {\r\n    edit: 'Editar',\r\n    delete: 'Eliminar',\r\n    duplicate: 'Duplicar',\r\n    viewDetails: 'Ver Detalles',\r\n  },\r\n\r\n  empty: {\r\n    noTasks: 'Sin tareas aún',\r\n    noResults: 'Ninguna tarea coincide con los filtros',\r\n    addFirstTask: 'Agrega tu primera tarea',\r\n  },\r\n\r\n  pagination: {\r\n    showing: 'Mostrando',\r\n    of: 'de',\r\n    tasks: 'tareas',\r\n    previous: 'Anterior',\r\n    next: 'Siguiente',\r\n  },\r\n\r\n  bulk: {\r\n    selected: 'seleccionadas',\r\n    delete: 'Eliminar',\r\n    move: 'Mover a',\r\n    assignTo: 'Asignar a',\r\n  },\r\n};\r\n\r\n/**\r\n * All available translations\r\n */\r\nexport const listViewTranslations: Record<ListViewSupportedLocale, ListViewTranslations> = {\r\n  en,\r\n  es,\r\n};\r\n\r\n/**\r\n * Get translations for a specific locale\r\n */\r\nexport function getListViewTranslations(locale: ListViewSupportedLocale | string): ListViewTranslations {\r\n  return listViewTranslations[locale as ListViewSupportedLocale] || listViewTranslations.en;\r\n}\r\n\r\n/**\r\n * Merge custom translations with default translations\r\n */\r\nexport function mergeListViewTranslations(\r\n  locale: ListViewSupportedLocale | string,\r\n  customTranslations?: Partial<ListViewTranslations>\r\n): ListViewTranslations {\r\n  const base = getListViewTranslations(locale);\r\n\r\n  if (!customTranslations) {\r\n    return base;\r\n  }\r\n\r\n  return {\r\n    columns: { ...base.columns, ...customTranslations.columns },\r\n    toolbar: { ...base.toolbar, ...customTranslations.toolbar },\r\n    filters: { ...base.filters, ...customTranslations.filters },\r\n    status: { ...base.status, ...customTranslations.status },\r\n    actions: { ...base.actions, ...customTranslations.actions },\r\n    empty: { ...base.empty, ...customTranslations.empty },\r\n    pagination: { ...base.pagination, ...customTranslations.pagination },\r\n    bulk: { ...base.bulk, ...customTranslations.bulk },\r\n  };\r\n}\r\n","/**\r\n * ListView Component\r\n * Professional list view for task management\r\n * Based on SaaS ProjectList component styles\r\n * @version 0.17.0\r\n */\r\n\r\nimport { useState, useMemo, useCallback } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport {\r\n  List,\r\n  ChevronDown,\r\n  ChevronRight,\r\n  Calendar,\r\n  Clock,\r\n  CheckCircle2,\r\n  Circle,\r\n  PlayCircle,\r\n  ArrowUpDown,\r\n  Search,\r\n} from 'lucide-react';\r\nimport type { Task } from '../Gantt/types';\r\nimport type { ListViewProps, FlattenedTask } from './types';\r\nimport { mergeListViewTranslations } from './i18n';\r\nimport { cn } from '../../utils';\r\n\r\ntype SortField = 'name' | 'startDate' | 'endDate' | 'progress' | 'status';\r\ntype SortOrder = 'asc' | 'desc';\r\n\r\n/**\r\n * Flatten hierarchical tasks to flat list with level info\r\n */\r\nfunction flattenTasksWithLevel(tasks: Task[], level = 0): FlattenedTask[] {\r\n  const result: FlattenedTask[] = [];\r\n\r\n  for (const task of tasks) {\r\n    result.push({\r\n      ...task,\r\n      level,\r\n      hasChildren: (task.subtasks?.length || 0) > 0,\r\n      parentPath: [task.id],\r\n    });\r\n    if (task.subtasks?.length && task.isExpanded !== false) {\r\n      result.push(...flattenTasksWithLevel(task.subtasks, level + 1));\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * Status Icon component\r\n */\r\nfunction StatusIcon({ status, progress }: { status?: string; progress?: number }) {\r\n  if (progress === 100 || status === 'completed') {\r\n    return <CheckCircle2 className=\"w-5 h-5 text-green-500\" />;\r\n  }\r\n  if ((progress && progress > 0) || status === 'in-progress') {\r\n    return <PlayCircle className=\"w-5 h-5 text-blue-500\" />;\r\n  }\r\n  return <Circle className=\"w-5 h-5 text-gray-400\" />;\r\n}\r\n\r\n/**\r\n * Main ListView Component\r\n */\r\nexport function ListView({\r\n  tasks,\r\n  config = {},\r\n  callbacks = {},\r\n  isLoading = false,\r\n  error,\r\n  className,\r\n  style,\r\n}: ListViewProps) {\r\n  const {\r\n    theme: themeName = 'dark',\r\n    locale = 'en',\r\n    customTranslations,\r\n    showSearch = true,\r\n    showHierarchy = true,\r\n  } = config;\r\n\r\n  const t = mergeListViewTranslations(locale, customTranslations);\r\n  const isDark = themeName === 'dark';\r\n\r\n  // State\r\n  const [expandedTasks, setExpandedTasks] = useState<Set<string>>(new Set());\r\n  const [sortField, setSortField] = useState<SortField>('startDate');\r\n  const [sortOrder, setSortOrder] = useState<SortOrder>('asc');\r\n  const [searchQuery, setSearchQuery] = useState('');\r\n\r\n  // Initialize expanded tasks\r\n  useMemo(() => {\r\n    const parentIds = new Set<string>();\r\n    function findParents(taskList: Task[]) {\r\n      for (const task of taskList) {\r\n        if (task.subtasks?.length) {\r\n          parentIds.add(task.id);\r\n          findParents(task.subtasks);\r\n        }\r\n      }\r\n    }\r\n    findParents(tasks);\r\n    setExpandedTasks(parentIds);\r\n  }, [tasks]);\r\n\r\n  // Toggle task expansion\r\n  const toggleExpand = useCallback((taskId: string) => {\r\n    setExpandedTasks(prev => {\r\n      const next = new Set(prev);\r\n      if (next.has(taskId)) {\r\n        next.delete(taskId);\r\n      } else {\r\n        next.add(taskId);\r\n      }\r\n      return next;\r\n    });\r\n    callbacks.onTaskToggleExpand?.(taskId);\r\n  }, [callbacks]);\r\n\r\n  // Sort handler\r\n  const handleSort = useCallback((field: SortField) => {\r\n    if (sortField === field) {\r\n      setSortOrder(prev => prev === 'asc' ? 'desc' : 'asc');\r\n    } else {\r\n      setSortField(field);\r\n      setSortOrder('asc');\r\n    }\r\n    callbacks.onSortChange?.({ column: field, direction: sortOrder === 'asc' ? 'desc' : 'asc' });\r\n  }, [sortField, sortOrder, callbacks]);\r\n\r\n  // Filter and sort tasks\r\n  const displayTasks = useMemo(() => {\r\n    let flatTasks = flattenTasksWithLevel(tasks);\r\n\r\n    // Filter by search\r\n    if (searchQuery.trim()) {\r\n      const query = searchQuery.toLowerCase();\r\n      flatTasks = flatTasks.filter(task =>\r\n        task.name.toLowerCase().includes(query)\r\n      );\r\n    }\r\n\r\n    // Filter by expanded state\r\n    const visibleTasks: FlattenedTask[] = [];\r\n    for (const task of flatTasks) {\r\n      let isVisible = task.level === 0;\r\n      if (task.level > 0) {\r\n        isVisible = true;\r\n      }\r\n      if (isVisible || searchQuery.trim()) {\r\n        visibleTasks.push(task);\r\n      }\r\n    }\r\n\r\n    // Sort\r\n    if (searchQuery.trim()) {\r\n      visibleTasks.sort((a, b) => {\r\n        let aVal: string | number, bVal: string | number;\r\n\r\n        switch (sortField) {\r\n          case 'name':\r\n            aVal = a.name.toLowerCase();\r\n            bVal = b.name.toLowerCase();\r\n            break;\r\n          case 'startDate':\r\n            aVal = a.startDate?.getTime() || 0;\r\n            bVal = b.startDate?.getTime() || 0;\r\n            break;\r\n          case 'endDate':\r\n            aVal = a.endDate?.getTime() || 0;\r\n            bVal = b.endDate?.getTime() || 0;\r\n            break;\r\n          case 'progress':\r\n            aVal = a.progress || 0;\r\n            bVal = b.progress || 0;\r\n            break;\r\n          case 'status':\r\n            aVal = a.status || 'todo';\r\n            bVal = b.status || 'todo';\r\n            break;\r\n          default:\r\n            return 0;\r\n        }\r\n\r\n        if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1;\r\n        if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1;\r\n        return 0;\r\n      });\r\n    }\r\n\r\n    return visibleTasks;\r\n  }, [tasks, searchQuery, sortField, sortOrder]);\r\n\r\n  // Format date\r\n  const formatDate = (date?: Date) => {\r\n    if (!date) return '-';\r\n    const d = date instanceof Date ? date : new Date(date);\r\n    return d.toLocaleDateString(locale === 'es' ? 'es-ES' : 'en-US', {\r\n      day: 'numeric',\r\n      month: 'short',\r\n    });\r\n  };\r\n\r\n  // Loading state\r\n  if (isLoading) {\r\n    return (\r\n      <div className={cn(\"flex-1 flex items-center justify-center\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n        <div className=\"flex flex-col items-center gap-4\">\r\n          <div className=\"w-8 h-8 animate-spin rounded-full border-b-2 border-[#3B82F6]\" />\r\n          <p className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n            {t.empty.noTasks}...\r\n          </p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // Error state\r\n  if (error) {\r\n    return (\r\n      <div className={cn(\"flex-1 flex items-center justify-center\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n        <div className=\"flex flex-col items-center gap-4 max-w-md text-center\">\r\n          <div className=\"w-12 h-12 rounded-full bg-red-500/10 flex items-center justify-center\">\r\n            <span className=\"text-red-500 text-2xl\">⚠</span>\r\n          </div>\r\n          <div>\r\n            <h3 className={cn(\"text-lg font-semibold mb-2\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n              Error\r\n            </h3>\r\n            <p className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n              {typeof error === 'string' ? error : error.message}\r\n            </p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // Empty state\r\n  if (tasks.length === 0) {\r\n    return (\r\n      <div className={cn(\"flex-1 flex items-center justify-center\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n        <div className=\"text-center max-w-md\">\r\n          <div className=\"w-16 h-16 mx-auto mb-4 rounded-2xl bg-[#3B82F6]/10 flex items-center justify-center\">\r\n            <List className=\"w-8 h-8 text-[#3B82F6]\" />\r\n          </div>\r\n          <h3 className={cn(\"text-lg font-semibold mb-2\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n            {t.empty.noTasks}\r\n          </h3>\r\n          <p className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n            {t.empty.addFirstTask}\r\n          </p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className={cn(\"flex-1 flex flex-col w-full h-full overflow-hidden\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n      {/* Toolbar */}\r\n      <div className={cn(\"flex-shrink-0 px-6 py-4 border-b\", isDark ? \"border-white/10\" : \"border-gray-200\")}>\r\n        <div className=\"flex items-center gap-4\">\r\n          {/* Search */}\r\n          {showSearch && (\r\n            <div className=\"relative flex-1 max-w-md\">\r\n              <Search className={cn(\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-400\")} />\r\n              <input\r\n                type=\"text\"\r\n                value={searchQuery}\r\n                onChange={(e) => setSearchQuery(e.target.value)}\r\n                placeholder={t.toolbar.searchPlaceholder}\r\n                className={cn(\r\n                  \"w-full h-9 pl-10 pr-4 rounded-lg border outline-none focus:ring-2 focus:ring-[#3B82F6]/30\",\r\n                  isDark\r\n                    ? \"bg-white/5 border-white/10 text-white placeholder:text-[#6B7280]\"\r\n                    : \"bg-gray-100 border-gray-200 text-gray-900 placeholder:text-gray-400\"\r\n                )}\r\n              />\r\n            </div>\r\n          )}\r\n\r\n          {/* Task count */}\r\n          <div className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n            {displayTasks.length} {t.pagination.tasks}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      {/* List Header */}\r\n      <div className={cn(\r\n        \"flex-shrink-0 grid grid-cols-12 gap-4 px-6 py-3 border-b text-xs font-medium uppercase tracking-wider\",\r\n        isDark ? \"border-white/10 bg-white/5 text-[#9CA3AF]\" : \"border-gray-200 bg-gray-50 text-gray-500\"\r\n      )}>\r\n        <div className=\"col-span-5 flex items-center gap-2\">\r\n          <button onClick={() => handleSort('name')} className=\"flex items-center gap-1 hover:text-[#3B82F6]\">\r\n            {t.columns.name}\r\n            <ArrowUpDown className=\"w-3 h-3\" />\r\n          </button>\r\n        </div>\r\n        <div className=\"col-span-2 flex items-center gap-1\">\r\n          <button onClick={() => handleSort('status')} className=\"flex items-center gap-1 hover:text-[#3B82F6]\">\r\n            {t.columns.status}\r\n            <ArrowUpDown className=\"w-3 h-3\" />\r\n          </button>\r\n        </div>\r\n        <div className=\"col-span-2 flex items-center gap-1\">\r\n          <button onClick={() => handleSort('startDate')} className=\"flex items-center gap-1 hover:text-[#3B82F6]\">\r\n            {t.columns.startDate}\r\n            <ArrowUpDown className=\"w-3 h-3\" />\r\n          </button>\r\n        </div>\r\n        <div className=\"col-span-2 flex items-center gap-1\">\r\n          <button onClick={() => handleSort('endDate')} className=\"flex items-center gap-1 hover:text-[#3B82F6]\">\r\n            {t.columns.endDate}\r\n            <ArrowUpDown className=\"w-3 h-3\" />\r\n          </button>\r\n        </div>\r\n        <div className=\"col-span-1 flex items-center gap-1\">\r\n          <button onClick={() => handleSort('progress')} className=\"flex items-center gap-1 hover:text-[#3B82F6]\">\r\n            %\r\n            <ArrowUpDown className=\"w-3 h-3\" />\r\n          </button>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Task List */}\r\n      <div className=\"flex-1 overflow-auto\">\r\n        <AnimatePresence>\r\n          {displayTasks.map((task, index) => {\r\n            const isExpanded = expandedTasks.has(task.id);\r\n\r\n            return (\r\n              <motion.div\r\n                key={task.id}\r\n                initial={{ opacity: 0, y: -10 }}\r\n                animate={{ opacity: 1, y: 0 }}\r\n                exit={{ opacity: 0, y: -10 }}\r\n                transition={{ delay: index * 0.02 }}\r\n                className={cn(\r\n                  \"grid grid-cols-12 gap-4 px-6 py-3 border-b transition-colors cursor-pointer\",\r\n                  isDark\r\n                    ? \"border-white/5 hover:bg-white/5\"\r\n                    : \"border-gray-100 hover:bg-gray-50\"\r\n                )}\r\n                style={{ paddingLeft: showHierarchy ? `${24 + task.level * 24}px` : undefined }}\r\n                onClick={() => callbacks.onTaskClick?.(task)}\r\n                onDoubleClick={() => callbacks.onTaskDoubleClick?.(task)}\r\n              >\r\n                {/* Task Name */}\r\n                <div className=\"col-span-5 flex items-center gap-2 min-w-0\">\r\n                  {showHierarchy && task.hasChildren && (\r\n                    <button\r\n                      onClick={(e) => {\r\n                        e.stopPropagation();\r\n                        toggleExpand(task.id);\r\n                      }}\r\n                      className={cn(\"p-0.5 rounded\", isDark ? \"hover:bg-white/10\" : \"hover:bg-gray-200\")}\r\n                    >\r\n                      {isExpanded ? (\r\n                        <ChevronDown className={cn(\"w-4 h-4\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-400\")} />\r\n                      ) : (\r\n                        <ChevronRight className={cn(\"w-4 h-4\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-400\")} />\r\n                      )}\r\n                    </button>\r\n                  )}\r\n                  {showHierarchy && !task.hasChildren && <div className=\"w-5\" />}\r\n\r\n                  <button\r\n                    onClick={(e) => {\r\n                      e.stopPropagation();\r\n                      callbacks.onTaskUpdate?.({\r\n                        ...task,\r\n                        progress: task.progress === 100 ? 0 : 100,\r\n                        status: task.progress === 100 ? 'todo' : 'completed'\r\n                      });\r\n                    }}\r\n                    className=\"flex-shrink-0\"\r\n                  >\r\n                    <StatusIcon status={task.status} progress={task.progress} />\r\n                  </button>\r\n\r\n                  <span className={cn(\r\n                    \"truncate\",\r\n                    isDark ? \"text-white\" : \"text-gray-900\",\r\n                    task.progress === 100 && (isDark ? \"line-through text-[#6B7280]\" : \"line-through text-gray-400\")\r\n                  )}>\r\n                    {task.name}\r\n                  </span>\r\n                </div>\r\n\r\n                {/* Status */}\r\n                <div className=\"col-span-2 flex items-center\">\r\n                  <span className={cn(\r\n                    \"px-2 py-1 rounded-full text-xs font-medium\",\r\n                    task.progress === 100 || task.status === 'completed'\r\n                      ? \"bg-green-500/10 text-green-500\"\r\n                      : (task.progress && task.progress > 0) || task.status === 'in-progress'\r\n                        ? \"bg-blue-500/10 text-blue-500\"\r\n                        : isDark\r\n                          ? \"bg-white/10 text-[#9CA3AF]\"\r\n                          : \"bg-gray-100 text-gray-600\"\r\n                  )}>\r\n                    {task.progress === 100 || task.status === 'completed'\r\n                      ? t.status.completed\r\n                      : (task.progress && task.progress > 0) || task.status === 'in-progress'\r\n                        ? t.status.inProgress\r\n                        : t.status.todo}\r\n                  </span>\r\n                </div>\r\n\r\n                {/* Start Date */}\r\n                <div className={cn(\"col-span-2 flex items-center gap-1 text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n                  <Calendar className=\"w-4 h-4\" />\r\n                  {formatDate(task.startDate)}\r\n                </div>\r\n\r\n                {/* End Date */}\r\n                <div className={cn(\"col-span-2 flex items-center gap-1 text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n                  <Clock className=\"w-4 h-4\" />\r\n                  {formatDate(task.endDate)}\r\n                </div>\r\n\r\n                {/* Progress */}\r\n                <div className=\"col-span-1 flex items-center\">\r\n                  <div className=\"flex items-center gap-2 w-full\">\r\n                    <div className={cn(\"flex-1 h-1.5 rounded-full overflow-hidden\", isDark ? \"bg-white/10\" : \"bg-gray-200\")}>\r\n                      <div\r\n                        className={cn(\r\n                          \"h-full rounded-full transition-all\",\r\n                          task.progress === 100 ? \"bg-green-500\" : \"bg-[#3B82F6]\"\r\n                        )}\r\n                        style={{ width: `${task.progress || 0}%` }}\r\n                      />\r\n                    </div>\r\n                    <span className={cn(\"text-xs w-8\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-500\")}>\r\n                      {task.progress || 0}%\r\n                    </span>\r\n                  </div>\r\n                </div>\r\n              </motion.div>\r\n            );\r\n          })}\r\n        </AnimatePresence>\r\n\r\n        {/* Empty search state */}\r\n        {displayTasks.length === 0 && searchQuery && (\r\n          <div className=\"flex items-center justify-center py-12\">\r\n            <div className=\"text-center\">\r\n              <List className={cn(\"w-12 h-12 mx-auto mb-4\", isDark ? \"text-[#6B7280]\" : \"text-gray-400\")} />\r\n              <p className={cn(isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n                {t.empty.noResults}\r\n              </p>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default ListView;\r\n","/**\r\n * ListView Themes\r\n * @version 0.17.0\r\n */\r\n\r\nimport type { ListViewTheme } from './types';\r\n\r\n/**\r\n * Dark theme for ListView\r\n */\r\nexport const darkTheme: ListViewTheme = {\r\n  // Backgrounds\r\n  bgPrimary: '#0d1117',\r\n  bgSecondary: '#161b22',\r\n  bgHover: '#21262d',\r\n  bgSelected: '#1f6feb20',\r\n  bgAlternate: '#0d111780',\r\n\r\n  // Borders\r\n  border: '#30363d',\r\n  borderLight: '#21262d',\r\n\r\n  // Text\r\n  textPrimary: '#c9d1d9',\r\n  textSecondary: '#8b949e',\r\n  textMuted: '#6e7681',\r\n\r\n  // Accent colors\r\n  accent: '#58a6ff',\r\n  accentHover: '#79b8ff',\r\n  accentLight: '#58a6ff20',\r\n\r\n  // Status colors\r\n  statusTodo: '#8b949e',\r\n  statusInProgress: '#f0883e',\r\n  statusCompleted: '#3fb950',\r\n\r\n  // Interactive\r\n  focusRing: '#58a6ff',\r\n  checkboxBg: '#21262d',\r\n  checkboxChecked: '#58a6ff',\r\n};\r\n\r\n/**\r\n * Light theme for ListView\r\n */\r\nexport const lightTheme: ListViewTheme = {\r\n  // Backgrounds\r\n  bgPrimary: '#ffffff',\r\n  bgSecondary: '#f6f8fa',\r\n  bgHover: '#f3f4f6',\r\n  bgSelected: '#dbeafe',\r\n  bgAlternate: '#f9fafb',\r\n\r\n  // Borders\r\n  border: '#d0d7de',\r\n  borderLight: '#e5e7eb',\r\n\r\n  // Text\r\n  textPrimary: '#24292f',\r\n  textSecondary: '#57606a',\r\n  textMuted: '#8b949e',\r\n\r\n  // Accent colors\r\n  accent: '#0969da',\r\n  accentHover: '#0550ae',\r\n  accentLight: '#dbeafe',\r\n\r\n  // Status colors\r\n  statusTodo: '#8b949e',\r\n  statusInProgress: '#bf8700',\r\n  statusCompleted: '#1a7f37',\r\n\r\n  // Interactive\r\n  focusRing: '#0969da',\r\n  checkboxBg: '#ffffff',\r\n  checkboxChecked: '#0969da',\r\n};\r\n\r\n/**\r\n * Neutral theme for ListView\r\n */\r\nexport const neutralTheme: ListViewTheme = {\r\n  // Backgrounds\r\n  bgPrimary: '#1a1a2e',\r\n  bgSecondary: '#16213e',\r\n  bgHover: '#1f3460',\r\n  bgSelected: '#0f4c7520',\r\n  bgAlternate: '#1a1a2e80',\r\n\r\n  // Borders\r\n  border: '#2a3f5f',\r\n  borderLight: '#1f3460',\r\n\r\n  // Text\r\n  textPrimary: '#e4e6eb',\r\n  textSecondary: '#a8b2c1',\r\n  textMuted: '#6b7280',\r\n\r\n  // Accent colors\r\n  accent: '#6366f1',\r\n  accentHover: '#818cf8',\r\n  accentLight: '#6366f120',\r\n\r\n  // Status colors\r\n  statusTodo: '#9ca3af',\r\n  statusInProgress: '#fbbf24',\r\n  statusCompleted: '#34d399',\r\n\r\n  // Interactive\r\n  focusRing: '#6366f1',\r\n  checkboxBg: '#1f3460',\r\n  checkboxChecked: '#6366f1',\r\n};\r\n\r\n/**\r\n * All available themes\r\n */\r\nexport const listViewThemes = {\r\n  dark: darkTheme,\r\n  light: lightTheme,\r\n  neutral: neutralTheme,\r\n} as const;\r\n\r\nexport type ListViewThemeName = keyof typeof listViewThemes;\r\n\r\n/**\r\n * Get theme by name\r\n */\r\nexport function getListViewTheme(themeName: ListViewThemeName): ListViewTheme {\r\n  return listViewThemes[themeName] || listViewThemes.dark;\r\n}\r\n","/**\r\n * Internationalization (i18n) for CalendarBoard\r\n * @version 0.17.0\r\n */\r\n\r\nimport type { CalendarTranslations } from './types';\r\n\r\nexport type CalendarSupportedLocale = 'en' | 'es';\r\n\r\n/**\r\n * English translations\r\n */\r\nexport const en: CalendarTranslations = {\r\n  navigation: {\r\n    today: 'Today',\r\n    previous: 'Previous',\r\n    next: 'Next',\r\n    month: 'Month',\r\n    week: 'Week',\r\n    day: 'Day',\r\n  },\r\n\r\n  weekdays: {\r\n    sun: 'Sun',\r\n    mon: 'Mon',\r\n    tue: 'Tue',\r\n    wed: 'Wed',\r\n    thu: 'Thu',\r\n    fri: 'Fri',\r\n    sat: 'Sat',\r\n  },\r\n\r\n  weekdaysFull: {\r\n    sunday: 'Sunday',\r\n    monday: 'Monday',\r\n    tuesday: 'Tuesday',\r\n    wednesday: 'Wednesday',\r\n    thursday: 'Thursday',\r\n    friday: 'Friday',\r\n    saturday: 'Saturday',\r\n  },\r\n\r\n  months: {\r\n    january: 'January',\r\n    february: 'February',\r\n    march: 'March',\r\n    april: 'April',\r\n    may: 'May',\r\n    june: 'June',\r\n    july: 'July',\r\n    august: 'August',\r\n    september: 'September',\r\n    october: 'October',\r\n    november: 'November',\r\n    december: 'December',\r\n  },\r\n\r\n  status: {\r\n    todo: 'To Do',\r\n    inProgress: 'In Progress',\r\n    completed: 'Completed',\r\n  },\r\n\r\n  labels: {\r\n    allDay: 'All day',\r\n    moreEvents: '+{count} more',\r\n    noEvents: 'No tasks',\r\n    newTask: 'New Task',\r\n    viewAll: 'View all',\r\n    week: 'Week',\r\n  },\r\n\r\n  tooltips: {\r\n    progress: 'Progress',\r\n    status: 'Status',\r\n    assignees: 'Assignees',\r\n    duration: 'Duration',\r\n    days: 'days',\r\n  },\r\n};\r\n\r\n/**\r\n * Spanish translations\r\n */\r\nexport const es: CalendarTranslations = {\r\n  navigation: {\r\n    today: 'Hoy',\r\n    previous: 'Anterior',\r\n    next: 'Siguiente',\r\n    month: 'Mes',\r\n    week: 'Semana',\r\n    day: 'Día',\r\n  },\r\n\r\n  weekdays: {\r\n    sun: 'Dom',\r\n    mon: 'Lun',\r\n    tue: 'Mar',\r\n    wed: 'Mié',\r\n    thu: 'Jue',\r\n    fri: 'Vie',\r\n    sat: 'Sáb',\r\n  },\r\n\r\n  weekdaysFull: {\r\n    sunday: 'Domingo',\r\n    monday: 'Lunes',\r\n    tuesday: 'Martes',\r\n    wednesday: 'Miércoles',\r\n    thursday: 'Jueves',\r\n    friday: 'Viernes',\r\n    saturday: 'Sábado',\r\n  },\r\n\r\n  months: {\r\n    january: 'Enero',\r\n    february: 'Febrero',\r\n    march: 'Marzo',\r\n    april: 'Abril',\r\n    may: 'Mayo',\r\n    june: 'Junio',\r\n    july: 'Julio',\r\n    august: 'Agosto',\r\n    september: 'Septiembre',\r\n    october: 'Octubre',\r\n    november: 'Noviembre',\r\n    december: 'Diciembre',\r\n  },\r\n\r\n  status: {\r\n    todo: 'Por Hacer',\r\n    inProgress: 'En Progreso',\r\n    completed: 'Completado',\r\n  },\r\n\r\n  labels: {\r\n    allDay: 'Todo el día',\r\n    moreEvents: '+{count} más',\r\n    noEvents: 'Sin tareas',\r\n    newTask: 'Nueva Tarea',\r\n    viewAll: 'Ver todo',\r\n    week: 'Semana',\r\n  },\r\n\r\n  tooltips: {\r\n    progress: 'Progreso',\r\n    status: 'Estado',\r\n    assignees: 'Asignados',\r\n    duration: 'Duración',\r\n    days: 'días',\r\n  },\r\n};\r\n\r\n/**\r\n * All available translations\r\n */\r\nexport const calendarTranslations: Record<CalendarSupportedLocale, CalendarTranslations> = {\r\n  en,\r\n  es,\r\n};\r\n\r\n/**\r\n * Get translations for a specific locale\r\n */\r\nexport function getCalendarTranslations(locale: CalendarSupportedLocale | string): CalendarTranslations {\r\n  return calendarTranslations[locale as CalendarSupportedLocale] || calendarTranslations.en;\r\n}\r\n\r\n/**\r\n * Merge custom translations with default translations\r\n */\r\nexport function mergeCalendarTranslations(\r\n  locale: CalendarSupportedLocale | string,\r\n  customTranslations?: Partial<CalendarTranslations>\r\n): CalendarTranslations {\r\n  const base = getCalendarTranslations(locale);\r\n\r\n  if (!customTranslations) {\r\n    return base;\r\n  }\r\n\r\n  return {\r\n    navigation: { ...base.navigation, ...customTranslations.navigation },\r\n    weekdays: { ...base.weekdays, ...customTranslations.weekdays },\r\n    weekdaysFull: { ...base.weekdaysFull, ...customTranslations.weekdaysFull },\r\n    months: { ...base.months, ...customTranslations.months },\r\n    status: { ...base.status, ...customTranslations.status },\r\n    labels: { ...base.labels, ...customTranslations.labels },\r\n    tooltips: { ...base.tooltips, ...customTranslations.tooltips },\r\n  };\r\n}\r\n\r\n/**\r\n * Get month names array based on locale\r\n */\r\nexport function getMonthNames(locale: CalendarSupportedLocale | string): string[] {\r\n  const t = getCalendarTranslations(locale);\r\n  return [\r\n    t.months.january,\r\n    t.months.february,\r\n    t.months.march,\r\n    t.months.april,\r\n    t.months.may,\r\n    t.months.june,\r\n    t.months.july,\r\n    t.months.august,\r\n    t.months.september,\r\n    t.months.october,\r\n    t.months.november,\r\n    t.months.december,\r\n  ];\r\n}\r\n\r\n/**\r\n * Get weekday names array based on locale and first day of week\r\n */\r\nexport function getWeekdayNames(\r\n  locale: CalendarSupportedLocale | string,\r\n  firstDayOfWeek: number = 0,\r\n  short: boolean = true\r\n): string[] {\r\n  const t = getCalendarTranslations(locale);\r\n  const weekdays = short\r\n    ? [t.weekdays.sun, t.weekdays.mon, t.weekdays.tue, t.weekdays.wed, t.weekdays.thu, t.weekdays.fri, t.weekdays.sat]\r\n    : [\r\n        t.weekdaysFull.sunday,\r\n        t.weekdaysFull.monday,\r\n        t.weekdaysFull.tuesday,\r\n        t.weekdaysFull.wednesday,\r\n        t.weekdaysFull.thursday,\r\n        t.weekdaysFull.friday,\r\n        t.weekdaysFull.saturday,\r\n      ];\r\n\r\n  // Rotate array to start from firstDayOfWeek\r\n  return [...weekdays.slice(firstDayOfWeek), ...weekdays.slice(0, firstDayOfWeek)];\r\n}\r\n","/**\r\n * CalendarBoard Component\r\n * Professional calendar view for task management\r\n * Based on SaaS ProjectCalendar component styles\r\n * @version 0.17.0\r\n */\r\n\r\nimport { useState, useMemo, useCallback } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport {\r\n  Calendar,\r\n  ChevronLeft,\r\n  ChevronRight,\r\n  CheckCircle2,\r\n  Circle,\r\n  PlayCircle,\r\n  X,\r\n} from 'lucide-react';\r\nimport type { Task } from '../Gantt/types';\r\nimport type { CalendarBoardProps, CalendarDay } from './types';\r\nimport { mergeCalendarTranslations } from './i18n';\r\nimport { cn } from '../../utils';\r\n\r\n/**\r\n * Flatten hierarchical tasks to flat list\r\n */\r\nfunction flattenTasks(tasks: Task[]): Task[] {\r\n  const result: Task[] = [];\r\n\r\n  function traverse(taskList: Task[]) {\r\n    for (const task of taskList) {\r\n      result.push(task);\r\n      if (task.subtasks?.length) {\r\n        traverse(task.subtasks);\r\n      }\r\n    }\r\n  }\r\n\r\n  traverse(tasks);\r\n  return result;\r\n}\r\n\r\n/**\r\n * Check if a date falls within a task's date range\r\n */\r\nfunction isDateInTaskRange(date: Date, task: Task): boolean {\r\n  if (!task.startDate || !task.endDate) return false;\r\n\r\n  const dateOnly = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n  const startOnly = new Date(task.startDate.getFullYear(), task.startDate.getMonth(), task.startDate.getDate());\r\n  const endOnly = new Date(task.endDate.getFullYear(), task.endDate.getMonth(), task.endDate.getDate());\r\n\r\n  return dateOnly >= startOnly && dateOnly <= endOnly;\r\n}\r\n\r\n/**\r\n * Status Icon component\r\n */\r\nfunction StatusIcon({ task }: { task: Task }) {\r\n  if (task.progress === 100 || task.status === 'completed') {\r\n    return <CheckCircle2 className=\"w-3 h-3 text-green-500 flex-shrink-0\" />;\r\n  }\r\n  if ((task.progress && task.progress > 0) || task.status === 'in-progress') {\r\n    return <PlayCircle className=\"w-3 h-3 text-blue-500 flex-shrink-0\" />;\r\n  }\r\n  return <Circle className=\"w-3 h-3 text-gray-400 flex-shrink-0\" />;\r\n}\r\n\r\n/**\r\n * Main CalendarBoard Component\r\n */\r\nexport function CalendarBoard({\r\n  tasks,\r\n  config = {},\r\n  callbacks = {},\r\n  initialDate,\r\n  isLoading = false,\r\n  error,\r\n  className,\r\n  style,\r\n}: CalendarBoardProps) {\r\n  const {\r\n    theme: themeName = 'dark',\r\n    locale = 'en',\r\n    customTranslations,\r\n  } = config;\r\n\r\n  const t = mergeCalendarTranslations(locale, customTranslations);\r\n  const isDark = themeName === 'dark';\r\n\r\n  // State\r\n  const [currentDate, setCurrentDate] = useState(initialDate || new Date());\r\n  const [selectedTask, setSelectedTask] = useState<Task | null>(null);\r\n\r\n  // Navigate months\r\n  const goToPreviousMonth = useCallback(() => {\r\n    setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1));\r\n  }, [currentDate]);\r\n\r\n  const goToNextMonth = useCallback(() => {\r\n    setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1));\r\n  }, [currentDate]);\r\n\r\n  const goToToday = useCallback(() => {\r\n    setCurrentDate(new Date());\r\n  }, []);\r\n\r\n  // Generate calendar days\r\n  const calendarDays = useMemo((): CalendarDay[] => {\r\n    const year = currentDate.getFullYear();\r\n    const month = currentDate.getMonth();\r\n\r\n    const firstDayOfMonth = new Date(year, month, 1);\r\n    const lastDayOfMonth = new Date(year, month + 1, 0);\r\n\r\n    const startDay = firstDayOfMonth.getDay();\r\n    const daysInMonth = lastDayOfMonth.getDate();\r\n\r\n    const flatTaskList = flattenTasks(tasks);\r\n    const today = new Date();\r\n    today.setHours(0, 0, 0, 0);\r\n\r\n    const days: CalendarDay[] = [];\r\n\r\n    // Previous month days\r\n    const prevMonthDays = startDay;\r\n    const prevMonthLastDay = new Date(year, month, 0).getDate();\r\n    for (let i = prevMonthDays - 1; i >= 0; i--) {\r\n      const date = new Date(year, month - 1, prevMonthLastDay - i);\r\n      days.push({\r\n        date,\r\n        isCurrentMonth: false,\r\n        isToday: false,\r\n        isWeekend: date.getDay() === 0 || date.getDay() === 6,\r\n        events: flatTaskList.filter(t => isDateInTaskRange(date, t)).map(task => ({\r\n          id: task.id,\r\n          title: task.name,\r\n          start: task.startDate!,\r\n          end: task.endDate!,\r\n          task,\r\n        })),\r\n      });\r\n    }\r\n\r\n    // Current month days\r\n    for (let day = 1; day <= daysInMonth; day++) {\r\n      const date = new Date(year, month, day);\r\n      const isToday = date.getTime() === today.getTime();\r\n      days.push({\r\n        date,\r\n        isCurrentMonth: true,\r\n        isToday,\r\n        isWeekend: date.getDay() === 0 || date.getDay() === 6,\r\n        events: flatTaskList.filter(t => isDateInTaskRange(date, t)).map(task => ({\r\n          id: task.id,\r\n          title: task.name,\r\n          start: task.startDate!,\r\n          end: task.endDate!,\r\n          task,\r\n        })),\r\n      });\r\n    }\r\n\r\n    // Next month days (fill to complete 6 rows)\r\n    const remainingDays = 42 - days.length;\r\n    for (let day = 1; day <= remainingDays; day++) {\r\n      const date = new Date(year, month + 1, day);\r\n      days.push({\r\n        date,\r\n        isCurrentMonth: false,\r\n        isToday: false,\r\n        isWeekend: date.getDay() === 0 || date.getDay() === 6,\r\n        events: flatTaskList.filter(t => isDateInTaskRange(date, t)).map(task => ({\r\n          id: task.id,\r\n          title: task.name,\r\n          start: task.startDate!,\r\n          end: task.endDate!,\r\n          task,\r\n        })),\r\n      });\r\n    }\r\n\r\n    return days;\r\n  }, [currentDate, tasks]);\r\n\r\n  // Day names\r\n  const dayNames = locale === 'es'\r\n    ? ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb']\r\n    : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n\r\n  // Month name\r\n  const monthName = currentDate.toLocaleDateString(locale === 'es' ? 'es-ES' : 'en-US', {\r\n    month: 'long',\r\n    year: 'numeric',\r\n  });\r\n\r\n  // Handle task toggle\r\n  const handleTaskToggle = useCallback((task: Task) => {\r\n    const newProgress = task.progress === 100 ? 0 : 100;\r\n    const newStatus: 'todo' | 'completed' = newProgress === 100 ? 'completed' : 'todo';\r\n    callbacks.onTaskUpdate?.({ ...task, status: newStatus, progress: newProgress });\r\n  }, [callbacks]);\r\n\r\n  // Loading state\r\n  if (isLoading) {\r\n    return (\r\n      <div className={cn(\"flex-1 flex items-center justify-center\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n        <div className=\"flex flex-col items-center gap-4\">\r\n          <div className=\"w-8 h-8 animate-spin rounded-full border-b-2 border-[#3B82F6]\" />\r\n          <p className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n            {t.labels.noEvents}...\r\n          </p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // Error state\r\n  if (error) {\r\n    return (\r\n      <div className={cn(\"flex-1 flex items-center justify-center\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n        <div className=\"flex flex-col items-center gap-4 max-w-md text-center\">\r\n          <div className=\"w-12 h-12 rounded-full bg-red-500/10 flex items-center justify-center\">\r\n            <span className=\"text-red-500 text-2xl\">⚠</span>\r\n          </div>\r\n          <div>\r\n            <h3 className={cn(\"text-lg font-semibold mb-2\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n              Error\r\n            </h3>\r\n            <p className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n              {typeof error === 'string' ? error : error.message}\r\n            </p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  // Empty state\r\n  if (tasks.length === 0) {\r\n    return (\r\n      <div className={cn(\"flex-1 flex items-center justify-center\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n        <div className=\"text-center max-w-md\">\r\n          <div className=\"w-16 h-16 mx-auto mb-4 rounded-2xl bg-[#3B82F6]/10 flex items-center justify-center\">\r\n            <Calendar className=\"w-8 h-8 text-[#3B82F6]\" />\r\n          </div>\r\n          <h3 className={cn(\"text-lg font-semibold mb-2\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n            {t.labels.noEvents}\r\n          </h3>\r\n          <p className={cn(\"text-sm\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")}>\r\n            {t.labels.newTask}\r\n          </p>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className={cn(\"flex-1 flex flex-col w-full h-full overflow-hidden\", isDark ? \"bg-[#0F1117]\" : \"bg-white\", className)} style={style}>\r\n      {/* Calendar Header */}\r\n      <div className={cn(\"flex-shrink-0 px-6 py-4 border-b\", isDark ? \"border-white/10\" : \"border-gray-200\")}>\r\n        <div className=\"flex items-center justify-between\">\r\n          <div className=\"flex items-center gap-4\">\r\n            <h2 className={cn(\"text-xl font-semibold capitalize\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n              {monthName}\r\n            </h2>\r\n            <button\r\n              onClick={goToToday}\r\n              className={cn(\r\n                \"px-3 py-1.5 text-sm rounded-lg transition-colors\",\r\n                isDark\r\n                  ? \"bg-white/5 text-white hover:bg-white/10\"\r\n                  : \"bg-gray-100 text-gray-700 hover:bg-gray-200\"\r\n              )}\r\n            >\r\n              {t.navigation.today}\r\n            </button>\r\n          </div>\r\n          <div className=\"flex items-center gap-2\">\r\n            <button\r\n              onClick={goToPreviousMonth}\r\n              className={cn(\"p-2 rounded-lg transition-colors\", isDark ? \"hover:bg-white/10\" : \"hover:bg-gray-100\")}\r\n            >\r\n              <ChevronLeft className={cn(\"w-5 h-5\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")} />\r\n            </button>\r\n            <button\r\n              onClick={goToNextMonth}\r\n              className={cn(\"p-2 rounded-lg transition-colors\", isDark ? \"hover:bg-white/10\" : \"hover:bg-gray-100\")}\r\n            >\r\n              <ChevronRight className={cn(\"w-5 h-5\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-600\")} />\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Calendar Grid */}\r\n      <div className=\"flex-1 p-6 overflow-auto\">\r\n        <div className=\"h-full flex flex-col\">\r\n          {/* Day Headers */}\r\n          <div className=\"grid grid-cols-7 gap-px mb-2\">\r\n            {dayNames.map((day) => (\r\n              <div\r\n                key={day}\r\n                className={cn(\"py-2 text-center text-xs font-medium uppercase\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-500\")}\r\n              >\r\n                {day}\r\n              </div>\r\n            ))}\r\n          </div>\r\n\r\n          {/* Calendar Days */}\r\n          <div className={cn(\"flex-1 grid grid-cols-7 grid-rows-6 gap-px rounded-lg overflow-hidden\", isDark ? \"bg-white/5\" : \"bg-gray-200\")}>\r\n            {calendarDays.map((day, index) => (\r\n              <div\r\n                key={index}\r\n                className={cn(\r\n                  \"min-h-[100px] p-2 transition-colors\",\r\n                  isDark ? \"bg-[#0F1117]\" : \"bg-white\",\r\n                  !day.isCurrentMonth && (isDark ? \"bg-[#0F1117]/50\" : \"bg-gray-50\"),\r\n                  day.isToday && \"ring-2 ring-[#3B82F6] ring-inset\"\r\n                )}\r\n              >\r\n                {/* Day Number */}\r\n                <div className={cn(\r\n                  \"text-sm font-medium mb-1\",\r\n                  day.isToday\r\n                    ? \"text-[#3B82F6]\"\r\n                    : day.isCurrentMonth\r\n                      ? (isDark ? \"text-white\" : \"text-gray-900\")\r\n                      : (isDark ? \"text-[#6B7280]\" : \"text-gray-400\")\r\n                )}>\r\n                  {day.date.getDate()}\r\n                </div>\r\n\r\n                {/* Tasks for this day */}\r\n                <div className=\"space-y-1 overflow-y-auto max-h-[80px]\">\r\n                  {day.events.slice(0, 3).map((event) => (\r\n                    <motion.button\r\n                      key={event.id}\r\n                      onClick={() => {\r\n                        setSelectedTask(event.task);\r\n                        callbacks.onEventClick?.(event);\r\n                      }}\r\n                      whileHover={{ scale: 1.02 }}\r\n                      className={cn(\r\n                        \"w-full flex items-center gap-1 px-1.5 py-0.5 rounded text-xs truncate\",\r\n                        event.task.progress === 100\r\n                          ? (isDark ? \"bg-green-500/20 text-green-400\" : \"bg-green-500/10 text-green-600\")\r\n                          : (isDark ? \"bg-[#3B82F6]/20 text-[#3B82F6]\" : \"bg-[#3B82F6]/10 text-[#3B82F6]\")\r\n                      )}\r\n                    >\r\n                      <StatusIcon task={event.task} />\r\n                      <span className=\"truncate\">{event.title}</span>\r\n                    </motion.button>\r\n                  ))}\r\n                  {day.events.length > 3 && (\r\n                    <div className={cn(\"text-xs px-1.5\", isDark ? \"text-[#6B7280]\" : \"text-gray-400\")}>\r\n                      +{day.events.length - 3} {locale === 'es' ? 'más' : 'more'}\r\n                    </div>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            ))}\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Task Detail Panel */}\r\n      <AnimatePresence>\r\n        {selectedTask && (\r\n          <motion.div\r\n            initial={{ opacity: 0, x: 300 }}\r\n            animate={{ opacity: 1, x: 0 }}\r\n            exit={{ opacity: 0, x: 300 }}\r\n            className={cn(\r\n              \"fixed right-0 top-0 h-full w-80 border-l shadow-xl z-50\",\r\n              isDark ? \"bg-[#1A1D25] border-white/10\" : \"bg-white border-gray-200\"\r\n            )}\r\n          >\r\n            <div className={cn(\"p-4 border-b flex items-center justify-between\", isDark ? \"border-white/10\" : \"border-gray-200\")}>\r\n              <h3 className={cn(\"font-semibold\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n                {locale === 'es' ? 'Detalle de tarea' : 'Task Detail'}\r\n              </h3>\r\n              <button\r\n                onClick={() => setSelectedTask(null)}\r\n                className={cn(\"p-1 rounded\", isDark ? \"hover:bg-white/10\" : \"hover:bg-gray-100\")}\r\n              >\r\n                <X className=\"w-5 h-5\" />\r\n              </button>\r\n            </div>\r\n            <div className=\"p-4 space-y-4\">\r\n              <div>\r\n                <label className={cn(\"text-xs uppercase\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-500\")}>\r\n                  {locale === 'es' ? 'Nombre' : 'Name'}\r\n                </label>\r\n                <p className={cn(\"font-medium\", isDark ? \"text-white\" : \"text-gray-900\")}>{selectedTask.name}</p>\r\n              </div>\r\n\r\n              <div className=\"grid grid-cols-2 gap-4\">\r\n                <div>\r\n                  <label className={cn(\"text-xs uppercase\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-500\")}>\r\n                    {locale === 'es' ? 'Inicio' : 'Start'}\r\n                  </label>\r\n                  <p className={cn(\"text-sm\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n                    {selectedTask.startDate?.toLocaleDateString(locale === 'es' ? 'es-ES' : 'en-US') || '-'}\r\n                  </p>\r\n                </div>\r\n                <div>\r\n                  <label className={cn(\"text-xs uppercase\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-500\")}>\r\n                    {locale === 'es' ? 'Fin' : 'End'}\r\n                  </label>\r\n                  <p className={cn(\"text-sm\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n                    {selectedTask.endDate?.toLocaleDateString(locale === 'es' ? 'es-ES' : 'en-US') || '-'}\r\n                  </p>\r\n                </div>\r\n              </div>\r\n\r\n              <div>\r\n                <label className={cn(\"text-xs uppercase mb-2 block\", isDark ? \"text-[#9CA3AF]\" : \"text-gray-500\")}>\r\n                  {locale === 'es' ? 'Progreso' : 'Progress'}\r\n                </label>\r\n                <div className=\"flex items-center gap-3\">\r\n                  <div className={cn(\"flex-1 h-2 rounded-full overflow-hidden\", isDark ? \"bg-white/10\" : \"bg-gray-200\")}>\r\n                    <div\r\n                      className={cn(\r\n                        \"h-full rounded-full transition-all\",\r\n                        selectedTask.progress === 100 ? \"bg-green-500\" : \"bg-[#3B82F6]\"\r\n                      )}\r\n                      style={{ width: `${selectedTask.progress || 0}%` }}\r\n                    />\r\n                  </div>\r\n                  <span className={cn(\"text-sm font-medium w-10\", isDark ? \"text-white\" : \"text-gray-900\")}>\r\n                    {selectedTask.progress || 0}%\r\n                  </span>\r\n                </div>\r\n              </div>\r\n\r\n              <button\r\n                onClick={() => {\r\n                  handleTaskToggle(selectedTask);\r\n                  setSelectedTask(null);\r\n                }}\r\n                className={cn(\r\n                  \"w-full py-2 rounded-lg font-medium transition-colors\",\r\n                  selectedTask.progress === 100\r\n                    ? \"bg-gray-500/10 text-gray-500 hover:bg-gray-500/20\"\r\n                    : \"bg-green-500/10 text-green-500 hover:bg-green-500/20\"\r\n                )}\r\n              >\r\n                {selectedTask.progress === 100\r\n                  ? (locale === 'es' ? 'Marcar como pendiente' : 'Mark as pending')\r\n                  : (locale === 'es' ? 'Marcar como completada' : 'Mark as complete')}\r\n              </button>\r\n            </div>\r\n          </motion.div>\r\n        )}\r\n      </AnimatePresence>\r\n\r\n      {/* Overlay for task detail panel */}\r\n      <AnimatePresence>\r\n        {selectedTask && (\r\n          <motion.div\r\n            initial={{ opacity: 0 }}\r\n            animate={{ opacity: 1 }}\r\n            exit={{ opacity: 0 }}\r\n            onClick={() => setSelectedTask(null)}\r\n            className=\"fixed inset-0 bg-black/20 z-40\"\r\n          />\r\n        )}\r\n      </AnimatePresence>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default CalendarBoard;\r\n","/**\r\n * CalendarBoard Themes\r\n * @version 0.17.0\r\n */\r\n\r\nimport type { CalendarTheme } from './types';\r\n\r\n/**\r\n * Dark theme for CalendarBoard\r\n */\r\nexport const darkTheme: CalendarTheme = {\r\n  // Backgrounds\r\n  bgPrimary: '#0d1117',\r\n  bgSecondary: '#161b22',\r\n  bgHover: '#21262d',\r\n  bgToday: '#1f6feb20',\r\n  bgWeekend: '#161b2280',\r\n  bgOtherMonth: '#0d111750',\r\n\r\n  // Borders\r\n  border: '#30363d',\r\n  borderLight: '#21262d',\r\n\r\n  // Text\r\n  textPrimary: '#c9d1d9',\r\n  textSecondary: '#8b949e',\r\n  textMuted: '#6e7681',\r\n  textToday: '#58a6ff',\r\n\r\n  // Accent colors\r\n  accent: '#58a6ff',\r\n  accentHover: '#79b8ff',\r\n  accentLight: '#58a6ff20',\r\n\r\n  // Status colors\r\n  statusTodo: '#8b949e',\r\n  statusInProgress: '#f0883e',\r\n  statusCompleted: '#3fb950',\r\n\r\n  // Interactive\r\n  focusRing: '#58a6ff',\r\n};\r\n\r\n/**\r\n * Light theme for CalendarBoard\r\n */\r\nexport const lightTheme: CalendarTheme = {\r\n  // Backgrounds\r\n  bgPrimary: '#ffffff',\r\n  bgSecondary: '#f6f8fa',\r\n  bgHover: '#f3f4f6',\r\n  bgToday: '#dbeafe',\r\n  bgWeekend: '#f9fafb',\r\n  bgOtherMonth: '#f3f4f680',\r\n\r\n  // Borders\r\n  border: '#d0d7de',\r\n  borderLight: '#e5e7eb',\r\n\r\n  // Text\r\n  textPrimary: '#24292f',\r\n  textSecondary: '#57606a',\r\n  textMuted: '#8b949e',\r\n  textToday: '#0969da',\r\n\r\n  // Accent colors\r\n  accent: '#0969da',\r\n  accentHover: '#0550ae',\r\n  accentLight: '#dbeafe',\r\n\r\n  // Status colors\r\n  statusTodo: '#8b949e',\r\n  statusInProgress: '#bf8700',\r\n  statusCompleted: '#1a7f37',\r\n\r\n  // Interactive\r\n  focusRing: '#0969da',\r\n};\r\n\r\n/**\r\n * Neutral theme for CalendarBoard\r\n */\r\nexport const neutralTheme: CalendarTheme = {\r\n  // Backgrounds\r\n  bgPrimary: '#1a1a2e',\r\n  bgSecondary: '#16213e',\r\n  bgHover: '#1f3460',\r\n  bgToday: '#6366f120',\r\n  bgWeekend: '#16213e80',\r\n  bgOtherMonth: '#1a1a2e50',\r\n\r\n  // Borders\r\n  border: '#2a3f5f',\r\n  borderLight: '#1f3460',\r\n\r\n  // Text\r\n  textPrimary: '#e4e6eb',\r\n  textSecondary: '#a8b2c1',\r\n  textMuted: '#6b7280',\r\n  textToday: '#818cf8',\r\n\r\n  // Accent colors\r\n  accent: '#6366f1',\r\n  accentHover: '#818cf8',\r\n  accentLight: '#6366f120',\r\n\r\n  // Status colors\r\n  statusTodo: '#9ca3af',\r\n  statusInProgress: '#fbbf24',\r\n  statusCompleted: '#34d399',\r\n\r\n  // Interactive\r\n  focusRing: '#6366f1',\r\n};\r\n\r\n/**\r\n * All available themes\r\n */\r\nexport const calendarThemes = {\r\n  dark: darkTheme,\r\n  light: lightTheme,\r\n  neutral: neutralTheme,\r\n} as const;\r\n\r\nexport type CalendarThemeName = keyof typeof calendarThemes;\r\n\r\n/**\r\n * Get theme by name\r\n */\r\nexport function getCalendarTheme(themeName: CalendarThemeName): CalendarTheme {\r\n  return calendarThemes[themeName] || calendarThemes.dark;\r\n}\r\n","/**\r\n * CardStack Component\r\n * Visual grouping of related cards with expand/collapse\r\n * @module components/CardStack\r\n */\r\n\r\nimport { useState, useMemo } from 'react'\r\nimport type { Card } from '../../types'\r\nimport type { CardStack as CardStackType } from '../../types/card-stack'\r\nimport { cn } from '../../utils'\r\nimport './card-stack.css'\r\n\r\nexport interface CardStackProps {\r\n  /** Stack configuration */\r\n  stack: CardStackType\r\n  /** All cards in the board */\r\n  cards: Card[]\r\n  /** Card render function */\r\n  renderCard?: (card: Card) => React.ReactNode\r\n  /** Click handler for individual cards */\r\n  onCardClick?: (card: Card) => void\r\n  /** Expand/collapse handler */\r\n  onToggleExpand?: (stackId: string) => void\r\n  /** Unstack handler (remove card from stack) */\r\n  onUnstack?: (stackId: string, cardId: string) => void\r\n  /** Delete entire stack handler */\r\n  onDeleteStack?: (stackId: string) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * CardStack - Collapsible group of related cards\r\n */\r\nexport function CardStack({\r\n  stack,\r\n  cards,\r\n  renderCard,\r\n  onCardClick,\r\n  onToggleExpand,\r\n  onUnstack,\r\n  onDeleteStack,\r\n  className,\r\n}: CardStackProps) {\r\n  const [isHovered, setIsHovered] = useState(false)\r\n\r\n  // Get cards in this stack\r\n  const stackCards = useMemo(() => {\r\n    return cards.filter((card) => stack.cardIds.includes(card.id))\r\n  }, [cards, stack.cardIds])\r\n\r\n  // Calculate stack statistics\r\n  const stats = useMemo(() => {\r\n    const totalCards = stackCards.length\r\n    const uniqueAssignees = new Set(\r\n      stackCards.flatMap((c) => c.assignedUserIds || [])\r\n    ).size\r\n    const priorities = stackCards.map((c) => c.priority).filter(Boolean)\r\n    const labels = new Set(stackCards.flatMap((c) => c.labels || [])).size\r\n\r\n    return {\r\n      totalCards,\r\n      uniqueAssignees,\r\n      priorities,\r\n      labels,\r\n    }\r\n  }, [stackCards])\r\n\r\n  const handleToggle = () => {\r\n    onToggleExpand?.(stack.id)\r\n  }\r\n\r\n  return (\r\n    <div\r\n      className={cn('card-stack', !stack.isExpanded && 'card-stack-collapsed', className)}\r\n      onMouseEnter={() => setIsHovered(true)}\r\n      onMouseLeave={() => setIsHovered(false)}\r\n      style={{\r\n        '--stack-color': stack.color || 'var(--color-accent-primary)',\r\n      } as React.CSSProperties}\r\n    >\r\n      {/* Stack Header */}\r\n      <div className=\"card-stack-header\" onClick={handleToggle}>\r\n        <div className=\"card-stack-header-left\">\r\n          {/* Expand/Collapse Icon */}\r\n          <button className=\"card-stack-toggle\" aria-label={stack.isExpanded ? 'Collapse' : 'Expand'}>\r\n            <svg\r\n              width=\"16\"\r\n              height=\"16\"\r\n              viewBox=\"0 0 24 24\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              strokeWidth=\"2\"\r\n              strokeLinecap=\"round\"\r\n              strokeLinejoin=\"round\"\r\n              className={cn('card-stack-chevron', stack.isExpanded && 'expanded')}\r\n            >\r\n              <polyline points=\"6 9 12 15 18 9\" />\r\n            </svg>\r\n          </button>\r\n\r\n          {/* Stack Title */}\r\n          <h3 className=\"card-stack-title\">{stack.title}</h3>\r\n\r\n          {/* Stack Badge */}\r\n          <div className=\"card-stack-badge\">{stats.totalCards}</div>\r\n\r\n          {/* Strategy Badge */}\r\n          <div className=\"card-stack-strategy\">\r\n            {stack.strategy === 'ai-similarity' && '✨ AI'}\r\n            {stack.strategy === 'manual' && '👤 Manual'}\r\n            {stack.strategy === 'labels' && '🏷️ Labels'}\r\n            {stack.strategy === 'assignee' && '👥 Assignee'}\r\n            {stack.strategy === 'priority' && '🎯 Priority'}\r\n            {stack.strategy === 'epic' && '📚 Epic'}\r\n          </div>\r\n        </div>\r\n\r\n        {/* Stack Actions */}\r\n        {isHovered && (\r\n          <div className=\"card-stack-actions\">\r\n            <button\r\n              className=\"card-stack-action\"\r\n              onClick={(e) => {\r\n                e.stopPropagation()\r\n                onDeleteStack?.(stack.id)\r\n              }}\r\n              aria-label=\"Delete stack\"\r\n            >\r\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                <polyline points=\"3 6 5 6 21 6\" />\r\n                <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n              </svg>\r\n            </button>\r\n          </div>\r\n        )}\r\n      </div>\r\n\r\n      {/* Stack Summary (when collapsed) */}\r\n      {!stack.isExpanded && (\r\n        <div className=\"card-stack-summary\">\r\n          <div className=\"card-stack-summary-item\">\r\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n              <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\" />\r\n              <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n            </svg>\r\n            <span>{stats.uniqueAssignees} assignees</span>\r\n          </div>\r\n          {stats.labels > 0 && (\r\n            <div className=\"card-stack-summary-item\">\r\n              <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\" />\r\n                <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\r\n              </svg>\r\n              <span>{stats.labels} labels</span>\r\n            </div>\r\n          )}\r\n          {stack.confidence && (\r\n            <div className=\"card-stack-summary-item\">\r\n              <span className=\"card-stack-confidence\">{Math.round(stack.confidence * 100)}% match</span>\r\n            </div>\r\n          )}\r\n        </div>\r\n      )}\r\n\r\n      {/* Stack Content (when expanded) */}\r\n      {stack.isExpanded && (\r\n        <div className=\"card-stack-content\">\r\n          {stackCards.length === 0 ? (\r\n            <div className=\"card-stack-empty\">\r\n              <p>No cards in this stack</p>\r\n              <span>Drag cards here or delete this stack</span>\r\n            </div>\r\n          ) : (\r\n            <div className=\"card-stack-cards\">\r\n              {stackCards.map((card) => (\r\n                <div key={card.id} className=\"card-stack-card-wrapper\">\r\n                  {renderCard ? (\r\n                    <div onClick={() => onCardClick?.(card)}>{renderCard(card)}</div>\r\n                  ) : (\r\n                    <div className=\"card-stack-default-card\" onClick={() => onCardClick?.(card)}>\r\n                      <h4>{card.title}</h4>\r\n                      {card.description && <p>{card.description.substring(0, 100)}...</p>}\r\n                    </div>\r\n                  )}\r\n                  {/* Unstack button */}\r\n                  <button\r\n                    className=\"card-stack-unstack-btn\"\r\n                    onClick={(e) => {\r\n                      e.stopPropagation()\r\n                      onUnstack?.(stack.id, card.id)\r\n                    }}\r\n                    aria-label=\"Remove from stack\"\r\n                  >\r\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n                      <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n                      <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n                    </svg>\r\n                  </button>\r\n                </div>\r\n              ))}\r\n            </div>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Card History & Time Travel Types\r\n * Tracks all changes to cards with full reproducibility\r\n * @module types/card-history\r\n */\r\n\r\nimport type { Card } from './index'\r\n\r\n/**\r\n * Types of events that can occur in a card's history\r\n */\r\nexport type CardHistoryEventType =\r\n  | 'created'\r\n  | 'status_changed'\r\n  | 'assignee_changed'\r\n  | 'priority_changed'\r\n  | 'moved'\r\n  | 'title_updated'\r\n  | 'description_updated'\r\n  | 'dates_changed'\r\n  | 'labels_changed'\r\n  | 'dependency_added'\r\n  | 'dependency_removed'\r\n  | 'comment_added'\r\n  | 'archived'\r\n  | 'restored'\r\n\r\n/**\r\n * Represents a single change in a card's history\r\n */\r\nexport interface CardHistoryEvent {\r\n  /** Unique event ID */\r\n  id: string\r\n  /** Card this event belongs to */\r\n  cardId: string\r\n  /** When the event occurred */\r\n  timestamp: Date\r\n  /** Type of change */\r\n  type: CardHistoryEventType\r\n  /** User who made the change */\r\n  userId: string\r\n  /** User display name (for UI) */\r\n  userName?: string\r\n  /** User avatar URL (for UI) */\r\n  userAvatar?: string\r\n  /** Detailed changes (before/after) */\r\n  changes: Record<string, { from: any; to: any }>\r\n  /** Additional context */\r\n  metadata?: {\r\n    /** Column names for moves */\r\n    fromColumn?: string\r\n    toColumn?: string\r\n    /** Comment text for comment events */\r\n    commentText?: string\r\n    /** Reason for change */\r\n    reason?: string\r\n    /** Related card IDs */\r\n    relatedCards?: string[]\r\n  }\r\n}\r\n\r\n/**\r\n * Filter configuration for history events\r\n */\r\nexport interface HistoryFilter {\r\n  /** Filter by event types */\r\n  types?: CardHistoryEventType[]\r\n  /** Filter by users */\r\n  users?: string[]\r\n  /** Filter by date range */\r\n  dateRange?: {\r\n    start: Date\r\n    end: Date\r\n  }\r\n  /** Search in change descriptions */\r\n  searchTerm?: string\r\n}\r\n\r\n/**\r\n * State for the replay/time-travel feature\r\n */\r\nexport interface ReplayState {\r\n  /** Current position in history (0 = oldest, length-1 = newest) */\r\n  currentIndex: number\r\n  /** Is replay actively playing */\r\n  isPlaying: boolean\r\n  /** Playback speed (1 = normal, 2 = 2x, etc.) */\r\n  speed: number\r\n  /** Card state at current index */\r\n  cardState: Card\r\n  /** Total number of events */\r\n  totalEvents: number\r\n  /** Can go back */\r\n  canGoBack: boolean\r\n  /** Can go forward */\r\n  canGoForward: boolean\r\n}\r\n\r\n/**\r\n * Configuration for history tracking\r\n */\r\nexport interface HistoryConfig {\r\n  /** Enable automatic history tracking */\r\n  enabled: boolean\r\n  /** Maximum events to store per card */\r\n  maxEventsPerCard: number\r\n  /** Auto-save interval in milliseconds */\r\n  autoSaveInterval: number\r\n  /** Store history in localStorage */\r\n  persistToStorage: boolean\r\n  /** Storage key prefix */\r\n  storagePrefix: string\r\n}\r\n\r\n/**\r\n * Timeline visualization configuration\r\n */\r\nexport interface TimelineConfig {\r\n  /** Show event icons */\r\n  showIcons: boolean\r\n  /** Show user avatars */\r\n  showAvatars: boolean\r\n  /** Group events by day */\r\n  groupByDay: boolean\r\n  /** Show relative times (e.g. \"2 hours ago\") */\r\n  useRelativeTime: boolean\r\n  /** Compact mode (less spacing) */\r\n  compact: boolean\r\n}\r\n\r\n/**\r\n * Snapshot of a card at a specific point in time\r\n */\r\nexport interface CardSnapshot {\r\n  /** When this snapshot was taken */\r\n  timestamp: Date\r\n  /** Complete card state */\r\n  cardState: Card\r\n  /** Event that triggered this snapshot */\r\n  eventId: string\r\n  /** Index in history */\r\n  index: number\r\n}\r\n\r\n/**\r\n * Statistics about a card's history\r\n */\r\nexport interface HistoryStats {\r\n  /** Total events */\r\n  totalEvents: number\r\n  /** Events by type */\r\n  eventsByType: Record<CardHistoryEventType, number>\r\n  /** Events by user */\r\n  eventsByUser: Record<string, number>\r\n  /** First event timestamp */\r\n  firstEvent?: Date\r\n  /** Last event timestamp */\r\n  lastEvent?: Date\r\n  /** Most active day */\r\n  mostActiveDay?: Date\r\n  /** Average events per day */\r\n  avgEventsPerDay: number\r\n  /** Time in each column (in milliseconds) */\r\n  timeInColumns: Record<string, number>\r\n}\r\n\r\n/**\r\n * Default history configuration\r\n */\r\nexport const DEFAULT_HISTORY_CONFIG: HistoryConfig = {\r\n  enabled: true,\r\n  maxEventsPerCard: 1000,\r\n  autoSaveInterval: 5000,\r\n  persistToStorage: true,\r\n  storagePrefix: 'asakaa-history',\r\n}\r\n\r\n/**\r\n * Default timeline configuration\r\n */\r\nexport const DEFAULT_TIMELINE_CONFIG: TimelineConfig = {\r\n  showIcons: true,\r\n  showAvatars: true,\r\n  groupByDay: true,\r\n  useRelativeTime: true,\r\n  compact: false,\r\n}\r\n\r\n/**\r\n * Helper to create a history event\r\n */\r\nexport function createHistoryEvent(\r\n  cardId: string,\r\n  type: CardHistoryEventType,\r\n  userId: string,\r\n  changes: Record<string, { from: any; to: any }>,\r\n  metadata?: CardHistoryEvent['metadata']\r\n): CardHistoryEvent {\r\n  return {\r\n    id: `${cardId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\r\n    cardId,\r\n    timestamp: new Date(),\r\n    type,\r\n    userId,\r\n    changes,\r\n    metadata,\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to format event description for UI\r\n */\r\nexport function formatEventDescription(event: CardHistoryEvent): string {\r\n  switch (event.type) {\r\n    case 'created':\r\n      return `Created card`\r\n    case 'status_changed':\r\n      return `Changed status from \"${event.changes.status?.from}\" to \"${event.changes.status?.to}\"`\r\n    case 'assignee_changed':\r\n      return `Changed assignee`\r\n    case 'priority_changed':\r\n      return `Changed priority from ${event.changes.priority?.from} to ${event.changes.priority?.to}`\r\n    case 'moved':\r\n      return `Moved from ${event.metadata?.fromColumn || 'unknown'} to ${event.metadata?.toColumn || 'unknown'}`\r\n    case 'title_updated':\r\n      return `Updated title`\r\n    case 'description_updated':\r\n      return `Updated description`\r\n    case 'dates_changed':\r\n      return `Changed dates`\r\n    case 'labels_changed':\r\n      return `Updated labels`\r\n    case 'dependency_added':\r\n      return `Added dependency`\r\n    case 'dependency_removed':\r\n      return `Removed dependency`\r\n    case 'comment_added':\r\n      return `Added comment`\r\n    case 'archived':\r\n      return `Archived card`\r\n    case 'restored':\r\n      return `Restored card`\r\n    default:\r\n      return `Updated card`\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to get icon for event type\r\n */\r\nexport function getEventIcon(type: CardHistoryEventType): string {\r\n  const icons: Record<CardHistoryEventType, string> = {\r\n    created: '✨',\r\n    status_changed: '🔄',\r\n    assignee_changed: '👤',\r\n    priority_changed: '🎯',\r\n    moved: '➡️',\r\n    title_updated: '✏️',\r\n    description_updated: '📝',\r\n    dates_changed: '📅',\r\n    labels_changed: '🏷️',\r\n    dependency_added: '🔗',\r\n    dependency_removed: '⛓️‍💥',\r\n    comment_added: '💬',\r\n    archived: '📦',\r\n    restored: '♻️',\r\n  }\r\n  return icons[type] || '📌'\r\n}\r\n\r\n/**\r\n * Helper to get color for event type\r\n */\r\nexport function getEventColor(type: CardHistoryEventType): string {\r\n  const colors: Record<CardHistoryEventType, string> = {\r\n    created: '#10b981',\r\n    status_changed: '#3b82f6',\r\n    assignee_changed: '#8b5cf6',\r\n    priority_changed: '#f59e0b',\r\n    moved: '#06b6d4',\r\n    title_updated: '#6366f1',\r\n    description_updated: '#6366f1',\r\n    dates_changed: '#ec4899',\r\n    labels_changed: '#14b8a6',\r\n    dependency_added: '#a855f7',\r\n    dependency_removed: '#ef4444',\r\n    comment_added: '#84cc16',\r\n    archived: '#6b7280',\r\n    restored: '#10b981',\r\n  }\r\n  return colors[type] || '#6b7280'\r\n}\r\n","/**\r\n * CardHistoryTimeline Component\r\n * Interactive timeline visualization of card history\r\n * @module components/CardHistory\r\n */\r\n\r\nimport { useState, useMemo, useRef, useEffect } from 'react'\r\nimport type {\r\n  CardHistoryEvent,\r\n  HistoryFilter,\r\n  TimelineConfig,\r\n  CardHistoryEventType,\r\n} from '../../types/card-history'\r\nimport {\r\n  DEFAULT_TIMELINE_CONFIG,\r\n  formatEventDescription,\r\n  getEventIcon,\r\n  getEventColor,\r\n} from '../../types/card-history'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface CardHistoryTimelineProps {\r\n  /** History events to display */\r\n  events: CardHistoryEvent[]\r\n  /** Current filter */\r\n  filter: HistoryFilter\r\n  /** Update filter */\r\n  onFilterChange: (filter: HistoryFilter) => void\r\n  /** Clear filter */\r\n  onClearFilter: () => void\r\n  /** Click on event */\r\n  onEventClick?: (event: CardHistoryEvent) => void\r\n  /** Selected event ID */\r\n  selectedEventId?: string\r\n  /** Timeline configuration */\r\n  config?: Partial<TimelineConfig>\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Timeline component showing card history\r\n */\r\nexport function CardHistoryTimeline({\r\n  events,\r\n  filter,\r\n  onFilterChange,\r\n  onClearFilter,\r\n  onEventClick,\r\n  selectedEventId,\r\n  config: customConfig,\r\n  className,\r\n}: CardHistoryTimelineProps) {\r\n  const config = useMemo(\r\n    () => ({ ...DEFAULT_TIMELINE_CONFIG, ...customConfig }),\r\n    [customConfig]\r\n  )\r\n\r\n  const [expandedEvents, setExpandedEvents] = useState<Set<string>>(new Set())\r\n  const timelineRef = useRef<HTMLDivElement>(null)\r\n\r\n  // Group events by day if configured\r\n  const groupedEvents = useMemo(() => {\r\n    if (!config.groupByDay) {\r\n      return [{ date: null, events }]\r\n    }\r\n\r\n    const groups = new Map<string, CardHistoryEvent[]>()\r\n    events.forEach((event) => {\r\n      const dateKey = event.timestamp.toISOString().split('T')[0]!\r\n      const group = groups.get(dateKey)\r\n      if (!group) {\r\n        groups.set(dateKey, [event])\r\n      } else {\r\n        group.push(event)\r\n      }\r\n    })\r\n\r\n    return Array.from(groups.entries())\r\n      .sort((a, b) => b[0].localeCompare(a[0]))\r\n      .map(([dateStr, events]) => ({\r\n        date: new Date(dateStr),\r\n        events: events.sort(\r\n          (a, b) => b.timestamp.getTime() - a.timestamp.getTime()\r\n        ),\r\n      }))\r\n  }, [events, config.groupByDay])\r\n\r\n  // Get unique users and event types for filter\r\n  const { uniqueUsers, uniqueTypes } = useMemo(() => {\r\n    const users = new Set<string>()\r\n    const types = new Set<CardHistoryEventType>()\r\n    events.forEach((event) => {\r\n      users.add(event.userId)\r\n      types.add(event.type)\r\n    })\r\n    return {\r\n      uniqueUsers: Array.from(users),\r\n      uniqueTypes: Array.from(types),\r\n    }\r\n  }, [events])\r\n\r\n  // Toggle event expansion\r\n  const toggleEvent = (eventId: string) => {\r\n    setExpandedEvents((prev) => {\r\n      const next = new Set(prev)\r\n      if (next.has(eventId)) {\r\n        next.delete(eventId)\r\n      } else {\r\n        next.add(eventId)\r\n      }\r\n      return next\r\n    })\r\n  }\r\n\r\n  // Format relative time\r\n  const formatRelativeTime = (date: Date): string => {\r\n    const now = new Date()\r\n    const diffMs = now.getTime() - date.getTime()\r\n    const diffMins = Math.floor(diffMs / 60000)\r\n    const diffHours = Math.floor(diffMs / 3600000)\r\n    const diffDays = Math.floor(diffMs / 86400000)\r\n\r\n    if (diffMins < 1) return 'just now'\r\n    if (diffMins < 60) return `${diffMins}m ago`\r\n    if (diffHours < 24) return `${diffHours}h ago`\r\n    if (diffDays < 7) return `${diffDays}d ago`\r\n    return date.toLocaleDateString()\r\n  }\r\n\r\n  // Active filter count\r\n  const activeFilterCount = useMemo(() => {\r\n    let count = 0\r\n    if (filter.types && filter.types.length > 0) count++\r\n    if (filter.users && filter.users.length > 0) count++\r\n    if (filter.dateRange) count++\r\n    if (filter.searchTerm) count++\r\n    return count\r\n  }, [filter])\r\n\r\n  // Scroll to selected event\r\n  useEffect(() => {\r\n    if (selectedEventId && timelineRef.current) {\r\n      const element = timelineRef.current.querySelector(\r\n        `[data-event-id=\"${selectedEventId}\"]`\r\n      )\r\n      if (element) {\r\n        element.scrollIntoView({ behavior: 'smooth', block: 'center' })\r\n      }\r\n    }\r\n  }, [selectedEventId])\r\n\r\n  if (events.length === 0) {\r\n    return (\r\n      <div className={cn('history-timeline-empty', className)}>\r\n        <div className=\"history-timeline-empty-icon\">📜</div>\r\n        <p className=\"history-timeline-empty-text\">No history events yet</p>\r\n        <p className=\"history-timeline-empty-subtext\">\r\n          Changes to this card will appear here\r\n        </p>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className={cn('history-timeline', config.compact && 'compact', className)}>\r\n      {/* Filter Bar */}\r\n      <div className=\"history-timeline-filters\">\r\n        <div className=\"history-timeline-filter-group\">\r\n          {/* Event Type Filter */}\r\n          <select\r\n            className=\"history-timeline-filter-select\"\r\n            value={filter.types?.[0] || ''}\r\n            onChange={(e) => {\r\n              const value = e.target.value\r\n              onFilterChange({\r\n                ...filter,\r\n                types: value ? [value as CardHistoryEventType] : undefined,\r\n              })\r\n            }}\r\n          >\r\n            <option value=\"\">All Events</option>\r\n            {uniqueTypes.map((type) => (\r\n              <option key={type} value={type}>\r\n                {getEventIcon(type)} {type.replace('_', ' ')}\r\n              </option>\r\n            ))}\r\n          </select>\r\n\r\n          {/* User Filter */}\r\n          {uniqueUsers.length > 1 && (\r\n            <select\r\n              className=\"history-timeline-filter-select\"\r\n              value={filter.users?.[0] || ''}\r\n              onChange={(e) => {\r\n                const value = e.target.value\r\n                onFilterChange({\r\n                  ...filter,\r\n                  users: value ? [value] : undefined,\r\n                })\r\n              }}\r\n            >\r\n              <option value=\"\">All Users</option>\r\n              {uniqueUsers.map((userId) => (\r\n                <option key={userId} value={userId}>\r\n                  {userId}\r\n                </option>\r\n              ))}\r\n            </select>\r\n          )}\r\n\r\n          {/* Search */}\r\n          <input\r\n            type=\"text\"\r\n            className=\"history-timeline-filter-search\"\r\n            placeholder=\"Search history...\"\r\n            value={filter.searchTerm || ''}\r\n            onChange={(e) =>\r\n              onFilterChange({ ...filter, searchTerm: e.target.value })\r\n            }\r\n          />\r\n        </div>\r\n\r\n        {/* Clear Filter */}\r\n        {activeFilterCount > 0 && (\r\n          <button\r\n            className=\"history-timeline-filter-clear\"\r\n            onClick={onClearFilter}\r\n          >\r\n            Clear filters ({activeFilterCount})\r\n          </button>\r\n        )}\r\n      </div>\r\n\r\n      {/* Timeline */}\r\n      <div className=\"history-timeline-container\" ref={timelineRef}>\r\n        {groupedEvents.map((group) => (\r\n          <div key={group.date?.toISOString() || 'all'} className=\"history-timeline-group\">\r\n            {/* Day Header */}\r\n            {config.groupByDay && group.date && (\r\n              <div className=\"history-timeline-day-header\">\r\n                <span className=\"history-timeline-day-date\">\r\n                  {group.date.toLocaleDateString('en-US', {\r\n                    month: 'short',\r\n                    day: 'numeric',\r\n                    year: 'numeric',\r\n                  })}\r\n                </span>\r\n                <span className=\"history-timeline-day-count\">\r\n                  {group.events.length} events\r\n                </span>\r\n              </div>\r\n            )}\r\n\r\n            {/* Events */}\r\n            <div className=\"history-timeline-events\">\r\n              {group.events.map((event, eventIndex) => {\r\n                const isExpanded = expandedEvents.has(event.id)\r\n                const isSelected = selectedEventId === event.id\r\n                const eventColor = getEventColor(event.type)\r\n\r\n                return (\r\n                  <div\r\n                    key={event.id}\r\n                    data-event-id={event.id}\r\n                    className={cn(\r\n                      'history-timeline-event',\r\n                      isExpanded && 'expanded',\r\n                      isSelected && 'selected'\r\n                    )}\r\n                    onClick={() => onEventClick?.(event)}\r\n                  >\r\n                    {/* Timeline Line */}\r\n                    <div className=\"history-timeline-line\">\r\n                      {/* Event Dot */}\r\n                      <div\r\n                        className=\"history-timeline-dot\"\r\n                        style={{ backgroundColor: eventColor }}\r\n                      >\r\n                        {config.showIcons && (\r\n                          <span className=\"history-timeline-dot-icon\">\r\n                            {getEventIcon(event.type)}\r\n                          </span>\r\n                        )}\r\n                      </div>\r\n\r\n                      {/* Connecting Line */}\r\n                      {eventIndex < group.events.length - 1 && (\r\n                        <div\r\n                          className=\"history-timeline-connector\"\r\n                          style={{ borderColor: eventColor }}\r\n                        />\r\n                      )}\r\n                    </div>\r\n\r\n                    {/* Event Content */}\r\n                    <div className=\"history-timeline-event-content\">\r\n                      {/* Header */}\r\n                      <div className=\"history-timeline-event-header\">\r\n                        <div className=\"history-timeline-event-header-left\">\r\n                          {/* User Avatar */}\r\n                          {config.showAvatars && event.userAvatar && (\r\n                            <img\r\n                              src={event.userAvatar}\r\n                              alt={event.userName || event.userId}\r\n                              className=\"history-timeline-event-avatar\"\r\n                            />\r\n                          )}\r\n\r\n                          {/* Description */}\r\n                          <div className=\"history-timeline-event-description\">\r\n                            <span className=\"history-timeline-event-user\">\r\n                              {event.userName || event.userId}\r\n                            </span>\r\n                            <span className=\"history-timeline-event-action\">\r\n                              {formatEventDescription(event)}\r\n                            </span>\r\n                          </div>\r\n                        </div>\r\n\r\n                        {/* Time */}\r\n                        <div className=\"history-timeline-event-time\">\r\n                          {config.useRelativeTime\r\n                            ? formatRelativeTime(event.timestamp)\r\n                            : event.timestamp.toLocaleString()}\r\n                        </div>\r\n                      </div>\r\n\r\n                      {/* Changes Preview */}\r\n                      {Object.keys(event.changes).length > 0 && (\r\n                        <button\r\n                          className=\"history-timeline-event-toggle\"\r\n                          onClick={(e) => {\r\n                            e.stopPropagation()\r\n                            toggleEvent(event.id)\r\n                          }}\r\n                        >\r\n                          {isExpanded ? '▼' : '▶'} Show changes\r\n                        </button>\r\n                      )}\r\n\r\n                      {/* Expanded Changes */}\r\n                      {isExpanded && (\r\n                        <div className=\"history-timeline-event-changes\">\r\n                          {Object.entries(event.changes).map(([key, change]) => (\r\n                            <div key={key} className=\"history-timeline-event-change\">\r\n                              <span className=\"history-timeline-event-change-key\">\r\n                                {key}:\r\n                              </span>\r\n                              <div className=\"history-timeline-event-change-values\">\r\n                                <span className=\"history-timeline-event-change-from\">\r\n                                  {JSON.stringify(change.from)}\r\n                                </span>\r\n                                <span className=\"history-timeline-event-change-arrow\">\r\n                                  →\r\n                                </span>\r\n                                <span className=\"history-timeline-event-change-to\">\r\n                                  {JSON.stringify(change.to)}\r\n                                </span>\r\n                              </div>\r\n                            </div>\r\n                          ))}\r\n\r\n                          {/* Metadata */}\r\n                          {event.metadata && Object.keys(event.metadata).length > 0 && (\r\n                            <div className=\"history-timeline-event-metadata\">\r\n                              <div className=\"history-timeline-event-metadata-title\">\r\n                                Additional Info:\r\n                              </div>\r\n                              {Object.entries(event.metadata).map(([key, value]) => (\r\n                                <div key={key} className=\"history-timeline-event-metadata-item\">\r\n                                  <span className=\"history-timeline-event-metadata-key\">\r\n                                    {key}:\r\n                                  </span>\r\n                                  <span className=\"history-timeline-event-metadata-value\">\r\n                                    {JSON.stringify(value)}\r\n                                  </span>\r\n                                </div>\r\n                              ))}\r\n                            </div>\r\n                          )}\r\n                        </div>\r\n                      )}\r\n                    </div>\r\n                  </div>\r\n                )\r\n              })}\r\n            </div>\r\n          </div>\r\n        ))}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * CardHistoryReplay Component\r\n * Video-player-style controls for replaying card history\r\n * @module components/CardHistory\r\n */\r\n\r\nimport { useMemo } from 'react'\r\nimport type { ReplayState, CardHistoryEvent } from '../../types/card-history'\r\nimport { getEventIcon, formatEventDescription } from '../../types/card-history'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface CardHistoryReplayProps {\r\n  /** Current replay state */\r\n  replayState: ReplayState | null\r\n  /** All history events */\r\n  events: CardHistoryEvent[]\r\n  /** Start replay */\r\n  onStartReplay: () => void\r\n  /** Stop replay */\r\n  onStopReplay: () => void\r\n  /** Toggle play/pause */\r\n  onTogglePlayback: () => void\r\n  /** Go to previous event */\r\n  onPrevious: () => void\r\n  /** Go to next event */\r\n  onNext: () => void\r\n  /** Go to specific event */\r\n  onGoToEvent: (index: number) => void\r\n  /** Change playback speed */\r\n  onSpeedChange: (speed: number) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Replay controls for time-travel functionality\r\n */\r\nexport function CardHistoryReplay({\r\n  replayState,\r\n  events,\r\n  onStartReplay,\r\n  onStopReplay,\r\n  onTogglePlayback,\r\n  onPrevious,\r\n  onNext,\r\n  onGoToEvent,\r\n  onSpeedChange,\r\n  className,\r\n}: CardHistoryReplayProps) {\r\n  // Available playback speeds\r\n  const speeds = [0.5, 1, 1.5, 2, 3]\r\n\r\n  // Current event\r\n  const currentEvent = useMemo(() => {\r\n    if (!replayState || events.length === 0) return null\r\n    return events[replayState.currentIndex]\r\n  }, [replayState, events])\r\n\r\n  // Progress percentage\r\n  const progress = useMemo(() => {\r\n    if (!replayState || replayState.totalEvents === 0) return 0\r\n    return (replayState.currentIndex / (replayState.totalEvents - 1)) * 100\r\n  }, [replayState])\r\n\r\n  // If no events, show empty state\r\n  if (events.length === 0) {\r\n    return (\r\n      <div className={cn('history-replay-empty', className)}>\r\n        <div className=\"history-replay-empty-icon\">⏳</div>\r\n        <p className=\"history-replay-empty-text\">No history to replay</p>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  // If not in replay mode, show start button\r\n  if (!replayState) {\r\n    return (\r\n      <div className={cn('history-replay-start', className)}>\r\n        <button className=\"history-replay-start-button\" onClick={onStartReplay}>\r\n          <svg\r\n            className=\"history-replay-start-icon\"\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            strokeWidth=\"2\"\r\n          >\r\n            <polygon points=\"5 3 19 12 5 21 5 3\" />\r\n          </svg>\r\n          <span>Start Time Travel</span>\r\n        </button>\r\n        <p className=\"history-replay-start-hint\">\r\n          Replay {events.length} events from this card's history\r\n        </p>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className={cn('history-replay', className)}>\r\n      {/* Current Event Display */}\r\n      <div className=\"history-replay-current-event\">\r\n        <div className=\"history-replay-event-icon\">\r\n          {currentEvent && getEventIcon(currentEvent.type)}\r\n        </div>\r\n        <div className=\"history-replay-event-info\">\r\n          <div className=\"history-replay-event-description\">\r\n            {currentEvent && formatEventDescription(currentEvent)}\r\n          </div>\r\n          <div className=\"history-replay-event-meta\">\r\n            <span className=\"history-replay-event-index\">\r\n              Event {replayState.currentIndex + 1} of {replayState.totalEvents}\r\n            </span>\r\n            <span className=\"history-replay-event-time\">\r\n              {currentEvent && currentEvent.timestamp.toLocaleString()}\r\n            </span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Progress Bar */}\r\n      <div className=\"history-replay-progress-container\">\r\n        <input\r\n          type=\"range\"\r\n          className=\"history-replay-progress-slider\"\r\n          min=\"0\"\r\n          max={replayState.totalEvents - 1}\r\n          value={replayState.currentIndex}\r\n          onChange={(e) => onGoToEvent(parseInt(e.target.value))}\r\n        />\r\n        <div\r\n          className=\"history-replay-progress-fill\"\r\n          style={{ width: `${progress}%` }}\r\n        />\r\n        {/* Event markers on timeline */}\r\n        <div className=\"history-replay-progress-markers\">\r\n          {events.map((event, index) => (\r\n            <div\r\n              key={event.id}\r\n              className={cn(\r\n                'history-replay-progress-marker',\r\n                index === replayState.currentIndex && 'active'\r\n              )}\r\n              style={{\r\n                left: `${(index / (replayState.totalEvents - 1)) * 100}%`,\r\n              }}\r\n              onClick={() => onGoToEvent(index)}\r\n              title={formatEventDescription(event)}\r\n            />\r\n          ))}\r\n        </div>\r\n      </div>\r\n\r\n      {/* Playback Controls */}\r\n      <div className=\"history-replay-controls\">\r\n        {/* Previous Button */}\r\n        <button\r\n          className=\"history-replay-control-btn\"\r\n          onClick={onPrevious}\r\n          disabled={!replayState.canGoBack}\r\n          title=\"Previous event (←)\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n            <polygon points=\"19 20 9 12 19 4 19 20\" />\r\n            <line x1=\"5\" y1=\"19\" x2=\"5\" y2=\"5\" />\r\n          </svg>\r\n        </button>\r\n\r\n        {/* Play/Pause Button */}\r\n        <button\r\n          className=\"history-replay-control-btn history-replay-control-play\"\r\n          onClick={onTogglePlayback}\r\n          title={replayState.isPlaying ? 'Pause (Space)' : 'Play (Space)'}\r\n        >\r\n          {replayState.isPlaying ? (\r\n            <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n              <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" />\r\n              <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" />\r\n            </svg>\r\n          ) : (\r\n            <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n              <polygon points=\"5 3 19 12 5 21 5 3\" />\r\n            </svg>\r\n          )}\r\n        </button>\r\n\r\n        {/* Next Button */}\r\n        <button\r\n          className=\"history-replay-control-btn\"\r\n          onClick={onNext}\r\n          disabled={!replayState.canGoForward}\r\n          title=\"Next event (→)\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n            <polygon points=\"5 4 15 12 5 20 5 4\" />\r\n            <line x1=\"19\" y1=\"5\" x2=\"19\" y2=\"19\" />\r\n          </svg>\r\n        </button>\r\n\r\n        {/* Speed Control */}\r\n        <div className=\"history-replay-speed\">\r\n          <label className=\"history-replay-speed-label\">Speed:</label>\r\n          <div className=\"history-replay-speed-buttons\">\r\n            {speeds.map((speed) => (\r\n              <button\r\n                key={speed}\r\n                className={cn(\r\n                  'history-replay-speed-btn',\r\n                  replayState.speed === speed && 'active'\r\n                )}\r\n                onClick={() => onSpeedChange(speed)}\r\n              >\r\n                {speed}x\r\n              </button>\r\n            ))}\r\n          </div>\r\n        </div>\r\n\r\n        {/* Stop Button */}\r\n        <button\r\n          className=\"history-replay-control-btn history-replay-stop\"\r\n          onClick={onStopReplay}\r\n          title=\"Stop replay (Esc)\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n            <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" />\r\n          </svg>\r\n        </button>\r\n      </div>\r\n\r\n      {/* Keyboard Shortcuts Hint */}\r\n      <div className=\"history-replay-shortcuts\">\r\n        <span className=\"history-replay-shortcut\">\r\n          <kbd>Space</kbd> Play/Pause\r\n        </span>\r\n        <span className=\"history-replay-shortcut\">\r\n          <kbd>←</kbd> Previous\r\n        </span>\r\n        <span className=\"history-replay-shortcut\">\r\n          <kbd>→</kbd> Next\r\n        </span>\r\n        <span className=\"history-replay-shortcut\">\r\n          <kbd>Esc</kbd> Stop\r\n        </span>\r\n      </div>\r\n\r\n      {/* Card State Preview */}\r\n      <div className=\"history-replay-card-preview\">\r\n        <div className=\"history-replay-card-preview-header\">\r\n          <span className=\"history-replay-card-preview-title\">\r\n            Card State at This Point\r\n          </span>\r\n          <span className=\"history-replay-card-preview-time\">\r\n            {currentEvent && currentEvent.timestamp.toLocaleDateString()}\r\n          </span>\r\n        </div>\r\n        <div className=\"history-replay-card-preview-content\">\r\n          <div className=\"history-replay-card-preview-field\">\r\n            <span className=\"history-replay-card-preview-label\">Title:</span>\r\n            <span className=\"history-replay-card-preview-value\">\r\n              {replayState.cardState.title}\r\n            </span>\r\n          </div>\r\n          {replayState.cardState.description && (\r\n            <div className=\"history-replay-card-preview-field\">\r\n              <span className=\"history-replay-card-preview-label\">Description:</span>\r\n              <span className=\"history-replay-card-preview-value\">\r\n                {replayState.cardState.description}\r\n              </span>\r\n            </div>\r\n          )}\r\n          <div className=\"history-replay-card-preview-field\">\r\n            <span className=\"history-replay-card-preview-label\">Priority:</span>\r\n            <span className=\"history-replay-card-preview-value\">\r\n              {replayState.cardState.priority || 'None'}\r\n            </span>\r\n          </div>\r\n          {replayState.cardState.labels && replayState.cardState.labels.length > 0 && (\r\n            <div className=\"history-replay-card-preview-field\">\r\n              <span className=\"history-replay-card-preview-label\">Labels:</span>\r\n              <div className=\"history-replay-card-preview-labels\">\r\n                {replayState.cardState.labels.map((label) => (\r\n                  <span key={label} className=\"history-replay-card-preview-label-tag\">\r\n                    {label}\r\n                  </span>\r\n                ))}\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Card Relationships & Graph Types\r\n * Force-directed graph visualization for card dependencies and relationships\r\n * @module types/card-relationships\r\n */\r\n\r\nimport type { Card } from './index'\r\n\r\n/**\r\n * Types of relationships between cards\r\n */\r\nexport type RelationshipType =\r\n  | 'blocks'        // This card blocks another card\r\n  | 'blocked_by'    // This card is blocked by another card\r\n  | 'depends_on'    // This card depends on another card\r\n  | 'required_by'   // This card is required by another card\r\n  | 'relates_to'    // General relationship\r\n  | 'duplicates'    // This card duplicates another card\r\n  | 'parent_of'     // Parent-child relationship\r\n  | 'child_of'      // Child-parent relationship\r\n  | 'similar_to'    // AI-detected similarity\r\n\r\n/**\r\n * Represents a relationship between two cards\r\n */\r\nexport interface CardRelationship {\r\n  /** Unique relationship ID */\r\n  id: string\r\n  /** Source card ID */\r\n  sourceId: string\r\n  /** Target card ID */\r\n  targetId: string\r\n  /** Type of relationship */\r\n  type: RelationshipType\r\n  /** Relationship strength (0-1, for AI-detected relationships) */\r\n  strength?: number\r\n  /** When relationship was created */\r\n  createdAt: Date\r\n  /** User who created the relationship */\r\n  createdBy?: string\r\n  /** Additional metadata */\r\n  metadata?: {\r\n    /** Reason for relationship */\r\n    reason?: string\r\n    /** Is this relationship auto-detected */\r\n    autoDetected?: boolean\r\n    /** Confidence score for auto-detected relationships */\r\n    confidence?: number\r\n  }\r\n}\r\n\r\n/**\r\n * Node in the relationship graph\r\n */\r\nexport interface GraphNode {\r\n  /** Card ID */\r\n  id: string\r\n  /** Card reference */\r\n  card: Card\r\n  /** X position (calculated by force simulation) */\r\n  x?: number\r\n  /** Y position (calculated by force simulation) */\r\n  y?: number\r\n  /** X velocity (for force simulation) */\r\n  vx?: number\r\n  /** Y velocity (for force simulation) */\r\n  vy?: number\r\n  /** Fixed position (prevent movement) */\r\n  fx?: number | null\r\n  /** Fixed position (prevent movement) */\r\n  fy?: number | null\r\n  /** Node degree (number of connections) */\r\n  degree?: number\r\n  /** Is this node on the critical path */\r\n  onCriticalPath?: boolean\r\n  /** Cluster ID (for grouping) */\r\n  clusterId?: string\r\n}\r\n\r\n/**\r\n * Edge in the relationship graph\r\n */\r\nexport interface GraphEdge {\r\n  /** Relationship ID */\r\n  id: string\r\n  /** Source node ID */\r\n  source: string | GraphNode\r\n  /** Target node ID */\r\n  target: string | GraphNode\r\n  /** Relationship type */\r\n  type: RelationshipType\r\n  /** Edge strength (for styling) */\r\n  strength?: number\r\n  /** Is this edge on the critical path */\r\n  onCriticalPath?: boolean\r\n}\r\n\r\n/**\r\n * Graph layout algorithms\r\n */\r\nexport type GraphLayout =\r\n  | 'force'        // Force-directed layout (D3 force simulation)\r\n  | 'hierarchical' // Top-down hierarchical layout\r\n  | 'circular'     // Circular layout\r\n  | 'radial'       // Radial layout from center node\r\n  | 'grid'         // Grid layout\r\n\r\n/**\r\n * Graph visualization configuration\r\n */\r\nexport interface GraphConfig {\r\n  /** Layout algorithm */\r\n  layout: GraphLayout\r\n  /** Width of the graph container */\r\n  width: number\r\n  /** Height of the graph container */\r\n  height: number\r\n  /** Enable node dragging */\r\n  enableDragging: boolean\r\n  /** Enable zoom and pan */\r\n  enableZoom: boolean\r\n  /** Show node labels */\r\n  showLabels: boolean\r\n  /** Show edge labels */\r\n  showEdgeLabels: boolean\r\n  /** Highlight critical path */\r\n  highlightCriticalPath: boolean\r\n  /** Node size */\r\n  nodeSize: number\r\n  /** Edge width */\r\n  edgeWidth: number\r\n  /** Animation duration */\r\n  animationDuration: number\r\n  /** Force simulation strength */\r\n  forceStrength: number\r\n  /** Link distance */\r\n  linkDistance: number\r\n  /** Charge strength (repulsion) */\r\n  chargeStrength: number\r\n  /** Center force strength */\r\n  centerForce: number\r\n  /** Color scheme */\r\n  colorScheme: 'status' | 'priority' | 'assignee' | 'cluster'\r\n}\r\n\r\n/**\r\n * Graph filters\r\n */\r\nexport interface GraphFilter {\r\n  /** Filter by relationship types */\r\n  types?: RelationshipType[]\r\n  /** Filter by card IDs */\r\n  cardIds?: string[]\r\n  /** Filter by columns */\r\n  columnIds?: string[]\r\n  /** Minimum relationship strength */\r\n  minStrength?: number\r\n  /** Show only critical path */\r\n  criticalPathOnly?: boolean\r\n  /** Maximum depth from selected node */\r\n  maxDepth?: number\r\n}\r\n\r\n/**\r\n * Critical path analysis result\r\n */\r\nexport interface CriticalPath {\r\n  /** Cards on the critical path */\r\n  cardIds: string[]\r\n  /** Relationships on the critical path */\r\n  relationshipIds: string[]\r\n  /** Total estimated time */\r\n  totalDuration: number\r\n  /** Bottleneck cards */\r\n  bottlenecks: string[]\r\n}\r\n\r\n/**\r\n * Graph statistics\r\n */\r\nexport interface GraphStats {\r\n  /** Total nodes */\r\n  totalNodes: number\r\n  /** Total edges */\r\n  totalEdges: number\r\n  /** Average degree */\r\n  averageDegree: number\r\n  /** Density (0-1) */\r\n  density: number\r\n  /** Number of clusters */\r\n  clusters: number\r\n  /** Isolated nodes (no connections) */\r\n  isolatedNodes: string[]\r\n  /** Hub nodes (most connections) */\r\n  hubNodes: Array<{ cardId: string; degree: number }>\r\n  /** Most common relationship type */\r\n  mostCommonRelationType: RelationshipType\r\n}\r\n\r\n/**\r\n * Graph interaction event\r\n */\r\nexport interface GraphInteraction {\r\n  /** Event type */\r\n  type: 'node-click' | 'node-hover' | 'edge-click' | 'edge-hover' | 'canvas-click'\r\n  /** Selected node */\r\n  node?: GraphNode\r\n  /** Selected edge */\r\n  edge?: GraphEdge\r\n  /** Mouse position */\r\n  position?: { x: number; y: number }\r\n}\r\n\r\n/**\r\n * Default graph configuration\r\n */\r\nexport const DEFAULT_GRAPH_CONFIG: GraphConfig = {\r\n  layout: 'force',\r\n  width: 1200,\r\n  height: 800,\r\n  enableDragging: true,\r\n  enableZoom: true,\r\n  showLabels: true,\r\n  showEdgeLabels: false,\r\n  highlightCriticalPath: true,\r\n  nodeSize: 40,\r\n  edgeWidth: 2,\r\n  animationDuration: 300,\r\n  forceStrength: 0.5,\r\n  linkDistance: 150,\r\n  chargeStrength: -300,\r\n  centerForce: 0.1,\r\n  colorScheme: 'status',\r\n}\r\n\r\n/**\r\n * Helper to create a relationship\r\n */\r\nexport function createRelationship(\r\n  sourceId: string,\r\n  targetId: string,\r\n  type: RelationshipType,\r\n  metadata?: CardRelationship['metadata']\r\n): CardRelationship {\r\n  return {\r\n    id: `${sourceId}-${targetId}-${type}-${Date.now()}`,\r\n    sourceId,\r\n    targetId,\r\n    type,\r\n    createdAt: new Date(),\r\n    metadata,\r\n  }\r\n}\r\n\r\n/**\r\n * Helper to get relationship color\r\n */\r\nexport function getRelationshipColor(type: RelationshipType): string {\r\n  const colors: Record<RelationshipType, string> = {\r\n    blocks: '#ef4444',\r\n    blocked_by: '#dc2626',\r\n    depends_on: '#f59e0b',\r\n    required_by: '#d97706',\r\n    relates_to: '#6b7280',\r\n    duplicates: '#8b5cf6',\r\n    parent_of: '#3b82f6',\r\n    child_of: '#2563eb',\r\n    similar_to: '#10b981',\r\n  }\r\n  return colors[type] || '#6b7280'\r\n}\r\n\r\n/**\r\n * Helper to get relationship label\r\n */\r\nexport function getRelationshipLabel(type: RelationshipType): string {\r\n  const labels: Record<RelationshipType, string> = {\r\n    blocks: 'Blocks',\r\n    blocked_by: 'Blocked by',\r\n    depends_on: 'Depends on',\r\n    required_by: 'Required by',\r\n    relates_to: 'Relates to',\r\n    duplicates: 'Duplicates',\r\n    parent_of: 'Parent of',\r\n    child_of: 'Child of',\r\n    similar_to: 'Similar to',\r\n  }\r\n  return labels[type] || type\r\n}\r\n\r\n/**\r\n * Helper to get relationship icon\r\n */\r\nexport function getRelationshipIcon(type: RelationshipType): string {\r\n  const icons: Record<RelationshipType, string> = {\r\n    blocks: '🚫',\r\n    blocked_by: '⛔',\r\n    depends_on: '🔗',\r\n    required_by: '📌',\r\n    relates_to: '🔄',\r\n    duplicates: '📋',\r\n    parent_of: '📂',\r\n    child_of: '📄',\r\n    similar_to: '🔍',\r\n  }\r\n  return icons[type] || '🔗'\r\n}\r\n\r\n/**\r\n * Helper to check if relationship is directional\r\n */\r\nexport function isDirectionalRelationship(type: RelationshipType): boolean {\r\n  return [\r\n    'blocks',\r\n    'blocked_by',\r\n    'depends_on',\r\n    'required_by',\r\n    'parent_of',\r\n    'child_of',\r\n  ].includes(type)\r\n}\r\n\r\n/**\r\n * Helper to get inverse relationship type\r\n */\r\nexport function getInverseRelationship(type: RelationshipType): RelationshipType | null {\r\n  const inverses: Partial<Record<RelationshipType, RelationshipType>> = {\r\n    blocks: 'blocked_by',\r\n    blocked_by: 'blocks',\r\n    depends_on: 'required_by',\r\n    required_by: 'depends_on',\r\n    parent_of: 'child_of',\r\n    child_of: 'parent_of',\r\n  }\r\n  return inverses[type] || null\r\n}\r\n\r\n/**\r\n * Calculate graph statistics\r\n */\r\nexport function calculateGraphStats(\r\n  nodes: GraphNode[],\r\n  edges: GraphEdge[]\r\n): GraphStats {\r\n  const totalNodes = nodes.length\r\n  const totalEdges = edges.length\r\n\r\n  // Calculate degrees\r\n  const degrees = new Map<string, number>()\r\n  edges.forEach((edge) => {\r\n    const sourceId = typeof edge.source === 'string' ? edge.source : edge.source.id\r\n    const targetId = typeof edge.target === 'string' ? edge.target : edge.target.id\r\n    degrees.set(sourceId, (degrees.get(sourceId) || 0) + 1)\r\n    degrees.set(targetId, (degrees.get(targetId) || 0) + 1)\r\n  })\r\n\r\n  const averageDegree = totalNodes > 0 ? Array.from(degrees.values()).reduce((a, b) => a + b, 0) / totalNodes : 0\r\n  const maxPossibleEdges = (totalNodes * (totalNodes - 1)) / 2\r\n  const density = maxPossibleEdges > 0 ? totalEdges / maxPossibleEdges : 0\r\n\r\n  // Find isolated nodes\r\n  const isolatedNodes = nodes\r\n    .filter((node) => !degrees.has(node.id))\r\n    .map((node) => node.id)\r\n\r\n  // Find hub nodes (top 5 most connected)\r\n  const hubNodes = Array.from(degrees.entries())\r\n    .map(([cardId, degree]) => ({ cardId, degree }))\r\n    .sort((a, b) => b.degree - a.degree)\r\n    .slice(0, 5)\r\n\r\n  // Most common relationship type\r\n  const typeCounts = new Map<RelationshipType, number>()\r\n  edges.forEach((edge) => {\r\n    typeCounts.set(edge.type, (typeCounts.get(edge.type) || 0) + 1)\r\n  })\r\n  const mostCommonRelationType = Array.from(typeCounts.entries()).sort((a, b) => b[1] - a[1])[0]?.[0] || 'relates_to'\r\n\r\n  return {\r\n    totalNodes,\r\n    totalEdges,\r\n    averageDegree,\r\n    density,\r\n    clusters: 0, // Would need clustering algorithm\r\n    isolatedNodes,\r\n    hubNodes,\r\n    mostCommonRelationType,\r\n  }\r\n}\r\n\r\n/**\r\n * Find critical path using topological sort and longest path\r\n */\r\nexport function findCriticalPath(\r\n  _cards: Card[],\r\n  relationships: CardRelationship[]\r\n): CriticalPath {\r\n  // Simple critical path: cards with most dependencies\r\n  const dependencyCounts = new Map<string, number>()\r\n\r\n  relationships.forEach((rel) => {\r\n    if (rel.type === 'blocks' || rel.type === 'depends_on') {\r\n      dependencyCounts.set(rel.targetId, (dependencyCounts.get(rel.targetId) || 0) + 1)\r\n    }\r\n  })\r\n\r\n  const sortedCards = Array.from(dependencyCounts.entries())\r\n    .sort((a, b) => b[1] - a[1])\r\n    .slice(0, 5)\r\n    .map((entry) => entry[0])\r\n\r\n  const criticalRelationships = relationships\r\n    .filter((rel) =>\r\n      sortedCards.includes(rel.sourceId) || sortedCards.includes(rel.targetId)\r\n    )\r\n    .map((rel) => rel.id)\r\n\r\n  return {\r\n    cardIds: sortedCards,\r\n    relationshipIds: criticalRelationships,\r\n    totalDuration: sortedCards.length * 5, // Estimate 5 days per card\r\n    bottlenecks: sortedCards.slice(0, 2),\r\n  }\r\n}\r\n","/**\r\n * CardRelationshipsGraph Component\r\n * Interactive force-directed graph visualization of card relationships\r\n * @module components/CardRelationships\r\n */\r\n\r\nimport { useRef, useEffect, useState, useCallback } from 'react'\r\nimport type {\r\n  GraphNode,\r\n  GraphEdge,\r\n  GraphConfig,\r\n  GraphFilter,\r\n  CriticalPath,\r\n  GraphStats,\r\n  GraphInteraction,\r\n} from '../../types/card-relationships'\r\nimport {\r\n  getRelationshipColor,\r\n  getRelationshipLabel,\r\n  getRelationshipIcon,\r\n  isDirectionalRelationship,\r\n} from '../../types/card-relationships'\r\nimport { cn } from '../../utils'\r\n\r\nexport interface CardRelationshipsGraphProps {\r\n  /** Graph nodes */\r\n  nodes: GraphNode[]\r\n  /** Graph edges */\r\n  edges: GraphEdge[]\r\n  /** Graph configuration */\r\n  config: GraphConfig\r\n  /** Current filter */\r\n  filter: GraphFilter\r\n  /** Update filter */\r\n  onFilterChange: (filter: GraphFilter) => void\r\n  /** Critical path */\r\n  criticalPath: CriticalPath | null\r\n  /** Graph statistics */\r\n  stats: GraphStats\r\n  /** Interaction callback */\r\n  onInteraction?: (interaction: GraphInteraction) => void\r\n  /** Custom className */\r\n  className?: string\r\n}\r\n\r\n/**\r\n * Simple force simulation (without D3.js dependency)\r\n */\r\ninterface SimulationNode extends GraphNode {\r\n  x: number\r\n  y: number\r\n  vx: number\r\n  vy: number\r\n}\r\n\r\nfunction runForceSimulation(\r\n  nodes: GraphNode[],\r\n  edges: GraphEdge[],\r\n  width: number,\r\n  height: number,\r\n  config: GraphConfig,\r\n  iterations: number = 100\r\n): SimulationNode[] {\r\n  // Initialize positions\r\n  const simNodes: SimulationNode[] = nodes.map((node) => ({\r\n    ...node,\r\n    x: node.x ?? width / 2 + Math.random() * 100 - 50,\r\n    y: node.y ?? height / 2 + Math.random() * 100 - 50,\r\n    vx: 0,\r\n    vy: 0,\r\n  }))\r\n\r\n  const nodeMap = new Map(simNodes.map((n) => [n.id, n]))\r\n\r\n  // Run simulation\r\n  for (let iter = 0; iter < iterations; iter++) {\r\n    const alpha = 1 - iter / iterations // Decay factor\r\n\r\n    // Apply forces\r\n    simNodes.forEach((node) => {\r\n      // Center force\r\n      const centerX = width / 2\r\n      const centerY = height / 2\r\n      node.vx += (centerX - node.x) * config.centerForce * alpha\r\n      node.vy += (centerY - node.y) * config.centerForce * alpha\r\n\r\n      // Repulsion force (charge)\r\n      simNodes.forEach((other) => {\r\n        if (node.id === other.id) return\r\n        const dx = node.x - other.x\r\n        const dy = node.y - other.y\r\n        const distance = Math.sqrt(dx * dx + dy * dy) || 1\r\n        const force = (config.chargeStrength * alpha) / (distance * distance)\r\n        node.vx += (dx / distance) * force\r\n        node.vy += (dy / distance) * force\r\n      })\r\n    })\r\n\r\n    // Link forces\r\n    edges.forEach((edge) => {\r\n      const source = nodeMap.get(\r\n        typeof edge.source === 'string' ? edge.source : edge.source.id\r\n      )\r\n      const target = nodeMap.get(\r\n        typeof edge.target === 'string' ? edge.target : edge.target.id\r\n      )\r\n      if (!source || !target) return\r\n\r\n      const dx = target.x - source.x\r\n      const dy = target.y - source.y\r\n      const distance = Math.sqrt(dx * dx + dy * dy) || 1\r\n      const force =\r\n        ((distance - config.linkDistance) / distance) * config.forceStrength * alpha\r\n\r\n      source.vx += dx * force\r\n      source.vy += dy * force\r\n      target.vx -= dx * force\r\n      target.vy -= dy * force\r\n    })\r\n\r\n    // Update positions\r\n    simNodes.forEach((node) => {\r\n      if (node.fx !== null && node.fx !== undefined) {\r\n        node.x = node.fx\r\n        node.vx = 0\r\n      } else {\r\n        node.x += node.vx\r\n      }\r\n\r\n      if (node.fy !== null && node.fy !== undefined) {\r\n        node.y = node.fy\r\n        node.vy = 0\r\n      } else {\r\n        node.y += node.vy\r\n      }\r\n\r\n      // Keep nodes in bounds\r\n      node.x = Math.max(config.nodeSize, Math.min(width - config.nodeSize, node.x))\r\n      node.y = Math.max(config.nodeSize, Math.min(height - config.nodeSize, node.y))\r\n\r\n      // Apply damping\r\n      node.vx *= 0.9\r\n      node.vy *= 0.9\r\n    })\r\n  }\r\n\r\n  return simNodes\r\n}\r\n\r\n/**\r\n * Graph visualization component\r\n */\r\nexport function CardRelationshipsGraph({\r\n  nodes,\r\n  edges,\r\n  config,\r\n  filter: _filter,\r\n  onFilterChange: _onFilterChange,\r\n  criticalPath,\r\n  stats,\r\n  onInteraction,\r\n  className,\r\n}: CardRelationshipsGraphProps) {\r\n  const svgRef = useRef<SVGSVGElement>(null)\r\n  const [simulatedNodes, setSimulatedNodes] = useState<SimulationNode[]>([])\r\n  const [draggingNode, setDraggingNode] = useState<string | null>(null)\r\n  const [hoveredNode, setHoveredNode] = useState<string | null>(null)\r\n  const [hoveredEdge, setHoveredEdge] = useState<string | null>(null)\r\n  const [zoom, setZoom] = useState(1)\r\n  const [pan, setPan] = useState({ x: 0, y: 0 })\r\n\r\n  // Run force simulation when nodes/edges change\r\n  useEffect(() => {\r\n    if (nodes.length === 0) return\r\n\r\n    const simulated = runForceSimulation(\r\n      nodes,\r\n      edges,\r\n      config.width,\r\n      config.height,\r\n      config,\r\n      150\r\n    )\r\n    setSimulatedNodes(simulated)\r\n  }, [nodes, edges, config])\r\n\r\n  // Handle node drag\r\n  const handleNodeMouseDown = useCallback(\r\n    (nodeId: string, e: React.MouseEvent) => {\r\n      if (!config.enableDragging) return\r\n      e.stopPropagation()\r\n      setDraggingNode(nodeId)\r\n    },\r\n    [config.enableDragging]\r\n  )\r\n\r\n  const handleMouseMove = useCallback(\r\n    (e: React.MouseEvent<SVGSVGElement>) => {\r\n      if (!draggingNode || !svgRef.current) return\r\n\r\n      const svg = svgRef.current\r\n      const rect = svg.getBoundingClientRect()\r\n      const x = (e.clientX - rect.left - pan.x) / zoom\r\n      const y = (e.clientY - rect.top - pan.y) / zoom\r\n\r\n      setSimulatedNodes((prev) =>\r\n        prev.map((node) =>\r\n          node.id === draggingNode ? { ...node, x, y, fx: x, fy: y } : node\r\n        )\r\n      )\r\n    },\r\n    [draggingNode, zoom, pan]\r\n  )\r\n\r\n  const handleMouseUp = useCallback(() => {\r\n    setDraggingNode(null)\r\n  }, [])\r\n\r\n  // Handle node click\r\n  const handleNodeClick = useCallback(\r\n    (node: SimulationNode, e: React.MouseEvent) => {\r\n      e.stopPropagation()\r\n      onInteraction?.({\r\n        type: 'node-click',\r\n        node,\r\n        position: { x: e.clientX, y: e.clientY },\r\n      })\r\n    },\r\n    [onInteraction]\r\n  )\r\n\r\n  // Handle edge click\r\n  const handleEdgeClick = useCallback(\r\n    (edge: GraphEdge, e: React.MouseEvent) => {\r\n      e.stopPropagation()\r\n      onInteraction?.({\r\n        type: 'edge-click',\r\n        edge,\r\n        position: { x: e.clientX, y: e.clientY },\r\n      })\r\n    },\r\n    [onInteraction]\r\n  )\r\n\r\n  // Get node position\r\n  const getNodePosition = useCallback(\r\n    (nodeId: string): { x: number; y: number } => {\r\n      const node = simulatedNodes.find((n) => n.id === nodeId)\r\n      return node ? { x: node.x, y: node.y } : { x: 0, y: 0 }\r\n    },\r\n    [simulatedNodes]\r\n  )\r\n\r\n  // Get node color based on color scheme\r\n  const getNodeColor = useCallback(\r\n    (node: SimulationNode): string => {\r\n      if (node.onCriticalPath) return '#ef4444'\r\n\r\n      switch (config.colorScheme) {\r\n        case 'status':\r\n          return node.card.columnId === 'done' ? '#10b981' : '#3b82f6'\r\n        case 'priority':\r\n          const priority = node.card.priority\r\n          if (priority === 'URGENT') return '#ef4444' // urgent\r\n          if (priority === 'HIGH') return '#f59e0b' // high\r\n          if (priority === 'MEDIUM') return '#3b82f6' // medium\r\n          return '#6b7280' // low or none\r\n        case 'assignee':\r\n          return node.card.assigneeId ? '#8b5cf6' : '#6b7280'\r\n        default:\r\n          return '#3b82f6'\r\n      }\r\n    },\r\n    [config.colorScheme]\r\n  )\r\n\r\n  if (nodes.length === 0) {\r\n    return (\r\n      <div className={cn('relationships-graph-empty', className)}>\r\n        <div className=\"relationships-graph-empty-icon\">🔗</div>\r\n        <p className=\"relationships-graph-empty-text\">No relationships to display</p>\r\n        <p className=\"relationships-graph-empty-subtext\">\r\n          Add relationships between cards to see the graph\r\n        </p>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className={cn('relationships-graph', className)}>\r\n      {/* Controls */}\r\n      <div className=\"relationships-graph-controls\">\r\n        <div className=\"relationships-graph-stats\">\r\n          <span className=\"relationships-graph-stat\">\r\n            <span className=\"relationships-graph-stat-value\">{stats.totalNodes}</span>\r\n            <span className=\"relationships-graph-stat-label\">Cards</span>\r\n          </span>\r\n          <span className=\"relationships-graph-stat\">\r\n            <span className=\"relationships-graph-stat-value\">{stats.totalEdges}</span>\r\n            <span className=\"relationships-graph-stat-label\">Relations</span>\r\n          </span>\r\n          {criticalPath && (\r\n            <span className=\"relationships-graph-stat relationships-graph-stat-critical\">\r\n              <span className=\"relationships-graph-stat-value\">\r\n                {criticalPath.cardIds.length}\r\n              </span>\r\n              <span className=\"relationships-graph-stat-label\">Critical Path</span>\r\n            </span>\r\n          )}\r\n        </div>\r\n\r\n        {/* Zoom controls */}\r\n        {config.enableZoom && (\r\n          <div className=\"relationships-graph-zoom-controls\">\r\n            <button\r\n              className=\"relationships-graph-zoom-btn\"\r\n              onClick={() => setZoom((z) => Math.min(z + 0.2, 3))}\r\n            >\r\n              +\r\n            </button>\r\n            <span className=\"relationships-graph-zoom-value\">{Math.round(zoom * 100)}%</span>\r\n            <button\r\n              className=\"relationships-graph-zoom-btn\"\r\n              onClick={() => setZoom((z) => Math.max(z - 0.2, 0.5))}\r\n            >\r\n              −\r\n            </button>\r\n            <button\r\n              className=\"relationships-graph-zoom-btn\"\r\n              onClick={() => {\r\n                setZoom(1)\r\n                setPan({ x: 0, y: 0 })\r\n              }}\r\n            >\r\n              Reset\r\n            </button>\r\n          </div>\r\n        )}\r\n      </div>\r\n\r\n      {/* Legend */}\r\n      <div className=\"relationships-graph-legend\">\r\n        {Array.from(new Set(edges.map((e) => e.type))).map((type) => (\r\n          <div key={type} className=\"relationships-graph-legend-item\">\r\n            <div\r\n              className=\"relationships-graph-legend-color\"\r\n              style={{ background: getRelationshipColor(type) }}\r\n            />\r\n            <span className=\"relationships-graph-legend-label\">\r\n              {getRelationshipIcon(type)} {getRelationshipLabel(type)}\r\n            </span>\r\n          </div>\r\n        ))}\r\n      </div>\r\n\r\n      {/* SVG Canvas */}\r\n      <svg\r\n        ref={svgRef}\r\n        className=\"relationships-graph-canvas\"\r\n        width={config.width}\r\n        height={config.height}\r\n        onMouseMove={handleMouseMove}\r\n        onMouseUp={handleMouseUp}\r\n        onMouseLeave={handleMouseUp}\r\n      >\r\n        <g transform={`translate(${pan.x}, ${pan.y}) scale(${zoom})`}>\r\n          {/* Edges */}\r\n          <g className=\"relationships-graph-edges\">\r\n            {edges.map((edge) => {\r\n              const sourcePos = getNodePosition(\r\n                typeof edge.source === 'string' ? edge.source : edge.source.id\r\n              )\r\n              const targetPos = getNodePosition(\r\n                typeof edge.target === 'string' ? edge.target : edge.target.id\r\n              )\r\n\r\n              const isDirectional = isDirectionalRelationship(edge.type)\r\n              const isHovered = hoveredEdge === edge.id\r\n              const isCritical = edge.onCriticalPath\r\n\r\n              return (\r\n                <g\r\n                  key={edge.id}\r\n                  className={cn(\r\n                    'relationships-graph-edge',\r\n                    isHovered && 'hovered',\r\n                    isCritical && 'critical'\r\n                  )}\r\n                  onMouseEnter={() => setHoveredEdge(edge.id)}\r\n                  onMouseLeave={() => setHoveredEdge(null)}\r\n                  onClick={(e) => handleEdgeClick(edge, e)}\r\n                >\r\n                  <line\r\n                    x1={sourcePos.x}\r\n                    y1={sourcePos.y}\r\n                    x2={targetPos.x}\r\n                    y2={targetPos.y}\r\n                    stroke={getRelationshipColor(edge.type)}\r\n                    strokeWidth={isCritical ? config.edgeWidth * 2 : config.edgeWidth}\r\n                    strokeOpacity={isHovered ? 1 : 0.6}\r\n                    markerEnd={isDirectional ? 'url(#arrowhead)' : undefined}\r\n                  />\r\n                  {config.showEdgeLabels && isHovered && (\r\n                    <text\r\n                      x={(sourcePos.x + targetPos.x) / 2}\r\n                      y={(sourcePos.y + targetPos.y) / 2}\r\n                      className=\"relationships-graph-edge-label\"\r\n                      textAnchor=\"middle\"\r\n                    >\r\n                      {getRelationshipLabel(edge.type)}\r\n                    </text>\r\n                  )}\r\n                </g>\r\n              )\r\n            })}\r\n          </g>\r\n\r\n          {/* Nodes */}\r\n          <g className=\"relationships-graph-nodes\">\r\n            {simulatedNodes.map((node) => {\r\n              const isHovered = hoveredNode === node.id\r\n              const isCritical = node.onCriticalPath\r\n\r\n              return (\r\n                <g\r\n                  key={node.id}\r\n                  className={cn(\r\n                    'relationships-graph-node',\r\n                    isHovered && 'hovered',\r\n                    isCritical && 'critical'\r\n                  )}\r\n                  transform={`translate(${node.x}, ${node.y})`}\r\n                  onMouseDown={(e) => handleNodeMouseDown(node.id, e)}\r\n                  onMouseEnter={() => setHoveredNode(node.id)}\r\n                  onMouseLeave={() => setHoveredNode(null)}\r\n                  onClick={(e) => handleNodeClick(node, e)}\r\n                >\r\n                  <circle\r\n                    r={isCritical ? config.nodeSize * 1.2 : config.nodeSize}\r\n                    fill={getNodeColor(node)}\r\n                    stroke={isCritical ? '#fbbf24' : '#ffffff'}\r\n                    strokeWidth={isCritical ? 3 : 2}\r\n                    opacity={isHovered ? 1 : 0.9}\r\n                  />\r\n                  {config.showLabels && (\r\n                    <text\r\n                      y={config.nodeSize + 20}\r\n                      className=\"relationships-graph-node-label\"\r\n                      textAnchor=\"middle\"\r\n                    >\r\n                      {node.card.title.length > 20\r\n                        ? node.card.title.substring(0, 20) + '...'\r\n                        : node.card.title}\r\n                    </text>\r\n                  )}\r\n                </g>\r\n              )\r\n            })}\r\n          </g>\r\n        </g>\r\n\r\n        {/* Arrow marker for directional edges */}\r\n        <defs>\r\n          <marker\r\n            id=\"arrowhead\"\r\n            markerWidth=\"10\"\r\n            markerHeight=\"10\"\r\n            refX=\"9\"\r\n            refY=\"3\"\r\n            orient=\"auto\"\r\n            markerUnits=\"strokeWidth\"\r\n          >\r\n            <path d=\"M0,0 L0,6 L9,3 z\" fill=\"#6b7280\" />\r\n          </marker>\r\n        </defs>\r\n      </svg>\r\n    </div>\r\n  )\r\n}\r\n","/**\r\n * Generate Plan Modal\r\n * AI-powered project plan generation\r\n */\r\n\r\nimport { useState, useRef, useEffect } from 'react'\r\nimport { Portal } from '../Portal'\r\nimport type { GeneratedPlan } from '../../types'\r\n\r\nexport interface GeneratePlanModalProps {\r\n  /** Is modal open */\r\n  isOpen: boolean\r\n  /** Close handler */\r\n  onClose: () => void\r\n  /** Plan generated callback */\r\n  onPlanGenerated: (plan: GeneratedPlan) => void\r\n  /** Generate plan function (from useAI hook) */\r\n  onGeneratePlan: (prompt: string) => Promise<GeneratedPlan>\r\n  /** Is AI loading */\r\n  isLoading?: boolean\r\n}\r\n\r\nexport function GeneratePlanModal({\r\n  isOpen,\r\n  onClose,\r\n  onPlanGenerated,\r\n  onGeneratePlan,\r\n  isLoading: externalLoading,\r\n}: GeneratePlanModalProps) {\r\n  const [prompt, setPrompt] = useState('')\r\n  const [isGenerating, setIsGenerating] = useState(false)\r\n  const [error, setError] = useState<string | null>(null)\r\n  const [generatedPlan, setGeneratedPlan] = useState<GeneratedPlan | null>(null)\r\n  const inputRef = useRef<HTMLTextAreaElement>(null)\r\n\r\n  const isLoading = isGenerating || externalLoading\r\n\r\n  // Focus input when modal opens\r\n  useEffect(() => {\r\n    if (isOpen && inputRef.current) {\r\n      inputRef.current.focus()\r\n    }\r\n  }, [isOpen])\r\n\r\n  // Close on escape\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape' && !isLoading) {\r\n        handleClose()\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen, isLoading])\r\n\r\n  const handleClose = () => {\r\n    if (!isLoading) {\r\n      setPrompt('')\r\n      setError(null)\r\n      setGeneratedPlan(null)\r\n      onClose()\r\n    }\r\n  }\r\n\r\n  const handleGenerate = async () => {\r\n    if (!prompt.trim() || isLoading) return\r\n\r\n    setIsGenerating(true)\r\n    setError(null)\r\n    setGeneratedPlan(null)\r\n\r\n    try {\r\n      const plan = await onGeneratePlan(prompt.trim())\r\n      setGeneratedPlan(plan)\r\n    } catch (err) {\r\n      setError(err instanceof Error ? err.message : 'Failed to generate plan')\r\n    } finally {\r\n      setIsGenerating(false)\r\n    }\r\n  }\r\n\r\n  const handleApplyPlan = () => {\r\n    if (generatedPlan) {\r\n      onPlanGenerated(generatedPlan)\r\n      handleClose()\r\n    }\r\n  }\r\n\r\n  if (!isOpen) return null\r\n\r\n  return (\r\n    <Portal>\r\n      {/* Backdrop */}\r\n      <div\r\n        className=\"fixed inset-0 bg-black/60 backdrop-blur-sm z-[100000]\"\r\n        onClick={handleClose}\r\n      />\r\n\r\n      {/* Modal */}\r\n      <div className=\"fixed inset-0 flex items-center justify-center z-[100001] p-4\">\r\n        <div\r\n          className=\"w-full max-w-2xl rounded-2xl shadow-2xl border max-h-[90vh] overflow-hidden flex flex-col\"\r\n          style={{\r\n            background: 'linear-gradient(135deg, #1f1f1f 0%, #1a1a1a 100%)',\r\n            borderColor: 'rgba(255, 255, 255, 0.15)',\r\n            boxShadow: '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n          }}\r\n          onClick={(e) => e.stopPropagation()}\r\n        >\r\n          {/* Header */}\r\n          <div className=\"px-6 py-4 border-b border-white/10 flex items-center justify-between\">\r\n            <div>\r\n              <h2 className=\"text-xl font-bold text-white flex items-center gap-2\">\r\n                <svg\r\n                  width=\"24\"\r\n                  height=\"24\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  fill=\"none\"\r\n                  xmlns=\"http://www.w3.org/2000/svg\"\r\n                  className=\"text-blue-400\"\r\n                >\r\n                  <path\r\n                    d=\"M12 2L2 7L12 12L22 7L12 2Z\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                  />\r\n                  <path\r\n                    d=\"M2 17L12 22L22 17\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                  />\r\n                  <path\r\n                    d=\"M2 12L12 17L22 12\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                  />\r\n                </svg>\r\n                Generate Project Plan with AI\r\n              </h2>\r\n              <p className=\"text-sm text-white/60 mt-1\">\r\n                Describe your project and let AI create a complete Kanban board\r\n              </p>\r\n            </div>\r\n            <button\r\n              onClick={handleClose}\r\n              disabled={isLoading}\r\n              className=\"text-white/60 hover:text-white transition-colors disabled:opacity-50\"\r\n            >\r\n              <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n                <path\r\n                  d=\"M18 6L6 18M6 6L18 18\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                  strokeLinecap=\"round\"\r\n                />\r\n              </svg>\r\n            </button>\r\n          </div>\r\n\r\n          {/* Content */}\r\n          <div className=\"flex-1 overflow-y-auto p-6 space-y-4\">\r\n            {!generatedPlan ? (\r\n              <>\r\n                {/* Input */}\r\n                <div>\r\n                  <label className=\"block text-sm font-semibold text-white/90 mb-2\">\r\n                    Project Description\r\n                  </label>\r\n                  <textarea\r\n                    ref={inputRef}\r\n                    value={prompt}\r\n                    onChange={(e) => setPrompt(e.target.value)}\r\n                    placeholder=\"Example: Build a mobile app for tracking fitness goals with user authentication, workout logging, progress charts, and social features...\"\r\n                    className=\"w-full h-32 px-4 py-3 rounded-lg text-sm bg-white/5 border border-white/20 text-white placeholder-white/40 outline-none focus:border-blue-500/50 transition-all resize-none\"\r\n                    disabled={isLoading}\r\n                  />\r\n                  <p className=\"text-xs text-white/50 mt-2\">\r\n                    Be as specific as possible. Include features, technologies, and any special requirements.\r\n                  </p>\r\n                </div>\r\n\r\n                {/* Error */}\r\n                {error && (\r\n                  <div className=\"p-4 rounded-lg bg-red-500/10 border border-red-500/30 text-red-400 text-sm\">\r\n                    {error}\r\n                  </div>\r\n                )}\r\n\r\n                {/* Examples */}\r\n                <div className=\"border-t border-white/10 pt-4\">\r\n                  <p className=\"text-xs font-semibold text-white/70 uppercase tracking-wider mb-3\">\r\n                    Example Prompts\r\n                  </p>\r\n                  <div className=\"space-y-2\">\r\n                    {[\r\n                      'Build an e-commerce platform with product catalog, shopping cart, payment integration, and order tracking',\r\n                      'Create a task management app with team collaboration, real-time updates, file attachments, and notifications',\r\n                      'Develop a blog platform with markdown editor, SEO optimization, comments system, and analytics dashboard',\r\n                    ].map((example, i) => (\r\n                      <button\r\n                        key={i}\r\n                        onClick={() => setPrompt(example)}\r\n                        disabled={isLoading}\r\n                        className=\"w-full text-left px-3 py-2 rounded-lg text-xs text-white/70 hover:text-white hover:bg-white/5 transition-all border border-white/10 hover:border-white/20 disabled:opacity-50\"\r\n                      >\r\n                        {example}\r\n                      </button>\r\n                    ))}\r\n                  </div>\r\n                </div>\r\n              </>\r\n            ) : (\r\n              <>\r\n                {/* Generated Plan Preview */}\r\n                <div className=\"space-y-4\">\r\n                  <div className=\"flex items-center gap-2 text-green-400\">\r\n                    <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n                      <path\r\n                        d=\"M4 10L8 14L16 6\"\r\n                        stroke=\"currentColor\"\r\n                        strokeWidth=\"2\"\r\n                        strokeLinecap=\"round\"\r\n                        strokeLinejoin=\"round\"\r\n                      />\r\n                    </svg>\r\n                    <span className=\"font-semibold\">Plan Generated Successfully!</span>\r\n                  </div>\r\n\r\n                  {/* Explanation */}\r\n                  {generatedPlan.explanation && (\r\n                    <div className=\"p-4 rounded-lg bg-blue-500/10 border border-blue-500/30\">\r\n                      <p className=\"text-sm text-white/90\">{generatedPlan.explanation}</p>\r\n                    </div>\r\n                  )}\r\n\r\n                  {/* Columns */}\r\n                  <div>\r\n                    <h3 className=\"text-sm font-semibold text-white/90 mb-2\">\r\n                      Columns ({generatedPlan.columns.length})\r\n                    </h3>\r\n                    <div className=\"flex gap-2 flex-wrap\">\r\n                      {generatedPlan.columns.map((col, i) => (\r\n                        <div\r\n                          key={i}\r\n                          className=\"px-3 py-1.5 rounded-lg bg-white/5 border border-white/20 text-sm text-white/80\"\r\n                        >\r\n                          {col.title}\r\n                        </div>\r\n                      ))}\r\n                    </div>\r\n                  </div>\r\n\r\n                  {/* Cards */}\r\n                  <div>\r\n                    <h3 className=\"text-sm font-semibold text-white/90 mb-2\">\r\n                      Tasks ({generatedPlan.cards.length})\r\n                    </h3>\r\n                    <div className=\"space-y-2 max-h-64 overflow-y-auto\">\r\n                      {generatedPlan.cards.slice(0, 10).map((card, i) => (\r\n                        <div\r\n                          key={i}\r\n                          className=\"p-3 rounded-lg bg-white/5 border border-white/10\"\r\n                        >\r\n                          <div className=\"flex items-start justify-between gap-2\">\r\n                            <div className=\"flex-1\">\r\n                              <p className=\"text-sm font-medium text-white/90\">{card.title}</p>\r\n                              {card.description && (\r\n                                <p className=\"text-xs text-white/60 mt-1 line-clamp-2\">\r\n                                  {card.description}\r\n                                </p>\r\n                              )}\r\n                            </div>\r\n                            {card.priority && (\r\n                              <span\r\n                                className={`px-2 py-0.5 rounded text-xs font-semibold ${\r\n                                  card.priority === 'URGENT'\r\n                                    ? 'bg-red-500/20 text-red-400'\r\n                                    : card.priority === 'HIGH'\r\n                                    ? 'bg-orange-500/20 text-orange-400'\r\n                                    : card.priority === 'MEDIUM'\r\n                                    ? 'bg-yellow-500/20 text-yellow-400'\r\n                                    : 'bg-blue-500/20 text-blue-400'\r\n                                }`}\r\n                              >\r\n                                {card.priority}\r\n                              </span>\r\n                            )}\r\n                          </div>\r\n                        </div>\r\n                      ))}\r\n                      {generatedPlan.cards.length > 10 && (\r\n                        <p className=\"text-xs text-white/50 text-center py-2\">\r\n                          +{generatedPlan.cards.length - 10} more tasks...\r\n                        </p>\r\n                      )}\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              </>\r\n            )}\r\n          </div>\r\n\r\n          {/* Footer */}\r\n          <div className=\"px-6 py-4 border-t border-white/10 flex items-center justify-between\">\r\n            <div>\r\n              {isLoading && (\r\n                <div className=\"flex items-center gap-2 text-blue-400 text-sm\">\r\n                  <svg className=\"animate-spin h-4 w-4\" viewBox=\"0 0 24 24\">\r\n                    <circle\r\n                      className=\"opacity-25\"\r\n                      cx=\"12\"\r\n                      cy=\"12\"\r\n                      r=\"10\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"4\"\r\n                      fill=\"none\"\r\n                    />\r\n                    <path\r\n                      className=\"opacity-75\"\r\n                      fill=\"currentColor\"\r\n                      d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n                    />\r\n                  </svg>\r\n                  <span>Generating with AI...</span>\r\n                </div>\r\n              )}\r\n            </div>\r\n            <div className=\"flex items-center gap-3\">\r\n              <button\r\n                onClick={handleClose}\r\n                disabled={isLoading}\r\n                className=\"px-4 py-2 rounded-lg text-sm font-semibold transition-all hover:bg-white/10 text-white/80 disabled:opacity-50\"\r\n              >\r\n                Cancel\r\n              </button>\r\n              {!generatedPlan ? (\r\n                <button\r\n                  onClick={handleGenerate}\r\n                  disabled={!prompt.trim() || isLoading}\r\n                  className=\"px-6 py-2 rounded-lg text-sm font-semibold transition-all disabled:opacity-50\"\r\n                  style={{\r\n                    background: 'linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)',\r\n                    color: '#ffffff',\r\n                  }}\r\n                >\r\n                  {isLoading ? 'Generating...' : 'Generate Plan'}\r\n                </button>\r\n              ) : (\r\n                <button\r\n                  onClick={handleApplyPlan}\r\n                  className=\"px-6 py-2 rounded-lg text-sm font-semibold transition-all\"\r\n                  style={{\r\n                    background: 'linear-gradient(135deg, #10B981 0%, #059669 100%)',\r\n                    color: '#ffffff',\r\n                  }}\r\n                >\r\n                  Apply Plan to Board\r\n                </button>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </Portal>\r\n  )\r\n}\r\n","/**\r\n * AI Configuration\r\n * Central configuration for AI providers and models\r\n */\r\n\r\nexport interface AIConfig {\r\n  /** Provider (OpenAI or Anthropic) */\r\n  provider: 'openai' | 'anthropic'\r\n  /** API Key */\r\n  apiKey: string\r\n  /** Model to use */\r\n  model: string\r\n  /** Base URL (optional) */\r\n  baseURL?: string\r\n  /** Max tokens per request */\r\n  maxTokens?: number\r\n  /** Temperature (0-2) */\r\n  temperature?: number\r\n}\r\n\r\n/**\r\n * Supported AI Models\r\n */\r\nexport const AI_MODELS = {\r\n  // OpenAI Models\r\n  'gpt-4-turbo': {\r\n    provider: 'openai' as const,\r\n    name: 'GPT-4 Turbo',\r\n    contextWindow: 128000,\r\n    costPer1kInput: 0.01,\r\n    costPer1kOutput: 0.03,\r\n    supportsVision: true,\r\n    supportsJSON: true,\r\n  },\r\n  'gpt-4': {\r\n    provider: 'openai' as const,\r\n    name: 'GPT-4',\r\n    contextWindow: 8192,\r\n    costPer1kInput: 0.03,\r\n    costPer1kOutput: 0.06,\r\n    supportsVision: false,\r\n    supportsJSON: true,\r\n  },\r\n  'gpt-3.5-turbo': {\r\n    provider: 'openai' as const,\r\n    name: 'GPT-3.5 Turbo',\r\n    contextWindow: 16385,\r\n    costPer1kInput: 0.0005,\r\n    costPer1kOutput: 0.0015,\r\n    supportsVision: false,\r\n    supportsJSON: true,\r\n  },\r\n\r\n  // Anthropic Models\r\n  'claude-3-5-sonnet-20241022': {\r\n    provider: 'anthropic' as const,\r\n    name: 'Claude 3.5 Sonnet',\r\n    contextWindow: 200000,\r\n    costPer1kInput: 0.003,\r\n    costPer1kOutput: 0.015,\r\n    supportsVision: true,\r\n    supportsJSON: true,\r\n  },\r\n  'claude-3-opus-20240229': {\r\n    provider: 'anthropic' as const,\r\n    name: 'Claude 3 Opus',\r\n    contextWindow: 200000,\r\n    costPer1kInput: 0.015,\r\n    costPer1kOutput: 0.075,\r\n    supportsVision: true,\r\n    supportsJSON: true,\r\n  },\r\n  'claude-3-haiku-20240307': {\r\n    provider: 'anthropic' as const,\r\n    name: 'Claude 3 Haiku',\r\n    contextWindow: 200000,\r\n    costPer1kInput: 0.00025,\r\n    costPer1kOutput: 0.00125,\r\n    supportsVision: true,\r\n    supportsJSON: true,\r\n  },\r\n} as const\r\n\r\nexport type AIModelKey = keyof typeof AI_MODELS\r\n\r\n/**\r\n * Default AI Configuration\r\n */\r\nexport const DEFAULT_AI_CONFIG: Partial<AIConfig> = {\r\n  model: 'claude-3-5-sonnet-20241022',\r\n  maxTokens: 4096,\r\n  temperature: 0.7,\r\n}\r\n\r\n/**\r\n * Rate Limits by Plan\r\n */\r\nexport const RATE_LIMITS = {\r\n  hobby: {\r\n    requestsPerMonth: 50,\r\n    maxConcurrent: 1,\r\n    maxTokensPerRequest: 4096,\r\n  },\r\n  pro: {\r\n    requestsPerMonth: 500,\r\n    maxConcurrent: 3,\r\n    maxTokensPerRequest: 8192,\r\n  },\r\n  enterprise: {\r\n    requestsPerMonth: 2000,\r\n    maxConcurrent: 10,\r\n    maxTokensPerRequest: 16384,\r\n  },\r\n} as const\r\n\r\n/**\r\n * Feature Flags for AI\r\n */\r\nexport const AI_FEATURES = {\r\n  generatePlan: {\r\n    enabled: true,\r\n    minPlanTier: 'hobby' as const,\r\n    estimatedTokens: 2000,\r\n  },\r\n  predictRisks: {\r\n    enabled: true,\r\n    minPlanTier: 'pro' as const,\r\n    estimatedTokens: 1500,\r\n  },\r\n  suggestAssignee: {\r\n    enabled: true,\r\n    minPlanTier: 'hobby' as const,\r\n    estimatedTokens: 800,\r\n  },\r\n  generateReport: {\r\n    enabled: true,\r\n    minPlanTier: 'enterprise' as const,\r\n    estimatedTokens: 3000,\r\n  },\r\n  generateSubtasks: {\r\n    enabled: true,\r\n    minPlanTier: 'hobby' as const,\r\n    estimatedTokens: 1000,\r\n  },\r\n} as const\r\n","/**\r\n * AI Cost Tracking\r\n * Calculate and track AI API usage costs\r\n */\r\n\r\nimport { AI_MODELS, type AIModelKey } from './config'\r\n\r\nexport interface AIOperation {\r\n  id: string\r\n  feature: 'generatePlan' | 'predictRisks' | 'suggestAssignee' | 'generateSubtasks' | 'estimateEffort'\r\n  model: AIModelKey\r\n  inputTokens: number\r\n  outputTokens: number\r\n  cost: number\r\n  duration: number\r\n  timestamp: Date\r\n  success: boolean\r\n  error?: string\r\n}\r\n\r\nexport interface UsageStats {\r\n  totalOperations: number\r\n  totalCost: number\r\n  totalInputTokens: number\r\n  totalOutputTokens: number\r\n  operationsByFeature: Record<string, number>\r\n  costsByFeature: Record<string, number>\r\n  averageDuration: number\r\n  successRate: number\r\n}\r\n\r\n/**\r\n * Calculate cost for an AI operation\r\n */\r\nexport function calculateCost(\r\n  model: AIModelKey,\r\n  inputTokens: number,\r\n  outputTokens: number\r\n): number {\r\n  const modelInfo = AI_MODELS[model]\r\n  if (!modelInfo) {\r\n    throw new Error(`Unknown model: ${model}`)\r\n  }\r\n\r\n  const inputCost = (inputTokens / 1000) * modelInfo.costPer1kInput\r\n  const outputCost = (outputTokens / 1000) * modelInfo.costPer1kOutput\r\n\r\n  return inputCost + outputCost\r\n}\r\n\r\n/**\r\n * Format cost as USD string\r\n */\r\nexport function formatCost(cost: number): string {\r\n  return `$${cost.toFixed(4)}`\r\n}\r\n\r\n/**\r\n * AI Usage Tracker\r\n * In-memory tracking of AI operations\r\n * In production, this would persist to a database\r\n */\r\nexport class AIUsageTracker {\r\n  private operations: AIOperation[] = []\r\n  private listeners: Array<(operation: AIOperation) => void> = []\r\n\r\n  /**\r\n   * Record a new AI operation\r\n   */\r\n  record(operation: Omit<AIOperation, 'id' | 'timestamp' | 'cost'>): AIOperation {\r\n    const cost = calculateCost(operation.model, operation.inputTokens, operation.outputTokens)\r\n\r\n    const fullOperation: AIOperation = {\r\n      ...operation,\r\n      id: `op_${Date.now()}_${Math.random().toString(36).substring(7)}`,\r\n      timestamp: new Date(),\r\n      cost,\r\n    }\r\n\r\n    this.operations.push(fullOperation)\r\n\r\n    // Notify listeners\r\n    this.listeners.forEach((listener) => listener(fullOperation))\r\n\r\n    // Keep only last 1000 operations in memory\r\n    if (this.operations.length > 1000) {\r\n      this.operations = this.operations.slice(-1000)\r\n    }\r\n\r\n    return fullOperation\r\n  }\r\n\r\n  /**\r\n   * Get usage statistics\r\n   */\r\n  getStats(timeRange?: { start: Date; end: Date }): UsageStats {\r\n    let operations = this.operations\r\n\r\n    // Filter by time range if provided\r\n    if (timeRange) {\r\n      operations = operations.filter(\r\n        (op) => op.timestamp >= timeRange.start && op.timestamp <= timeRange.end\r\n      )\r\n    }\r\n\r\n    const totalOperations = operations.length\r\n    const totalCost = operations.reduce((sum, op) => sum + op.cost, 0)\r\n    const totalInputTokens = operations.reduce((sum, op) => sum + op.inputTokens, 0)\r\n    const totalOutputTokens = operations.reduce((sum, op) => sum + op.outputTokens, 0)\r\n    const successfulOps = operations.filter((op) => op.success)\r\n    const totalDuration = operations.reduce((sum, op) => sum + op.duration, 0)\r\n\r\n    // Operations by feature\r\n    const operationsByFeature: Record<string, number> = {}\r\n    const costsByFeature: Record<string, number> = {}\r\n\r\n    operations.forEach((op) => {\r\n      operationsByFeature[op.feature] = (operationsByFeature[op.feature] || 0) + 1\r\n      costsByFeature[op.feature] = (costsByFeature[op.feature] || 0) + op.cost\r\n    })\r\n\r\n    return {\r\n      totalOperations,\r\n      totalCost,\r\n      totalInputTokens,\r\n      totalOutputTokens,\r\n      operationsByFeature,\r\n      costsByFeature,\r\n      averageDuration: totalOperations > 0 ? totalDuration / totalOperations : 0,\r\n      successRate: totalOperations > 0 ? successfulOps.length / totalOperations : 0,\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get recent operations\r\n   */\r\n  getRecentOperations(limit = 10): AIOperation[] {\r\n    return this.operations.slice(-limit).reverse()\r\n  }\r\n\r\n  /**\r\n   * Check if usage is within limits\r\n   */\r\n  checkLimit(planTier: 'hobby' | 'pro' | 'enterprise', period: 'month' | 'day' = 'month'): {\r\n    used: number\r\n    limit: number\r\n    remaining: number\r\n    percentUsed: number\r\n    isExceeded: boolean\r\n  } {\r\n    const limits = {\r\n      hobby: { month: 50, day: 5 },\r\n      pro: { month: 500, day: 50 },\r\n      enterprise: { month: 2000, day: 200 },\r\n    }\r\n\r\n    const limit = limits[planTier][period]\r\n\r\n    // Calculate operations in the period\r\n    const now = new Date()\r\n    const start = new Date()\r\n    if (period === 'month') {\r\n      start.setMonth(now.getMonth() - 1)\r\n    } else {\r\n      start.setDate(now.getDate() - 1)\r\n    }\r\n\r\n    const periodOperations = this.operations.filter((op) => op.timestamp >= start).length\r\n\r\n    const remaining = Math.max(0, limit - periodOperations)\r\n    const percentUsed = (periodOperations / limit) * 100\r\n\r\n    return {\r\n      used: periodOperations,\r\n      limit,\r\n      remaining,\r\n      percentUsed,\r\n      isExceeded: periodOperations >= limit,\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Subscribe to operation events\r\n   */\r\n  subscribe(listener: (operation: AIOperation) => void): () => void {\r\n    this.listeners.push(listener)\r\n\r\n    // Return unsubscribe function\r\n    return () => {\r\n      const index = this.listeners.indexOf(listener)\r\n      if (index > -1) {\r\n        this.listeners.splice(index, 1)\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clear all tracked operations\r\n   */\r\n  clear(): void {\r\n    this.operations = []\r\n  }\r\n\r\n  /**\r\n   * Export operations as JSON\r\n   */\r\n  export(): string {\r\n    return JSON.stringify(this.operations, null, 2)\r\n  }\r\n}\r\n\r\n/**\r\n * Global usage tracker instance\r\n */\r\nexport const aiUsageTracker = new AIUsageTracker()\r\n\r\n/**\r\n * Estimate cost for a feature before execution\r\n */\r\nexport function estimateFeatureCost(\r\n  feature: AIOperation['feature'],\r\n  model: AIModelKey = 'claude-3-5-sonnet-20241022'\r\n): { estimatedCost: string; estimatedTokens: number } {\r\n  // Rough estimates based on typical usage\r\n  const tokenEstimates = {\r\n    generatePlan: 2500,\r\n    predictRisks: 1800,\r\n    suggestAssignee: 1000,\r\n    generateSubtasks: 1200,\r\n    estimateEffort: 800,\r\n  }\r\n\r\n  const tokens = tokenEstimates[feature]\r\n  // Assume 60/40 split between input/output\r\n  const inputTokens = Math.floor(tokens * 0.6)\r\n  const outputTokens = Math.floor(tokens * 0.4)\r\n\r\n  const cost = calculateCost(model, inputTokens, outputTokens)\r\n\r\n  return {\r\n    estimatedCost: formatCost(cost),\r\n    estimatedTokens: tokens,\r\n  }\r\n}\r\n","/**\r\n * AI Usage Dashboard\r\n * Display AI usage statistics and costs\r\n */\r\n\r\nimport { useState, useEffect } from 'react'\r\nimport { aiUsageTracker, formatCost, type UsageStats } from '../../lib/ai/costs'\r\nimport { Portal } from '../Portal'\r\n\r\nexport interface AIUsageDashboardProps {\r\n  /** Is dashboard open */\r\n  isOpen: boolean\r\n  /** Close handler */\r\n  onClose: () => void\r\n  /** Current plan tier */\r\n  planTier?: 'hobby' | 'pro' | 'enterprise'\r\n}\r\n\r\nexport function AIUsageDashboard({\r\n  isOpen,\r\n  onClose,\r\n  planTier = 'hobby',\r\n}: AIUsageDashboardProps) {\r\n  const [stats, setStats] = useState<UsageStats>(aiUsageTracker.getStats())\r\n  const [limit, setLimit] = useState(aiUsageTracker.checkLimit(planTier))\r\n\r\n  // Update stats every second when open\r\n  useEffect(() => {\r\n    if (!isOpen) return\r\n\r\n    const interval = setInterval(() => {\r\n      setStats(aiUsageTracker.getStats())\r\n      setLimit(aiUsageTracker.checkLimit(planTier))\r\n    }, 1000)\r\n\r\n    return () => clearInterval(interval)\r\n  }, [isOpen, planTier])\r\n\r\n  // Close on escape\r\n  useEffect(() => {\r\n    const handleEscape = (e: KeyboardEvent) => {\r\n      if (e.key === 'Escape') {\r\n        onClose()\r\n      }\r\n    }\r\n\r\n    if (isOpen) {\r\n      document.addEventListener('keydown', handleEscape)\r\n      return () => document.removeEventListener('keydown', handleEscape)\r\n    }\r\n    return undefined\r\n  }, [isOpen, onClose])\r\n\r\n  if (!isOpen) return null\r\n\r\n  const recentOps = aiUsageTracker.getRecentOperations(5)\r\n\r\n  return (\r\n    <Portal>\r\n      {/* Backdrop */}\r\n      <div\r\n        className=\"fixed inset-0 bg-black/60 backdrop-blur-sm z-[100000]\"\r\n        onClick={onClose}\r\n      />\r\n\r\n      {/* Dashboard */}\r\n      <div className=\"fixed inset-0 flex items-center justify-center z-[100001] p-4\">\r\n        <div\r\n          className=\"w-full max-w-3xl rounded-2xl shadow-2xl border max-h-[90vh] overflow-hidden flex flex-col\"\r\n          style={{\r\n            background: 'linear-gradient(135deg, #1f1f1f 0%, #1a1a1a 100%)',\r\n            borderColor: 'rgba(255, 255, 255, 0.15)',\r\n            boxShadow: '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\r\n          }}\r\n          onClick={(e) => e.stopPropagation()}\r\n        >\r\n          {/* Header */}\r\n          <div className=\"px-6 py-4 border-b border-white/10 flex items-center justify-between\">\r\n            <div>\r\n              <h2 className=\"text-xl font-bold text-white\">AI Usage Dashboard</h2>\r\n              <p className=\"text-sm text-white/60 mt-1\">\r\n                Monitor your AI consumption and costs\r\n              </p>\r\n            </div>\r\n            <button\r\n              onClick={onClose}\r\n              className=\"text-white/60 hover:text-white transition-colors\"\r\n            >\r\n              <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n                <path\r\n                  d=\"M18 6L6 18M6 6L18 18\"\r\n                  stroke=\"currentColor\"\r\n                  strokeWidth=\"2\"\r\n                  strokeLinecap=\"round\"\r\n                />\r\n              </svg>\r\n            </button>\r\n          </div>\r\n\r\n          {/* Content */}\r\n          <div className=\"flex-1 overflow-y-auto p-6 space-y-6\">\r\n            {/* Usage Limit */}\r\n            <div className=\"p-4 rounded-xl bg-gradient-to-r from-blue-500/10 to-purple-500/10 border border-blue-500/30\">\r\n              <div className=\"flex items-center justify-between mb-2\">\r\n                <span className=\"text-sm font-semibold text-white/90\">\r\n                  Monthly Usage ({planTier.toUpperCase()})\r\n                </span>\r\n                <span className=\"text-sm font-bold text-white\">\r\n                  {limit.used} / {limit.limit}\r\n                </span>\r\n              </div>\r\n              <div className=\"w-full h-2 bg-white/10 rounded-full overflow-hidden\">\r\n                <div\r\n                  className=\"h-full transition-all\"\r\n                  style={{\r\n                    width: `${Math.min(100, limit.percentUsed)}%`,\r\n                    background:\r\n                      limit.percentUsed > 90\r\n                        ? '#EF4444'\r\n                        : limit.percentUsed > 70\r\n                        ? '#F59E0B'\r\n                        : '#10B981',\r\n                  }}\r\n                />\r\n              </div>\r\n              <p className=\"text-xs text-white/60 mt-2\">\r\n                {limit.remaining} operations remaining this month\r\n              </p>\r\n            </div>\r\n\r\n            {/* Stats Grid */}\r\n            <div className=\"grid grid-cols-2 gap-4\">\r\n              {/* Total Cost */}\r\n              <div className=\"p-4 rounded-lg bg-white/5 border border-white/10\">\r\n                <p className=\"text-xs font-semibold text-white/60 uppercase tracking-wider\">\r\n                  Total Cost\r\n                </p>\r\n                <p className=\"text-2xl font-bold text-green-400 mt-1\">\r\n                  {formatCost(stats.totalCost)}\r\n                </p>\r\n              </div>\r\n\r\n              {/* Total Operations */}\r\n              <div className=\"p-4 rounded-lg bg-white/5 border border-white/10\">\r\n                <p className=\"text-xs font-semibold text-white/60 uppercase tracking-wider\">\r\n                  Operations\r\n                </p>\r\n                <p className=\"text-2xl font-bold text-blue-400 mt-1\">\r\n                  {stats.totalOperations}\r\n                </p>\r\n              </div>\r\n\r\n              {/* Total Tokens */}\r\n              <div className=\"p-4 rounded-lg bg-white/5 border border-white/10\">\r\n                <p className=\"text-xs font-semibold text-white/60 uppercase tracking-wider\">\r\n                  Tokens Used\r\n                </p>\r\n                <p className=\"text-2xl font-bold text-purple-400 mt-1\">\r\n                  {(stats.totalInputTokens + stats.totalOutputTokens).toLocaleString()}\r\n                </p>\r\n                <p className=\"text-xs text-white/50 mt-1\">\r\n                  {stats.totalInputTokens.toLocaleString()} in /{' '}\r\n                  {stats.totalOutputTokens.toLocaleString()} out\r\n                </p>\r\n              </div>\r\n\r\n              {/* Success Rate */}\r\n              <div className=\"p-4 rounded-lg bg-white/5 border border-white/10\">\r\n                <p className=\"text-xs font-semibold text-white/60 uppercase tracking-wider\">\r\n                  Success Rate\r\n                </p>\r\n                <p className=\"text-2xl font-bold text-green-400 mt-1\">\r\n                  {(stats.successRate * 100).toFixed(1)}%\r\n                </p>\r\n                <p className=\"text-xs text-white/50 mt-1\">\r\n                  Avg: {stats.averageDuration.toFixed(0)}ms\r\n                </p>\r\n              </div>\r\n            </div>\r\n\r\n            {/* Operations by Feature */}\r\n            <div>\r\n              <h3 className=\"text-sm font-semibold text-white/90 mb-3\">Usage by Feature</h3>\r\n              <div className=\"space-y-2\">\r\n                {Object.entries(stats.operationsByFeature).map(([feature, count]) => {\r\n                  const cost = stats.costsByFeature[feature] || 0\r\n                  const percent =\r\n                    stats.totalOperations > 0\r\n                      ? (count / stats.totalOperations) * 100\r\n                      : 0\r\n\r\n                  return (\r\n                    <div key={feature} className=\"p-3 rounded-lg bg-white/5 border border-white/10\">\r\n                      <div className=\"flex items-center justify-between mb-2\">\r\n                        <span className=\"text-sm font-medium text-white/90 capitalize\">\r\n                          {feature.replace(/([A-Z])/g, ' $1').trim()}\r\n                        </span>\r\n                        <div className=\"flex items-center gap-3\">\r\n                          <span className=\"text-xs text-white/60\">{count} ops</span>\r\n                          <span className=\"text-xs font-semibold text-green-400\">\r\n                            {formatCost(cost)}\r\n                          </span>\r\n                        </div>\r\n                      </div>\r\n                      <div className=\"w-full h-1.5 bg-white/10 rounded-full overflow-hidden\">\r\n                        <div\r\n                          className=\"h-full bg-blue-500\"\r\n                          style={{ width: `${percent}%` }}\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  )\r\n                })}\r\n              </div>\r\n            </div>\r\n\r\n            {/* Recent Operations */}\r\n            <div>\r\n              <h3 className=\"text-sm font-semibold text-white/90 mb-3\">Recent Operations</h3>\r\n              {recentOps.length === 0 ? (\r\n                <p className=\"text-sm text-white/50 text-center py-8\">\r\n                  No operations yet. Start using AI features!\r\n                </p>\r\n              ) : (\r\n                <div className=\"space-y-2\">\r\n                  {recentOps.map((op) => (\r\n                    <div\r\n                      key={op.id}\r\n                      className=\"p-3 rounded-lg bg-white/5 border border-white/10 flex items-center justify-between\"\r\n                    >\r\n                      <div>\r\n                        <p className=\"text-sm font-medium text-white/90 capitalize\">\r\n                          {op.feature.replace(/([A-Z])/g, ' $1').trim()}\r\n                        </p>\r\n                        <p className=\"text-xs text-white/50 mt-0.5\">\r\n                          {new Date(op.timestamp).toLocaleTimeString()} •{' '}\r\n                          {op.duration}ms\r\n                        </p>\r\n                      </div>\r\n                      <div className=\"flex items-center gap-3\">\r\n                        <span className=\"text-xs text-white/60\">\r\n                          {op.inputTokens + op.outputTokens} tokens\r\n                        </span>\r\n                        <span className=\"text-xs font-semibold text-green-400\">\r\n                          {formatCost(op.cost)}\r\n                        </span>\r\n                        <div\r\n                          className={`w-2 h-2 rounded-full ${\r\n                            op.success ? 'bg-green-400' : 'bg-red-400'\r\n                          }`}\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </div>\r\n          </div>\r\n\r\n          {/* Footer */}\r\n          <div className=\"px-6 py-4 border-t border-white/10 flex items-center justify-between\">\r\n            <p className=\"text-xs text-white/50\">\r\n              Costs are estimates. Actual API charges may vary.\r\n            </p>\r\n            <button\r\n              onClick={onClose}\r\n              className=\"px-4 py-2 rounded-lg text-sm font-semibold transition-all hover:bg-white/10 text-white/80\"\r\n            >\r\n              Close\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </Portal>\r\n  )\r\n}\r\n","/**\n * Generate Gantt Tasks Dialog\n * AI-powered Gantt task generation with cost control\n */\n\nimport { useState, useRef, useEffect } from 'react'\nimport { Portal } from '../Portal'\n\nexport interface GanttTask {\n  id: string\n  name: string\n  start: string\n  end: string\n  duration: number\n  progress: number\n  dependencies: string[]\n  type: string\n  priority: 'high' | 'medium' | 'low'\n}\n\nexport interface GeneratedTasksResponse {\n  tasks: {\n    tasks: GanttTask[]\n  }\n  from_cache: boolean\n  tokens_used: number\n  mock_mode?: boolean\n  similarity?: number\n  tokens_saved?: number\n}\n\nexport interface GenerateGanttTasksDialogProps {\n  /** Is dialog open */\n  isOpen: boolean\n  /** Close handler */\n  onClose: () => void\n  /** Tasks generated callback */\n  onTasksGenerated: (tasks: GanttTask[]) => void\n  /** Generate tasks function (calls Supabase Edge Function) */\n  onGenerateTasks: (params: {\n    prompt: string\n    projectName?: string\n    startDate?: string\n    endDate?: string\n  }) => Promise<GeneratedTasksResponse>\n  /** Is AI loading */\n  isLoading?: boolean\n  /** Project ID (optional) */\n  projectId?: string\n  /** Project name (optional) */\n  projectName?: string\n}\n\nexport function GenerateGanttTasksDialog({\n  isOpen,\n  onClose,\n  onTasksGenerated,\n  onGenerateTasks,\n  isLoading: externalLoading,\n  projectName,\n}: GenerateGanttTasksDialogProps) {\n  const [prompt, setPrompt] = useState('')\n  const [startDate, setStartDate] = useState('')\n  const [endDate, setEndDate] = useState('')\n  const [isGenerating, setIsGenerating] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n  const [generatedTasks, setGeneratedTasks] = useState<GanttTask[] | null>(null)\n  const [responseMetadata, setResponseMetadata] = useState<{\n    from_cache: boolean\n    tokens_used: number\n    mock_mode?: boolean\n    similarity?: number\n    tokens_saved?: number\n  } | null>(null)\n  const inputRef = useRef<HTMLTextAreaElement>(null)\n\n  const isLoading = isGenerating || externalLoading\n\n  // Focus input when dialog opens\n  useEffect(() => {\n    if (isOpen && inputRef.current) {\n      inputRef.current.focus()\n    }\n  }, [isOpen])\n\n  // Close on escape\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === 'Escape' && !isLoading) {\n        handleClose()\n      }\n    }\n\n    if (isOpen) {\n      document.addEventListener('keydown', handleEscape)\n      return () => document.removeEventListener('keydown', handleEscape)\n    }\n    return undefined\n  }, [isOpen, isLoading])\n\n  const handleClose = () => {\n    if (!isLoading) {\n      setPrompt('')\n      setStartDate('')\n      setEndDate('')\n      setError(null)\n      setGeneratedTasks(null)\n      setResponseMetadata(null)\n      onClose()\n    }\n  }\n\n  const handleGenerate = async () => {\n    if (!prompt.trim() || isLoading) return\n\n    setIsGenerating(true)\n    setError(null)\n    setGeneratedTasks(null)\n    setResponseMetadata(null)\n\n    try {\n      const response = await onGenerateTasks({\n        prompt: prompt.trim(),\n        projectName: projectName || 'Mi Proyecto',\n        startDate: startDate || undefined,\n        endDate: endDate || undefined,\n      })\n\n      setGeneratedTasks(response.tasks.tasks)\n      setResponseMetadata({\n        from_cache: response.from_cache,\n        tokens_used: response.tokens_used,\n        mock_mode: response.mock_mode,\n        similarity: response.similarity,\n        tokens_saved: response.tokens_saved,\n      })\n    } catch (err) {\n      setError(err instanceof Error ? err.message : 'Failed to generate tasks')\n    } finally {\n      setIsGenerating(false)\n    }\n  }\n\n  const handleApplyTasks = () => {\n    if (generatedTasks) {\n      onTasksGenerated(generatedTasks)\n      handleClose()\n    }\n  }\n\n  if (!isOpen) return null\n\n  const similarity = responseMetadata?.similarity\n    ? ((responseMetadata.similarity || 0) * 100).toFixed(0)\n    : '0'\n\n  return (\n    <Portal>\n      {/* Backdrop */}\n      <div\n        className=\"fixed inset-0 bg-black/60 backdrop-blur-sm z-[100000]\"\n        onClick={handleClose}\n      />\n\n      {/* Dialog */}\n      <div className=\"fixed inset-0 flex items-center justify-center z-[100001] p-4\">\n        <div\n          className=\"w-full max-w-3xl rounded-2xl shadow-2xl border max-h-[90vh] overflow-hidden flex flex-col\"\n          style={{\n            background: 'linear-gradient(135deg, #1f1f1f 0%, #1a1a1a 100%)',\n            borderColor: 'rgba(255, 255, 255, 0.15)',\n            boxShadow: '0 20px 60px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255, 255, 255, 0.1)',\n          }}\n          onClick={(e) => e.stopPropagation()}\n        >\n          {/* Header */}\n          <div className=\"px-6 py-4 border-b border-white/10 flex items-center justify-between\">\n            <div>\n              <h2 className=\"text-xl font-bold text-white flex items-center gap-2\">\n                <svg\n                  width=\"24\"\n                  height=\"24\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  className=\"text-blue-400\"\n                >\n                  <rect x=\"3\" y=\"4\" width=\"18\" height=\"2\" rx=\"1\" fill=\"currentColor\" />\n                  <rect x=\"3\" y=\"9\" width=\"18\" height=\"2\" rx=\"1\" fill=\"currentColor\" />\n                  <rect x=\"3\" y=\"14\" width=\"18\" height=\"2\" rx=\"1\" fill=\"currentColor\" />\n                  <rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\" fill=\"currentColor\" />\n                </svg>\n                Generate Gantt Tasks with AI\n              </h2>\n              <p className=\"text-sm text-white/60 mt-1\">\n                Describe your project and let AI create a complete task timeline\n              </p>\n            </div>\n            <button\n              onClick={handleClose}\n              disabled={isLoading}\n              className=\"text-white/60 hover:text-white transition-colors disabled:opacity-50\"\n            >\n              <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                <path\n                  d=\"M18 6L6 18M6 6L18 18\"\n                  stroke=\"currentColor\"\n                  strokeWidth=\"2\"\n                  strokeLinecap=\"round\"\n                />\n              </svg>\n            </button>\n          </div>\n\n          {/* Content */}\n          <div className=\"flex-1 overflow-y-auto p-6 space-y-4\">\n            {!generatedTasks ? (\n              <>\n                {/* Input Form */}\n                <div>\n                  <label className=\"block text-sm font-semibold text-white/90 mb-2\">\n                    Project Description *\n                  </label>\n                  <textarea\n                    ref={inputRef}\n                    value={prompt}\n                    onChange={(e) => setPrompt(e.target.value)}\n                    placeholder=\"Example: Build a mobile app for tracking fitness goals with user authentication, workout logging, progress charts, and social features...\"\n                    className=\"w-full h-32 px-4 py-3 rounded-lg text-sm bg-white/5 border border-white/20 text-white placeholder-white/40 outline-none focus:border-blue-500/50 transition-all resize-none\"\n                    disabled={isLoading}\n                  />\n                  <p className=\"text-xs text-white/50 mt-2\">\n                    Be as specific as possible. Include features, technologies, and any special\n                    requirements.\n                  </p>\n                </div>\n\n                {/* Date Inputs */}\n                <div className=\"grid grid-cols-2 gap-4\">\n                  <div>\n                    <label className=\"block text-sm font-semibold text-white/90 mb-2\">\n                      Start Date (Optional)\n                    </label>\n                    <input\n                      type=\"date\"\n                      value={startDate}\n                      onChange={(e) => setStartDate(e.target.value)}\n                      className=\"w-full px-4 py-2 rounded-lg text-sm bg-white/5 border border-white/20 text-white outline-none focus:border-blue-500/50 transition-all\"\n                      disabled={isLoading}\n                    />\n                  </div>\n                  <div>\n                    <label className=\"block text-sm font-semibold text-white/90 mb-2\">\n                      End Date (Optional)\n                    </label>\n                    <input\n                      type=\"date\"\n                      value={endDate}\n                      onChange={(e) => setEndDate(e.target.value)}\n                      className=\"w-full px-4 py-2 rounded-lg text-sm bg-white/5 border border-white/20 text-white outline-none focus:border-blue-500/50 transition-all\"\n                      disabled={isLoading}\n                    />\n                  </div>\n                </div>\n\n                {/* Error */}\n                {error && (\n                  <div className=\"p-4 rounded-lg bg-red-500/10 border border-red-500/30 text-red-400 text-sm\">\n                    {error}\n                  </div>\n                )}\n\n                {/* Examples */}\n                <div className=\"border-t border-white/10 pt-4\">\n                  <p className=\"text-xs font-semibold text-white/70 uppercase tracking-wider mb-3\">\n                    Example Prompts\n                  </p>\n                  <div className=\"space-y-2\">\n                    {[\n                      'Build an e-commerce platform with product catalog, shopping cart, payment integration, and order tracking',\n                      'Create a task management app with team collaboration, real-time updates, file attachments, and notifications',\n                      'Develop a blog platform with markdown editor, SEO optimization, comments system, and analytics dashboard',\n                    ].map((example, i) => (\n                      <button\n                        key={i}\n                        onClick={() => setPrompt(example)}\n                        disabled={isLoading}\n                        className=\"w-full text-left px-3 py-2 rounded-lg text-xs text-white/70 hover:text-white hover:bg-white/5 transition-all border border-white/10 hover:border-white/20 disabled:opacity-50\"\n                      >\n                        {example}\n                      </button>\n                    ))}\n                  </div>\n                </div>\n              </>\n            ) : (\n              <>\n                {/* Generated Tasks Preview */}\n                <div className=\"space-y-4\">\n                  <div className=\"flex items-center gap-2 text-green-400\">\n                    <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n                      <path\n                        d=\"M4 10L8 14L16 6\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      />\n                    </svg>\n                    <span className=\"font-semibold\">Tasks Generated Successfully!</span>\n                  </div>\n\n                  {/* Metadata Badges */}\n                  <div className=\"flex flex-wrap gap-2\">\n                    {responseMetadata?.mock_mode && (\n                      <span className=\"px-2 py-1 rounded-lg text-xs font-semibold bg-yellow-500/20 text-yellow-400 border border-yellow-500/30\">\n                        Mock Mode\n                      </span>\n                    )}\n                    {responseMetadata?.from_cache ? (\n                      <span className=\"px-2 py-1 rounded-lg text-xs font-semibold bg-blue-500/20 text-blue-400 border border-blue-500/30\">\n                        From Cache ({similarity}% similar)\n                      </span>\n                    ) : (\n                      <span className=\"px-2 py-1 rounded-lg text-xs font-semibold bg-green-500/20 text-green-400 border border-green-500/30\">\n                        AI Generated\n                      </span>\n                    )}\n                    <span className=\"px-2 py-1 rounded-lg text-xs font-semibold bg-purple-500/20 text-purple-400 border border-purple-500/30\">\n                      {responseMetadata?.tokens_used || 0} tokens\n                    </span>\n                    {responseMetadata?.tokens_saved && (\n                      <span className=\"px-2 py-1 rounded-lg text-xs font-semibold bg-indigo-500/20 text-indigo-400 border border-indigo-500/30\">\n                        {responseMetadata.tokens_saved} tokens saved\n                      </span>\n                    )}\n                    <span className=\"px-2 py-1 rounded-lg text-xs font-semibold bg-pink-500/20 text-pink-400 border border-pink-500/30\">\n                      {generatedTasks.length} tasks\n                    </span>\n                  </div>\n\n                  {/* Tasks List */}\n                  <div className=\"space-y-2 max-h-96 overflow-y-auto\">\n                    {generatedTasks.map((task, i) => (\n                      <div\n                        key={task.id}\n                        className=\"p-3 rounded-lg bg-white/5 border border-white/10 hover:bg-white/10 transition-colors\"\n                      >\n                        <div className=\"flex items-start justify-between gap-2\">\n                          <div className=\"flex-1\">\n                            <div className=\"flex items-center gap-2 mb-1\">\n                              <span className=\"text-xs text-white/50\">#{i + 1}</span>\n                              <p className=\"text-sm font-medium text-white/90\">{task.name}</p>\n                            </div>\n                            <div className=\"flex items-center gap-3 text-xs text-white/60\">\n                              <span className=\"flex items-center gap-1\">\n                                <svg\n                                  width=\"12\"\n                                  height=\"12\"\n                                  viewBox=\"0 0 12 12\"\n                                  fill=\"none\"\n                                  className=\"text-white/40\"\n                                >\n                                  <rect\n                                    x=\"1\"\n                                    y=\"2\"\n                                    width=\"10\"\n                                    height=\"8\"\n                                    rx=\"1\"\n                                    stroke=\"currentColor\"\n                                  />\n                                  <path d=\"M1 4h10\" stroke=\"currentColor\" />\n                                </svg>\n                                {task.start} → {task.end}\n                              </span>\n                              <span>{task.duration} days</span>\n                              {task.dependencies.length > 0 && (\n                                <span className=\"text-blue-400\">\n                                  Depends: {task.dependencies.join(', ')}\n                                </span>\n                              )}\n                            </div>\n                          </div>\n                          <span\n                            className={`px-2 py-0.5 rounded text-xs font-semibold ${\n                              task.priority === 'high'\n                                ? 'bg-red-500/20 text-red-400'\n                                : task.priority === 'medium'\n                                ? 'bg-yellow-500/20 text-yellow-400'\n                                : 'bg-blue-500/20 text-blue-400'\n                            }`}\n                          >\n                            {task.priority}\n                          </span>\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </>\n            )}\n          </div>\n\n          {/* Footer */}\n          <div className=\"px-6 py-4 border-t border-white/10 flex items-center justify-between\">\n            <div>\n              {isLoading && (\n                <div className=\"flex items-center gap-2 text-blue-400 text-sm\">\n                  <svg className=\"animate-spin h-4 w-4\" viewBox=\"0 0 24 24\">\n                    <circle\n                      className=\"opacity-25\"\n                      cx=\"12\"\n                      cy=\"12\"\n                      r=\"10\"\n                      stroke=\"currentColor\"\n                      strokeWidth=\"4\"\n                      fill=\"none\"\n                    />\n                    <path\n                      className=\"opacity-75\"\n                      fill=\"currentColor\"\n                      d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n                    />\n                  </svg>\n                  <span>Generating with AI...</span>\n                </div>\n              )}\n            </div>\n            <div className=\"flex items-center gap-3\">\n              <button\n                onClick={handleClose}\n                disabled={isLoading}\n                className=\"px-4 py-2 rounded-lg text-sm font-semibold transition-all hover:bg-white/10 text-white/80 disabled:opacity-50\"\n              >\n                Cancel\n              </button>\n              {!generatedTasks ? (\n                <button\n                  onClick={handleGenerate}\n                  disabled={!prompt.trim() || isLoading}\n                  className=\"px-6 py-2 rounded-lg text-sm font-semibold transition-all disabled:opacity-50\"\n                  style={{\n                    background: 'linear-gradient(135deg, #3B82F6 0%, #2563EB 100%)',\n                    color: '#ffffff',\n                  }}\n                >\n                  {isLoading ? 'Generating...' : 'Generate Tasks'}\n                </button>\n              ) : (\n                <button\n                  onClick={handleApplyTasks}\n                  className=\"px-6 py-2 rounded-lg text-sm font-semibold transition-all\"\n                  style={{\n                    background: 'linear-gradient(135deg, #10B981 0%, #059669 100%)',\n                    color: '#ffffff',\n                  }}\n                >\n                  Apply Tasks to Gantt\n                </button>\n              )}\n            </div>\n          </div>\n        </div>\n      </div>\n    </Portal>\n  )\n}\n","/**\r\n * useKanbanState Hook\r\n * Optional hook for managing board state locally\r\n * Consumers can use this or manage state themselves\r\n * @module hooks/useKanbanState\r\n */\r\n\r\nimport { useState, useCallback } from 'react'\r\nimport { retryWithBackoff } from '../utils/retry'\r\nimport type { Board, BoardCallbacks, Card, Column } from '../types'\r\n\r\nexport interface UseKanbanStateOptions {\r\n  /** Initial board state */\r\n  initialBoard: Board\r\n  /** Persist changes (e.g., to localStorage, API) */\r\n  onPersist?: (board: Board) => void | Promise<void>\r\n  /** Enable optimistic updates (default: true) */\r\n  optimistic?: boolean\r\n}\r\n\r\nexport interface UseKanbanStateReturn {\r\n  /** Current board state */\r\n  board: Board\r\n  /** Callbacks for the KanbanBoard component */\r\n  callbacks: BoardCallbacks\r\n  /** Direct state setters (advanced usage) */\r\n  setBoard: React.Dispatch<React.SetStateAction<Board>>\r\n  /** Helper functions */\r\n  helpers: {\r\n    addCard: (card: Omit<Card, 'id'>) => string\r\n    addColumn: (column: Omit<Column, 'id' | 'cardIds'>) => string\r\n    deleteCard: (cardId: string) => void\r\n    deleteColumn: (columnId: string) => void\r\n    clearBoard: () => void\r\n  }\r\n}\r\n\r\n/**\r\n * Hook for managing Kanban board state\r\n *\r\n * @example\r\n * ```tsx\r\n * const { board, callbacks } = useKanbanState({\r\n *   initialBoard: myBoard,\r\n *   onPersist: async (board) => {\r\n *     await api.updateBoard(board)\r\n *   }\r\n * })\r\n *\r\n * return <KanbanBoard board={board} callbacks={callbacks} />\r\n * ```\r\n */\r\nexport function useKanbanState({\r\n  initialBoard,\r\n  onPersist,\r\n}: UseKanbanStateOptions): UseKanbanStateReturn {\r\n  const [board, setBoard] = useState<Board>(initialBoard)\r\n\r\n  // Persist helper with retry logic\r\n  const persistBoard = useCallback(\r\n    (updatedBoard: Board) => {\r\n      if (onPersist) {\r\n        // Use retry logic for resilient persistence\r\n        retryWithBackoff(\r\n          () => Promise.resolve(onPersist(updatedBoard)),\r\n          {\r\n            maxAttempts: 3,\r\n            initialDelay: 1000,\r\n            onRetry: (error, attempt, delay) => {\r\n              console.warn(\r\n                `Retry attempt ${attempt} after ${delay}ms: ${error.message}`\r\n              )\r\n            },\r\n          }\r\n        ).then((result) => {\r\n          if (!result.success) {\r\n            console.error(\r\n              `Failed to persist board after ${result.attempts} attempts:`,\r\n              result.error\r\n            )\r\n            // TODO: Implement rollback or user notification\r\n          }\r\n        })\r\n      }\r\n    },\r\n    [onPersist]\r\n  )\r\n\r\n  // Move card to new position/column\r\n  const handleCardMove = useCallback(\r\n    async (cardId: string, targetColumnId: string, position: number) => {\r\n      setBoard((prev) => {\r\n        const card = prev.cards.find((c) => c.id === cardId)\r\n        if (!card) return prev\r\n\r\n        const sourceColumnId = card.columnId\r\n\r\n        // Update card\r\n        const updatedCard = {\r\n          ...card,\r\n          columnId: targetColumnId,\r\n          position,\r\n        }\r\n\r\n        // Update cards array\r\n        const updatedCards = prev.cards.map((c) =>\r\n          c.id === cardId ? updatedCard : c\r\n        )\r\n\r\n        // Update columns' cardIds\r\n        const updatedColumns = prev.columns.map((col) => {\r\n          if (col.id === sourceColumnId) {\r\n            // Remove from source column\r\n            return {\r\n              ...col,\r\n              cardIds: col.cardIds.filter((id) => id !== cardId),\r\n            }\r\n          } else if (col.id === targetColumnId) {\r\n            // Add to target column (maintain sort order)\r\n            const targetCards = updatedCards\r\n              .filter((c) => c.columnId === targetColumnId)\r\n              .sort((a, b) => a.position - b.position)\r\n            return {\r\n              ...col,\r\n              cardIds: targetCards.map((c) => c.id),\r\n            }\r\n          }\r\n          return col\r\n        })\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          cards: updatedCards,\r\n          columns: updatedColumns,\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Update card properties\r\n  const handleCardUpdate = useCallback(\r\n    async (cardId: string, updates: Partial<Card>) => {\r\n      setBoard((prev) => {\r\n        const updatedCards = prev.cards.map((card) =>\r\n          card.id === cardId ? { ...card, ...updates } : card\r\n        )\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          cards: updatedCards,\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Create new card\r\n  const handleCardCreate = useCallback(\r\n    async (card: Omit<Card, 'id'>) => {\r\n      const newCardId = `card-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\r\n\r\n      setBoard((prev) => {\r\n        const newCard: Card = {\r\n          ...card,\r\n          id: newCardId,\r\n        }\r\n\r\n        // Add to column's cardIds\r\n        const updatedColumns = prev.columns.map((col) =>\r\n          col.id === card.columnId\r\n            ? { ...col, cardIds: [...col.cardIds, newCardId] }\r\n            : col\r\n        )\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          cards: [...prev.cards, newCard],\r\n          columns: updatedColumns,\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Delete card\r\n  const handleCardDelete = useCallback(\r\n    async (cardId: string) => {\r\n      setBoard((prev) => {\r\n        const card = prev.cards.find((c) => c.id === cardId)\r\n        if (!card) return prev\r\n\r\n        // Remove from cards\r\n        const updatedCards = prev.cards.filter((c) => c.id !== cardId)\r\n\r\n        // Remove from column's cardIds\r\n        const updatedColumns = prev.columns.map((col) =>\r\n          col.id === card.columnId\r\n            ? { ...col, cardIds: col.cardIds.filter((id) => id !== cardId) }\r\n            : col\r\n        )\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          cards: updatedCards,\r\n          columns: updatedColumns,\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Create new column\r\n  const handleColumnCreate = useCallback(\r\n    async (column: Omit<Column, 'id' | 'cardIds'>) => {\r\n      const newColumnId = `col-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\r\n\r\n      setBoard((prev) => {\r\n        const newColumn: Column = {\r\n          ...column,\r\n          id: newColumnId,\r\n          cardIds: [],\r\n        }\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          columns: [...prev.columns, newColumn],\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Update column\r\n  const handleColumnUpdate = useCallback(\r\n    async (columnId: string, updates: Partial<Column>) => {\r\n      setBoard((prev) => {\r\n        const updatedColumns = prev.columns.map((col) =>\r\n          col.id === columnId ? { ...col, ...updates } : col\r\n        )\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          columns: updatedColumns,\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Delete column\r\n  const handleColumnDelete = useCallback(\r\n    async (columnId: string) => {\r\n      setBoard((prev) => {\r\n        // Remove all cards in this column\r\n        const updatedCards = prev.cards.filter((c) => c.columnId !== columnId)\r\n        const updatedColumns = prev.columns.filter((col) => col.id !== columnId)\r\n\r\n        const updatedBoard = {\r\n          ...prev,\r\n          cards: updatedCards,\r\n          columns: updatedColumns,\r\n        }\r\n\r\n        persistBoard(updatedBoard)\r\n        return updatedBoard\r\n      })\r\n    },\r\n    [persistBoard]\r\n  )\r\n\r\n  // Helper function to add card (convenience)\r\n  const addCard = useCallback(\r\n    (card: Omit<Card, 'id'>): string => {\r\n      const newCardId = `card-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\r\n      handleCardCreate(card)\r\n      return newCardId\r\n    },\r\n    [handleCardCreate]\r\n  )\r\n\r\n  // Helper function to add column (convenience)\r\n  const addColumn = useCallback(\r\n    (column: Omit<Column, 'id' | 'cardIds'>): string => {\r\n      const newColumnId = `col-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\r\n      handleColumnCreate(column)\r\n      return newColumnId\r\n    },\r\n    [handleColumnCreate]\r\n  )\r\n\r\n  // Helper function to clear board (for AI-generated plans)\r\n  const clearBoard = useCallback(() => {\r\n    setBoard((prev) => {\r\n      const updatedBoard = {\r\n        ...prev,\r\n        cards: [],\r\n        columns: [],\r\n      }\r\n\r\n      persistBoard(updatedBoard)\r\n      return updatedBoard\r\n    })\r\n  }, [persistBoard])\r\n\r\n  const callbacks: BoardCallbacks = {\r\n    onCardMove: handleCardMove,\r\n    onCardUpdate: handleCardUpdate,\r\n    onCardCreate: handleCardCreate,\r\n    onCardDelete: handleCardDelete,\r\n    onColumnCreate: handleColumnCreate,\r\n    onColumnUpdate: handleColumnUpdate,\r\n    onColumnDelete: handleColumnDelete,\r\n  }\r\n\r\n  return {\r\n    board,\r\n    callbacks,\r\n    setBoard,\r\n    helpers: {\r\n      addCard,\r\n      addColumn,\r\n      deleteCard: handleCardDelete,\r\n      deleteColumn: handleColumnDelete,\r\n      clearBoard,\r\n    },\r\n  }\r\n}\r\n","import { useMemo } from 'react'\r\nimport { useKanbanState } from './useKanbanState'\r\nimport type { Board, BoardCallbacks, User, KanbanBoardProps } from '../types'\r\n\r\nexport interface UseBoardOptions {\r\n  initialData: Board\r\n  availableUsers?: User[]\r\n  onSave?: (board: Board) => void | Promise<void>\r\n  saveDelay?: number\r\n}\r\n\r\nexport interface UseBoardReturn {\r\n  props: Pick<KanbanBoardProps, 'board' | 'callbacks' | 'availableUsers'>\r\n  board: Board\r\n  callbacks: BoardCallbacks\r\n  utils: {\r\n    addCard: (columnId: string, title: string, data?: Partial<any>) => void\r\n    addColumn: (title: string, position?: number) => void\r\n    reset: () => void\r\n  }\r\n}\r\n\r\n/**\r\n * Simplified hook for Kanban board state management\r\n *\r\n * @example\r\n * ```tsx\r\n * import { KanbanBoard, useBoard } from '@libxai/board'\r\n *\r\n * function App() {\r\n *   const board = useBoard({\r\n *     initialData: myData,\r\n *     onSave: (board) => localStorage.setItem('board', JSON.stringify(board))\r\n *   })\r\n *\r\n *   return <KanbanBoard {...board.props} />\r\n * }\r\n * ```\r\n */\r\nexport function useBoard({\r\n  initialData,\r\n  availableUsers = [],\r\n  onSave,\r\n}: UseBoardOptions): UseBoardReturn {\r\n  const { board, callbacks, helpers } = useKanbanState({\r\n    initialBoard: initialData,\r\n    onPersist: onSave,\r\n  })\r\n\r\n  const utils = useMemo(\r\n    () => ({\r\n      addCard: (columnId: string, title: string, data: Partial<any> = {}) => {\r\n        helpers.addCard({\r\n          title,\r\n          columnId,\r\n          position: board.cards.filter((c) => c.columnId === columnId).length,\r\n          ...data,\r\n        })\r\n      },\r\n      addColumn: (title: string, position?: number) => {\r\n        // Calculate next position based on highest existing position + 1000\r\n        const maxPosition = board.columns.length > 0\r\n          ? Math.max(...board.columns.map(col => col.position))\r\n          : 0\r\n\r\n        helpers.addColumn({\r\n          title,\r\n          position: position ?? (maxPosition + 1000),\r\n        })\r\n      },\r\n      reset: helpers.clearBoard,\r\n    }),\r\n    [board.cards, board.columns, helpers]\r\n  )\r\n\r\n  const props = useMemo(\r\n    () => ({\r\n      board,\r\n      callbacks,\r\n      availableUsers,\r\n    }),\r\n    [board, callbacks, availableUsers]\r\n  )\r\n\r\n  return {\r\n    props,\r\n    board,\r\n    callbacks,\r\n    utils,\r\n  }\r\n}\r\n","import { useState, useMemo, useCallback } from 'react'\r\nimport type { Card, Priority } from '../types'\r\n\r\nexport type DateFilter = 'all' | 'overdue' | 'today' | 'this-week' | 'custom'\r\nexport type SortBy = 'created' | 'priority' | 'dueDate' | 'title' | 'estimate' | 'none'\r\nexport type SortOrder = 'asc' | 'desc'\r\n\r\nexport interface FilterState {\r\n  dateFilter: DateFilter\r\n  dateRange?: { start: Date; end: Date }\r\n  priorities: Priority[]\r\n  assignees: string[]\r\n  labels: string[]\r\n  columns: string[]\r\n  search: string\r\n}\r\n\r\nexport interface SortState {\r\n  by: SortBy\r\n  order: SortOrder\r\n}\r\n\r\nexport interface UseFiltersOptions {\r\n  initialFilters?: Partial<FilterState>\r\n  initialSort?: Partial<SortState>\r\n  currentUserId?: string\r\n}\r\n\r\nexport interface UseFiltersReturn {\r\n  filters: FilterState\r\n  sort: SortState\r\n  setFilters: (filters: Partial<FilterState>) => void\r\n  setSort: (sort: Partial<SortState>) => void\r\n  resetFilters: () => void\r\n  filterMyTasks: () => void\r\n  filterOverdue: () => void\r\n  filterHighPriority: () => void\r\n  applyFilters: (cards: Card[]) => Card[]\r\n  hasActiveFilters: boolean\r\n}\r\n\r\nconst DEFAULT_FILTERS: FilterState = {\r\n  dateFilter: 'all',\r\n  priorities: [],\r\n  assignees: [],\r\n  labels: [],\r\n  columns: [],\r\n  search: '',\r\n}\r\n\r\nconst DEFAULT_SORT: SortState = {\r\n  by: 'none',\r\n  order: 'asc',\r\n}\r\n\r\n/**\r\n * Hook for filtering and sorting board cards\r\n *\r\n * @example\r\n * ```tsx\r\n * const { filters, setFilters, applyFilters, filterMyTasks } = useFilters({\r\n *   currentUserId: 'user-1'\r\n * })\r\n *\r\n * const filteredCards = applyFilters(board.cards)\r\n * ```\r\n */\r\nexport function useFilters({\r\n  initialFilters = {},\r\n  initialSort = {},\r\n  currentUserId,\r\n}: UseFiltersOptions = {}): UseFiltersReturn {\r\n  const [filters, setFiltersState] = useState<FilterState>({\r\n    ...DEFAULT_FILTERS,\r\n    ...initialFilters,\r\n  })\r\n\r\n  const [sort, setSortState] = useState<SortState>({\r\n    ...DEFAULT_SORT,\r\n    ...initialSort,\r\n  })\r\n\r\n  const setFilters = useCallback((newFilters: Partial<FilterState>) => {\r\n    setFiltersState((prev) => ({ ...prev, ...newFilters }))\r\n  }, [])\r\n\r\n  const setSort = useCallback((newSort: Partial<SortState>) => {\r\n    setSortState((prev) => ({ ...prev, ...newSort }))\r\n  }, [])\r\n\r\n  const resetFilters = useCallback(() => {\r\n    setFiltersState(DEFAULT_FILTERS)\r\n    setSortState(DEFAULT_SORT)\r\n  }, [])\r\n\r\n  const filterMyTasks = useCallback(() => {\r\n    if (!currentUserId) return\r\n    // Reset all filters before applying \"My Tasks\"\r\n    setFiltersState({\r\n      ...DEFAULT_FILTERS,\r\n      assignees: [currentUserId]\r\n    })\r\n  }, [currentUserId])\r\n\r\n  const filterOverdue = useCallback(() => {\r\n    // Reset all filters before applying \"Overdue\"\r\n    setFiltersState({\r\n      ...DEFAULT_FILTERS,\r\n      dateFilter: 'overdue'\r\n    })\r\n  }, [])\r\n\r\n  const filterHighPriority = useCallback(() => {\r\n    // Reset all filters before applying \"High Priority\"\r\n    setFiltersState({\r\n      ...DEFAULT_FILTERS,\r\n      priorities: ['HIGH', 'URGENT']\r\n    })\r\n  }, [])\r\n\r\n  const hasActiveFilters = useMemo(() => {\r\n    return (\r\n      filters.dateFilter !== 'all' ||\r\n      filters.priorities.length > 0 ||\r\n      filters.assignees.length > 0 ||\r\n      filters.labels.length > 0 ||\r\n      filters.columns.length > 0 ||\r\n      filters.search !== '' ||\r\n      sort.by !== 'none'\r\n    )\r\n  }, [filters, sort])\r\n\r\n  const applyFilters = useCallback(\r\n    (cards: Card[]): Card[] => {\r\n      let filtered = [...cards]\r\n\r\n      if (filters.search) {\r\n        const query = filters.search.toLowerCase()\r\n        filtered = filtered.filter(\r\n          (card) =>\r\n            card.title.toLowerCase().includes(query) ||\r\n            card.description?.toLowerCase().includes(query)\r\n        )\r\n      }\r\n\r\n      if (filters.dateFilter !== 'all') {\r\n        const now = new Date()\r\n\r\n        // Get today's date string in local timezone (YYYY-MM-DD format)\r\n        // This matches what the date input produces when user selects a date\r\n        const year = now.getFullYear()\r\n        const month = String(now.getMonth() + 1).padStart(2, '0')\r\n        const day = String(now.getDate()).padStart(2, '0')\r\n        const todayString = `${year}-${month}-${day}`\r\n\r\n        filtered = filtered.filter((card) => {\r\n          if (!card.endDate && !card.dueDate) return false\r\n\r\n          const dueDate = card.endDate || card.dueDate\r\n          if (!dueDate) return false\r\n\r\n          // Convert date to YYYY-MM-DD string for comparison\r\n          let dueDateString: string\r\n          if (typeof dueDate === 'string') {\r\n            // Already a string, extract YYYY-MM-DD part\r\n            const parts = dueDate.split('T')\r\n            dueDateString = parts[0] || dueDate\r\n          } else {\r\n            // Date object - convert to YYYY-MM-DD in UTC (how date inputs store dates)\r\n            const y = dueDate.getUTCFullYear()\r\n            const m = String(dueDate.getUTCMonth() + 1).padStart(2, '0')\r\n            const d = String(dueDate.getUTCDate()).padStart(2, '0')\r\n            dueDateString = `${y}-${m}-${d}`\r\n          }\r\n\r\n          switch (filters.dateFilter) {\r\n            case 'overdue':\r\n              return dueDateString < todayString\r\n            case 'today':\r\n              return dueDateString === todayString\r\n            case 'this-week':\r\n              // This week means from today until 7 days from now\r\n              const todayDate = new Date(todayString + 'T00:00:00')\r\n              const cardDueDate = new Date(dueDateString + 'T00:00:00')\r\n              const weekFromNow = new Date(todayDate)\r\n              weekFromNow.setDate(weekFromNow.getDate() + 7)\r\n              return cardDueDate >= todayDate && cardDueDate <= weekFromNow\r\n            case 'custom':\r\n              if (filters.dateRange) {\r\n                const due = typeof dueDate === 'string' ? new Date(dueDate) : dueDate\r\n                return (\r\n                  due >= filters.dateRange.start && due <= filters.dateRange.end\r\n                )\r\n              }\r\n              return true\r\n            default:\r\n              return true\r\n          }\r\n        })\r\n      }\r\n\r\n      if (filters.priorities.length > 0) {\r\n        filtered = filtered.filter(\r\n          (card) => card.priority && filters.priorities.includes(card.priority)\r\n        )\r\n      }\r\n\r\n      if (filters.assignees.length > 0) {\r\n        filtered = filtered.filter((card) => {\r\n          const cardAssignees = card.assignedUserIds || (card.assigneeId ? [card.assigneeId] : [])\r\n          return cardAssignees.some((id) => filters.assignees.includes(id))\r\n        })\r\n      }\r\n\r\n      if (filters.labels.length > 0) {\r\n        filtered = filtered.filter((card) => {\r\n          return (\r\n            card.labels &&\r\n            card.labels.some((label) => filters.labels.includes(label))\r\n          )\r\n        })\r\n      }\r\n\r\n      if (filters.columns.length > 0) {\r\n        filtered = filtered.filter((card) =>\r\n          filters.columns.includes(card.columnId)\r\n        )\r\n      }\r\n\r\n      if (sort.by !== 'none') {\r\n        filtered.sort((a, b) => {\r\n          let comparison = 0\r\n\r\n          switch (sort.by) {\r\n            case 'created':\r\n              const aCreated = a.createdAt ? new Date(a.createdAt).getTime() : 0\r\n              const bCreated = b.createdAt ? new Date(b.createdAt).getTime() : 0\r\n              comparison = aCreated - bCreated\r\n              break\r\n\r\n            case 'priority':\r\n              const priorityOrder = { URGENT: 4, HIGH: 3, MEDIUM: 2, LOW: 1 }\r\n              const aPriority = priorityOrder[a.priority || 'LOW']\r\n              const bPriority = priorityOrder[b.priority || 'LOW']\r\n              comparison = aPriority - bPriority\r\n              break\r\n\r\n            case 'dueDate':\r\n              const aDue = a.endDate || a.dueDate\r\n              const bDue = b.endDate || b.dueDate\r\n              if (!aDue) return 1\r\n              if (!bDue) return -1\r\n              const aTime = typeof aDue === 'string' ? new Date(aDue).getTime() : aDue.getTime()\r\n              const bTime = typeof bDue === 'string' ? new Date(bDue).getTime() : bDue.getTime()\r\n              comparison = aTime - bTime\r\n              break\r\n\r\n            case 'title':\r\n              comparison = a.title.localeCompare(b.title)\r\n              break\r\n\r\n            case 'estimate':\r\n              const aEst = a.estimatedTime || 0\r\n              const bEst = b.estimatedTime || 0\r\n              comparison = aEst - bEst\r\n              break\r\n\r\n            default:\r\n              comparison = 0\r\n          }\r\n\r\n          return sort.order === 'asc' ? comparison : -comparison\r\n        })\r\n      }\r\n\r\n      return filtered\r\n    },\r\n    [filters, sort]\r\n  )\r\n\r\n  return {\r\n    filters,\r\n    sort,\r\n    setFilters,\r\n    setSort,\r\n    resetFilters,\r\n    filterMyTasks,\r\n    filterOverdue,\r\n    filterHighPriority,\r\n    applyFilters,\r\n    hasActiveFilters,\r\n  }\r\n}\r\n","/**\r\n * useAI Hook\r\n * Optional AI features using Vercel AI SDK\r\n * Requires 'ai' package to be installed\r\n * @module hooks/useAI\r\n */\r\n\r\nimport { useCallback, useState } from 'react'\r\nimport type {\r\n  AICallbacks,\r\n  Board,\r\n  Card,\r\n  GeneratedPlan,\r\n  AssigneeSuggestion,\r\n  Insight,\r\n} from '../types'\r\n\r\nexport interface UseAIOptions {\r\n  /** API key for AI provider */\r\n  apiKey?: string\r\n  /** Model to use */\r\n  model?: 'gpt-4' | 'gpt-4-turbo' | 'claude-3-5-sonnet' | string\r\n  /** Custom API endpoint */\r\n  endpoint?: string\r\n  /** Base URL */\r\n  baseURL?: string\r\n}\r\n\r\nexport interface UseAIReturn extends AICallbacks {\r\n  /** Is AI available (SDK installed + API key provided) */\r\n  isAvailable: boolean\r\n  /** Is AI currently processing */\r\n  isLoading: boolean\r\n  /** Last error */\r\n  error: Error | null\r\n}\r\n\r\n// Try to import AI SDK (optional peer dependency)\r\nlet generateObject: any\r\nlet generateText: any\r\n\r\nif (typeof window !== 'undefined') {\r\n  try {\r\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n    const aiSDK = require('ai')\r\n    generateObject = aiSDK.generateObject\r\n    generateText = aiSDK.generateText\r\n  } catch {\r\n    // AI SDK not installed\r\n  }\r\n}\r\n\r\n/**\r\n * Hook for AI features\r\n *\r\n * @example\r\n * ```tsx\r\n * const ai = useAI({\r\n *   apiKey: process.env.OPENAI_API_KEY,\r\n *   model: 'gpt-4-turbo'\r\n * })\r\n *\r\n * if (ai.isAvailable) {\r\n *   const plan = await ai.onGeneratePlan('Build a todo app')\r\n * }\r\n * ```\r\n */\r\nexport function useAI(options: UseAIOptions = {}): UseAIReturn {\r\n  const [isLoading, setIsLoading] = useState(false)\r\n  const [error, setError] = useState<Error | null>(null)\r\n\r\n  const isAvailable = Boolean(\r\n    generateObject && generateText && options.apiKey\r\n  )\r\n\r\n  // Generate plan from prompt\r\n  const onGeneratePlan = useCallback(\r\n    async (prompt: string): Promise<GeneratedPlan> => {\r\n      if (!isAvailable) {\r\n        throw new Error(\r\n          'AI features require the \"ai\" package and an API key. Install with: npm install ai'\r\n        )\r\n      }\r\n\r\n      setIsLoading(true)\r\n      setError(null)\r\n\r\n      try {\r\n        // This is a placeholder - actual implementation would use generateObject\r\n        // with proper schema definition using Zod\r\n        console.log('Generating plan for:', prompt)\r\n\r\n        // Example structure (would use real AI SDK)\r\n        const result: GeneratedPlan = {\r\n          columns: [\r\n            {\r\n              title: 'To Do',\r\n              position: 1000,\r\n              cardIds: [],\r\n            },\r\n            {\r\n              title: 'In Progress',\r\n              position: 2000,\r\n              cardIds: [],\r\n            },\r\n            {\r\n              title: 'Done',\r\n              position: 3000,\r\n              cardIds: [],\r\n            },\r\n          ],\r\n          cards: [\r\n            {\r\n              title: 'Generated task from AI',\r\n              description: `Based on: ${prompt}`,\r\n              position: 1000,\r\n              columnId: 'temp-col-1',\r\n            },\r\n          ],\r\n          explanation: 'This is a sample plan. Real implementation would use AI SDK.',\r\n        }\r\n\r\n        return result\r\n      } catch (err) {\r\n        const error =\r\n          err instanceof Error ? err : new Error('Failed to generate plan')\r\n        setError(error)\r\n        throw error\r\n      } finally {\r\n        setIsLoading(false)\r\n      }\r\n    },\r\n    [isAvailable]\r\n  )\r\n\r\n  // Suggest assignee for card\r\n  const onSuggestAssignee = useCallback(\r\n    async (card: Card): Promise<AssigneeSuggestion> => {\r\n      if (!isAvailable) {\r\n        throw new Error('AI features not available')\r\n      }\r\n\r\n      setIsLoading(true)\r\n      setError(null)\r\n\r\n      try {\r\n        // Placeholder implementation\r\n        console.log('Suggesting assignee for:', card.title)\r\n\r\n        return {\r\n          userId: 'user-123',\r\n          confidence: 0.85,\r\n          reasoning: 'Based on past performance and expertise',\r\n        }\r\n      } catch (err) {\r\n        const error =\r\n          err instanceof Error ? err : new Error('Failed to suggest assignee')\r\n        setError(error)\r\n        throw error\r\n      } finally {\r\n        setIsLoading(false)\r\n      }\r\n    },\r\n    [isAvailable]\r\n  )\r\n\r\n  // Predict risks\r\n  const onPredictRisks = useCallback(\r\n    async (_boardState: Board): Promise<Insight[]> => {\r\n      if (!isAvailable) {\r\n        throw new Error('AI features not available')\r\n      }\r\n\r\n      setIsLoading(true)\r\n      setError(null)\r\n\r\n      try {\r\n        console.log('Analyzing board for risks...')\r\n\r\n        // Placeholder insights\r\n        const insights: Insight[] = [\r\n          {\r\n            type: 'RISK_OVERLOAD',\r\n            severity: 'HIGH',\r\n            title: 'Column overload detected',\r\n            description: 'Too many cards in \"In Progress\"',\r\n            confidence: 0.9,\r\n            suggestedAction: 'Consider moving some cards back to \"To Do\"',\r\n          },\r\n        ]\r\n\r\n        return insights\r\n      } catch (err) {\r\n        const error =\r\n          err instanceof Error ? err : new Error('Failed to predict risks')\r\n        setError(error)\r\n        throw error\r\n      } finally {\r\n        setIsLoading(false)\r\n      }\r\n    },\r\n    [isAvailable]\r\n  )\r\n\r\n  // Generate subtasks\r\n  const onGenerateSubtasks = useCallback(\r\n    async (card: Card): Promise<Omit<Card, 'id'>[]> => {\r\n      if (!isAvailable) {\r\n        throw new Error('AI features not available')\r\n      }\r\n\r\n      setIsLoading(true)\r\n      setError(null)\r\n\r\n      try {\r\n        console.log('Generating subtasks for:', card.title)\r\n\r\n        return [\r\n          {\r\n            title: `Subtask 1 for: ${card.title}`,\r\n            position: card.position + 0.1,\r\n            columnId: card.columnId,\r\n          },\r\n          {\r\n            title: `Subtask 2 for: ${card.title}`,\r\n            position: card.position + 0.2,\r\n            columnId: card.columnId,\r\n          },\r\n        ]\r\n      } catch (err) {\r\n        const error =\r\n          err instanceof Error ? err : new Error('Failed to generate subtasks')\r\n        setError(error)\r\n        throw error\r\n      } finally {\r\n        setIsLoading(false)\r\n      }\r\n    },\r\n    [isAvailable]\r\n  )\r\n\r\n  // Estimate effort\r\n  const onEstimateEffort = useCallback(\r\n    async (\r\n      card: Card\r\n    ): Promise<{ hours: number; confidence: number }> => {\r\n      if (!isAvailable) {\r\n        throw new Error('AI features not available')\r\n      }\r\n\r\n      setIsLoading(true)\r\n      setError(null)\r\n\r\n      try {\r\n        console.log('Estimating effort for:', card.title)\r\n\r\n        return {\r\n          hours: 8,\r\n          confidence: 0.75,\r\n        }\r\n      } catch (err) {\r\n        const error =\r\n          err instanceof Error ? err : new Error('Failed to estimate effort')\r\n        setError(error)\r\n        throw error\r\n      } finally {\r\n        setIsLoading(false)\r\n      }\r\n    },\r\n    [isAvailable]\r\n  )\r\n\r\n  return {\r\n    onGeneratePlan,\r\n    onSuggestAssignee,\r\n    onPredictRisks,\r\n    onGenerateSubtasks,\r\n    onEstimateEffort,\r\n    isAvailable,\r\n    isLoading,\r\n    error,\r\n  }\r\n}\r\n","/**\r\n * useSelectionState - React hook for selection state management\r\n * @module hooks/useSelectionState\r\n *\r\n * Replacement for Jotai's useAtom(selectionStateAtom)\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react'\r\nimport { selectionStore, type SelectionState } from '@libxai/core'\r\n\r\n/**\r\n * Hook return type\r\n */\r\nexport type UseSelectionStateReturn = [\r\n  state: SelectionState,\r\n  setState: (state: SelectionState) => void\r\n]\r\n\r\n/**\r\n * React hook for selection state\r\n *\r\n * Drop-in replacement for `useAtom(selectionStateAtom)`\r\n *\r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n *   const [selectionState, setSelectionState] = useSelectionState()\r\n *\r\n *   const handleSelect = (cardId: string) => {\r\n *     setSelectionState({\r\n *       selectedCardIds: [cardId],\r\n *       lastSelectedCardId: cardId,\r\n *     })\r\n *   }\r\n *\r\n *   return (\r\n *     <div>\r\n *       {selectionState.selectedCardIds.length} cards selected\r\n *     </div>\r\n *   )\r\n * }\r\n * ```\r\n */\r\nexport function useSelectionState(): UseSelectionStateReturn {\r\n  const [state, setState] = useState<SelectionState>(() => selectionStore.getState())\r\n\r\n  useEffect(() => {\r\n    // Subscribe to store changes\r\n    const unsubscribe = selectionStore.subscribe((newState) => {\r\n      setState(newState)\r\n    })\r\n\r\n    return unsubscribe\r\n  }, [])\r\n\r\n  const setSelectionState = useCallback((newState: SelectionState) => {\r\n    selectionStore.setState(newState)\r\n  }, [])\r\n\r\n  return [state, setSelectionState]\r\n}\r\n","/**\r\n * Multi-select hook for bulk operations\r\n * Supports keyboard modifiers (Cmd/Ctrl, Shift) for selection\r\n * @module hooks/useMultiSelect\r\n */\r\n\r\nimport { useCallback } from 'react'\r\nimport { useSelectionState } from './useSelectionState'\r\nimport type { Card } from '../types'\r\n\r\nexport interface UseMultiSelectReturn {\r\n  /** Selected card IDs */\r\n  selectedCardIds: string[]\r\n  /** Last selected card ID */\r\n  lastSelectedCardId: string | null\r\n  /** Check if a card is selected */\r\n  isCardSelected: (cardId: string) => boolean\r\n  /** Select a card */\r\n  selectCard: (cardId: string, event?: React.MouseEvent) => void\r\n  /** Deselect a card */\r\n  deselectCard: (cardId: string) => void\r\n  /** Clear all selections */\r\n  clearSelection: () => void\r\n  /** Select all cards */\r\n  selectAll: () => void\r\n  /** Toggle card selection */\r\n  toggleCard: (cardId: string) => void\r\n  /** Get selected cards */\r\n  getSelectedCards: () => Card[]\r\n}\r\n\r\nexport interface UseMultiSelectOptions {\r\n  /** Board cards (required for range selection and selectAll) */\r\n  cards: Card[]\r\n}\r\n\r\n/**\r\n * Hook for multi-select functionality\r\n *\r\n * @param options - Configuration options\r\n */\r\nexport function useMultiSelect(options: UseMultiSelectOptions): UseMultiSelectReturn {\r\n  const { cards } = options\r\n  const [selectionState, setSelectionState] = useSelectionState()\r\n\r\n  const isCardSelected = useCallback(\r\n    (cardId: string) => {\r\n      return selectionState.selectedCardIds.includes(cardId)\r\n    },\r\n    [selectionState.selectedCardIds]\r\n  )\r\n\r\n  const selectCard = useCallback(\r\n    (cardId: string, event?: React.MouseEvent) => {\r\n      if (!event) {\r\n        // Simple selection without modifiers\r\n        setSelectionState({\r\n          selectedCardIds: [cardId],\r\n          lastSelectedCardId: cardId,\r\n        })\r\n        return\r\n      }\r\n\r\n      const isCtrlOrCmd = event.ctrlKey || event.metaKey\r\n      const isShift = event.shiftKey\r\n\r\n      if (isCtrlOrCmd) {\r\n        // Cmd/Ctrl+Click: Toggle card selection\r\n        if (selectionState.selectedCardIds.includes(cardId)) {\r\n          setSelectionState({\r\n            selectedCardIds: selectionState.selectedCardIds.filter((id) => id !== cardId),\r\n            lastSelectedCardId: selectionState.lastSelectedCardId,\r\n          })\r\n        } else {\r\n          setSelectionState({\r\n            selectedCardIds: [...selectionState.selectedCardIds, cardId],\r\n            lastSelectedCardId: cardId,\r\n          })\r\n        }\r\n      } else if (isShift && selectionState.lastSelectedCardId) {\r\n        // Shift+Click: Range selection within same column\r\n        const card = cards.find((c) => c.id === cardId)\r\n        const lastCard = cards.find((c) => c.id === selectionState.lastSelectedCardId)\r\n\r\n        if (card && lastCard && card.columnId === lastCard.columnId) {\r\n          // Get all cards in the column\r\n          const columnCards = cards\r\n            .filter((c) => c.columnId === card.columnId)\r\n            .sort((a, b) => a.position - b.position)\r\n\r\n          const startIndex = columnCards.findIndex((c) => c.id === selectionState.lastSelectedCardId)\r\n          const endIndex = columnCards.findIndex((c) => c.id === cardId)\r\n\r\n          const [minIndex, maxIndex] = startIndex < endIndex\r\n            ? [startIndex, endIndex]\r\n            : [endIndex, startIndex]\r\n\r\n          const rangeCardIds = columnCards\r\n            .slice(minIndex, maxIndex + 1)\r\n            .map((c) => c.id)\r\n\r\n          // Merge with existing selection\r\n          const newSelection = Array.from(\r\n            new Set([...selectionState.selectedCardIds, ...rangeCardIds])\r\n          )\r\n\r\n          setSelectionState({\r\n            selectedCardIds: newSelection,\r\n            lastSelectedCardId: cardId,\r\n          })\r\n        } else {\r\n          // Different column or no last selection - treat as regular selection\r\n          setSelectionState({\r\n            selectedCardIds: [cardId],\r\n            lastSelectedCardId: cardId,\r\n          })\r\n        }\r\n      } else {\r\n        // Regular click: Replace selection\r\n        setSelectionState({\r\n          selectedCardIds: [cardId],\r\n          lastSelectedCardId: cardId,\r\n        })\r\n      }\r\n    },\r\n    [cards, selectionState, setSelectionState]\r\n  )\r\n\r\n  const deselectCard = useCallback(\r\n    (cardId: string) => {\r\n      setSelectionState({\r\n        selectedCardIds: selectionState.selectedCardIds.filter((id) => id !== cardId),\r\n        lastSelectedCardId: selectionState.lastSelectedCardId,\r\n      })\r\n    },\r\n    [selectionState, setSelectionState]\r\n  )\r\n\r\n  const clearSelection = useCallback(() => {\r\n    setSelectionState({\r\n      selectedCardIds: [],\r\n      lastSelectedCardId: null,\r\n    })\r\n  }, [setSelectionState])\r\n\r\n  const selectAll = useCallback(() => {\r\n    setSelectionState({\r\n      selectedCardIds: cards.map((card) => card.id),\r\n      lastSelectedCardId: cards[cards.length - 1]?.id || null,\r\n    })\r\n  }, [cards, setSelectionState])\r\n\r\n  const toggleCard = useCallback(\r\n    (cardId: string) => {\r\n      if (selectionState.selectedCardIds.includes(cardId)) {\r\n        deselectCard(cardId)\r\n      } else {\r\n        setSelectionState({\r\n          selectedCardIds: [...selectionState.selectedCardIds, cardId],\r\n          lastSelectedCardId: cardId,\r\n        })\r\n      }\r\n    },\r\n    [selectionState, deselectCard, setSelectionState]\r\n  )\r\n\r\n  const getSelectedCards = useCallback(() => {\r\n    return cards.filter((card) =>\r\n      selectionState.selectedCardIds.includes(card.id)\r\n    )\r\n  }, [cards, selectionState.selectedCardIds])\r\n\r\n  return {\r\n    selectedCardIds: selectionState.selectedCardIds,\r\n    lastSelectedCardId: selectionState.lastSelectedCardId,\r\n    isCardSelected,\r\n    selectCard,\r\n    deselectCard,\r\n    clearSelection,\r\n    selectAll,\r\n    toggleCard,\r\n    getSelectedCards,\r\n  }\r\n}\r\n","/**\r\n * Card Stack Types\r\n * Smart grouping of related cards within columns\r\n * @module types/card-stack\r\n */\r\n\r\nexport type StackingStrategy = 'manual' | 'ai-similarity' | 'labels' | 'assignee' | 'priority' | 'epic'\r\n\r\nexport interface CardStack {\r\n  /** Unique stack identifier */\r\n  id: string\r\n  /** Display title for the stack */\r\n  title: string\r\n  /** Cards contained in this stack */\r\n  cardIds: string[]\r\n  /** Column this stack belongs to */\r\n  columnId: string\r\n  /** How this stack was created */\r\n  strategy: StackingStrategy\r\n  /** Visual color for the stack */\r\n  color?: string\r\n  /** Whether stack is expanded or collapsed */\r\n  isExpanded: boolean\r\n  /** Position within the column */\r\n  position: number\r\n  /** Timestamp when stack was created */\r\n  createdAt: Date\r\n  /** AI confidence score (0-1) for auto-stacked groups */\r\n  confidence?: number\r\n}\r\n\r\nexport interface StackingConfig {\r\n  /** Enable automatic AI-powered stacking */\r\n  enableAutoStacking: boolean\r\n  /** Minimum confidence threshold for auto-stacking (0-1) */\r\n  autoStackConfidenceThreshold: number\r\n  /** Minimum cards required to form a stack */\r\n  minCardsPerStack: number\r\n  /** Enable manual drag-to-stack */\r\n  enableManualStacking: boolean\r\n  /** Show stack summaries (card count, assignees, etc.) */\r\n  showStackSummaries: boolean\r\n  /** Animation duration in ms */\r\n  animationDuration: number\r\n}\r\n\r\nexport interface StackSuggestion {\r\n  /** Suggested stack configuration */\r\n  stack: Omit<CardStack, 'id' | 'createdAt' | 'isExpanded' | 'position'>\r\n  /** Reason for suggestion */\r\n  reason: string\r\n  /** Confidence score (0-1) */\r\n  confidence: number\r\n}\r\n\r\nexport const DEFAULT_STACKING_CONFIG: StackingConfig = {\r\n  enableAutoStacking: true,\r\n  autoStackConfidenceThreshold: 0.7,\r\n  minCardsPerStack: 2,\r\n  enableManualStacking: true,\r\n  showStackSummaries: true,\r\n  animationDuration: 200,\r\n}\r\n","/**\r\n * useCardStacking Hook\r\n * Manages card stack state and AI-powered grouping suggestions\r\n * @module hooks/useCardStacking\r\n */\r\n\r\nimport { useState, useCallback, useMemo, useEffect } from 'react'\r\nimport type { Card } from '../types'\r\nimport type { CardStack, StackingConfig, StackSuggestion, StackingStrategy } from '../types/card-stack'\r\nimport { DEFAULT_STACKING_CONFIG } from '../types/card-stack'\r\n\r\nexport interface UseCardStackingOptions {\r\n  /** Board cards */\r\n  cards: Card[]\r\n  /** Configuration */\r\n  config?: Partial<StackingConfig>\r\n  /** AI service for similarity detection (optional) */\r\n  aiService?: {\r\n    findSimilar: (card: Card, candidates: Card[]) => Promise<{ card: Card; similarity: number }[]>\r\n  }\r\n}\r\n\r\nexport interface UseCardStackingResult {\r\n  /** All card stacks */\r\n  stacks: CardStack[]\r\n  /** Create a new stack */\r\n  createStack: (\r\n    title: string,\r\n    cardIds: string[],\r\n    columnId: string,\r\n    strategy: StackingStrategy,\r\n    color?: string\r\n  ) => void\r\n  /** Delete a stack */\r\n  deleteStack: (stackId: string) => void\r\n  /** Toggle stack expand/collapse */\r\n  toggleStack: (stackId: string) => void\r\n  /** Add card to stack */\r\n  addToStack: (stackId: string, cardId: string) => void\r\n  /** Remove card from stack */\r\n  removeFromStack: (stackId: string, cardId: string) => void\r\n  /** Get stacks for a specific column */\r\n  getStacksForColumn: (columnId: string) => CardStack[]\r\n  /** Get AI-powered stack suggestions */\r\n  getSuggestions: (columnId: string) => Promise<StackSuggestion[]>\r\n  /** Apply a suggestion */\r\n  applySuggestion: (suggestion: StackSuggestion) => void\r\n  /** Configuration */\r\n  config: StackingConfig\r\n}\r\n\r\n/**\r\n * Hook for managing card stacking\r\n */\r\nexport function useCardStacking(options: UseCardStackingOptions): UseCardStackingResult {\r\n  const { cards, config: userConfig, aiService } = options\r\n\r\n  // Merge config with defaults\r\n  const config = useMemo<StackingConfig>(\r\n    () => ({\r\n      ...DEFAULT_STACKING_CONFIG,\r\n      ...userConfig,\r\n    }),\r\n    [userConfig]\r\n  )\r\n\r\n  // Stack state\r\n  const [stacks, setStacks] = useState<CardStack[]>([])\r\n\r\n  // Create stack\r\n  const createStack = useCallback(\r\n    (title: string, cardIds: string[], columnId: string, strategy: StackingStrategy, color?: string) => {\r\n      if (cardIds.length < config.minCardsPerStack) {\r\n        console.warn(`Cannot create stack: minimum ${config.minCardsPerStack} cards required`)\r\n        return\r\n      }\r\n\r\n      const newStack: CardStack = {\r\n        id: `stack-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\r\n        title,\r\n        cardIds,\r\n        columnId,\r\n        strategy,\r\n        color,\r\n        isExpanded: true,\r\n        position: stacks.filter((s) => s.columnId === columnId).length,\r\n        createdAt: new Date(),\r\n      }\r\n\r\n      setStacks((prev) => [...prev, newStack])\r\n    },\r\n    [config.minCardsPerStack, stacks]\r\n  )\r\n\r\n  // Delete stack\r\n  const deleteStack = useCallback((stackId: string) => {\r\n    setStacks((prev) => prev.filter((s) => s.id !== stackId))\r\n  }, [])\r\n\r\n  // Toggle expand/collapse\r\n  const toggleStack = useCallback((stackId: string) => {\r\n    setStacks((prev) =>\r\n      prev.map((s) => (s.id === stackId ? { ...s, isExpanded: !s.isExpanded } : s))\r\n    )\r\n  }, [])\r\n\r\n  // Add card to stack\r\n  const addToStack = useCallback((stackId: string, cardId: string) => {\r\n    setStacks((prev) =>\r\n      prev.map((s) => {\r\n        if (s.id === stackId && !s.cardIds.includes(cardId)) {\r\n          return { ...s, cardIds: [...s.cardIds, cardId] }\r\n        }\r\n        return s\r\n      })\r\n    )\r\n  }, [])\r\n\r\n  // Remove card from stack\r\n  const removeFromStack = useCallback(\r\n    (stackId: string, cardId: string) => {\r\n      setStacks((prev) =>\r\n        prev\r\n          .map((s) => {\r\n            if (s.id === stackId) {\r\n              const newCardIds = s.cardIds.filter((id) => id !== cardId)\r\n              // If stack has too few cards, delete it\r\n              if (newCardIds.length < config.minCardsPerStack) {\r\n                return null\r\n              }\r\n              return { ...s, cardIds: newCardIds }\r\n            }\r\n            return s\r\n          })\r\n          .filter((s): s is CardStack => s !== null)\r\n      )\r\n    },\r\n    [config.minCardsPerStack]\r\n  )\r\n\r\n  // Get stacks for column\r\n  const getStacksForColumn = useCallback(\r\n    (columnId: string) => {\r\n      return stacks.filter((s) => s.columnId === columnId).sort((a, b) => a.position - b.position)\r\n    },\r\n    [stacks]\r\n  )\r\n\r\n  // Generate AI suggestions\r\n  const getSuggestions = useCallback(\r\n    async (columnId: string): Promise<StackSuggestion[]> => {\r\n      const columnCards = cards.filter((c) => c.columnId === columnId)\r\n\r\n      if (columnCards.length < config.minCardsPerStack * 2) {\r\n        return []\r\n      }\r\n\r\n      const suggestions: StackSuggestion[] = []\r\n\r\n      // 1. Group by labels\r\n      const byLabels = new Map<string, Card[]>()\r\n      columnCards.forEach((card) => {\r\n        if (card.labels && card.labels.length > 0) {\r\n          card.labels.forEach((label) => {\r\n            if (!byLabels.has(label)) {\r\n              byLabels.set(label, [])\r\n            }\r\n            byLabels.get(label)!.push(card)\r\n          })\r\n        }\r\n      })\r\n\r\n      byLabels.forEach((cards, label) => {\r\n        if (cards.length >= config.minCardsPerStack) {\r\n          suggestions.push({\r\n            stack: {\r\n              title: `📌 ${label}`,\r\n              cardIds: cards.map((c) => c.id),\r\n              columnId,\r\n              strategy: 'labels',\r\n              color: '#3b82f6',\r\n            },\r\n            reason: `${cards.length} cards with label \"${label}\"`,\r\n            confidence: 0.85,\r\n          })\r\n        }\r\n      })\r\n\r\n      // 2. Group by assignee\r\n      const byAssignee = new Map<string, Card[]>()\r\n      columnCards.forEach((card) => {\r\n        if (card.assignedUserIds && card.assignedUserIds.length > 0) {\r\n          card.assignedUserIds.forEach((userId) => {\r\n            if (!byAssignee.has(userId)) {\r\n              byAssignee.set(userId, [])\r\n            }\r\n            byAssignee.get(userId)!.push(card)\r\n          })\r\n        }\r\n      })\r\n\r\n      byAssignee.forEach((cards, userId) => {\r\n        if (cards.length >= config.minCardsPerStack) {\r\n          suggestions.push({\r\n            stack: {\r\n              title: `👤 Assigned to user-${userId.slice(-4)}`,\r\n              cardIds: cards.map((c) => c.id),\r\n              columnId,\r\n              strategy: 'assignee',\r\n              color: '#8b5cf6',\r\n            },\r\n            reason: `${cards.length} cards assigned to the same user`,\r\n            confidence: 0.8,\r\n          })\r\n        }\r\n      })\r\n\r\n      // 3. Group by priority\r\n      const byPriority = new Map<string, Card[]>()\r\n      columnCards.forEach((card) => {\r\n        if (card.priority) {\r\n          if (!byPriority.has(card.priority)) {\r\n            byPriority.set(card.priority, [])\r\n          }\r\n          byPriority.get(card.priority)!.push(card)\r\n        }\r\n      })\r\n\r\n      byPriority.forEach((cards, priority) => {\r\n        if (cards.length >= config.minCardsPerStack) {\r\n          const priorityEmoji = {\r\n            low: '🟢',\r\n            medium: '🟡',\r\n            high: '🔴',\r\n            urgent: '🚨',\r\n          }[priority.toLowerCase()] || '⚪'\r\n\r\n          suggestions.push({\r\n            stack: {\r\n              title: `${priorityEmoji} ${priority} Priority`,\r\n              cardIds: cards.map((c) => c.id),\r\n              columnId,\r\n              strategy: 'priority',\r\n              color: priority === 'high' || priority === 'urgent' ? '#ef4444' : '#10b981',\r\n            },\r\n            reason: `${cards.length} cards with ${priority} priority`,\r\n            confidence: 0.75,\r\n          })\r\n        }\r\n      })\r\n\r\n      // 4. AI-powered similarity (if available)\r\n      if (aiService && config.enableAutoStacking) {\r\n        // Find similar cards using AI\r\n        for (const card of columnCards) {\r\n          const similar = await aiService.findSimilar(card, columnCards)\r\n          const highSimilarity = similar.filter(\r\n            (s) => s.similarity >= config.autoStackConfidenceThreshold\r\n          )\r\n\r\n          if (highSimilarity.length >= config.minCardsPerStack - 1) {\r\n            const cardIds = [card.id, ...highSimilarity.map((s) => s.card.id)]\r\n            const avgConfidence =\r\n              highSimilarity.reduce((sum, s) => sum + s.similarity, 0) / highSimilarity.length\r\n\r\n            suggestions.push({\r\n              stack: {\r\n                title: `✨ Similar to \"${card.title.substring(0, 30)}${card.title.length > 30 ? '...' : ''}\"`,\r\n                cardIds,\r\n                columnId,\r\n                strategy: 'ai-similarity',\r\n                color: '#f59e0b',\r\n              },\r\n              reason: `AI detected ${highSimilarity.length + 1} similar tasks`,\r\n              confidence: avgConfidence,\r\n            })\r\n          }\r\n        }\r\n      }\r\n\r\n      // Filter by confidence threshold and remove duplicates\r\n      return suggestions\r\n        .filter((s) => s.confidence >= config.autoStackConfidenceThreshold)\r\n        .sort((a, b) => b.confidence - a.confidence)\r\n        .slice(0, 5) // Top 5 suggestions\r\n    },\r\n    [cards, config, aiService]\r\n  )\r\n\r\n  // Apply suggestion\r\n  const applySuggestion = useCallback(\r\n    (suggestion: StackSuggestion) => {\r\n      createStack(\r\n        suggestion.stack.title,\r\n        suggestion.stack.cardIds,\r\n        suggestion.stack.columnId,\r\n        suggestion.stack.strategy,\r\n        suggestion.stack.color\r\n      )\r\n    },\r\n    [createStack]\r\n  )\r\n\r\n  // Auto-stack on mount if enabled\r\n  useEffect(() => {\r\n    if (config.enableAutoStacking && stacks.length === 0) {\r\n      // Auto-stack each column\r\n      const columnIds = new Set(cards.map((c) => c.columnId))\r\n      columnIds.forEach(async (columnId) => {\r\n        const suggestions = await getSuggestions(columnId)\r\n        // Auto-apply highest confidence suggestion\r\n        const topSuggestion = suggestions[0]\r\n        if (suggestions.length > 0 && topSuggestion && topSuggestion.confidence >= 0.9) {\r\n          applySuggestion(topSuggestion)\r\n        }\r\n      })\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, []) // Only on mount\r\n\r\n  return {\r\n    stacks,\r\n    createStack,\r\n    deleteStack,\r\n    toggleStack,\r\n    addToStack,\r\n    removeFromStack,\r\n    getStacksForColumn,\r\n    getSuggestions,\r\n    applySuggestion,\r\n    config,\r\n  }\r\n}\r\n","/**\r\n * BoardProvider - React Context Provider for BoardStore\r\n * @module adapters/react\r\n */\r\n\r\nimport React, { createContext, useContext, useEffect, useRef } from 'react'\r\nimport { BoardStore, type BoardState, type CardData, type ColumnData, type BoardData } from '@libxai/core'\r\n\r\n/**\r\n * Board Context\r\n */\r\ninterface BoardContextValue {\r\n  store: BoardStore\r\n}\r\n\r\nconst BoardContext = createContext<BoardContextValue | null>(null)\r\n\r\n/**\r\n * Board Provider Props\r\n */\r\nexport interface BoardProviderProps {\r\n  children: React.ReactNode\r\n  initialData?: {\r\n    board?: BoardData\r\n    columns?: ColumnData[]\r\n    cards?: CardData[]\r\n  }\r\n  onStateChange?: (state: BoardState) => void\r\n}\r\n\r\n/**\r\n * BoardProvider component\r\n *\r\n * Wraps your app with BoardStore context\r\n *\r\n * @example\r\n * ```tsx\r\n * <BoardProvider initialData={{ columns: [], cards: [] }}>\r\n *   <Board />\r\n * </BoardProvider>\r\n * ```\r\n */\r\nexport function BoardProvider({ children, initialData, onStateChange }: BoardProviderProps) {\r\n  // Create store only once\r\n  const storeRef = useRef<BoardStore>()\r\n\r\n  if (!storeRef.current) {\r\n    // Initialize store\r\n    const columnsMap = new Map()\r\n    const cardsMap = new Map()\r\n\r\n    // Load initial columns\r\n    initialData?.columns?.forEach(colData => {\r\n      const { Column } = require('@libxai/core')\r\n      columnsMap.set(colData.id, new Column(colData))\r\n    })\r\n\r\n    // Load initial cards\r\n    initialData?.cards?.forEach(cardData => {\r\n      const { Card } = require('@libxai/core')\r\n      cardsMap.set(cardData.id, new Card(cardData))\r\n    })\r\n\r\n    // Load initial board\r\n    let board = null\r\n    if (initialData?.board) {\r\n      const { Board } = require('@libxai/core')\r\n      board = new Board(initialData.board)\r\n    }\r\n\r\n    storeRef.current = new BoardStore({\r\n      board,\r\n      columns: columnsMap,\r\n      cards: cardsMap,\r\n    })\r\n  }\r\n\r\n  const store = storeRef.current\r\n\r\n  // Subscribe to state changes\r\n  useEffect(() => {\r\n    if (!onStateChange) return\r\n\r\n    return store.subscribeAll((_event) => {\r\n      onStateChange(store.getState())\r\n    })\r\n  }, [store, onStateChange])\r\n\r\n  return (\r\n    <BoardContext.Provider value={{ store }}>\r\n      {children}\r\n    </BoardContext.Provider>\r\n  )\r\n}\r\n\r\n/**\r\n * Hook to access BoardStore from context\r\n *\r\n * @throws Error if used outside BoardProvider\r\n */\r\nexport function useBoardStore(): BoardStore {\r\n  const context = useContext(BoardContext)\r\n\r\n  if (!context) {\r\n    throw new Error('useBoardStore must be used within BoardProvider')\r\n  }\r\n\r\n  return context.store\r\n}\r\n","/**\r\n * useBoard - Main hook for board operations\r\n * @module adapters/react\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react'\r\nimport { useBoardStore } from './BoardProvider'\r\nimport type { Board, Column, Card, CardData, ColumnData } from '@libxai/core'\r\n\r\n/**\r\n * Return type for useBoard hook\r\n */\r\nexport interface UseBoardReturn {\r\n  // State\r\n  board: Board | null\r\n  columns: Column[]\r\n  cards: Card[]\r\n\r\n  // Board operations\r\n  updateBoard: (changes: Partial<Omit<import('@libxai/core').BoardData, 'id' | 'createdAt'>>) => void\r\n\r\n  // Column operations\r\n  addColumn: (columnData: Omit<ColumnData, 'createdAt' | 'updatedAt'>) => void\r\n  updateColumn: (columnId: string, changes: Partial<Omit<ColumnData, 'id' | 'createdAt'>>) => void\r\n  deleteColumn: (columnId: string) => void\r\n  getColumn: (columnId: string) => Column | undefined\r\n\r\n  // Card operations\r\n  addCard: (cardData: Omit<CardData, 'createdAt' | 'updatedAt'>) => void\r\n  updateCard: (cardId: string, changes: Partial<Omit<CardData, 'id' | 'createdAt'>>) => void\r\n  deleteCard: (cardId: string) => void\r\n  moveCard: (cardId: string, toColumnId: string, newPosition: number) => void\r\n  getCard: (cardId: string) => Card | undefined\r\n  getCardsByColumn: (columnId: string) => Card[]\r\n}\r\n\r\n/**\r\n * Main hook for board operations\r\n *\r\n * Provides reactive state and methods for managing board, columns, and cards\r\n *\r\n * @example\r\n * ```tsx\r\n * function MyBoard() {\r\n *   const { board, columns, cards, addCard, moveCard } = useBoard()\r\n *\r\n *   return (\r\n *     <div>\r\n *       {columns.map(column => (\r\n *         <div key={column.id}>\r\n *           <h2>{column.title}</h2>\r\n *           {cards\r\n *             .filter(card => card.columnId === column.id)\r\n *             .map(card => (\r\n *               <div key={card.id}>{card.title}</div>\r\n *             ))}\r\n *         </div>\r\n *       ))}\r\n *     </div>\r\n *   )\r\n * }\r\n * ```\r\n */\r\nexport function useBoard(): UseBoardReturn {\r\n  const store = useBoardStore()\r\n\r\n  // Reactive state\r\n  const [board, setBoard] = useState<Board | null>(store.getBoard())\r\n  const [columns, setColumns] = useState<Column[]>(store.getAllColumns())\r\n  const [cards, setCards] = useState<Card[]>(store.getAllCards())\r\n\r\n  // Subscribe to store changes\r\n  useEffect(() => {\r\n    const unsubscribe = store.subscribeAll(() => {\r\n      setBoard(store.getBoard())\r\n      setColumns(store.getAllColumns())\r\n      setCards(store.getAllCards())\r\n    })\r\n\r\n    return unsubscribe\r\n  }, [store])\r\n\r\n  // Board operations\r\n  const updateBoard = useCallback(\r\n    (changes: Partial<Omit<import('@libxai/core').BoardData, 'id' | 'createdAt'>>) => {\r\n      store.updateBoard(changes)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  // Column operations\r\n  const addColumn = useCallback(\r\n    (columnData: Omit<ColumnData, 'createdAt' | 'updatedAt'>) => {\r\n      store.addColumn(columnData)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const updateColumn = useCallback(\r\n    (columnId: string, changes: Partial<Omit<ColumnData, 'id' | 'createdAt'>>) => {\r\n      store.updateColumn(columnId, changes)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const deleteColumn = useCallback(\r\n    (columnId: string) => {\r\n      store.deleteColumn(columnId)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const getColumn = useCallback(\r\n    (columnId: string) => {\r\n      return store.getColumn(columnId)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  // Card operations\r\n  const addCard = useCallback(\r\n    (cardData: Omit<CardData, 'createdAt' | 'updatedAt'>) => {\r\n      store.addCard(cardData)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const updateCard = useCallback(\r\n    (cardId: string, changes: Partial<Omit<CardData, 'id' | 'createdAt'>>) => {\r\n      store.updateCard(cardId, changes)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const deleteCard = useCallback(\r\n    (cardId: string) => {\r\n      store.deleteCard(cardId)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const moveCard = useCallback(\r\n    (cardId: string, toColumnId: string, newPosition: number) => {\r\n      store.moveCard(cardId, toColumnId, newPosition)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const getCard = useCallback(\r\n    (cardId: string) => {\r\n      return store.getCard(cardId)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  const getCardsByColumn = useCallback(\r\n    (columnId: string) => {\r\n      return store.getCardsByColumn(columnId)\r\n    },\r\n    [store]\r\n  )\r\n\r\n  return {\r\n    // State\r\n    board,\r\n    columns,\r\n    cards,\r\n\r\n    // Board operations\r\n    updateBoard,\r\n\r\n    // Column operations\r\n    addColumn,\r\n    updateColumn,\r\n    deleteColumn,\r\n    getColumn,\r\n\r\n    // Card operations\r\n    addCard,\r\n    updateCard,\r\n    deleteCard,\r\n    moveCard,\r\n    getCard,\r\n    getCardsByColumn,\r\n  }\r\n}\r\n","/**\r\n * useFilteredCards - Hook for filtering cards with memoization\r\n * @module adapters/react\r\n */\r\n\r\nimport { useMemo } from 'react'\r\nimport { useBoard } from './useBoard'\r\nimport type { Card, Priority, CardStatus } from '@libxai/core'\r\n\r\n/**\r\n * Filter options for cards\r\n */\r\nexport interface CardFilters {\r\n  searchQuery?: string\r\n  priorities?: Priority[]\r\n  statuses?: CardStatus[]\r\n  assignedUserIds?: string[]\r\n  labels?: string[]\r\n  columnIds?: string[]\r\n  isOverdue?: boolean\r\n}\r\n\r\n/**\r\n * Hook for filtered and sorted cards\r\n *\r\n * Automatically memoizes results for performance\r\n *\r\n * @param filters - Filter criteria\r\n * @returns Filtered cards array\r\n *\r\n * @example\r\n * ```tsx\r\n * function CardList() {\r\n *   const filteredCards = useFilteredCards({\r\n *     priorities: ['HIGH', 'URGENT'],\r\n *     isOverdue: true\r\n *   })\r\n *\r\n *   return <div>{filteredCards.length} urgent overdue tasks</div>\r\n * }\r\n * ```\r\n */\r\nexport function useFilteredCards(filters?: CardFilters): Card[] {\r\n  const { cards } = useBoard()\r\n\r\n  return useMemo(() => {\r\n    if (!filters) return cards\r\n\r\n    return cards.filter(card => {\r\n      // Search query (title + description)\r\n      if (filters.searchQuery) {\r\n        const query = filters.searchQuery.toLowerCase()\r\n        const matchesTitle = card.title.toLowerCase().includes(query)\r\n        const matchesDesc = card.description?.toLowerCase().includes(query)\r\n        if (!matchesTitle && !matchesDesc) return false\r\n      }\r\n\r\n      // Priority filter\r\n      if (filters.priorities && filters.priorities.length > 0) {\r\n        if (!card.priority || !filters.priorities.includes(card.priority)) {\r\n          return false\r\n        }\r\n      }\r\n\r\n      // Status filter\r\n      if (filters.statuses && filters.statuses.length > 0) {\r\n        if (!card.status || !filters.statuses.includes(card.status)) {\r\n          return false\r\n        }\r\n      }\r\n\r\n      // Assigned users filter\r\n      if (filters.assignedUserIds && filters.assignedUserIds.length > 0) {\r\n        const hasAssignedUser = filters.assignedUserIds.some(userId =>\r\n          card.isAssignedTo(userId)\r\n        )\r\n        if (!hasAssignedUser) return false\r\n      }\r\n\r\n      // Labels filter\r\n      if (filters.labels && filters.labels.length > 0) {\r\n        const hasLabel = filters.labels.some(label => card.hasLabel(label))\r\n        if (!hasLabel) return false\r\n      }\r\n\r\n      // Column filter\r\n      if (filters.columnIds && filters.columnIds.length > 0) {\r\n        if (!filters.columnIds.includes(card.columnId)) {\r\n          return false\r\n        }\r\n      }\r\n\r\n      // Overdue filter\r\n      if (filters.isOverdue !== undefined) {\r\n        if (filters.isOverdue !== card.isOverdue()) {\r\n          return false\r\n        }\r\n      }\r\n\r\n      return true\r\n    })\r\n  }, [cards, filters])\r\n}\r\n\r\n/**\r\n * Hook for sorted cards\r\n *\r\n * @param sortBy - Sort field\r\n * @param sortOrder - Sort order ('asc' | 'desc')\r\n * @returns Sorted cards array\r\n */\r\nexport function useSortedCards(\r\n  sortBy: 'title' | 'priority' | 'createdAt' | 'updatedAt' | 'position' = 'position',\r\n  sortOrder: 'asc' | 'desc' = 'asc'\r\n): Card[] {\r\n  const { cards } = useBoard()\r\n\r\n  return useMemo(() => {\r\n    const sorted = [...cards].sort((a, b) => {\r\n      let comparison = 0\r\n\r\n      switch (sortBy) {\r\n        case 'title':\r\n          comparison = a.title.localeCompare(b.title)\r\n          break\r\n        case 'priority': {\r\n          const priorityOrder = { URGENT: 4, HIGH: 3, MEDIUM: 2, LOW: 1 }\r\n          const aPriority = a.priority ? priorityOrder[a.priority] : 0\r\n          const bPriority = b.priority ? priorityOrder[b.priority] : 0\r\n          comparison = aPriority - bPriority\r\n          break\r\n        }\r\n        case 'createdAt':\r\n          comparison = a.createdAt.getTime() - b.createdAt.getTime()\r\n          break\r\n        case 'updatedAt':\r\n          comparison = a.updatedAt.getTime() - b.updatedAt.getTime()\r\n          break\r\n        case 'position':\r\n          comparison = a.position - b.position\r\n          break\r\n      }\r\n\r\n      return sortOrder === 'asc' ? comparison : -comparison\r\n    })\r\n\r\n    return sorted\r\n  }, [cards, sortBy, sortOrder])\r\n}\r\n","/**\r\n * Plugin Manager Implementation\r\n * Manages plugin lifecycle and execution\r\n * @module plugins/PluginManager\r\n */\r\n\r\nimport type { Plugin, PluginContext, IPluginManager } from './types'\r\nimport { logger } from '../utils/logger'\r\n\r\nexport class PluginManager implements IPluginManager {\r\n  private plugins: Map<string, Plugin> = new Map()\r\n  private enabled: Set<string> = new Set()\r\n  private config: Map<string, Record<string, any>> = new Map()\r\n  private context: PluginContext | null = null\r\n  private pluginLogger = logger.child('PluginManager')\r\n\r\n  /**\r\n   * Set plugin context (board state, callbacks, etc.)\r\n   */\r\n  setContext(context: PluginContext): void {\r\n    this.context = context\r\n  }\r\n\r\n  /**\r\n   * Register a plugin\r\n   */\r\n  register(plugin: Plugin): void {\r\n    // Validate plugin\r\n    if (!plugin.id || !plugin.name || !plugin.version) {\r\n      throw new Error('Plugin must have id, name, and version')\r\n    }\r\n\r\n    if (this.plugins.has(plugin.id)) {\r\n      this.pluginLogger.warn(`Plugin ${plugin.id} is already registered, overwriting...`)\r\n    }\r\n\r\n    // Check dependencies\r\n    if (plugin.dependencies) {\r\n      for (const depId of plugin.dependencies) {\r\n        if (!this.plugins.has(depId)) {\r\n          throw new Error(`Plugin ${plugin.id} depends on ${depId} which is not registered`)\r\n        }\r\n      }\r\n    }\r\n\r\n    // Store plugin\r\n    this.plugins.set(plugin.id, plugin)\r\n\r\n    // Set default config\r\n    if (plugin.defaultConfig) {\r\n      this.config.set(plugin.id, { ...plugin.defaultConfig })\r\n    }\r\n\r\n    // Enable by default\r\n    this.enabled.add(plugin.id)\r\n\r\n    this.pluginLogger.info(`Plugin registered: ${plugin.name} v${plugin.version}`)\r\n\r\n    // Call onInit hook\r\n    if (plugin.onInit && this.context) {\r\n      Promise.resolve(plugin.onInit(this.context)).catch((error) => {\r\n        this.pluginLogger.error(`Failed to initialize plugin ${plugin.id}`, error, {\r\n          plugin: plugin.id,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unregister a plugin\r\n   */\r\n  unregister(pluginId: string): void {\r\n    const plugin = this.plugins.get(pluginId)\r\n\r\n    if (!plugin) {\r\n      this.pluginLogger.warn(`Plugin ${pluginId} is not registered`)\r\n      return\r\n    }\r\n\r\n    // Call onDestroy hook\r\n    if (plugin.onDestroy) {\r\n      Promise.resolve(plugin.onDestroy()).catch((error) => {\r\n        this.pluginLogger.error(`Failed to destroy plugin ${pluginId}`, error)\r\n      })\r\n    }\r\n\r\n    this.plugins.delete(pluginId)\r\n    this.enabled.delete(pluginId)\r\n    this.config.delete(pluginId)\r\n\r\n    this.pluginLogger.info(`Plugin unregistered: ${plugin.name}`)\r\n  }\r\n\r\n  /**\r\n   * Get registered plugin\r\n   */\r\n  getPlugin(pluginId: string): Plugin | undefined {\r\n    return this.plugins.get(pluginId)\r\n  }\r\n\r\n  /**\r\n   * Get all registered plugins\r\n   */\r\n  getPlugins(): Plugin[] {\r\n    return Array.from(this.plugins.values())\r\n  }\r\n\r\n  /**\r\n   * Check if plugin is registered\r\n   */\r\n  hasPlugin(pluginId: string): boolean {\r\n    return this.plugins.has(pluginId)\r\n  }\r\n\r\n  /**\r\n   * Enable/disable plugin\r\n   */\r\n  setEnabled(pluginId: string, enabled: boolean): void {\r\n    if (!this.plugins.has(pluginId)) {\r\n      throw new Error(`Plugin ${pluginId} is not registered`)\r\n    }\r\n\r\n    if (enabled) {\r\n      this.enabled.add(pluginId)\r\n      this.pluginLogger.info(`Plugin enabled: ${pluginId}`)\r\n    } else {\r\n      this.enabled.delete(pluginId)\r\n      this.pluginLogger.info(`Plugin disabled: ${pluginId}`)\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if plugin is enabled\r\n   */\r\n  isEnabled(pluginId: string): boolean {\r\n    return this.enabled.has(pluginId)\r\n  }\r\n\r\n  /**\r\n   * Get plugin config\r\n   */\r\n  getConfig<T = any>(pluginId: string, key: string): T | undefined {\r\n    const config = this.config.get(pluginId)\r\n    return config?.[key] as T | undefined\r\n  }\r\n\r\n  /**\r\n   * Set plugin config\r\n   */\r\n  setConfig(pluginId: string, key: string, value: any): void {\r\n    if (!this.config.has(pluginId)) {\r\n      this.config.set(pluginId, {})\r\n    }\r\n\r\n    const config = this.config.get(pluginId)!\r\n    config[key] = value\r\n\r\n    this.pluginLogger.debug(`Plugin config set: ${pluginId}.${key}`, { value })\r\n  }\r\n\r\n  /**\r\n   * Execute plugin hooks\r\n   */\r\n  async executeHook<T = any>(\r\n    hookName: keyof Plugin,\r\n    args: any[],\r\n    defaultValue?: T\r\n  ): Promise<T | undefined> {\r\n    let result: T | undefined = defaultValue\r\n\r\n    for (const plugin of this.plugins.values()) {\r\n      if (!this.enabled.has(plugin.id)) {\r\n        continue\r\n      }\r\n\r\n      const hook = plugin[hookName] as any\r\n\r\n      if (typeof hook === 'function') {\r\n        try {\r\n          const hookResult = await Promise.resolve(hook.apply(plugin, args))\r\n\r\n          // For transform hooks, use the result as input for next plugin\r\n          if (hookResult !== undefined) {\r\n            result = hookResult\r\n            args[0] = hookResult // Update first argument for next plugin\r\n          }\r\n        } catch (error) {\r\n          this.pluginLogger.error(`Plugin hook failed: ${plugin.id}.${hookName}`, error as Error, {\r\n            plugin: plugin.id,\r\n            hook: hookName,\r\n          })\r\n        }\r\n      }\r\n    }\r\n\r\n    return result\r\n  }\r\n\r\n  /**\r\n   * Execute plugin hooks in parallel\r\n   */\r\n  async executeHookParallel(hookName: keyof Plugin, args: any[]): Promise<void> {\r\n    const promises: Promise<any>[] = []\r\n\r\n    for (const plugin of this.plugins.values()) {\r\n      if (!this.enabled.has(plugin.id)) {\r\n        continue\r\n      }\r\n\r\n      const hook = plugin[hookName] as any\r\n\r\n      if (typeof hook === 'function') {\r\n        promises.push(\r\n          Promise.resolve(hook.apply(plugin, args)).catch((error) => {\r\n            this.pluginLogger.error(`Plugin hook failed: ${plugin.id}.${hookName}`, error as Error, {\r\n              plugin: plugin.id,\r\n              hook: hookName,\r\n            })\r\n          })\r\n        )\r\n      }\r\n    }\r\n\r\n    await Promise.all(promises)\r\n  }\r\n}\r\n\r\n/**\r\n * Global plugin manager instance\r\n */\r\nexport const pluginManager = new PluginManager()\r\n","/**\r\n * VirtualList - Virtual scrolling component for large lists\r\n * @module components/VirtualList\r\n */\r\n\r\nimport React, { useRef } from 'react'\r\nimport { useVirtualizer } from '@tanstack/react-virtual'\r\n\r\nexport interface VirtualListProps<T> {\r\n  /** Array of items to render */\r\n  items: T[]\r\n  /** Height of the scrollable container in pixels */\r\n  height: number | string\r\n  /** Estimated size of each item in pixels */\r\n  estimateSize: number\r\n  /** Render function for each item */\r\n  renderItem: (item: T, index: number) => React.ReactNode\r\n  /** Optional className for the container */\r\n  className?: string\r\n  /** Overscan count (number of items to render outside viewport) */\r\n  overscan?: number\r\n  /** Enable horizontal scrolling instead of vertical */\r\n  horizontal?: boolean\r\n  /** Optional gap between items in pixels */\r\n  gap?: number\r\n  /** Optional key extractor function */\r\n  getItemKey?: (item: T, index: number) => string | number\r\n}\r\n\r\n/**\r\n * VirtualList component for efficient rendering of large lists\r\n *\r\n * Uses @tanstack/react-virtual for windowing/virtualization\r\n *\r\n * @example\r\n * ```tsx\r\n * <VirtualList\r\n *   items={cards}\r\n *   height={600}\r\n *   estimateSize={100}\r\n *   renderItem={(card) => <CardComponent card={card} />}\r\n *   getItemKey={(card) => card.id}\r\n * />\r\n * ```\r\n */\r\nexport function VirtualList<T>({\r\n  items,\r\n  height,\r\n  estimateSize,\r\n  renderItem,\r\n  className = '',\r\n  overscan = 5,\r\n  horizontal = false,\r\n  gap = 0,\r\n  getItemKey,\r\n}: VirtualListProps<T>) {\r\n  const parentRef = useRef<HTMLDivElement>(null)\r\n\r\n  const virtualizer = useVirtualizer({\r\n    count: items.length,\r\n    getScrollElement: () => parentRef.current,\r\n    estimateSize: () => estimateSize,\r\n    overscan,\r\n    horizontal,\r\n    gap,\r\n  })\r\n\r\n  const virtualItems = virtualizer.getVirtualItems()\r\n\r\n  const containerStyle: React.CSSProperties = {\r\n    height: typeof height === 'number' ? `${height}px` : height,\r\n    width: '100%',\r\n    overflow: 'auto',\r\n    position: 'relative',\r\n  }\r\n\r\n  const innerStyle: React.CSSProperties = horizontal\r\n    ? {\r\n        width: `${virtualizer.getTotalSize()}px`,\r\n        height: '100%',\r\n        position: 'relative',\r\n      }\r\n    : {\r\n        height: `${virtualizer.getTotalSize()}px`,\r\n        width: '100%',\r\n        position: 'relative',\r\n      }\r\n\r\n  return (\r\n    <div ref={parentRef} style={containerStyle} className={className}>\r\n      <div style={innerStyle}>\r\n        {virtualItems.map((virtualItem) => {\r\n          const item = items[virtualItem.index]\r\n          if (!item) return null\r\n          const key = getItemKey ? getItemKey(item, virtualItem.index) : virtualItem.index\r\n\r\n          const itemStyle: React.CSSProperties = {\r\n            position: 'absolute',\r\n            top: horizontal ? 0 : virtualItem.start,\r\n            left: horizontal ? virtualItem.start : 0,\r\n            width: horizontal ? virtualItem.size : '100%',\r\n            height: horizontal ? '100%' : virtualItem.size,\r\n          }\r\n\r\n          return (\r\n            <div key={key} style={itemStyle} data-index={virtualItem.index}>\r\n              {renderItem(item, virtualItem.index)}\r\n            </div>\r\n          )\r\n        })}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\n/**\r\n * Hook to access virtualizer instance for advanced use cases\r\n */\r\nexport function useVirtualList<T>(options: {\r\n  items: T[]\r\n  scrollElement: HTMLElement | null\r\n  estimateSize: number\r\n  overscan?: number\r\n  horizontal?: boolean\r\n  gap?: number\r\n}) {\r\n  return useVirtualizer({\r\n    count: options.items.length,\r\n    getScrollElement: () => options.scrollElement,\r\n    estimateSize: () => options.estimateSize,\r\n    overscan: options.overscan ?? 5,\r\n    horizontal: options.horizontal ?? false,\r\n    gap: options.gap ?? 0,\r\n  })\r\n}\r\n","/**\r\n * VirtualGrid - 2D virtual scrolling component for grid layouts\r\n * @module components/VirtualGrid\r\n */\r\n\r\nimport React, { useRef } from 'react'\r\nimport { useVirtualizer } from '@tanstack/react-virtual'\r\n\r\nexport interface VirtualGridProps<T> {\r\n  /** Array of items to render */\r\n  items: T[]\r\n  /** Height of the scrollable container in pixels */\r\n  height: number | string\r\n  /** Width of the scrollable container in pixels */\r\n  width?: number | string\r\n  /** Estimated width of each column in pixels */\r\n  estimateColumnWidth: number\r\n  /** Render function for each column */\r\n  renderColumn: (item: T, index: number) => React.ReactNode\r\n  /** Optional className for the container */\r\n  className?: string\r\n  /** Overscan count (number of columns to render outside viewport) */\r\n  overscan?: number\r\n  /** Optional gap between columns in pixels */\r\n  gap?: number\r\n  /** Optional key extractor function */\r\n  getItemKey?: (item: T, index: number) => string | number\r\n  /** Enable horizontal scrolling only */\r\n  horizontal?: boolean\r\n}\r\n\r\n/**\r\n * VirtualGrid component for efficient rendering of large horizontal lists/grids\r\n *\r\n * Optimized for Kanban boards with many columns\r\n *\r\n * @example\r\n * ```tsx\r\n * <VirtualGrid\r\n *   items={columns}\r\n *   height=\"100%\"\r\n *   estimateColumnWidth={320}\r\n *   renderColumn={(column) => <ColumnComponent column={column} />}\r\n *   getItemKey={(column) => column.id}\r\n * />\r\n * ```\r\n */\r\nexport function VirtualGrid<T>({\r\n  items,\r\n  height,\r\n  width = '100%',\r\n  estimateColumnWidth,\r\n  renderColumn,\r\n  className = '',\r\n  overscan = 3,\r\n  gap = 16,\r\n  getItemKey,\r\n  horizontal = true,\r\n}: VirtualGridProps<T>) {\r\n  const parentRef = useRef<HTMLDivElement>(null)\r\n\r\n  const columnVirtualizer = useVirtualizer({\r\n    horizontal,\r\n    count: items.length,\r\n    getScrollElement: () => parentRef.current,\r\n    estimateSize: () => estimateColumnWidth,\r\n    overscan,\r\n    gap,\r\n  })\r\n\r\n  const virtualColumns = columnVirtualizer.getVirtualItems()\r\n\r\n  const containerStyle: React.CSSProperties = {\r\n    height: typeof height === 'number' ? `${height}px` : height,\r\n    width: typeof width === 'number' ? `${width}px` : width,\r\n    overflow: 'auto',\r\n    position: 'relative',\r\n  }\r\n\r\n  const innerStyle: React.CSSProperties = {\r\n    width: `${columnVirtualizer.getTotalSize()}px`,\r\n    height: '100%',\r\n    position: 'relative',\r\n  }\r\n\r\n  return (\r\n    <div ref={parentRef} style={containerStyle} className={className}>\r\n      <div style={innerStyle}>\r\n        {virtualColumns.map((virtualColumn) => {\r\n          const item = items[virtualColumn.index]\r\n          if (!item) return null\r\n          const key = getItemKey ? getItemKey(item, virtualColumn.index) : virtualColumn.index\r\n\r\n          const columnStyle: React.CSSProperties = {\r\n            position: 'absolute',\r\n            top: 0,\r\n            left: virtualColumn.start,\r\n            width: virtualColumn.size,\r\n            height: '100%',\r\n          }\r\n\r\n          return (\r\n            <div key={key} style={columnStyle} data-index={virtualColumn.index}>\r\n              {renderColumn(item, virtualColumn.index)}\r\n            </div>\r\n          )\r\n        })}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\n/**\r\n * Hook for advanced 2D virtualization with both rows and columns\r\n */\r\nexport function useVirtualGrid<T>(options: {\r\n  items: T[]\r\n  scrollElement: HTMLElement | null\r\n  estimateColumnWidth: number\r\n  estimateRowHeight?: number\r\n  overscan?: number\r\n  gap?: number\r\n}) {\r\n  const columnVirtualizer = useVirtualizer({\r\n    horizontal: true,\r\n    count: options.items.length,\r\n    getScrollElement: () => options.scrollElement,\r\n    estimateSize: () => options.estimateColumnWidth,\r\n    overscan: options.overscan ?? 3,\r\n    gap: options.gap ?? 0,\r\n  })\r\n\r\n  return {\r\n    columnVirtualizer,\r\n    virtualColumns: columnVirtualizer.getVirtualItems(),\r\n    totalWidth: columnVirtualizer.getTotalSize(),\r\n  }\r\n}\r\n\r\n/**\r\n * Utility to determine if grid should use virtualization\r\n */\r\nexport function shouldVirtualizeGrid(columnCount: number, threshold = 10): boolean {\r\n  return columnCount > threshold\r\n}\r\n","/**\r\n * Design Tokens - Centralized design system tokens\r\n * @module tokens/design-tokens\r\n */\r\n\r\n/**\r\n * Spacing tokens (in pixels)\r\n */\r\nexport const spacing = {\r\n  none: 0,\r\n  xs: 4,\r\n  sm: 8,\r\n  md: 12,\r\n  lg: 16,\r\n  xl: 20,\r\n  '2xl': 24,\r\n  '3xl': 32,\r\n  '4xl': 40,\r\n  '5xl': 48,\r\n  '6xl': 64,\r\n} as const\r\n\r\n/**\r\n * Border radius tokens (in pixels)\r\n */\r\nexport const borderRadius = {\r\n  none: 0,\r\n  sm: 4,\r\n  md: 8,\r\n  lg: 12,\r\n  xl: 16,\r\n  '2xl': 20,\r\n  full: 9999,\r\n} as const\r\n\r\n/**\r\n * Font size tokens (in pixels)\r\n */\r\nexport const fontSize = {\r\n  xs: 12,\r\n  sm: 14,\r\n  base: 16,\r\n  lg: 18,\r\n  xl: 20,\r\n  '2xl': 24,\r\n  '3xl': 30,\r\n  '4xl': 36,\r\n  '5xl': 48,\r\n} as const\r\n\r\n/**\r\n * Font weight tokens\r\n */\r\nexport const fontWeight = {\r\n  light: 300,\r\n  normal: 400,\r\n  medium: 500,\r\n  semibold: 600,\r\n  bold: 700,\r\n  extrabold: 800,\r\n} as const\r\n\r\n/**\r\n * Line height tokens\r\n */\r\nexport const lineHeight = {\r\n  none: 1,\r\n  tight: 1.25,\r\n  snug: 1.375,\r\n  normal: 1.5,\r\n  relaxed: 1.625,\r\n  loose: 2,\r\n} as const\r\n\r\n/**\r\n * Z-index layers\r\n */\r\nexport const zIndex = {\r\n  base: 0,\r\n  dropdown: 1000,\r\n  sticky: 1020,\r\n  fixed: 1030,\r\n  modalBackdrop: 1040,\r\n  modal: 1050,\r\n  popover: 1060,\r\n  tooltip: 1070,\r\n} as const\r\n\r\n/**\r\n * Transition durations (in milliseconds)\r\n */\r\nexport const duration = {\r\n  instant: 0,\r\n  fastest: 75,\r\n  faster: 100,\r\n  fast: 150,\r\n  normal: 200,\r\n  slow: 300,\r\n  slower: 400,\r\n  slowest: 500,\r\n} as const\r\n\r\n/**\r\n * Transition timing functions\r\n */\r\nexport const easing = {\r\n  linear: 'linear',\r\n  ease: 'ease',\r\n  easeIn: 'ease-in',\r\n  easeOut: 'ease-out',\r\n  easeInOut: 'ease-in-out',\r\n  // Custom cubic-bezier\r\n  smooth: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\r\n  sharp: 'cubic-bezier(0.4, 0.0, 0.6, 1)',\r\n  bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\r\n} as const\r\n\r\n/**\r\n * Shadow tokens\r\n */\r\nexport const shadows = {\r\n  none: 'none',\r\n  sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\r\n  base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\r\n  md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\r\n  lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\r\n  xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\r\n  '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\r\n  inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',\r\n} as const\r\n\r\n/**\r\n * Opacity tokens\r\n */\r\nexport const opacity = {\r\n  0: 0,\r\n  5: 0.05,\r\n  10: 0.1,\r\n  20: 0.2,\r\n  30: 0.3,\r\n  40: 0.4,\r\n  50: 0.5,\r\n  60: 0.6,\r\n  70: 0.7,\r\n  80: 0.8,\r\n  90: 0.9,\r\n  100: 1,\r\n} as const\r\n\r\n/**\r\n * Kanban-specific tokens\r\n */\r\nexport const kanban = {\r\n  column: {\r\n    width: 320,\r\n    minWidth: 280,\r\n    maxWidth: 400,\r\n    gap: 16,\r\n    padding: 12,\r\n    headerHeight: 48,\r\n  },\r\n  card: {\r\n    minHeight: 80,\r\n    maxHeight: 400,\r\n    padding: 12,\r\n    gap: 8,\r\n  },\r\n  board: {\r\n    padding: 16,\r\n    gap: 16,\r\n  },\r\n} as const\r\n\r\n/**\r\n * Gantt-specific tokens\r\n */\r\nexport const gantt = {\r\n  timeline: {\r\n    headerHeight: 60,\r\n    rowHeight: 44,\r\n    minRowHeight: 32,\r\n    maxRowHeight: 80,\r\n    taskPadding: 4,\r\n    gridLineWidth: 1,\r\n  },\r\n  task: {\r\n    height: 28,\r\n    minHeight: 20,\r\n    maxHeight: 40,\r\n    borderRadius: 4,\r\n    padding: 6,\r\n  },\r\n  dependency: {\r\n    lineWidth: 2,\r\n    arrowSize: 8,\r\n  },\r\n  scale: {\r\n    day: {\r\n      columnWidth: 40,\r\n      minColumnWidth: 30,\r\n      maxColumnWidth: 60,\r\n    },\r\n    week: {\r\n      columnWidth: 80,\r\n      minColumnWidth: 60,\r\n      maxColumnWidth: 120,\r\n    },\r\n    month: {\r\n      columnWidth: 120,\r\n      minColumnWidth: 80,\r\n      maxColumnWidth: 200,\r\n    },\r\n    quarter: {\r\n      columnWidth: 200,\r\n      minColumnWidth: 150,\r\n      maxColumnWidth: 300,\r\n    },\r\n  },\r\n  milestone: {\r\n    size: 16,\r\n    rotation: 45, // degrees\r\n  },\r\n} as const\r\n\r\n/**\r\n * Combined design tokens\r\n */\r\nexport const designTokens = {\r\n  spacing,\r\n  borderRadius,\r\n  fontSize,\r\n  fontWeight,\r\n  lineHeight,\r\n  zIndex,\r\n  duration,\r\n  easing,\r\n  shadows,\r\n  opacity,\r\n  kanban,\r\n  gantt,\r\n} as const\r\n\r\n/**\r\n * Type helpers\r\n */\r\nexport type SpacingToken = keyof typeof spacing\r\nexport type BorderRadiusToken = keyof typeof borderRadius\r\nexport type FontSizeToken = keyof typeof fontSize\r\nexport type FontWeightToken = keyof typeof fontWeight\r\nexport type LineHeightToken = keyof typeof lineHeight\r\nexport type ZIndexToken = keyof typeof zIndex\r\nexport type DurationToken = keyof typeof duration\r\nexport type EasingToken = keyof typeof easing\r\nexport type ShadowToken = keyof typeof shadows\r\nexport type OpacityToken = keyof typeof opacity\r\n\r\n/**\r\n * Design token value types\r\n */\r\nexport type DesignTokens = typeof designTokens\r\nexport type TokenValue = string | number\r\n\r\n/**\r\n * Utility to get token value with fallback\r\n */\r\nexport function getToken<T extends TokenValue>(\r\n  tokens: Record<string, T>,\r\n  key: string,\r\n  fallback: T\r\n): T {\r\n  return tokens[key] ?? fallback\r\n}\r\n","/**\r\n * CSS Custom Properties Generator\r\n * Generates CSS variables from design tokens\r\n * @module tokens/css-generator\r\n */\r\n\r\nimport { designTokens } from './design-tokens'\r\nimport type { TokenValue } from './design-tokens'\r\n\r\n/**\r\n * Convert a nested object to flat CSS custom properties\r\n */\r\nfunction flattenTokens(\r\n  obj: Record<string, unknown>,\r\n  prefix = '',\r\n  result: Record<string, TokenValue> = {}\r\n): Record<string, TokenValue> {\r\n  for (const [key, value] of Object.entries(obj)) {\r\n    const newKey = prefix ? `${prefix}-${key}` : key\r\n\r\n    if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n      flattenTokens(value as Record<string, unknown>, newKey, result)\r\n    } else if (typeof value === 'string' || typeof value === 'number') {\r\n      result[newKey] = value\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n/**\r\n * Format token value for CSS\r\n */\r\nfunction formatCSSValue(value: TokenValue): string {\r\n  if (typeof value === 'number') {\r\n    // Check if it's likely a pixel value\r\n    if (value > 0 && value < 1000) {\r\n      return `${value}px`\r\n    }\r\n    return value.toString()\r\n  }\r\n  return value\r\n}\r\n\r\n/**\r\n * Generate CSS custom properties from design tokens\r\n */\r\nexport function generateCSSVariables(prefix = 'asakaa'): string {\r\n  const flatTokens = flattenTokens(designTokens)\r\n  const cssVars: string[] = []\r\n\r\n  for (const [key, value] of Object.entries(flatTokens)) {\r\n    const varName = `--${prefix}-${key}`\r\n    const varValue = formatCSSValue(value)\r\n    cssVars.push(`  ${varName}: ${varValue};`)\r\n  }\r\n\r\n  return `:root {\\n${cssVars.join('\\n')}\\n}`\r\n}\r\n\r\n/**\r\n * Generate CSS custom properties for a specific theme\r\n */\r\nexport interface ThemeColors {\r\n  // Background colors\r\n  background: {\r\n    primary: string\r\n    secondary: string\r\n    tertiary: string\r\n    card: string\r\n    hover: string\r\n    active: string\r\n  }\r\n  // Text colors\r\n  text: {\r\n    primary: string\r\n    secondary: string\r\n    tertiary: string\r\n    disabled: string\r\n    inverse: string\r\n  }\r\n  // Border colors\r\n  border: {\r\n    default: string\r\n    hover: string\r\n    focus: string\r\n    active: string\r\n  }\r\n  // Status colors\r\n  status: {\r\n    success: string\r\n    warning: string\r\n    error: string\r\n    info: string\r\n  }\r\n  // Priority colors\r\n  priority: {\r\n    low: string\r\n    medium: string\r\n    high: string\r\n    urgent: string\r\n  }\r\n  // Interactive colors\r\n  interactive: {\r\n    primary: string\r\n    primaryHover: string\r\n    primaryActive: string\r\n    secondary: string\r\n    secondaryHover: string\r\n    secondaryActive: string\r\n  }\r\n  // Gantt-specific colors\r\n  gantt: {\r\n    gridLine: string\r\n    todayLine: string\r\n    taskBackground: string\r\n    taskBorder: string\r\n    criticalPath: string\r\n    milestone: string\r\n    dependency: string\r\n    weekend: string\r\n  }\r\n}\r\n\r\n/**\r\n * Generate theme CSS variables\r\n */\r\nexport function generateThemeVariables(\r\n  theme: ThemeColors,\r\n  prefix = 'asakaa'\r\n): string {\r\n  const cssVars: string[] = []\r\n\r\n  // Flatten theme colors\r\n  const flatColors = flattenTokens(theme as unknown as Record<string, unknown>)\r\n\r\n  for (const [key, value] of Object.entries(flatColors)) {\r\n    const varName = `--${prefix}-color-${key}`\r\n    cssVars.push(`  ${varName}: ${value};`)\r\n  }\r\n\r\n  return `:root {\\n${cssVars.join('\\n')}\\n}`\r\n}\r\n\r\n/**\r\n * Dark theme colors\r\n */\r\nexport const darkTheme: ThemeColors = {\r\n  background: {\r\n    primary: '#1a1a1a',\r\n    secondary: '#2a2a2a',\r\n    tertiary: '#3a3a3a',\r\n    card: '#2d2d2d',\r\n    hover: '#353535',\r\n    active: '#404040',\r\n  },\r\n  text: {\r\n    primary: '#ffffff',\r\n    secondary: '#b0b0b0',\r\n    tertiary: '#808080',\r\n    disabled: '#606060',\r\n    inverse: '#1a1a1a',\r\n  },\r\n  border: {\r\n    default: '#404040',\r\n    hover: '#505050',\r\n    focus: '#0ea5e9',\r\n    active: '#0284c7',\r\n  },\r\n  status: {\r\n    success: '#22c55e',\r\n    warning: '#f59e0b',\r\n    error: '#ef4444',\r\n    info: '#3b82f6',\r\n  },\r\n  priority: {\r\n    low: '#6b7280',\r\n    medium: '#3b82f6',\r\n    high: '#f59e0b',\r\n    urgent: '#ef4444',\r\n  },\r\n  interactive: {\r\n    primary: '#0ea5e9',\r\n    primaryHover: '#0284c7',\r\n    primaryActive: '#0369a1',\r\n    secondary: '#6b7280',\r\n    secondaryHover: '#4b5563',\r\n    secondaryActive: '#374151',\r\n  },\r\n  gantt: {\r\n    gridLine: '#404040',\r\n    todayLine: '#0ea5e9',\r\n    taskBackground: '#3b82f6',\r\n    taskBorder: '#2563eb',\r\n    criticalPath: '#ef4444',\r\n    milestone: '#3b82f6',\r\n    dependency: '#6b7280',\r\n    weekend: '#2a2a2a',\r\n  },\r\n}\r\n\r\n/**\r\n * Light theme colors\r\n */\r\nexport const lightTheme: ThemeColors = {\r\n  background: {\r\n    primary: '#ffffff',\r\n    secondary: '#f9fafb',\r\n    tertiary: '#f3f4f6',\r\n    card: '#ffffff',\r\n    hover: '#f3f4f6',\r\n    active: '#e5e7eb',\r\n  },\r\n  text: {\r\n    primary: '#111827',\r\n    secondary: '#6b7280',\r\n    tertiary: '#9ca3af',\r\n    disabled: '#d1d5db',\r\n    inverse: '#ffffff',\r\n  },\r\n  border: {\r\n    default: '#e5e7eb',\r\n    hover: '#d1d5db',\r\n    focus: '#0ea5e9',\r\n    active: '#0284c7',\r\n  },\r\n  status: {\r\n    success: '#16a34a',\r\n    warning: '#d97706',\r\n    error: '#dc2626',\r\n    info: '#2563eb',\r\n  },\r\n  priority: {\r\n    low: '#9ca3af',\r\n    medium: '#3b82f6',\r\n    high: '#f59e0b',\r\n    urgent: '#ef4444',\r\n  },\r\n  interactive: {\r\n    primary: '#0ea5e9',\r\n    primaryHover: '#0284c7',\r\n    primaryActive: '#0369a1',\r\n    secondary: '#6b7280',\r\n    secondaryHover: '#4b5563',\r\n    secondaryActive: '#374151',\r\n  },\r\n  gantt: {\r\n    gridLine: '#e5e7eb',\r\n    todayLine: '#0ea5e9',\r\n    taskBackground: '#3b82f6',\r\n    taskBorder: '#2563eb',\r\n    criticalPath: '#ef4444',\r\n    milestone: '#3b82f6',\r\n    dependency: '#6b7280',\r\n    weekend: '#f9fafb',\r\n  },\r\n}\r\n\r\n/**\r\n * Neutral theme colors\r\n */\r\nexport const neutralTheme: ThemeColors = {\r\n  background: {\r\n    primary: '#18181b',\r\n    secondary: '#27272a',\r\n    tertiary: '#3f3f46',\r\n    card: '#27272a',\r\n    hover: '#3f3f46',\r\n    active: '#52525b',\r\n  },\r\n  text: {\r\n    primary: '#fafafa',\r\n    secondary: '#a1a1aa',\r\n    tertiary: '#71717a',\r\n    disabled: '#52525b',\r\n    inverse: '#18181b',\r\n  },\r\n  border: {\r\n    default: '#3f3f46',\r\n    hover: '#52525b',\r\n    focus: '#0ea5e9',\r\n    active: '#0284c7',\r\n  },\r\n  status: {\r\n    success: '#22c55e',\r\n    warning: '#f59e0b',\r\n    error: '#ef4444',\r\n    info: '#3b82f6',\r\n  },\r\n  priority: {\r\n    low: '#71717a',\r\n    medium: '#3b82f6',\r\n    high: '#f59e0b',\r\n    urgent: '#ef4444',\r\n  },\r\n  interactive: {\r\n    primary: '#0ea5e9',\r\n    primaryHover: '#0284c7',\r\n    primaryActive: '#0369a1',\r\n    secondary: '#71717a',\r\n    secondaryHover: '#52525b',\r\n    secondaryActive: '#3f3f46',\r\n  },\r\n  gantt: {\r\n    gridLine: '#3f3f46',\r\n    todayLine: '#0ea5e9',\r\n    taskBackground: '#3b82f6',\r\n    taskBorder: '#2563eb',\r\n    criticalPath: '#ef4444',\r\n    milestone: '#3b82f6',\r\n    dependency: '#71717a',\r\n    weekend: '#27272a',\r\n  },\r\n}\r\n\r\n/**\r\n * Generate complete CSS with all tokens and theme\r\n */\r\nexport function generateCompleteCSS(\r\n  theme: ThemeColors = darkTheme,\r\n  prefix = 'asakaa'\r\n): string {\r\n  const tokenVars = generateCSSVariables(prefix)\r\n  const themeVars = generateThemeVariables(theme, prefix)\r\n\r\n  return `${tokenVars}\\n\\n${themeVars}`\r\n}\r\n\r\n/**\r\n * Export CSS to file content\r\n */\r\nexport function exportTokensToCSS(): string {\r\n  return `/**\r\n * ASAKAA Design Tokens\r\n * Auto-generated from design-tokens.ts\r\n * Do not edit this file directly\r\n */\r\n\r\n${generateCompleteCSS(darkTheme)}\r\n\r\n/* Light theme */\r\n[data-theme=\"light\"] {\r\n${generateThemeVariables(lightTheme, 'asakaa')\r\n  .split('\\n')\r\n  .slice(1, -1)\r\n  .join('\\n')}\r\n}\r\n\r\n/* Neutral theme */\r\n[data-theme=\"neutral\"] {\r\n${generateThemeVariables(neutralTheme, 'asakaa')\r\n  .split('\\n')\r\n  .slice(1, -1)\r\n  .join('\\n')}\r\n}\r\n`\r\n}\r\n","/**\r\n * Theme Switcher Component\r\n * ASAKAA v0.5.0\r\n */\r\n\r\nimport { useTheme } from './ThemeProvider'\r\nimport type { ThemeName } from './types'\r\nimport './theme-switcher.css'\r\n\r\nexport interface ThemeSwitcherProps {\r\n  /** Show labels for each theme */\r\n  showLabels?: boolean\r\n  /** Compact mode (icon-only) */\r\n  compact?: boolean\r\n  /** Custom class name */\r\n  className?: string\r\n}\r\n\r\n// Theme Icon Components with explicit SVG\r\nconst ThemeIcon = ({ theme }: { theme: ThemeName }) => {\r\n  switch (theme) {\r\n    case 'dark':\r\n      return (\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n          <path d=\"M13.5 8.5C13.5 11.2614 11.2614 13.5 8.5 13.5C5.73858 13.5 3.5 11.2614 3.5 8.5C3.5 5.73858 5.73858 3.5 8.5 3.5C8.66667 3.5 8.83074 3.50926 8.99199 3.52734C8.10635 4.35233 7.5 5.53318 7.5 6.85C7.5 9.33579 9.49421 11.33 11.98 11.33C12.5933 11.33 13.1751 11.2075 13.7069 10.9844C13.5698 11.8951 13.2042 12.7349 12.6674 13.4367\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n        </svg>\r\n      )\r\n    case 'light':\r\n      return (\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n          <circle cx=\"8\" cy=\"8\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\r\n          <path d=\"M8 1V2M8 14V15M15 8H14M2 8H1M12.5 12.5L11.8 11.8M4.2 4.2L3.5 3.5M12.5 3.5L11.8 4.2M4.2 11.8L3.5 12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\r\n        </svg>\r\n      )\r\n    case 'neutral':\r\n      return (\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n          <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\r\n          <path d=\"M5 8L8 8L8 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\r\n        </svg>\r\n      )\r\n  }\r\n}\r\n\r\nexport function ThemeSwitcher({ showLabels = true, compact = false, className = '' }: ThemeSwitcherProps) {\r\n  const { theme: currentTheme, setTheme, themes } = useTheme()\r\n\r\n  return (\r\n    <div className={`theme-switcher ${compact ? 'theme-switcher--compact' : ''} ${className}`}>\r\n      {Object.entries(themes).map(([key, themeData]) => {\r\n        const themeName = key as ThemeName\r\n        const isActive = themeName === currentTheme\r\n\r\n        return (\r\n          <button\r\n            key={themeName}\r\n            onClick={() => setTheme(themeName)}\r\n            className={`theme-switcher__button ${isActive ? 'theme-switcher__button--active' : ''}`}\r\n            aria-label={`Switch to ${themeData.displayName} theme`}\r\n            aria-pressed={isActive}\r\n            title={themeData.displayName}\r\n          >\r\n            <span className=\"theme-switcher__icon\" aria-hidden=\"true\">\r\n              <ThemeIcon theme={themeName} />\r\n            </span>\r\n            {showLabels && !compact && <span className=\"theme-switcher__label\">{themeData.displayName}</span>}\r\n          </button>\r\n        )\r\n      })}\r\n    </div>\r\n  )\r\n}\r\n"]}