gantt-lib 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css","../src/components/TimeScaleHeader/TimeScaleHeader.css","../src/components/TaskRow/TaskRow.css","../src/components/TodayIndicator/TodayIndicator.css","../src/components/GridBackground/GridBackground.css","../src/components/DragGuideLines/DragGuideLines.css","../src/components/DependencyLines/DependencyLines.css","../src/components/GanttChart/GanttChart.css"],"sourcesContent":["/* Gantt Chart CSS Variables - User customizable theming */\n:root {\n /* Grid Colors */\n --gantt-grid-line-color: #e0e0e0;\n --gantt-cell-background: #ffffff;\n --gantt-row-hover-background: #f8f9fa;\n\n /* Dimensions */\n --gantt-row-height: 30px;\n --gantt-header-height: 40px;\n --gantt-day-width: 30px;\n\n /* Task Bar Styling */\n --gantt-task-bar-default-color: #3b82f6;\n --gantt-task-bar-text-color: #ffffff;\n --gantt-task-bar-border-radius: 4px;\n --gantt-task-bar-height: 24px;\n\n /* Today Indicator */\n --gantt-today-indicator-color: rgba(255, 0, 0, 0.2);\n --gantt-today-indicator-width: 2px;\n\n /* Calendar Grid - Weekend */\n --gantt-weekend-background: #fff9f8;\n --gantt-weekend-border: #fca5a5;\n\n /* Calendar Grid - Separators */\n --gantt-month-separator-width: 2px;\n --gantt-month-separator-color: #a1a1a1;\n --gantt-week-separator-width: 1px;\n --gantt-week-separator-color: #f3f4f6;\n --gantt-day-line-width: 1px;\n --gantt-day-line-color: #f3f4f6;\n\n /* Progress Bar Colors */\n --gantt-progress-color: rgba(0, 0, 0, 0.2);\n --gantt-progress-completed: #ffb800;\n --gantt-progress-accepted: #17c964;\n\n /* Dependency line colors */\n --gantt-dependency-line-color: rgba(0, 0, 55, 0.8);\n --gantt-dependency-cycle-color: #ef4444;\n}\n\n/* GanttChart Component Styles */\n.gantt-container {\n width: 100%;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n border: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n background-color: var(--gantt-cell-background, #ffffff);\n}\n\n.gantt-scrollContainer {\n overflow: auto;\n}\n\n.gantt-stickyHeader {\n position: sticky;\n top: 0;\n z-index: 10;\n background-color: var(--gantt-cell-background, #ffffff);\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n}\n\n.gantt-taskArea {\n position: relative;\n background-color: var(--gantt-cell-background, #ffffff);\n}\n\n/* TaskRow Component Styles */\n.gantt-tr-row {\n position: relative;\n width: 100%;\n border-bottom: 1px solid var(--gantt-grid-line-color);\n box-sizing: border-box;\n}\n\n.gantt-tr-row:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.gantt-tr-taskBar {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: var(--gantt-task-bar-border-radius);\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n box-sizing: border-box;\n white-space: nowrap;\n overflow: visible;\n cursor: grab;\n}\n\n.gantt-tr-taskBar:hover {\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.gantt-tr-taskBar.gantt-tr-dragging {\n cursor: grabbing;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n opacity: 1;\n transition: none !important;\n}\n\n.gantt-tr-taskName {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n\n.gantt-tr-taskDuration {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n margin-right: 4px;\n}\n\n.gantt-tr-taskNameHidden {\n visibility: hidden;\n}\n\n.gantt-tr-rightLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabelRight {\n position: static;\n margin-right: 0;\n}\n\n.gantt-tr-externalTaskName {\n font-size: 0.9rem;\n font-weight: 500;\n color: #00389f;\n white-space: nowrap;\n user-select: none;\n margin-left: 4px;\n}\n\n.gantt-tr-resizeHandle {\n position: absolute;\n top: 0;\n width: 8px;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.1);\n cursor: ew-resize;\n}\n\n.gantt-tr-resizeHandleLeft {\n left: 0;\n}\n\n.gantt-tr-resizeHandleRight {\n right: 0;\n}\n\n.gantt-tr-resizeZoneLeft {\n cursor: ew-resize;\n}\n\n.gantt-tr-resizeZoneRight {\n cursor: ew-resize;\n}\n\n.gantt-tr-taskContainer {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n}\n\n.gantt-tr-leftLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabel {\n font-size: 0.85rem;\n color: #666666;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n}\n\n.gantt-tr-dateLabelLeft {\n position: absolute;\n right: 100%;\n margin-right: 6px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n/* TimeScaleHeader Component Styles - Two-row header layout */\n.gantt-tsh-header {\n display: flex;\n flex-direction: column;\n background-color: var(--gantt-cell-background);\n border-bottom: var(--gantt-week-separator-width, 1px) solid var(--gantt-week-separator-color, #374151);\n box-sizing: border-box;\n}\n\n.gantt-tsh-monthRow {\n display: flex;\n border-bottom: var(--gantt-day-line-width, 1px) solid var(--gantt-day-line-color, #f3f4f6);\n align-items: center;\n}\n\n.gantt-tsh-monthCell {\n box-sizing: border-box;\n padding: 0.1rem 0.5rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n text-align: left;\n}\n\n.gantt-tsh-monthCell:first-child {\n border-left: none;\n}\n\n.gantt-tsh-dayRow {\n display: grid;\n box-sizing: border-box;\n}\n\n.gantt-tsh-dayCell {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.gantt-tsh-monthBoundary {\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n}\n\n.gantt-tsh-dayLabel {\n font-size: 0.75rem;\n font-weight: 500;\n color: #374151;\n}\n\n.gantt-tsh-weekendDay {\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-tsh-weekendDay .gantt-tsh-dayLabel {\n color: #dc2626;\n}\n\n.gantt-tsh-today {\n background-color: #dc2626;\n border-radius: 0 4px 4px 0;\n}\n\n.gantt-tsh-today .gantt-tsh-dayLabel {\n color: #ffffff;\n}\n\n/* GridBackground Component Styles */\n.gantt-gb-gridBackground {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 0;\n pointer-events: none;\n}\n\n.gantt-gb-weekendBlock {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-gb-gridLine {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n\n.gantt-gb-monthSeparator {\n width: var(--gantt-month-separator-width, 2px);\n background-color: var(--gantt-month-separator-color, #374151);\n}\n\n.gantt-gb-weekSeparator {\n width: var(--gantt-week-separator-width, 1px);\n background-color: var(--gantt-week-separator-color, #d1d5db);\n}\n\n.gantt-gb-dayLine {\n width: var(--gantt-day-line-width, 1px);\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n\n/* TodayIndicator Component Styles */\n.gantt-ti-indicator {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 5;\n pointer-events: none;\n}\n\n/* DragGuideLines Component Styles */\n.gantt-dgl-guideLine {\n position: absolute;\n top: 0;\n width: 2px;\n background-color: var(--gantt-drag-guide-line-color, #3b82f6);\n z-index: 20;\n pointer-events: none;\n opacity: 0.6;\n}","/**\n * TimeScaleHeader Component Styles - Two-row header layout\n */\n\n.gantt-tsh-header {\n display: flex;\n flex-direction: column;\n background-color: var(--gantt-cell-background);\n border-bottom: var(--gantt-week-separator-width, 1px) solid var(--gantt-week-separator-color, #374151);\n box-sizing: border-box;\n}\n\n/* Month row (top row) */\n.gantt-tsh-monthRow {\n display: flex;\n border-bottom: var(--gantt-day-line-width, 1px) solid var(--gantt-day-line-color, #f3f4f6);\n align-items: center;\n}\n\n.gantt-tsh-monthCell {\n box-sizing: border-box;\n padding: 0.1rem 0.5rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n text-align: left;\n}\n\n.gantt-tsh-monthCell:first-child {\n border-left: none;\n}\n\n/* Day row (bottom row) */\n.gantt-tsh-dayRow {\n display: grid;\n box-sizing: border-box;\n}\n\n.gantt-tsh-dayCell {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.gantt-tsh-monthBoundary {\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n}\n\n.gantt-tsh-dayLabel {\n font-size: 0.75rem;\n font-weight: 500;\n color: #374151;\n}\n\n.gantt-tsh-weekendDay {\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-tsh-weekendDay .gantt-tsh-dayLabel {\n color: #dc2626;\n}\n\n.gantt-tsh-today {\n background-color: #dc2626;\n border-radius: 0 4px 4px 0;\n}\n\n.gantt-tsh-today .gantt-tsh-dayLabel {\n color: #ffffff;\n}\n","/**\n * TaskRow Component Styles\n */\n\n.gantt-tr-row {\n position: relative;\n width: 100%;\n border-bottom: 1px solid var(--gantt-grid-line-color);\n box-sizing: border-box;\n}\n\n.gantt-tr-row:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.gantt-tr-taskBar {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: var(--gantt-task-bar-border-radius);\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n box-sizing: border-box;\n white-space: nowrap;\n overflow: hidden;\n /* transition: box-shadow 0.15s ease; */\n cursor: grab;\n}\n\n/**\n * Hover state - provides smooth visual feedback\n * Transition disabled during drag (see .gantt-tr-taskBar.gantt-tr-dragging)\n */\n.gantt-tr-taskBar:hover {\n /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); */\n}\n\n/**\n * Dragging state - disables all transitions for performance\n *\n * CRITICAL: transition: none !important is required to override the\n * default box-shadow transition on .gantt-tr-taskBar. Without this, CSS transitions\n * during drag cause lag/ghosting and break the 60fps performance target.\n *\n * Per research anti-pattern: \"Using CSS transitions during drag causes lag/ghosting.\"\n */\n.gantt-tr-taskBar.gantt-tr-dragging {\n cursor: grabbing;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n opacity: 1;\n transition: none !important;\n}\n\n.gantt-tr-taskDuration {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n margin-right: 4px;\n}\n\n.gantt-tr-rightLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabelRight {\n position: static;\n margin-right: 0;\n}\n\n.gantt-tr-externalTaskName {\n font-size: 0.9rem;\n font-weight: 500;\n color: #00389f;\n white-space: nowrap;\n user-select: none;\n margin-left: 4px;\n}\n\n.gantt-tr-resizeHandle {\n position: absolute;\n top: 0;\n width: 8px;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.1);\n cursor: ew-resize;\n pointer-events: auto;\n z-index: 10;\n /* z-index requires a positioning context; position: absolute is set here.\n Do NOT add position: relative via a shared selector - that would override\n this rule and break the absolute positioning at bar edges. */\n}\n\n.gantt-tr-resizeHandleLeft {\n left: 0;\n}\n\n.gantt-tr-resizeHandleRight {\n right: 0;\n}\n\n.gantt-tr-resizeZoneLeft {\n cursor: ew-resize;\n}\n\n.gantt-tr-resizeZoneRight {\n cursor: ew-resize;\n}\n\n.gantt-tr-taskContainer {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n}\n\n.gantt-tr-leftLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabel {\n font-size: 0.85rem;\n color: #666666;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n}\n\n.gantt-tr-dateLabelLeft {\n position: absolute;\n right: 100%;\n margin-right: 6px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n/* Progress bar overlay */\n.gantt-tr-progressBar {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 1;\n pointer-events: none;\n border-radius: var(--gantt-task-bar-border-radius) 0 0 var(--gantt-task-bar-border-radius);\n transition: width 0.3s ease;\n}\n\n/* Ensure text stays above progress bar.\n NOTE: .gantt-tr-resizeHandle is intentionally excluded here because it already\n uses position: absolute with z-index: 10, which places it above the progress bar.\n Adding position: relative here would override position: absolute and break the\n absolute positioning that anchors handles to the bar edges. */\n.gantt-tr-taskDuration {\n position: relative;\n z-index: 2;\n}\n\n/* Disable transition during drag */\n.gantt-tr-taskBar.gantt-tr-dragging .gantt-tr-progressBar {\n transition: none !important;\n}\n\n/* Progress text inside task bar */\n.gantt-tr-progressText {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n margin-left: 4px;\n position: relative;\n z-index: 2;\n}\n\n/* Progress text outside task bar (before task name) */\n.gantt-tr-externalProgress {\n font-size: 0.85rem;\n font-weight: 500;\n color: #666666;\n white-space: nowrap;\n margin-right: 4px;\n margin-left: 4px;\n}","/**\n * TodayIndicator Component Styles\n */\n\n.gantt-ti-indicator {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 5;\n pointer-events: none;\n}\n",".gantt-gb-gridBackground {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 0;\n pointer-events: none;\n}\n\n.gantt-gb-weekendBlock {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-gb-gridLine {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n\n.gantt-gb-monthSeparator {\n width: var(--gantt-month-separator-width, 2px);\n background-color: var(--gantt-month-separator-color, #374151);\n}\n\n.gantt-gb-weekSeparator {\n width: var(--gantt-week-separator-width, 1px);\n background-color: var(--gantt-week-separator-color, #d1d5db);\n}\n\n.gantt-gb-dayLine {\n width: var(--gantt-day-line-width, 1px);\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n",".gantt-dgl-guideLine {\n position: absolute;\n top: 0;\n width: 2px;\n background-color: var(--gantt-drag-guide-line-color, #3b82f6);\n z-index: 20;\n pointer-events: none;\n opacity: 0.6;\n}\n","/* SVG overlay for dependency lines */\n.gantt-dependencies-svg {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n /* Allow clicks to pass through to task bars */\n overflow: visible;\n}\n\n/* Dependency line path */\n.gantt-dependency-path {\n fill: none;\n stroke: var(--gantt-dependency-line-color, #666666);\n stroke-width: 1;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n/* Circular dependency highlighting */\n.gantt-dependency-cycle {\n stroke: var(--gantt-dependency-cycle-color, #ef4444);\n}\n\n/* Arrow markers */\n.gantt-dependency-arrow polygon {\n fill: var(--gantt-dependency-line-color, #666666);\n}\n\n.gantt-dependency-arrow-cycle polygon {\n fill: var(--gantt-dependency-cycle-color, #ef4444);\n}\n\n/* Lag label styling */\n.gantt-dependency-lag-label {\n font-size: 10px;\n font-weight: 500;\n pointer-events: none;\n user-select: none;\n opacity: 0.85;\n}",".gantt-container {\n width: 100%;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n border: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n background-color: var(--gantt-cell-background, #ffffff);\n}\n\n.gantt-scrollContainer {\n overflow: auto;\n}\n\n.gantt-stickyHeader {\n position: sticky;\n top: 0;\n z-index: 10;\n background-color: var(--gantt-cell-background, #ffffff);\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n}\n\n.gantt-taskArea {\n position: relative;\n background-color: var(--gantt-cell-background, #ffffff);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/styles.css","../src/components/TimeScaleHeader/TimeScaleHeader.css","../src/components/TaskRow/TaskRow.css","../src/components/TodayIndicator/TodayIndicator.css","../src/components/GridBackground/GridBackground.css","../src/components/DragGuideLines/DragGuideLines.css","../src/components/DependencyLines/DependencyLines.css","../src/components/GanttChart/GanttChart.css"],"sourcesContent":["/* Gantt Chart CSS Variables - User customizable theming */\n:root {\n /* Grid Colors */\n --gantt-grid-line-color: #e0e0e0;\n --gantt-cell-background: #ffffff;\n --gantt-row-hover-background: #f8f9fa;\n\n /* Dimensions */\n --gantt-row-height: 30px;\n --gantt-header-height: 40px;\n --gantt-day-width: 30px;\n\n /* Task Bar Styling */\n --gantt-task-bar-default-color: #3b82f6;\n --gantt-task-bar-text-color: #ffffff;\n --gantt-task-bar-border-radius: 4px;\n --gantt-task-bar-height: 24px;\n\n /* Today Indicator */\n --gantt-today-indicator-color: rgba(255, 0, 0, 0.2);\n --gantt-today-indicator-width: 2px;\n\n /* Calendar Grid - Weekend */\n --gantt-weekend-background: #fff9f8;\n --gantt-weekend-border: #fca5a5;\n\n /* Calendar Grid - Separators */\n --gantt-month-separator-width: 2px;\n --gantt-month-separator-color: #a1a1a1;\n --gantt-week-separator-width: 1px;\n --gantt-week-separator-color: #f3f4f6;\n --gantt-day-line-width: 1px;\n --gantt-day-line-color: #f3f4f6;\n\n /* Progress Bar Colors */\n --gantt-progress-color: rgba(0, 0, 0, 0.4);\n --gantt-progress-completed: #ffb800;\n --gantt-progress-accepted: #17c964;\n\n /* Dependency line colors */\n --gantt-dependency-line-color: rgba(0, 0, 55, 0.8);\n --gantt-dependency-cycle-color: #ef4444;\n}\n\n/* GanttChart Component Styles */\n.gantt-container {\n width: 100%;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n border: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n background-color: var(--gantt-cell-background, #ffffff);\n}\n\n.gantt-scrollContainer {\n overflow: auto;\n}\n\n.gantt-stickyHeader {\n position: sticky;\n top: 0;\n z-index: 10;\n background-color: var(--gantt-cell-background, #ffffff);\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n}\n\n.gantt-taskArea {\n position: relative;\n background-color: var(--gantt-cell-background, #ffffff);\n}\n\n/* TaskRow Component Styles */\n.gantt-tr-row {\n position: relative;\n width: 100%;\n border-bottom: 1px solid var(--gantt-grid-line-color);\n box-sizing: border-box;\n}\n\n.gantt-tr-row:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.gantt-tr-taskBar {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: var(--gantt-task-bar-border-radius);\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n box-sizing: border-box;\n white-space: nowrap;\n overflow: visible;\n cursor: grab;\n}\n\n.gantt-tr-taskBar:hover {\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.gantt-tr-taskBar.gantt-tr-dragging {\n cursor: grabbing;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n opacity: 1;\n transition: none !important;\n}\n\n.gantt-tr-taskName {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n\n.gantt-tr-taskDuration {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n margin-right: 4px;\n}\n\n.gantt-tr-taskNameHidden {\n visibility: hidden;\n}\n\n.gantt-tr-rightLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabelRight {\n position: static;\n margin-right: 0;\n}\n\n.gantt-tr-externalTaskName {\n font-size: 0.9rem;\n font-weight: 500;\n color: #00389f;\n white-space: nowrap;\n user-select: none;\n margin-left: 4px;\n}\n\n.gantt-tr-resizeHandle {\n position: absolute;\n top: 0;\n width: 8px;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.1);\n cursor: ew-resize;\n}\n\n.gantt-tr-resizeHandleLeft {\n left: 0;\n}\n\n.gantt-tr-resizeHandleRight {\n right: 0;\n}\n\n.gantt-tr-resizeZoneLeft {\n cursor: ew-resize;\n}\n\n.gantt-tr-resizeZoneRight {\n cursor: ew-resize;\n}\n\n.gantt-tr-taskContainer {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n}\n\n.gantt-tr-leftLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabel {\n font-size: 0.85rem;\n color: #666666;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n}\n\n.gantt-tr-dateLabelLeft {\n position: absolute;\n right: 100%;\n margin-right: 6px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n/* TimeScaleHeader Component Styles - Two-row header layout */\n.gantt-tsh-header {\n display: flex;\n flex-direction: column;\n background-color: var(--gantt-cell-background);\n border-bottom: var(--gantt-week-separator-width, 1px) solid var(--gantt-week-separator-color, #374151);\n box-sizing: border-box;\n}\n\n.gantt-tsh-monthRow {\n display: flex;\n border-bottom: var(--gantt-day-line-width, 1px) solid var(--gantt-day-line-color, #f3f4f6);\n align-items: center;\n}\n\n.gantt-tsh-monthCell {\n box-sizing: border-box;\n padding: 0.1rem 0.5rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n text-align: left;\n}\n\n.gantt-tsh-monthCell:first-child {\n border-left: none;\n}\n\n.gantt-tsh-dayRow {\n display: grid;\n box-sizing: border-box;\n}\n\n.gantt-tsh-dayCell {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.gantt-tsh-monthBoundary {\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n}\n\n.gantt-tsh-dayLabel {\n font-size: 0.75rem;\n font-weight: 500;\n color: #374151;\n}\n\n.gantt-tsh-weekendDay {\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-tsh-weekendDay .gantt-tsh-dayLabel {\n color: #dc2626;\n}\n\n.gantt-tsh-today {\n background-color: #dc2626;\n border-radius: 0 4px 4px 0;\n}\n\n.gantt-tsh-today .gantt-tsh-dayLabel {\n color: #ffffff;\n}\n\n/* GridBackground Component Styles */\n.gantt-gb-gridBackground {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 0;\n pointer-events: none;\n}\n\n.gantt-gb-weekendBlock {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-gb-gridLine {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n\n.gantt-gb-monthSeparator {\n width: var(--gantt-month-separator-width, 2px);\n background-color: var(--gantt-month-separator-color, #374151);\n}\n\n.gantt-gb-weekSeparator {\n width: var(--gantt-week-separator-width, 1px);\n background-color: var(--gantt-week-separator-color, #d1d5db);\n}\n\n.gantt-gb-dayLine {\n width: var(--gantt-day-line-width, 1px);\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n\n/* TodayIndicator Component Styles */\n.gantt-ti-indicator {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 5;\n pointer-events: none;\n}\n\n/* DragGuideLines Component Styles */\n.gantt-dgl-guideLine {\n position: absolute;\n top: 0;\n width: 2px;\n background-color: var(--gantt-drag-guide-line-color, #3b82f6);\n z-index: 20;\n pointer-events: none;\n opacity: 0.6;\n}","/**\n * TimeScaleHeader Component Styles - Two-row header layout\n */\n\n.gantt-tsh-header {\n display: flex;\n flex-direction: column;\n background-color: var(--gantt-cell-background);\n border-bottom: var(--gantt-week-separator-width, 1px) solid var(--gantt-week-separator-color, #374151);\n box-sizing: border-box;\n}\n\n/* Month row (top row) */\n.gantt-tsh-monthRow {\n display: flex;\n border-bottom: var(--gantt-day-line-width, 1px) solid var(--gantt-day-line-color, #f3f4f6);\n align-items: center;\n}\n\n.gantt-tsh-monthCell {\n box-sizing: border-box;\n padding: 0.1rem 0.5rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n text-align: left;\n}\n\n.gantt-tsh-monthCell:first-child {\n border-left: none;\n}\n\n/* Day row (bottom row) */\n.gantt-tsh-dayRow {\n display: grid;\n box-sizing: border-box;\n}\n\n.gantt-tsh-dayCell {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.gantt-tsh-monthBoundary {\n border-left: var(--gantt-month-separator-width, 2px) solid var(--gantt-month-separator-color, #a1a1a1);\n}\n\n.gantt-tsh-dayLabel {\n font-size: 0.75rem;\n font-weight: 500;\n color: #374151;\n}\n\n.gantt-tsh-weekendDay {\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-tsh-weekendDay .gantt-tsh-dayLabel {\n color: #dc2626;\n}\n\n.gantt-tsh-today {\n background-color: #dc2626;\n border-radius: 0 4px 4px 0;\n}\n\n.gantt-tsh-today .gantt-tsh-dayLabel {\n color: #ffffff;\n}\n","/**\n * TaskRow Component Styles\n */\n\n.gantt-tr-row {\n position: relative;\n width: 100%;\n border-bottom: 1px solid var(--gantt-grid-line-color);\n box-sizing: border-box;\n}\n\n.gantt-tr-row:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.gantt-tr-taskBar {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: var(--gantt-task-bar-border-radius);\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n box-sizing: border-box;\n white-space: nowrap;\n overflow: hidden;\n /* transition: box-shadow 0.15s ease; */\n cursor: grab;\n}\n\n/**\n * Hover state - provides smooth visual feedback\n * Transition disabled during drag (see .gantt-tr-taskBar.gantt-tr-dragging)\n */\n.gantt-tr-taskBar:hover {\n /* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); */\n}\n\n/**\n * Dragging state - disables all transitions for performance\n *\n * CRITICAL: transition: none !important is required to override the\n * default box-shadow transition on .gantt-tr-taskBar. Without this, CSS transitions\n * during drag cause lag/ghosting and break the 60fps performance target.\n *\n * Per research anti-pattern: \"Using CSS transitions during drag causes lag/ghosting.\"\n */\n.gantt-tr-taskBar.gantt-tr-dragging {\n cursor: grabbing;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n opacity: 1;\n transition: none !important;\n}\n\n.gantt-tr-taskDuration {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n margin-right: 4px;\n}\n\n.gantt-tr-rightLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabelRight {\n position: static;\n margin-right: 0;\n}\n\n.gantt-tr-externalTaskName {\n font-size: 0.9rem;\n font-weight: 500;\n color: #00389f;\n white-space: nowrap;\n user-select: none;\n margin-left: 4px;\n}\n\n.gantt-tr-resizeHandle {\n position: absolute;\n top: 0;\n width: 8px;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.1);\n cursor: ew-resize;\n pointer-events: auto;\n z-index: 10;\n /* z-index requires a positioning context; position: absolute is set here.\n Do NOT add position: relative via a shared selector - that would override\n this rule and break the absolute positioning at bar edges. */\n}\n\n.gantt-tr-resizeHandleLeft {\n left: 0;\n}\n\n.gantt-tr-resizeHandleRight {\n right: 0;\n}\n\n.gantt-tr-resizeZoneLeft {\n cursor: ew-resize;\n}\n\n.gantt-tr-resizeZoneRight {\n cursor: ew-resize;\n}\n\n.gantt-tr-taskContainer {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n}\n\n.gantt-tr-leftLabels {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n pointer-events: none;\n}\n\n.gantt-tr-dateLabel {\n font-size: 0.85rem;\n color: #666666;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n}\n\n.gantt-tr-dateLabelLeft {\n position: absolute;\n right: 100%;\n margin-right: 6px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n/* Extra margin when lock icon is present */\n.gantt-tr-leftLabels-locked .gantt-tr-dateLabelLeft {\n margin-right: 22px;\n}\n\n/* Progress bar overlay */\n.gantt-tr-progressBar {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 1;\n pointer-events: none;\n border-radius: var(--gantt-task-bar-border-radius) 0 0 var(--gantt-task-bar-border-radius);\n transition: width 0.3s ease;\n}\n\n/* Ensure text stays above progress bar.\n NOTE: .gantt-tr-resizeHandle is intentionally excluded here because it already\n uses position: absolute with z-index: 10, which places it above the progress bar.\n Adding position: relative here would override position: absolute and break the\n absolute positioning that anchors handles to the bar edges. */\n.gantt-tr-taskDuration {\n position: relative;\n z-index: 2;\n}\n\n/* Disable transition during drag */\n.gantt-tr-taskBar.gantt-tr-dragging .gantt-tr-progressBar {\n transition: none !important;\n}\n\n/* Progress text inside task bar */\n.gantt-tr-progressText {\n color: var(--gantt-task-bar-text-color);\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n margin-left: 4px;\n position: relative;\n z-index: 2;\n}\n\n/* Progress text outside task bar (before task name) */\n.gantt-tr-externalProgress {\n font-size: 0.85rem;\n font-weight: 500;\n color: #666666;\n white-space: nowrap;\n margin-right: 4px;\n margin-left: 4px;\n}\n\n/* Locked task bar state — consumer CSS override point */\n.gantt-tr-taskBar.gantt-tr-locked {\n cursor: not-allowed;\n}\n\n/* Divider line for visual grouping of task sets */\n.gantt-tr-divider {\n position: absolute;\n left: 0;\n width: 100%;\n height: 0;\n border-top: 1px solid #999;\n pointer-events: none;\n z-index: 0;\n}\n\n.gantt-tr-divider-top {\n top: 0;\n}\n\n.gantt-tr-divider-bottom {\n bottom: 0;\n}","/**\n * TodayIndicator Component Styles\n */\n\n.gantt-ti-indicator {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 5;\n pointer-events: none;\n}\n",".gantt-gb-gridBackground {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 0;\n pointer-events: none;\n}\n\n.gantt-gb-weekendBlock {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-weekend-background, #fee2e2);\n}\n\n.gantt-gb-gridLine {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n\n.gantt-gb-monthSeparator {\n width: var(--gantt-month-separator-width, 2px);\n background-color: var(--gantt-month-separator-color, #374151);\n}\n\n.gantt-gb-weekSeparator {\n width: var(--gantt-week-separator-width, 1px);\n background-color: var(--gantt-week-separator-color, #d1d5db);\n}\n\n.gantt-gb-dayLine {\n width: var(--gantt-day-line-width, 1px);\n background-color: var(--gantt-day-line-color, #f3f4f6);\n}\n",".gantt-dgl-guideLine {\n position: absolute;\n top: 0;\n width: 2px;\n background-color: var(--gantt-drag-guide-line-color, #3b82f6);\n z-index: 20;\n pointer-events: none;\n opacity: 0.6;\n}\n","/* SVG overlay for dependency lines */\n.gantt-dependencies-svg {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n pointer-events: none;\n /* Allow clicks to pass through to task bars */\n overflow: visible;\n}\n\n/* Dependency line path */\n.gantt-dependency-path {\n fill: none;\n stroke: var(--gantt-dependency-line-color, #666666);\n stroke-width: 1;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n/* Circular dependency highlighting */\n.gantt-dependency-cycle {\n stroke: var(--gantt-dependency-cycle-color, #ef4444);\n}\n\n/* Arrow markers */\n.gantt-dependency-arrow polygon {\n fill: var(--gantt-dependency-line-color, #666666);\n}\n\n.gantt-dependency-arrow-cycle polygon {\n fill: var(--gantt-dependency-cycle-color, #ef4444);\n}\n\n/* Lag label styling */\n.gantt-dependency-lag-label {\n font-size: 10px;\n font-weight: 500;\n pointer-events: none;\n user-select: none;\n opacity: 0.85;\n}",".gantt-container {\n width: 100%;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n border: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n background-color: var(--gantt-cell-background, #ffffff);\n}\n\n.gantt-scrollContainer {\n overflow: auto;\n}\n\n.gantt-stickyHeader {\n position: sticky;\n top: 0;\n z-index: 10;\n background-color: var(--gantt-cell-background, #ffffff);\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n}\n\n.gantt-taskArea {\n position: relative;\n background-color: var(--gantt-cell-background, #ffffff);\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.mts CHANGED
@@ -74,6 +74,12 @@ interface Task$1 {
74
74
  * Each dependency specifies a predecessor task, link type, and optional lag
75
75
  */
76
76
  dependencies?: TaskDependency$1[];
77
+ /**
78
+ * Optional flag to prevent drag and resize interactions.
79
+ * When true, the task bar cannot be moved or resized.
80
+ * Independent of accepted/progress — consumer controls both separately.
81
+ */
82
+ locked?: boolean;
77
83
  }
78
84
  /**
79
85
  * Date range for Gantt chart display
@@ -169,6 +175,19 @@ interface Task {
169
175
  * - Lag is optional and defaults to 0 (positive = delay, negative = overlap)
170
176
  */
171
177
  dependencies?: TaskDependency[];
178
+ /**
179
+ * Optional flag to prevent drag and resize interactions.
180
+ * When true, the task bar cannot be moved or resized.
181
+ * Independent of accepted/progress — consumer controls both separately.
182
+ */
183
+ locked?: boolean;
184
+ /**
185
+ * Optional horizontal divider line for visual grouping.
186
+ * - 'top' renders a bold line above the task row
187
+ * - 'bottom' renders a bold line below the task row
188
+ * The line spans the full grid width.
189
+ */
190
+ divider?: 'top' | 'bottom';
172
191
  }
173
192
  /**
174
193
  * Task dependency definition
@@ -259,6 +278,8 @@ interface TaskRowProps {
259
278
  }>) => void;
260
279
  /** Called when cascade drag completes; receives all shifted tasks including dragged task */
261
280
  onCascade?: (tasks: Task[]) => void;
281
+ /** Optional horizontal divider line - renders above or below the task row */
282
+ divider?: 'top' | 'bottom';
262
283
  }
263
284
  /**
264
285
  * TaskRow component - renders a single task row with a task bar
@@ -374,6 +395,8 @@ interface UseTaskDragOptions {
374
395
  }>) => void;
375
396
  /** Callback when cascade completes — receives all shifted tasks including dragged task */
376
397
  onCascade?: (tasks: Task$1[]) => void;
398
+ /** When true, all drag and resize interactions are disabled for this task */
399
+ locked?: boolean;
377
400
  }
378
401
  /**
379
402
  * Return value from useTaskDrag hook
package/dist/index.d.ts CHANGED
@@ -74,6 +74,12 @@ interface Task$1 {
74
74
  * Each dependency specifies a predecessor task, link type, and optional lag
75
75
  */
76
76
  dependencies?: TaskDependency$1[];
77
+ /**
78
+ * Optional flag to prevent drag and resize interactions.
79
+ * When true, the task bar cannot be moved or resized.
80
+ * Independent of accepted/progress — consumer controls both separately.
81
+ */
82
+ locked?: boolean;
77
83
  }
78
84
  /**
79
85
  * Date range for Gantt chart display
@@ -169,6 +175,19 @@ interface Task {
169
175
  * - Lag is optional and defaults to 0 (positive = delay, negative = overlap)
170
176
  */
171
177
  dependencies?: TaskDependency[];
178
+ /**
179
+ * Optional flag to prevent drag and resize interactions.
180
+ * When true, the task bar cannot be moved or resized.
181
+ * Independent of accepted/progress — consumer controls both separately.
182
+ */
183
+ locked?: boolean;
184
+ /**
185
+ * Optional horizontal divider line for visual grouping.
186
+ * - 'top' renders a bold line above the task row
187
+ * - 'bottom' renders a bold line below the task row
188
+ * The line spans the full grid width.
189
+ */
190
+ divider?: 'top' | 'bottom';
172
191
  }
173
192
  /**
174
193
  * Task dependency definition
@@ -259,6 +278,8 @@ interface TaskRowProps {
259
278
  }>) => void;
260
279
  /** Called when cascade drag completes; receives all shifted tasks including dragged task */
261
280
  onCascade?: (tasks: Task[]) => void;
281
+ /** Optional horizontal divider line - renders above or below the task row */
282
+ divider?: 'top' | 'bottom';
262
283
  }
263
284
  /**
264
285
  * TaskRow component - renders a single task row with a task bar
@@ -374,6 +395,8 @@ interface UseTaskDragOptions {
374
395
  }>) => void;
375
396
  /** Callback when cascade completes — receives all shifted tasks including dragged task */
376
397
  onCascade?: (tasks: Task$1[]) => void;
398
+ /** When true, all drag and resize interactions are disabled for this task */
399
+ locked?: boolean;
377
400
  }
378
401
  /**
379
402
  * Return value from useTaskDrag hook
package/dist/index.js CHANGED
@@ -782,6 +782,7 @@ function handleGlobalMouseMove(e) {
782
782
  const dayWidth2 = globalActiveDrag.dayWidth;
783
783
  const monthStart = globalActiveDrag.monthStart;
784
784
  for (const chainTask of activeChain) {
785
+ if (chainTask.locked) continue;
785
786
  const chainStart = new Date(chainTask.startDate);
786
787
  const chainEnd = new Date(chainTask.endDate);
787
788
  const chainStartOffset = Math.round(
@@ -861,6 +862,7 @@ var useTaskDrag = (options) => {
861
862
  onCascade
862
863
  } = options;
863
864
  const isOwnerRef = (0, import_react2.useRef)(false);
865
+ const locked = options.locked ?? false;
864
866
  const [isDragging, setIsDragging] = (0, import_react2.useState)(false);
865
867
  const [dragMode, setDragMode] = (0, import_react2.useState)(null);
866
868
  const [currentLeft, setCurrentLeft] = (0, import_react2.useState)(0);
@@ -966,7 +968,7 @@ var useTaskDrag = (options) => {
966
968
  dependencies: recalculateIncomingLags(draggedTaskData, newStartDate, newEndDate, allTasks)
967
969
  }
968
970
  },
969
- ...chainForCompletion.map((chainTask) => {
971
+ ...chainForCompletion.filter((chainTask) => !chainTask.locked).map((chainTask) => {
970
972
  const origStart = new Date(chainTask.startDate);
971
973
  const origEnd = new Date(chainTask.endDate);
972
974
  const newStart = new Date(Date.UTC(
@@ -1016,6 +1018,7 @@ var useTaskDrag = (options) => {
1016
1018
  };
1017
1019
  }, []);
1018
1020
  const handleMouseDown = (0, import_react2.useCallback)((e) => {
1021
+ if (locked) return;
1019
1022
  const target = e.currentTarget;
1020
1023
  const edgeZone = detectEdgeZone(e.clientX, target, edgeZoneWidth);
1021
1024
  let mode = null;
@@ -1070,13 +1073,14 @@ var useTaskDrag = (options) => {
1070
1073
  cascadeChainEnd: !disableConstraints ? getTransitiveCascadeChain(taskId, allTasks, ["FS", "FF"]) : [],
1071
1074
  onCascadeProgress
1072
1075
  };
1073
- }, [edgeZoneWidth, currentLeft, currentWidth, dayWidth, monthStart, taskId, onDragStateChange, handleProgress, handleComplete, handleCancel, allTasks, disableConstraints, onCascadeProgress, onCascade]);
1076
+ }, [edgeZoneWidth, currentLeft, currentWidth, dayWidth, monthStart, taskId, onDragStateChange, handleProgress, handleComplete, handleCancel, allTasks, disableConstraints, onCascadeProgress, onCascade, locked]);
1074
1077
  const getCursorStyle = (0, import_react2.useCallback)(() => {
1078
+ if (locked) return "not-allowed";
1075
1079
  if (isDragging) {
1076
1080
  return "grabbing";
1077
1081
  }
1078
1082
  return "grab";
1079
- }, [isDragging]);
1083
+ }, [locked, isDragging]);
1080
1084
  return {
1081
1085
  isDragging,
1082
1086
  dragMode,
@@ -1095,10 +1099,11 @@ var useTaskDrag = (options) => {
1095
1099
  // src/components/TaskRow/TaskRow.tsx
1096
1100
  var import_jsx_runtime2 = require("react/jsx-runtime");
1097
1101
  var arePropsEqual = (prevProps, nextProps) => {
1098
- return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints;
1102
+ return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.task.locked === nextProps.task.locked && prevProps.task.divider === nextProps.task.divider;
1099
1103
  };
1100
1104
  var TaskRow = import_react3.default.memo(
1101
- ({ task, monthStart, dayWidth, rowHeight, onChange, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, overridePosition, onCascadeProgress, onCascade }) => {
1105
+ ({ task, monthStart, dayWidth, rowHeight, onChange, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, overridePosition, onCascadeProgress, onCascade, divider }) => {
1106
+ const { divider: taskDivider } = task;
1102
1107
  const taskStartDate = (0, import_react3.useMemo)(() => parseUTCDate(task.startDate), [task.startDate]);
1103
1108
  const taskEndDate = (0, import_react3.useMemo)(() => parseUTCDate(task.endDate), [task.endDate]);
1104
1109
  const { left, width } = (0, import_react3.useMemo)(
@@ -1114,7 +1119,8 @@ var TaskRow = import_react3.default.memo(
1114
1119
  if (progressWidth === 100) {
1115
1120
  return task.accepted ? "var(--gantt-progress-accepted, #22c55e)" : "var(--gantt-progress-completed, #fbbf24)";
1116
1121
  }
1117
- return task.color ? `color-mix(in srgb, ${task.color} 40%, black)` : "var(--gantt-progress-color, rgba(0, 0, 0, 0.2))";
1122
+ const baseColor = task.color || "var(--gantt-task-bar-default-color)";
1123
+ return `color-mix(in srgb, ${baseColor} 40%, black)`;
1118
1124
  }, [progressWidth, task.accepted, task.color]);
1119
1125
  const handleDragEnd = (result) => {
1120
1126
  const updatedTask = {
@@ -1144,6 +1150,7 @@ var TaskRow = import_react3.default.memo(
1144
1150
  rowIndex,
1145
1151
  enableAutoSchedule,
1146
1152
  disableConstraints,
1153
+ locked: task.locked,
1147
1154
  onCascadeProgress,
1148
1155
  onCascade
1149
1156
  });
@@ -1158,81 +1165,106 @@ var TaskRow = import_react3.default.memo(
1158
1165
  ) + 1;
1159
1166
  const estimatedTextWidth = durationDays >= 10 ? 76 : 62;
1160
1167
  const showProgressInside = progressWidth > 0 && displayWidth > estimatedTextWidth;
1161
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1168
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
1162
1169
  "div",
1163
1170
  {
1164
1171
  className: "gantt-tr-row",
1165
1172
  style: { height: `${rowHeight}px` },
1166
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "gantt-tr-taskContainer", children: [
1167
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
1168
- "div",
1169
- {
1170
- "data-taskbar": true,
1171
- className: `gantt-tr-taskBar ${isDragging ? "gantt-tr-dragging" : ""}`,
1172
- style: {
1173
- left: `${displayLeft}px`,
1174
- width: `${displayWidth}px`,
1175
- backgroundColor: barColor,
1176
- height: "var(--gantt-task-bar-height)",
1177
- cursor: dragHandleProps.style.cursor,
1178
- userSelect: dragHandleProps.style.userSelect
1179
- },
1180
- onMouseDown: dragHandleProps.onMouseDown,
1181
- children: [
1182
- progressWidth > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1183
- "div",
1184
- {
1185
- className: "gantt-tr-progressBar",
1186
- style: {
1187
- width: `${progressWidth}%`,
1188
- backgroundColor: progressColor
1173
+ children: [
1174
+ taskDivider === "top" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "gantt-tr-divider gantt-tr-divider-top" }),
1175
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "gantt-tr-taskContainer", children: [
1176
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
1177
+ "div",
1178
+ {
1179
+ "data-taskbar": true,
1180
+ className: `gantt-tr-taskBar ${isDragging ? "gantt-tr-dragging" : ""} ${task.locked ? "gantt-tr-locked" : ""}`,
1181
+ style: {
1182
+ left: `${displayLeft}px`,
1183
+ width: `${displayWidth}px`,
1184
+ backgroundColor: barColor,
1185
+ height: "var(--gantt-task-bar-height)",
1186
+ cursor: dragHandleProps.style.cursor,
1187
+ userSelect: dragHandleProps.style.userSelect
1188
+ },
1189
+ onMouseDown: dragHandleProps.onMouseDown,
1190
+ children: [
1191
+ progressWidth > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1192
+ "div",
1193
+ {
1194
+ className: "gantt-tr-progressBar",
1195
+ style: {
1196
+ width: `${progressWidth}%`,
1197
+ backgroundColor: progressColor
1198
+ }
1189
1199
  }
1190
- }
1191
- ),
1192
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "gantt-tr-resizeHandle gantt-tr-resizeHandleLeft" }),
1193
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-taskDuration", children: [
1194
- durationDays,
1195
- " \u0434"
1196
- ] }),
1197
- progressWidth > 0 && showProgressInside && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-progressText", children: [
1198
- progressWidth,
1199
- "%"
1200
- ] }),
1201
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "gantt-tr-resizeHandle gantt-tr-resizeHandleRight" })
1202
- ]
1203
- }
1204
- ),
1205
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1206
- "div",
1207
- {
1208
- className: "gantt-tr-leftLabels",
1209
- style: {
1210
- left: `${displayLeft}px`
1211
- },
1212
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-dateLabel gantt-tr-dateLabelLeft", children: [
1213
- startDateLabel,
1214
- "\u2013",
1215
- endDateLabel
1216
- ] })
1217
- }
1218
- ),
1219
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
1220
- "div",
1221
- {
1222
- className: "gantt-tr-rightLabels",
1223
- style: {
1224
- left: `${displayLeft + displayWidth}px`
1225
- },
1226
- children: [
1227
- progressWidth > 0 && !showProgressInside && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-externalProgress", children: [
1228
- progressWidth,
1229
- "%"
1230
- ] }),
1231
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "gantt-tr-externalTaskName", children: task.name })
1232
- ]
1233
- }
1234
- )
1235
- ] })
1200
+ ),
1201
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "gantt-tr-resizeHandle gantt-tr-resizeHandleLeft" }),
1202
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-taskDuration", children: [
1203
+ durationDays,
1204
+ " \u0434"
1205
+ ] }),
1206
+ progressWidth > 0 && showProgressInside && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-progressText", children: [
1207
+ progressWidth,
1208
+ "%"
1209
+ ] }),
1210
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "gantt-tr-resizeHandle gantt-tr-resizeHandleRight" })
1211
+ ]
1212
+ }
1213
+ ),
1214
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1215
+ "div",
1216
+ {
1217
+ className: `gantt-tr-leftLabels ${task.locked ? "gantt-tr-leftLabels-locked" : ""}`,
1218
+ style: {
1219
+ left: `${displayLeft}px`
1220
+ },
1221
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-dateLabel gantt-tr-dateLabelLeft", children: [
1222
+ startDateLabel,
1223
+ "\u2013",
1224
+ endDateLabel
1225
+ ] })
1226
+ }
1227
+ ),
1228
+ task.locked && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1229
+ "svg",
1230
+ {
1231
+ className: "gantt-tr-lockIcon",
1232
+ style: {
1233
+ position: "absolute",
1234
+ left: `${displayLeft - 16}px`,
1235
+ top: "50%",
1236
+ transform: "translateY(-50%)",
1237
+ width: "12px",
1238
+ height: "12px",
1239
+ color: "#444",
1240
+ pointerEvents: "none"
1241
+ },
1242
+ viewBox: "0 0 24 24",
1243
+ fill: "currentColor",
1244
+ "aria-label": "Locked",
1245
+ "aria-hidden": "false",
1246
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z" })
1247
+ }
1248
+ ),
1249
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
1250
+ "div",
1251
+ {
1252
+ className: "gantt-tr-rightLabels",
1253
+ style: {
1254
+ left: `${displayLeft + displayWidth}px`
1255
+ },
1256
+ children: [
1257
+ progressWidth > 0 && !showProgressInside && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "gantt-tr-externalProgress", children: [
1258
+ progressWidth,
1259
+ "%"
1260
+ ] }),
1261
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "gantt-tr-externalTaskName", children: task.name })
1262
+ ]
1263
+ }
1264
+ )
1265
+ ] }),
1266
+ taskDivider === "bottom" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "gantt-tr-divider gantt-tr-divider-bottom" })
1267
+ ]
1236
1268
  }
1237
1269
  );
1238
1270
  },