gantt-lib 0.1.2 → 0.2.0
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.
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +36 -8
- package/dist/index.d.ts +36 -8
- package/dist/index.js +632 -191
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +648 -208
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +272 -0
- package/package.json +1 -1
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/ui.css","../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/TaskList/TaskList.css","../src/components/GanttChart/GanttChart.css"],"sourcesContent":["/* =========================================================\n * UI Components CSS — gantt-lib theming\n * All classes use gantt- prefix to avoid collisions\n * ========================================================= */\n\n/* CSS Variables for UI components */\n:root {\n --gantt-input-bg: #ffffff;\n --gantt-input-border: #d1d5db;\n --gantt-input-focus-ring: rgba(59, 130, 246, 0.5);\n --gantt-input-text: #1f2937;\n --gantt-input-placeholder: #9ca3af;\n --gantt-input-radius: 6px;\n\n --gantt-popover-bg: #ffffff;\n --gantt-popover-border: #e5e7eb;\n --gantt-popover-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\n --gantt-calendar-day-hover: #f3f4f6;\n --gantt-calendar-day-selected: #3b82f6;\n --gantt-calendar-day-selected-text: #ffffff;\n --gantt-calendar-day-today-bg: #eff6ff;\n --gantt-calendar-day-today-color: #1d4ed8;\n --gantt-calendar-day-outside-color: #d1d5db;\n --gantt-calendar-day-disabled-color: #d1d5db;\n\n --gantt-calendar-bg: #ffffff;\n --gantt-calendar-text: #1f2937;\n --gantt-calendar-text-weekend: #ef4444;\n --gantt-calendar-text-muted: #9ca3af;\n --gantt-calendar-day-today-border: #3b82f6;\n --gantt-calendar-day-range: #dbeafe;\n --gantt-calendar-day-disabled-text: #d1d5db;\n}\n\n/* =========================================================\n * Input\n * ========================================================= */\n\n.gantt-input {\n display: flex;\n height: 32px;\n width: 100%;\n border-radius: var(--gantt-input-radius);\n border: 1px solid var(--gantt-input-border);\n background-color: var(--gantt-input-bg);\n padding: 0 8px;\n font-size: 0.85rem;\n font-family: inherit;\n color: var(--gantt-input-text);\n transition: border-color 150ms, box-shadow 150ms;\n box-sizing: border-box;\n}\n\n.gantt-input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n}\n\n.gantt-input::placeholder {\n color: var(--gantt-input-placeholder);\n}\n\n.gantt-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* =========================================================\n * Button\n * ========================================================= */\n\n.gantt-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-size: 0.875rem;\n font-family: inherit;\n font-weight: 500;\n padding: 0 12px;\n height: 32px;\n cursor: pointer;\n border: 1px solid var(--gantt-input-border);\n background-color: var(--gantt-input-bg);\n color: var(--gantt-input-text);\n transition: background-color 100ms, box-shadow 100ms;\n user-select: none;\n}\n\n.gantt-btn:hover {\n background-color: var(--gantt-calendar-day-hover);\n}\n\n.gantt-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n}\n\n.gantt-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Ghost variant */\n.gantt-btn-ghost {\n background-color: transparent;\n border-color: transparent;\n}\n\n.gantt-btn-ghost:hover {\n background-color: var(--gantt-calendar-day-hover);\n}\n\n/* Outline variant */\n.gantt-btn-outline {\n background-color: transparent;\n}\n\n/* Icon size */\n.gantt-btn-icon {\n width: 28px;\n height: 28px;\n padding: 0;\n}\n\n/* Small size */\n.gantt-btn-sm {\n height: 26px;\n padding: 0 8px;\n font-size: 0.8rem;\n}\n\n/* =========================================================\n * Popover\n * ========================================================= */\n\n.gantt-popover {\n background: var(--gantt-popover-bg);\n border: 1px solid var(--gantt-popover-border);\n border-radius: 8px;\n box-shadow: var(--gantt-popover-shadow);\n padding: 4px;\n z-index: 1000;\n animation: gantt-popover-in 120ms ease-out;\n}\n\n@keyframes gantt-popover-in {\n from {\n opacity: 0;\n transform: scale(0.97) translateY(-4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n/* =========================================================\n * DatePicker trigger button\n * ========================================================= */\n\n.gantt-datepicker-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 0.85rem;\n font-family: inherit;\n color: var(--gantt-input-text);\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: center;\n user-select: none;\n}\n\n.gantt-datepicker-trigger:hover {\n background-color: rgba(59, 130, 246, 0.1);\n border-radius: 2px;\n}\n\n.gantt-datepicker-trigger:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n border-radius: 2px;\n}\n\n.gantt-datepicker-trigger:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* =========================================================\n * Calendar — custom scrollable (gantt-cal-* / gantt-day-btn)\n * ========================================================= */\n\n.gantt-cal-container {\n max-height: 400px;\n overflow-y: auto;\n user-select: none;\n padding: 8px;\n font-family: inherit;\n background: var(--gantt-calendar-bg);\n color: var(--gantt-calendar-text);\n}\n\n.gantt-cal-month {\n margin-bottom: 16px;\n}\n\n.gantt-cal-month-header {\n font-size: 0.875rem;\n font-weight: 600;\n padding: 4px 0 8px;\n color: var(--gantt-calendar-text);\n}\n\n.gantt-cal-month-days {\n display: grid;\n grid-template-columns: repeat(7, 32px);\n gap: 2px;\n}\n\n.gantt-cal-empty-day {\n width: 32px;\n height: 32px;\n}\n\n.gantt-day-btn {\n width: 32px;\n height: 32px;\n font-size: 0.875rem;\n font-family: inherit;\n border: 1px solid transparent;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n color: var(--gantt-calendar-text);\n transition: background-color 100ms;\n}\n\n.gantt-day-btn:hover {\n background-color: var(--gantt-calendar-day-hover);\n}\n\n.gantt-day-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n}\n\n.gantt-day-btn.today {\n border-color: var(--gantt-calendar-day-today-border);\n font-weight: 600;\n}\n\n.gantt-day-btn.selected {\n background-color: var(--gantt-calendar-day-selected);\n color: var(--gantt-calendar-day-selected-text);\n font-weight: 600;\n}\n\n.gantt-day-btn.selected:hover {\n background-color: var(--gantt-calendar-day-selected);\n opacity: 0.9;\n}\n\n.gantt-day-btn.weekend:not(.selected) {\n color: var(--gantt-calendar-text-weekend);\n}\n\n.gantt-day-btn.past:not(.selected) {\n color: var(--gantt-calendar-text-muted);\n}\n\n.gantt-day-btn.past.weekend:not(.selected) {\n color: #fca5a5;\n}\n\n.gantt-day-btn.disabled {\n color: var(--gantt-calendar-day-disabled-text);\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.gantt-day-btn.disabled:hover {\n background: transparent;\n}\n","/* Gantt Chart CSS Variables - User customizable theming */\n@import './components/TaskList/TaskList.css';\n@import './components/ui/ui.css';\n\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.6);\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 border-bottom: none;\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 * 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}","/**\n * TaskList Component Styles\n * Sticky positioned in flex container - stays at left edge during horizontal scroll\n * Always rendered in DOM for stable positioning, visibility controlled via prop\n */\n\n.gantt-tl-overlay {\n position: sticky;\n left: 0;\n top: 0;\n z-index: 15;\n background-color: var(--gantt-cell-background, #ffffff);\n border-right: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n pointer-events: auto;\n}\n\n/* Hidden state - element completely removed from layout */\n.gantt-tl-overlay.gantt-tl-hidden {\n display: none;\n}\n\n.gantt-tl-table {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n/* Header row - sticky during vertical scroll */\n.gantt-tl-header {\n position: sticky;\n top: 0;\n display: flex;\n background-color: var(--gantt-cell-background, #ffffff);\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n box-sizing: border-box;\n z-index: 5;\n}\n\n.gantt-tl-headerCell {\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n box-sizing: border-box;\n border-right: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n}\n\n.gantt-tl-headerCell:last-child {\n border-right: none;\n}\n\n/* Body container */\n.gantt-tl-body {\n display: flex;\n flex-direction: column;\n}\n\n/* Data rows */\n.gantt-tl-row {\n display: flex;\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n box-sizing: border-box;\n cursor: pointer;\n}\n\n.gantt-tl-row:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.gantt-tl-row-selected {\n background-color: rgba(59, 130, 246, 0.15);\n}\n\n/* Cells */\n.gantt-tl-cell {\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n box-sizing: border-box;\n border-right: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n font-size: 0.85rem;\n color: #374151;\n}\n\n.gantt-tl-cell:last-child {\n border-right: none;\n}\n\n.gantt-tl-cell-number {\n width: 40px;\n justify-content: center;\n flex-shrink: 0;\n}\n\n/* Name cell — overflow visible so overlay input can extend past boundaries */\n.gantt-tl-cell-name {\n flex: 1;\n min-width: 0;\n position: relative;\n overflow: visible;\n align-items: center;\n padding: 0;\n /* remove all padding so button fills full cell */\n}\n\n/* Date cell — relative for transparent picker overlay */\n.gantt-tl-cell-date {\n width: 68px;\n justify-content: center;\n flex-shrink: 0;\n position: relative;\n padding: 0;\n}\n\n/* Full-cell button trigger for name edit */\n.gantt-tl-name-trigger {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n width: 100%;\n height: 100%;\n padding: 0 0.2rem;\n /* restore visual padding inside the button */\n font-size: 0.8rem;\n line-height: 1.2;\n font-family: inherit;\n color: #374151;\n background: transparent;\n border: none;\n cursor: text;\n text-align: left;\n user-select: none;\n white-space: normal;\n word-break: break-word;\n box-sizing: border-box;\n min-height: 100%;\n}\n\n.gantt-tl-name-trigger:hover {\n background-color: rgba(59, 130, 246, 0.1);\n}\n\n/* Name edit — Input component used as floating overlay */\n.gantt-tl-name-input {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n min-width: 450px;\n width: 100%;\n border-width: 2px;\n border-color: #3b82f6;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);\n white-space: nowrap;\n}\n\n.gantt-tl-name-input:focus {\n box-shadow: 0 2px 10px rgba(59, 130, 246, 0.3);\n}\n\n/* Locked task name — cursor indicates no editing */\n.gantt-tl-name-locked {\n cursor: default !important;\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 position: relative;\n}\n\n/* Wrapper for horizontal scroll content - keeps TaskList and chart together */\n.gantt-scrollContent {\n display: flex;\n min-width: min-content;\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/components/ui/ui.css","../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/TaskList/TaskList.css","../src/components/GanttChart/GanttChart.css"],"sourcesContent":["/* =========================================================\n * UI Components CSS — gantt-lib theming\n * All classes use gantt- prefix to avoid collisions\n * ========================================================= */\n\n/* CSS Variables for UI components */\n:root {\n --gantt-input-bg: #ffffff;\n --gantt-input-border: #d1d5db;\n --gantt-input-focus-ring: rgba(59, 130, 246, 0.5);\n --gantt-input-text: #1f2937;\n --gantt-input-placeholder: #9ca3af;\n --gantt-input-radius: 6px;\n\n --gantt-popover-bg: #ffffff;\n --gantt-popover-border: #e5e7eb;\n --gantt-popover-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\n --gantt-calendar-day-hover: #f3f4f6;\n --gantt-calendar-day-selected: #3b82f6;\n --gantt-calendar-day-selected-text: #ffffff;\n --gantt-calendar-day-today-bg: #eff6ff;\n --gantt-calendar-day-today-color: #1d4ed8;\n --gantt-calendar-day-outside-color: #d1d5db;\n --gantt-calendar-day-disabled-color: #d1d5db;\n\n --gantt-calendar-bg: #ffffff;\n --gantt-calendar-text: #1f2937;\n --gantt-calendar-text-weekend: #ef4444;\n --gantt-calendar-text-muted: #9ca3af;\n --gantt-calendar-day-today-border: #3b82f6;\n --gantt-calendar-day-range: #dbeafe;\n --gantt-calendar-day-disabled-text: #d1d5db;\n}\n\n/* =========================================================\n * Input\n * ========================================================= */\n\n.gantt-input {\n display: flex;\n height: 32px;\n width: 100%;\n border-radius: var(--gantt-input-radius);\n border: 1px solid var(--gantt-input-border);\n background-color: var(--gantt-input-bg);\n padding: 0 8px;\n font-size: 0.85rem;\n font-family: inherit;\n color: var(--gantt-input-text);\n transition: border-color 150ms, box-shadow 150ms;\n box-sizing: border-box;\n}\n\n.gantt-input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n}\n\n.gantt-input::placeholder {\n color: var(--gantt-input-placeholder);\n}\n\n.gantt-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* =========================================================\n * Button\n * ========================================================= */\n\n.gantt-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-size: 0.875rem;\n font-family: inherit;\n font-weight: 500;\n padding: 0 12px;\n height: 32px;\n cursor: pointer;\n border: 1px solid var(--gantt-input-border);\n background-color: var(--gantt-input-bg);\n color: var(--gantt-input-text);\n transition: background-color 100ms, box-shadow 100ms;\n user-select: none;\n}\n\n.gantt-btn:hover {\n background-color: var(--gantt-calendar-day-hover);\n}\n\n.gantt-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n}\n\n.gantt-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Ghost variant */\n.gantt-btn-ghost {\n background-color: transparent;\n border-color: transparent;\n}\n\n.gantt-btn-ghost:hover {\n background-color: var(--gantt-calendar-day-hover);\n}\n\n/* Outline variant */\n.gantt-btn-outline {\n background-color: transparent;\n}\n\n/* Icon size */\n.gantt-btn-icon {\n width: 28px;\n height: 28px;\n padding: 0;\n}\n\n/* Small size */\n.gantt-btn-sm {\n height: 26px;\n padding: 0 8px;\n font-size: 0.8rem;\n}\n\n/* =========================================================\n * Popover\n * ========================================================= */\n\n.gantt-popover {\n background: var(--gantt-popover-bg);\n border: 1px solid var(--gantt-popover-border);\n border-radius: 8px;\n box-shadow: var(--gantt-popover-shadow);\n padding: 4px;\n z-index: 1000;\n outline: none;\n animation: gantt-popover-in 120ms ease-out;\n}\n\n@keyframes gantt-popover-in {\n from {\n opacity: 0;\n transform: scale(0.97) translateY(-4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n/* =========================================================\n * DatePicker trigger button\n * ========================================================= */\n\n.gantt-datepicker-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 0.85rem;\n font-family: inherit;\n color: var(--gantt-input-text);\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: center;\n user-select: none;\n}\n\n.gantt-datepicker-trigger:hover {\n background-color: rgba(59, 130, 246, 0.1);\n border-radius: 2px;\n}\n\n.gantt-datepicker-trigger:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n border-radius: 2px;\n}\n\n.gantt-datepicker-trigger:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* =========================================================\n * Calendar — custom scrollable (gantt-cal-* / gantt-day-btn)\n * ========================================================= */\n\n.gantt-cal-container {\n max-height: 400px;\n overflow-y: auto;\n user-select: none;\n padding: 8px;\n font-family: inherit;\n background: var(--gantt-calendar-bg);\n color: var(--gantt-calendar-text);\n}\n\n.gantt-cal-month {\n margin-bottom: 16px;\n}\n\n.gantt-cal-month-header {\n font-size: 0.875rem;\n font-weight: 600;\n padding: 4px 0 8px;\n color: var(--gantt-calendar-text);\n}\n\n.gantt-cal-month-days {\n display: grid;\n grid-template-columns: repeat(7, 32px);\n gap: 2px;\n}\n\n.gantt-cal-empty-day {\n width: 32px;\n height: 32px;\n}\n\n.gantt-day-btn {\n width: 32px;\n height: 32px;\n font-size: 0.875rem;\n font-family: inherit;\n border: 1px solid transparent;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n color: var(--gantt-calendar-text);\n transition: background-color 100ms;\n}\n\n.gantt-day-btn:hover {\n background-color: var(--gantt-calendar-day-hover);\n}\n\n.gantt-day-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--gantt-input-focus-ring);\n}\n\n.gantt-day-btn.today {\n border-color: var(--gantt-calendar-day-today-border);\n font-weight: 600;\n}\n\n.gantt-day-btn.selected {\n background-color: var(--gantt-calendar-day-selected);\n color: var(--gantt-calendar-day-selected-text);\n font-weight: 600;\n}\n\n.gantt-day-btn.selected:hover {\n background-color: var(--gantt-calendar-day-selected);\n opacity: 0.9;\n}\n\n.gantt-day-btn.weekend:not(.selected) {\n color: var(--gantt-calendar-text-weekend);\n}\n\n.gantt-day-btn.past:not(.selected) {\n color: var(--gantt-calendar-text-muted);\n}\n\n.gantt-day-btn.past.weekend:not(.selected) {\n color: #fca5a5;\n}\n\n.gantt-day-btn.disabled {\n color: var(--gantt-calendar-day-disabled-text);\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.gantt-day-btn.disabled:hover {\n background: transparent;\n}\n","/* Gantt Chart CSS Variables - User customizable theming */\n@import './components/TaskList/TaskList.css';\n@import './components/ui/ui.css';\n\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.6);\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 border-bottom: none;\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 * 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/* Selected dependency highlighting */\n.gantt-dependency-selected {\n stroke: #ef4444;\n stroke-width: 2;\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}","/**\n * TaskList Component Styles\n * Sticky positioned in flex container - stays at left edge during horizontal scroll\n * Always rendered in DOM for stable positioning, visibility controlled via prop\n */\n\n.gantt-tl-overlay {\n position: sticky;\n left: 0;\n top: 0;\n z-index: 15;\n background-color: var(--gantt-cell-background, #ffffff);\n border-right: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n pointer-events: auto;\n}\n\n/* Hidden state - element completely removed from layout */\n.gantt-tl-overlay.gantt-tl-hidden {\n display: none;\n}\n\n.gantt-tl-table {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n/* Header row - sticky during vertical scroll */\n.gantt-tl-header {\n position: sticky;\n top: 0;\n display: flex;\n background-color: var(--gantt-cell-background, #ffffff);\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n box-sizing: border-box;\n z-index: 5;\n}\n\n.gantt-tl-headerCell {\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n box-sizing: border-box;\n border-right: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n}\n\n.gantt-tl-headerCell:last-child {\n border-right: none;\n}\n\n/* Body container */\n.gantt-tl-body {\n display: flex;\n flex-direction: column;\n}\n\n/* Data rows */\n.gantt-tl-row {\n display: flex;\n border-bottom: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n box-sizing: border-box;\n cursor: pointer;\n}\n\n.gantt-tl-row:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.gantt-tl-row-selected {\n background-color: rgba(59, 130, 246, 0.15);\n}\n\n/* Cells */\n.gantt-tl-cell {\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n box-sizing: border-box;\n border-right: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n font-size: 0.85rem;\n color: #374151;\n}\n\n.gantt-tl-cell:last-child {\n border-right: none;\n}\n\n.gantt-tl-cell-number {\n width: 40px;\n justify-content: center;\n flex-shrink: 0;\n cursor: pointer;\n}\n\n.gantt-tl-num-icon {\n display: none;\n color: #6b7280;\n}\n\n.gantt-tl-cell-number:hover .gantt-tl-num-label {\n display: none;\n}\n\n.gantt-tl-cell-number:hover .gantt-tl-num-icon {\n display: block;\n}\n\n/* Restore left padding for the name column header */\n.gantt-tl-headerCell.gantt-tl-cell-name {\n padding-left: 4px;\n}\n\n/* Name cell — overflow visible so overlay input can extend past boundaries */\n.gantt-tl-cell-name {\n flex: 1;\n min-width: 0;\n position: relative;\n overflow: visible;\n align-items: center;\n padding: 0;\n /* remove all padding so button fills full cell */\n}\n\n/* Date cell — relative for transparent picker overlay */\n.gantt-tl-cell-date {\n width: 68px;\n justify-content: center;\n flex-shrink: 0;\n position: relative;\n padding: 0;\n}\n\n/* Full-cell button trigger for name edit */\n.gantt-tl-name-trigger {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n width: 100%;\n height: 100%;\n padding: 0 0.2rem;\n /* restore visual padding inside the button */\n font-size: 0.8rem;\n line-height: 1.2;\n font-family: inherit;\n color: #374151;\n background: transparent;\n border: none;\n cursor: text;\n text-align: left;\n user-select: none;\n white-space: normal;\n word-break: break-word;\n box-sizing: border-box;\n min-height: 100%;\n}\n\n.gantt-tl-name-trigger:hover {\n background-color: rgba(59, 130, 246, 0.1);\n}\n\n/* Name edit — Input component used as floating overlay */\n.gantt-tl-name-input {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n min-width: 450px;\n width: 100%;\n border-width: 2px;\n border-color: #3b82f6;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);\n white-space: nowrap;\n}\n\n.gantt-tl-name-input:focus {\n box-shadow: 0 2px 10px rgba(59, 130, 246, 0.3);\n}\n\n/* Locked task name — cursor indicates no editing */\n.gantt-tl-name-locked {\n cursor: default !important;\n}\n\n/* Dependencies column — header and data cells */\n.gantt-tl-cell-deps {\n width: 120px;\n flex-shrink: 0;\n flex-wrap: wrap;\n gap: 2px;\n padding: 2px 4px;\n align-items: center;\n overflow: visible;\n position: relative;\n}\n\n/* Type switcher button in header */\n.gantt-tl-dep-type-trigger {\n display: flex;\n align-items: center;\n gap: 2px;\n font-size: 0.75rem;\n font-weight: 600;\n color: #1f2937;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n white-space: nowrap;\n font-family: inherit;\n}\n\n.gantt-tl-dep-type-trigger:disabled {\n cursor: default;\n opacity: 0.7;\n}\n\n.gantt-tl-dep-type-trigger:not(:disabled):hover {\n color: #3b82f6;\n}\n\n/* Dropdown option buttons inside Popover */\n.gantt-tl-dep-type-menu {\n display: flex;\n flex-direction: column;\n padding: 4px;\n min-width: 180px;\n}\n\n.gantt-tl-dep-type-option {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n padding: 4px 8px;\n font-size: 0.8rem;\n font-family: inherit;\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n color: #374151;\n}\n\n.gantt-tl-dep-type-option:hover {\n background-color: rgba(59, 130, 246, 0.1);\n}\n\n.gantt-tl-dep-type-option.active {\n background-color: rgba(59, 130, 246, 0.2);\n font-weight: 600;\n color: #1d4ed8;\n}\n\n/* Dependency chip — clickable to select and trigger predecessor-side delete */\n.gantt-tl-dep-chip {\n display: inline-flex;\n align-items: center;\n gap: 1px;\n background-color: rgba(59, 130, 246, 0.12);\n border: 1px solid rgba(59, 130, 246, 0.3);\n border-radius: 4px;\n padding: 4px 4px;\n font-size: 0.7rem;\n color: #1d4ed8;\n white-space: nowrap;\n line-height: 14px;\n cursor: pointer;\n}\n\n/* Selected chip visual highlight — inverted */\n.gantt-tl-dep-chip-selected {\n background-color: #1d4ed8;\n border-color: #1d4ed8;\n color: #fff;\n font-weight: 600;\n}\n\n/* Chip + trash button wrapper — keeps chip and delete button visually inline */\n.gantt-tl-dep-chip-wrapper {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n}\n\n/* Inline trash button — hidden by default, shown only when chip is selected */\n.gantt-tl-dep-chip-trash {\n display: none;\n align-items: center;\n justify-content: center;\n align-self: stretch;\n background: #ef4444;\n border: none;\n border-radius: 3px;\n padding: 0 4px;\n cursor: pointer;\n color: #fff;\n flex-shrink: 0;\n line-height: 0;\n}\n\n/* Show trash only when chip is selected */\n.gantt-tl-dep-chip-wrapper:has(.gantt-tl-dep-chip-selected) .gantt-tl-dep-chip-trash {\n display: inline-flex;\n}\n\n.gantt-tl-dep-chip-trash:hover {\n background-color: #dc2626;\n}\n\n/* Dep chip info popover — human-readable dependency description on click */\n.gantt-tl-dep-info-popover {\n font-size: 0.75rem;\n color: #374151;\n padding: 6px 10px !important;\n max-width: 260px;\n line-height: 1.4;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.gantt-tl-dep-info-prefix {\n color: #6b7280;\n}\n\n.gantt-tl-dep-info-name {\n font-weight: 500;\n color: #111827;\n white-space: normal;\n word-break: break-word;\n}\n\n/* Summary chip: \"N связей\" — shown when 2+ deps */\n.gantt-tl-dep-summary-chip {\n display: inline-flex;\n align-items: center;\n background-color: rgba(107, 114, 128, 0.12);\n border: 1px solid rgba(107, 114, 128, 0.3);\n border-radius: 4px;\n padding: 4px 4px;\n font-size: 0.7rem;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n font-family: inherit;\n}\n\n.gantt-tl-dep-summary-chip:hover {\n background-color: rgba(59, 130, 246, 0.1);\n color: #1d4ed8;\n border-color: rgba(59, 130, 246, 0.3);\n}\n\n/* \"+N ещё\" overflow button */\n.gantt-tl-dep-overflow-trigger {\n display: inline-flex;\n align-items: center;\n background-color: rgba(107, 114, 128, 0.1);\n border: 1px solid rgba(107, 114, 128, 0.25);\n border-radius: 4px;\n padding: 1px 4px;\n font-size: 0.7rem;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n font-family: inherit;\n}\n\n.gantt-tl-dep-overflow-trigger:hover {\n background-color: rgba(59, 130, 246, 0.1);\n color: #1d4ed8;\n}\n\n/* Overflow popover content — list of all deps */\n.gantt-tl-dep-overflow-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 8px;\n min-width: 140px;\n}\n\n.gantt-tl-dep-overflow-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n font-size: 0.8rem;\n color: #374151;\n}\n\n/* \"+\" add dependency button */\n.gantt-tl-dep-add {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px dashed rgba(59, 130, 246, 0.4);\n border-radius: 4px;\n width: 23px;\n height: 23px;\n font-size: 0.9rem;\n color: #3b82f6;\n cursor: pointer;\n padding: 0;\n font-family: inherit;\n flex-shrink: 0;\n}\n\n.gantt-tl-dep-add:hover {\n background-color: rgba(59, 130, 246, 0.1);\n border-color: #3b82f6;\n}\n\n/* Picker mode: «Связи» cell on all rows becomes a selection target */\n.gantt-tl-row-picking .gantt-tl-cell-deps {\n cursor: crosshair;\n background-color: rgba(59, 130, 246, 0.04);\n}\n\n.gantt-tl-row-picking .gantt-tl-cell-deps:hover {\n background-color: rgba(59, 130, 246, 0.15);\n}\n\n/* Picker mode: current task's own row — disabled */\n.gantt-tl-row-picking-self .gantt-tl-cell-deps {\n cursor: not-allowed;\n}\n\n/* Placeholder text shown in source row's deps cell while picking a predecessor */\n.gantt-tl-dep-source-hint {\n font-size: 0.75rem;\n color: #6b7280;\n font-style: italic;\n pointer-events: none;\n white-space: nowrap;\n}\n\n/* Predecessor cell full-replacement: \"Зависит от [name]\" → hover → \"Удалить\" */\n.gantt-tl-dep-delete-label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n background: #ef4444;\n border: none;\n border-radius: 4px;\n padding: 2px 4px;\n font-size: 0.75rem;\n font-family: inherit;\n cursor: pointer;\n color: #fff;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: center;\n}\n\n.gantt-tl-dep-delete-label-hover {\n display: none;\n color: #fff;\n font-weight: 600;\n}\n\n.gantt-tl-dep-delete-label:hover .gantt-tl-dep-delete-label-default {\n display: none;\n}\n\n.gantt-tl-dep-delete-label:hover .gantt-tl-dep-delete-label-hover {\n display: inline;\n}\n\n/* Cycle error banner below header */\n.gantt-tl-dep-error {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background-color: #fef2f2;\n border: 1px solid #fca5a5;\n border-top: none;\n padding: 4px 8px;\n font-size: 0.75rem;\n color: #dc2626;\n z-index: 10;\n white-space: nowrap;\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 position: relative;\n}\n\n/* Wrapper for horizontal scroll content - keeps TaskList and chart together */\n.gantt-scrollContent {\n display: flex;\n min-width: min-content;\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
|
@@ -228,6 +228,15 @@ interface GanttChartProps {
|
|
|
228
228
|
taskListWidth?: number;
|
|
229
229
|
/** Disable task name editing in the task list (default: false) */
|
|
230
230
|
disableTaskNameEditing?: boolean;
|
|
231
|
+
/** Disable dependency editing in the task list (default: false) */
|
|
232
|
+
disableDependencyEditing?: boolean;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Ref handle type for GanttChart — exposes imperative scroll methods.
|
|
236
|
+
*/
|
|
237
|
+
interface GanttChartHandle {
|
|
238
|
+
scrollToToday: () => void;
|
|
239
|
+
scrollToTask: (taskId: string) => void;
|
|
231
240
|
}
|
|
232
241
|
/**
|
|
233
242
|
* GanttChart component - displays tasks on a monthly timeline with Excel-like styling
|
|
@@ -245,9 +254,7 @@ interface GanttChartProps {
|
|
|
245
254
|
* />
|
|
246
255
|
* ```
|
|
247
256
|
*/
|
|
248
|
-
declare const GanttChart: React$1.ForwardRefExoticComponent<GanttChartProps & React$1.RefAttributes<
|
|
249
|
-
scrollToToday: () => void;
|
|
250
|
-
}>>;
|
|
257
|
+
declare const GanttChart: React$1.ForwardRefExoticComponent<GanttChartProps & React$1.RefAttributes<GanttChartHandle>>;
|
|
251
258
|
|
|
252
259
|
interface TaskRowProps {
|
|
253
260
|
/** Task data to render */
|
|
@@ -378,11 +385,21 @@ interface TaskListProps {
|
|
|
378
385
|
show?: boolean;
|
|
379
386
|
/** Disable task name editing in the task list (default: false) */
|
|
380
387
|
disableTaskNameEditing?: boolean;
|
|
388
|
+
/** Disable dependency editing (hides +, ×, and type menu; read-only column) (default: false) */
|
|
389
|
+
disableDependencyEditing?: boolean;
|
|
390
|
+
/** Callback to scroll the chart grid to a task (wired to № cell click) */
|
|
391
|
+
onScrollToTask?: (taskId: string) => void;
|
|
392
|
+
/** Callback when selected chip changes (used by GanttChart to highlight the corresponding arrow) */
|
|
393
|
+
onSelectedChipChange?: (chip: {
|
|
394
|
+
successorId: string;
|
|
395
|
+
predecessorId: string;
|
|
396
|
+
linkType: string;
|
|
397
|
+
} | null) => void;
|
|
381
398
|
}
|
|
382
399
|
/**
|
|
383
400
|
* TaskList component - displays tasks in a table format as an overlay
|
|
384
401
|
*
|
|
385
|
-
* Renders a table with columns: № (number), Name, Start Date, End Date
|
|
402
|
+
* Renders a table with columns: № (number), Name, Start Date, End Date, Dependencies
|
|
386
403
|
* Uses position: sticky for synchronized vertical scrolling with the chart.
|
|
387
404
|
*/
|
|
388
405
|
declare const TaskList: React$1.FC<TaskListProps>;
|
|
@@ -621,14 +638,25 @@ declare function detectCycles(tasks: Task$1[]): {
|
|
|
621
638
|
hasCycle: boolean;
|
|
622
639
|
cyclePath?: string[];
|
|
623
640
|
};
|
|
641
|
+
/**
|
|
642
|
+
* Compute lag (in days) from actual predecessor/successor dates.
|
|
643
|
+
* This is the single source of truth for lag semantics across chips, arrows, and drag.
|
|
644
|
+
*
|
|
645
|
+
* Semantics (lag=0 = natural, gap-free connection):
|
|
646
|
+
* - FS: lag = succStart - predEnd - 1 (adjacent days = 0)
|
|
647
|
+
* - SS: lag = succStart - predStart
|
|
648
|
+
* - FF: lag = succEnd - predEnd
|
|
649
|
+
* - SF: lag = succEnd - predStart + 1 (symmetric to FS)
|
|
650
|
+
*/
|
|
651
|
+
declare function computeLagFromDates(linkType: LinkType, predStart: Date, predEnd: Date, succStart: Date, succEnd: Date): number;
|
|
624
652
|
/**
|
|
625
653
|
* Calculate successor date based on predecessor dates, link type, and lag
|
|
626
654
|
*
|
|
627
655
|
* Link type semantics:
|
|
628
|
-
* - FS: Successor start = Predecessor end + lag
|
|
656
|
+
* - FS: Successor start = Predecessor end + lag + 1 day (lag=0 → next day)
|
|
629
657
|
* - SS: Successor start = Predecessor start + lag
|
|
630
|
-
* - FF: Successor end
|
|
631
|
-
* - SF: Successor end
|
|
658
|
+
* - FF: Successor end = Predecessor end + lag
|
|
659
|
+
* - SF: Successor end = Predecessor start + lag - 1 day (lag=0 → day before)
|
|
632
660
|
*/
|
|
633
661
|
declare function calculateSuccessorDate(predecessorStart: Date, predecessorEnd: Date, linkType: LinkType, lag?: number): Date;
|
|
634
662
|
/**
|
|
@@ -796,4 +824,4 @@ declare const calculateOrthogonalPath: (from: {
|
|
|
796
824
|
y: number;
|
|
797
825
|
}) => string;
|
|
798
826
|
|
|
799
|
-
export { Button, type ButtonProps, Calendar, type CalendarProps, DatePicker, type DatePickerProps, DragGuideLines, GanttChart, type GanttChartProps, type GanttDateRange, GridBackground, type GridConfig, type GridLine, Input, type InputProps, type MonthSpan, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type Task, type TaskBarGeometry, type TaskDependency, TaskList, type TaskListProps, TaskRow, TimeScaleHeader, TodayIndicator, type WeekendBlock, buildAdjacencyList, calculateBezierPath, calculateDependencyPath, calculateGridLines, calculateGridWidth, calculateOrthogonalPath, calculateSuccessorDate, calculateTaskBar, calculateWeekendBlocks, cascadeByLinks, detectCycles, detectEdgeZone, formatDateLabel, getAllDependencyEdges, getCursorForPosition, getDayOffset, getMonthDays, getMonthSpans, getMultiMonthDays, getSuccessorChain, getTransitiveCascadeChain, isToday, isWeekend, parseUTCDate, pixelsToDate, recalculateIncomingLags, useTaskDrag, validateDependencies };
|
|
827
|
+
export { Button, type ButtonProps, Calendar, type CalendarProps, DatePicker, type DatePickerProps, DragGuideLines, GanttChart, type GanttChartHandle, type GanttChartProps, type GanttDateRange, GridBackground, type GridConfig, type GridLine, Input, type InputProps, type MonthSpan, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type Task, type TaskBarGeometry, type TaskDependency, TaskList, type TaskListProps, TaskRow, TimeScaleHeader, TodayIndicator, type WeekendBlock, buildAdjacencyList, calculateBezierPath, calculateDependencyPath, calculateGridLines, calculateGridWidth, calculateOrthogonalPath, calculateSuccessorDate, calculateTaskBar, calculateWeekendBlocks, cascadeByLinks, computeLagFromDates, detectCycles, detectEdgeZone, formatDateLabel, getAllDependencyEdges, getCursorForPosition, getDayOffset, getMonthDays, getMonthSpans, getMultiMonthDays, getSuccessorChain, getTransitiveCascadeChain, isToday, isWeekend, parseUTCDate, pixelsToDate, recalculateIncomingLags, useTaskDrag, validateDependencies };
|
package/dist/index.d.ts
CHANGED
|
@@ -228,6 +228,15 @@ interface GanttChartProps {
|
|
|
228
228
|
taskListWidth?: number;
|
|
229
229
|
/** Disable task name editing in the task list (default: false) */
|
|
230
230
|
disableTaskNameEditing?: boolean;
|
|
231
|
+
/** Disable dependency editing in the task list (default: false) */
|
|
232
|
+
disableDependencyEditing?: boolean;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Ref handle type for GanttChart — exposes imperative scroll methods.
|
|
236
|
+
*/
|
|
237
|
+
interface GanttChartHandle {
|
|
238
|
+
scrollToToday: () => void;
|
|
239
|
+
scrollToTask: (taskId: string) => void;
|
|
231
240
|
}
|
|
232
241
|
/**
|
|
233
242
|
* GanttChart component - displays tasks on a monthly timeline with Excel-like styling
|
|
@@ -245,9 +254,7 @@ interface GanttChartProps {
|
|
|
245
254
|
* />
|
|
246
255
|
* ```
|
|
247
256
|
*/
|
|
248
|
-
declare const GanttChart: React$1.ForwardRefExoticComponent<GanttChartProps & React$1.RefAttributes<
|
|
249
|
-
scrollToToday: () => void;
|
|
250
|
-
}>>;
|
|
257
|
+
declare const GanttChart: React$1.ForwardRefExoticComponent<GanttChartProps & React$1.RefAttributes<GanttChartHandle>>;
|
|
251
258
|
|
|
252
259
|
interface TaskRowProps {
|
|
253
260
|
/** Task data to render */
|
|
@@ -378,11 +385,21 @@ interface TaskListProps {
|
|
|
378
385
|
show?: boolean;
|
|
379
386
|
/** Disable task name editing in the task list (default: false) */
|
|
380
387
|
disableTaskNameEditing?: boolean;
|
|
388
|
+
/** Disable dependency editing (hides +, ×, and type menu; read-only column) (default: false) */
|
|
389
|
+
disableDependencyEditing?: boolean;
|
|
390
|
+
/** Callback to scroll the chart grid to a task (wired to № cell click) */
|
|
391
|
+
onScrollToTask?: (taskId: string) => void;
|
|
392
|
+
/** Callback when selected chip changes (used by GanttChart to highlight the corresponding arrow) */
|
|
393
|
+
onSelectedChipChange?: (chip: {
|
|
394
|
+
successorId: string;
|
|
395
|
+
predecessorId: string;
|
|
396
|
+
linkType: string;
|
|
397
|
+
} | null) => void;
|
|
381
398
|
}
|
|
382
399
|
/**
|
|
383
400
|
* TaskList component - displays tasks in a table format as an overlay
|
|
384
401
|
*
|
|
385
|
-
* Renders a table with columns: № (number), Name, Start Date, End Date
|
|
402
|
+
* Renders a table with columns: № (number), Name, Start Date, End Date, Dependencies
|
|
386
403
|
* Uses position: sticky for synchronized vertical scrolling with the chart.
|
|
387
404
|
*/
|
|
388
405
|
declare const TaskList: React$1.FC<TaskListProps>;
|
|
@@ -621,14 +638,25 @@ declare function detectCycles(tasks: Task$1[]): {
|
|
|
621
638
|
hasCycle: boolean;
|
|
622
639
|
cyclePath?: string[];
|
|
623
640
|
};
|
|
641
|
+
/**
|
|
642
|
+
* Compute lag (in days) from actual predecessor/successor dates.
|
|
643
|
+
* This is the single source of truth for lag semantics across chips, arrows, and drag.
|
|
644
|
+
*
|
|
645
|
+
* Semantics (lag=0 = natural, gap-free connection):
|
|
646
|
+
* - FS: lag = succStart - predEnd - 1 (adjacent days = 0)
|
|
647
|
+
* - SS: lag = succStart - predStart
|
|
648
|
+
* - FF: lag = succEnd - predEnd
|
|
649
|
+
* - SF: lag = succEnd - predStart + 1 (symmetric to FS)
|
|
650
|
+
*/
|
|
651
|
+
declare function computeLagFromDates(linkType: LinkType, predStart: Date, predEnd: Date, succStart: Date, succEnd: Date): number;
|
|
624
652
|
/**
|
|
625
653
|
* Calculate successor date based on predecessor dates, link type, and lag
|
|
626
654
|
*
|
|
627
655
|
* Link type semantics:
|
|
628
|
-
* - FS: Successor start = Predecessor end + lag
|
|
656
|
+
* - FS: Successor start = Predecessor end + lag + 1 day (lag=0 → next day)
|
|
629
657
|
* - SS: Successor start = Predecessor start + lag
|
|
630
|
-
* - FF: Successor end
|
|
631
|
-
* - SF: Successor end
|
|
658
|
+
* - FF: Successor end = Predecessor end + lag
|
|
659
|
+
* - SF: Successor end = Predecessor start + lag - 1 day (lag=0 → day before)
|
|
632
660
|
*/
|
|
633
661
|
declare function calculateSuccessorDate(predecessorStart: Date, predecessorEnd: Date, linkType: LinkType, lag?: number): Date;
|
|
634
662
|
/**
|
|
@@ -796,4 +824,4 @@ declare const calculateOrthogonalPath: (from: {
|
|
|
796
824
|
y: number;
|
|
797
825
|
}) => string;
|
|
798
826
|
|
|
799
|
-
export { Button, type ButtonProps, Calendar, type CalendarProps, DatePicker, type DatePickerProps, DragGuideLines, GanttChart, type GanttChartProps, type GanttDateRange, GridBackground, type GridConfig, type GridLine, Input, type InputProps, type MonthSpan, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type Task, type TaskBarGeometry, type TaskDependency, TaskList, type TaskListProps, TaskRow, TimeScaleHeader, TodayIndicator, type WeekendBlock, buildAdjacencyList, calculateBezierPath, calculateDependencyPath, calculateGridLines, calculateGridWidth, calculateOrthogonalPath, calculateSuccessorDate, calculateTaskBar, calculateWeekendBlocks, cascadeByLinks, detectCycles, detectEdgeZone, formatDateLabel, getAllDependencyEdges, getCursorForPosition, getDayOffset, getMonthDays, getMonthSpans, getMultiMonthDays, getSuccessorChain, getTransitiveCascadeChain, isToday, isWeekend, parseUTCDate, pixelsToDate, recalculateIncomingLags, useTaskDrag, validateDependencies };
|
|
827
|
+
export { Button, type ButtonProps, Calendar, type CalendarProps, DatePicker, type DatePickerProps, DragGuideLines, GanttChart, type GanttChartHandle, type GanttChartProps, type GanttDateRange, GridBackground, type GridConfig, type GridLine, Input, type InputProps, type MonthSpan, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type Task, type TaskBarGeometry, type TaskDependency, TaskList, type TaskListProps, TaskRow, TimeScaleHeader, TodayIndicator, type WeekendBlock, buildAdjacencyList, calculateBezierPath, calculateDependencyPath, calculateGridLines, calculateGridWidth, calculateOrthogonalPath, calculateSuccessorDate, calculateTaskBar, calculateWeekendBlocks, cascadeByLinks, computeLagFromDates, detectCycles, detectEdgeZone, formatDateLabel, getAllDependencyEdges, getCursorForPosition, getDayOffset, getMonthDays, getMonthSpans, getMultiMonthDays, getSuccessorChain, getTransitiveCascadeChain, isToday, isWeekend, parseUTCDate, pixelsToDate, recalculateIncomingLags, useTaskDrag, validateDependencies };
|