gantt-lib 0.23.0 → 0.24.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 +101 -12
- package/dist/index.d.ts +101 -12
- package/dist/index.js +1207 -250
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1195 -250
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +184 -5
- 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 font-family: var(--gantt-font-family);\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: transparent;\n border-radius: 0;\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: 280px;\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-family: inherit;\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-cal-weekday {\n width: 32px;\n height: 24px;\n font-size: 0.75rem;\n font-family: inherit;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--gantt-calendar-text-muted);\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\n/* =========================================================\n * DatePicker inline date input\n * ========================================================= */\n\n.gantt-datepicker-input-row {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 8px;\n border-bottom: 1px solid var(--gantt-input-border);\n}\n\n.gantt-datepicker-date-input {\n width: 90px;\n flex-shrink: 0;\n font-family: inherit;\n font-size: 0.875rem;\n font-variant-numeric: tabular-nums;\n background: transparent;\n border: 1px solid var(--gantt-input-border);\n border-radius: 4px;\n outline: none;\n color: var(--gantt-input-text);\n cursor: default;\n letter-spacing: 0.05em;\n text-align: center;\n height: 28px;\n padding: 0 4px;\n}\n\n.gantt-datepicker-date-input:focus {\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n}\n\n.gantt-datepicker-date-input::selection {\n background: rgba(59, 130, 246, 0.25);\n}\n\n.gantt-datepicker-shift-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: inherit;\n font-size: 0.75rem;\n font-weight: 500;\n padding: 0 7px;\n height: 28px;\n border: none;\n border-radius: 4px;\n background: var(--gantt-calendar-day-hover, rgba(0,0,0,0.07));\n color: var(--gantt-calendar-text);\n cursor: pointer;\n}\n\n.gantt-datepicker-shift-btn:hover {\n background: var(--gantt-input-border, rgba(0,0,0,0.15));\n}\n\n","/* Gantt Chart CSS Variables - User customizable theming */\n@import './components/ui/ui.css';\n\n:root {\n /* Font */\n --gantt-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\n /* Grid Colors */\n --gantt-grid-line-color: #e0e0e0;\n --gantt-cell-background: #ffffff;\n --gantt-row-hover-background: #f6f6f7;\n\n /* Dimensions */\n --gantt-row-height: 30px;\n --gantt-header-height: 40px;\n --gantt-day-width: 30px;\n --gantt-container-border-radius: 10px;\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: 1px;\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 /* Task List - Vertical Separators (hidden by default) */\n --gantt-tl-vertical-separators: none;\n --gantt-tl-vertical-separators-width: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n /* To enable separators, set: --gantt-tl-vertical-separators: var(--gantt-tl-vertical-separators-width); */\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 /* Expired task color */\n --gantt-expired-color: #ef4444;\n\n /* Parent Task Styling (Phase 19) - MS Project bracket style */\n --gantt-parent-bar-color: #782fc4;\n --gantt-parent-bar-height: 20px;\n --gantt-parent-bar-radius: 8px;\n --gantt-parent-ear-depth: 6px;\n --gantt-parent-ear-width: 8px;\n --gantt-parent-row-bg: #eeedfb;\n --gantt-divider-grid-color: #d4bceb;\n /* --gantt-parent-row-bg: #f2ebf9; */\n}\n\n/* Remove browser default focus outlines for all gantt elements */\n.gantt-container *:focus,\n.gantt-container *:focus-visible {\n outline: none;\n}\n\n/* Prevent text selection by cursor inside the gantt chart */\n.gantt-container * {\n user-select: none;\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 text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.04em;\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/* Separator divs — absolutely positioned, pixel-aligned with GridBackground.\n top/bottom/height set via inline style per separator (fullHeight vs row-2-only). */\n.gantt-tsh-separator {\n position: absolute;\n width: 1px;\n background-color: var(--gantt-week-separator-color, #e5e7eb);\n pointer-events: none;\n z-index: 1;\n}\n\n.gantt-tsh-separator--thick {\n background-color: 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, #fef3f2);\n}\n\n.gantt-tsh-weekendDay .gantt-tsh-dayLabel {\n color: #ef4444;\n}\n\n.gantt-tsh-today {\n background-color: #dc2626;\n border-radius: 4px 4px 4px 0;\n}\n\n.gantt-tsh-today .gantt-tsh-dayLabel {\n color: #ffffff;\n}\n\n/* Week-view cell in day row (wider 7-day column) */\n.gantt-tsh-weekCell {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 0.5rem;\n box-sizing: border-box;\n}","/**\n * TaskRow Component Styles\n */\n\n:root {\n --gantt-task-bar-border-radius: 6px;\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.gantt-tr-row-filter-match {\n background-color: rgba(250, 204, 21, 0.24);\n}\n\n.gantt-tr-row:hover {\n background-color: rgba(59, 130, 246, 0.04);\n}\n\n.gantt-tr-row.gantt-tr-row-filter-match:hover {\n background-color: rgba(250, 204, 21, 0.3);\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 1px 4px rgba(0, 0, 0, 0.15);\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: #2563eb;\n white-space: nowrap;\n user-select: none;\n}\n\n.gantt-tr-resizeHandle {\n position: absolute;\n top: 0;\n width: 20px;\n height: 100%;\n cursor: ew-resize;\n pointer-events: auto;\n z-index: 10;\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: #6b7280;\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: #6b7280;\n white-space: nowrap;\n}\n\n/* Duration text outside task bar (before progress and task name) */\n.gantt-tr-externalDuration {\n font-size: 0.875rem;\n font-weight: 600;\n color: #374151;\n white-space: nowrap;\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 var(--gantt-divider-grid-color, #d4bceb);\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\n/* ============================================================================\n Parent Task Bar Styles (Phase 19)\n ============================================================================ */\n\n/* Parent task bar - MS Project bracket style */\n.gantt-tr-parentBar {\n background-color: var(--gantt-parent-bar-color, #333333);\n height: var(--gantt-parent-bar-height, 14px) !important;\n border-radius: var(--gantt-parent-bar-radius, 8px) var(--gantt-parent-bar-radius, 8px) 0 0;\n position: relative;\n overflow: visible;\n /* Allow trapezoid ears to extend below the bar */\n /* Center the entire shape (bar + ears) vertically */\n /* Total height = 14px (bar) + 8px (ears) = 22px, midpoint at 11px from top */\n top: calc(50% - 20px);\n transform: none;\n}\n\n/* Trapezoid ears for bracket appearance */\n.gantt-tr-parentBar::before,\n.gantt-tr-parentBar::after {\n content: \"\";\n position: absolute;\n top: calc(var(--gantt-parent-bar-height, 14px) - 1px);\n height: var(--gantt-parent-ear-depth, 8px);\n width: var(--gantt-parent-ear-width, 10px);\n background-color: var(--gantt-parent-bar-color, #333333);\n}\n\n.gantt-tr-parentBar::before {\n left: 0;\n clip-path: polygon(0 0, 100% 0, 60% 100%, 0 100%);\n}\n\n.gantt-tr-parentBar::after {\n right: 0;\n clip-path: polygon(0 0, 100% 0, 100% 100%, 40% 100%);\n}\n","/**\n * TodayIndicator Component Styles\n */\n\n.gantt-ti-indicator {\n position: absolute;\n top: -1px;\n bottom: 0;\n z-index: 0;\n pointer-events: none;\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/* Virtual dependency lines (for hidden tasks inside collapsed parents) */\n.gantt-dependency-virtual {\n stroke-dasharray: 4 2;\n opacity: 0.6;\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 width: var(--tasklist-width, 640px);\n min-width: var(--tasklist-width, 640px);\n}\n\n.gantt-tl-overlay.gantt-tl-overlay-shadowed {\n box-shadow: 10px 0 18px -14px rgba(15, 23, 42, 0.45);\n}\n\n/* Hidden state - animated slide out while preserving layout */\n.gantt-tl-overlay.gantt-tl-hidden {\n opacity: 0;\n visibility: hidden;\n transform: translateX(-100%);\n pointer-events: none;\n width: 0 !important;\n min-width: 0 !important;\n overflow: hidden;\n}\n\n.gantt-tl-overlay {\n transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s ease, width 0.25s ease, min-width 0.25s ease;\n}\n\n.gantt-tl-table {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-width: 640px;\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: #6b7280;\n box-sizing: border-box;\n border-right: var(--gantt-tl-vertical-separators);\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 position: relative;\n}\n\n.gantt-tl-row-filter-match {\n background-color: rgba(250, 204, 21, 0.24);\n}\n\n.gantt-tl-row:hover {\n box-shadow: inset 0 0 0 9999px rgba(17, 24, 39, 0.04);\n}\n\n.gantt-tl-row-filter-match:hover {\n box-shadow: inset 0 0 0 9999px rgba(250, 204, 21, 0.3);\n}\n\n.gantt-tl-row-selected {\n box-shadow: inset 0 0 0 9999px rgba(17, 24, 39, 0.08);\n}\n\n/* Hierarchy row styles */\n.gantt-tl-row-child {\n padding-left: 0;\n}\n\n\n.gantt-tl-row-parent {\n font-weight: 600;\n /* background-color: var(--gantt-parent-row-bg, #f2ebf9); */\n}\n\n/* Bold dates in parent rows */\n.gantt-tl-row-parent .gantt-datepicker-trigger {\n font-weight: 600;\n}\n\n.gantt-tl-collapse-btn {\n position: absolute;\n left: 4px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 2;\n width: 18px;\n height: 18px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--gantt-text-color, #374151);\n padding: 0;\n transition: background-color 0.15s ease;\n}\n\n.gantt-tl-collapse-btn:hover {\n background-color: transparent;\n}\n\n.gantt-tl-collapse-btn svg {\n transition: transform 0.15s ease;\n}\n\n.gantt-tl-collapse-btn:not(.gantt-tl-collapse-btn-collapsed) svg {\n transform: rotate(90deg);\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: var(--gantt-tl-vertical-separators);\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: 32px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 0;\n padding: 0 2px 0 6px;\n flex-shrink: 0;\n cursor: pointer;\n position: relative;\n}\n\n/* Drag handle (hidden by default, reveal on row hover) */\n.gantt-tl-drag-handle {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 8px;\n cursor: grab;\n color: #9ca3af;\n visibility: hidden;\n user-select: none;\n background: transparent;\n}\n\n.gantt-tl-row:hover .gantt-tl-drag-handle,\n.gantt-tl-row-dragging .gantt-tl-drag-handle {\n visibility: visible;\n}\n\n.gantt-tl-row:hover .gantt-tl-num-label {\n visibility: hidden;\n}\n\n.gantt-tl-num-label {\n font-size: 0.75rem;\n opacity: 0.45;\n}\n\n.gantt-tl-drag-handle:active {\n cursor: grabbing;\n}\n\n/* Dragging row (semi-transparent background, blue text) */\n.gantt-tl-row-dragging {\n background-color: rgba(59, 130, 246, 0.15);\n}\n\n.gantt-tl-row-dragging .gantt-tl-cell,\n.gantt-tl-row-dragging .gantt-tl-name-trigger,\n.gantt-tl-row-dragging .gantt-tl-num-label {\n color: #3b82f6 !important;\n}\n\n/* Drop target indicator (blue top border) - uses ::before to avoid layout shift */\n.gantt-tl-row-drag-over {\n position: relative;\n}\n\n.gantt-tl-row-drag-over::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 2px;\n background-color: #3b82f6;\n z-index: 1;\n}\n\n/* Navigate icon removed - single click on task name now selects row */\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: 160px;\n position: relative;\n overflow: visible;\n align-items: center;\n padding: 0 4px;\n /* add right padding for button space */\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/* Duration cell */\n.gantt-tl-cell-duration {\n width: 46px;\n flex-shrink: 0;\n justify-content: center;\n padding: 0 4px;\n cursor: pointer;\n position: relative;\n overflow: visible;\n font-variant-numeric: tabular-nums;\n}\n\n/* Progress cell */\n.gantt-tl-cell-progress {\n width: 56px;\n flex-shrink: 0;\n justify-content: center;\n padding: 0 4px;\n cursor: pointer;\n position: relative;\n overflow: visible;\n font-variant-numeric: tabular-nums;\n}\n\n.gantt-tl-number-editor {\n position: absolute;\n inset: 0;\n}\n\n.gantt-tl-number-input {\n width: 100%;\n height: 100%;\n padding: 0 18px 0 6px;\n border-width: 1px;\n border-color: #93c5fd;\n border-radius: 8px;\n text-align: left;\n font-size: 0.8rem;\n line-height: 1;\n box-shadow: 0 0 0 1px rgba(147, 197, 253, 0.35);\n}\n\n.gantt-tl-number-input::-webkit-outer-spin-button,\n.gantt-tl-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.gantt-tl-number-input[type='number'] {\n -moz-appearance: textfield;\n}\n\n.gantt-tl-number-steppers {\n position: absolute;\n top: 2px;\n right: 2px;\n bottom: 2px;\n width: 14px;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.gantt-tl-number-stepper {\n flex: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 5px;\n background: rgba(248, 250, 252, 0.95);\n color: #64748b;\n padding: 0;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.gantt-tl-number-stepper:hover {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.gantt-tl-number-stepper:active {\n background: #bfdbfe;\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 position: absolute;\n inset: 0;\n padding: 0 4px;\n /* match parent cell padding so text stays visually aligned */\n font-size: 0.8rem;\n line-height: 1.2;\n font-family: inherit;\n font-weight: inherit;\n color: #374151;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n user-select: none;\n white-space: normal;\n word-break: break-word;\n box-sizing: border-box;\n}\n\n.gantt-tl-name-trigger-parent {\n padding-left: 26px;\n}\n\n.gantt-tl-name-trigger-child {\n padding-left: 24px;\n}\n\n.gantt-tl-name-trigger:hover,\n.gantt-tl-name-trigger:active {\n background-color: transparent;\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: 520px;\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-child {\n padding-left: 24px;\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/* Name cell action buttons container */\n.gantt-tl-name-actions {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\n/* Name cell action buttons — hover-reveal */\n.gantt-tl-name-action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 4px;\n width: 20px;\n height: 20px;\n padding: 0;\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease, background-color 0.15s ease;\n}\n\n/* Reveal buttons on row hover (any part of the row) */\n.gantt-tl-row:hover .gantt-tl-name-action-btn {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Hierarchy action buttons (promote/demote) */\n.gantt-tl-action-buttons {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n pointer-events: none;\n}\n\n.gantt-tl-row:hover .gantt-tl-action-buttons {\n opacity: 1;\n pointer-events: auto;\n}\n\n.gantt-tl-action-btn {\n padding: 2px 8px;\n font-size: 11px;\n border: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n background: white;\n border-radius: 4px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.gantt-tl-action-btn:hover {\n background: var(--gantt-cell-background, #f9fafb);\n border-color: var(--gantt-primary-color, #3b82f6);\n}\n\n.gantt-tl-action-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Dependencies column — header and data cells */\n.gantt-tl-cell-deps {\n width: 90px;\n flex-shrink: 0;\n flex-wrap: wrap;\n gap: 4px;\n padding: 2px 4px;\n align-items: center;\n overflow: hidden;\n position: relative;\n}\n\n/* Insert button styling (blue) */\n.gantt-tl-action-insert {\n background-color: #3b82f6;\n color: white;\n}\n\n.gantt-tl-action-insert:hover {\n background-color: #2563eb;\n}\n\n/* Delete button styling (red) */\n.gantt-tl-action-delete {\n background-color: #ef4444;\n color: white;\n}\n\n.gantt-tl-action-delete:hover {\n background-color: #dc2626;\n}\n\n/* Delete button confirmation state */\n.gantt-tl-action-delete.gantt-tl-action-delete-confirm {\n min-width: 60px;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n}\n\n.gantt-tl-action-delete.gantt-tl-action-delete-confirm:hover {\n background-color: #b91c1c;\n}\n\n/* Single hierarchy button with directional arrow */\n.gantt-tl-action-hierarchy {\n width: 20px;\n height: 20px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background-color: #4b5563;\n color: white;\n}\n\n.gantt-tl-action-hierarchy:hover {\n background-color: #374151;\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: #6b7280;\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: 6px;\n padding: 4px 4px;\n font-size: 0.7rem;\n color: #1d4ed8;\n white-space: nowrap;\n line-height: 14px;\n cursor: pointer;\n min-width: 42px;\n justify-content: center;\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/* Dep edit popover — interactive lag counter and delete button */\n.gantt-tl-dep-edit-popover {\n font-size: 0.85rem;\n color: #374151;\n padding: 10px 12px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n min-width: 200px;\n}\n\n.gantt-tl-dep-edit-row {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.gantt-tl-dep-edit-label {\n min-width: 8em;\n}\n\n.gantt-tl-dep-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border: 1px solid #d1d5db;\n border-radius: 4px;\n background: #f9fafb;\n cursor: pointer;\n color: #374151;\n padding: 0;\n line-height: 1;\n}\n\n.gantt-tl-dep-edit-btn:hover {\n background: #e5e7eb;\n}\n\n\n.gantt-tl-dep-edit-input {\n width: 56px;\n text-align: center;\n background: rgba(59, 130, 246, 0.1);\n border: 1px solid rgba(59, 130, 246, 0.3);\n border-radius: 4px;\n padding: 2px 4px;\n color: #1d4ed8;\n -moz-appearance: textfield;\n}\n\n.gantt-tl-dep-edit-input::-webkit-outer-spin-button,\n.gantt-tl-dep-edit-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.gantt-tl-dep-edit-input:focus {\n outline: none;\n border-color: rgba(59, 130, 246, 0.6);\n background: rgba(59, 130, 246, 0.15);\n}\n\n.gantt-tl-dep-edit-input::placeholder {\n color: #1d4ed8;\n opacity: 0.7;\n font-style: italic;\n}\n\n.gantt-tl-dep-edit-task {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n margin-bottom: 6px;\n}\n\n.gantt-tl-dep-edit-pred {\n font-weight: 500;\n color: #111827;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n margin-top: 8px;\n margin-bottom: 10px;\n}\n\n.gantt-tl-dep-edit-divider {\n border: none;\n border-top: 1px solid #e5e7eb;\n margin: 2px 0;\n}\n\n.gantt-tl-dep-edit-delete {\n display: flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n color: #ef4444;\n cursor: pointer;\n padding: 4px 0;\n font-size: 0.8rem;\n font-family: inherit;\n}\n\n.gantt-tl-dep-edit-delete:hover {\n color: #dc2626;\n text-decoration: underline;\n}\n\n/* Actions container for delete + close buttons */\n.gantt-tl-dep-edit-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.gantt-tl-dep-edit-close {\n display: flex;\n align-items: center;\n background: none;\n border: none;\n padding: 4px 0;\n font-size: 0.8rem;\n font-family: inherit;\n color: #6b7280;\n cursor: pointer;\n}\n\n.gantt-tl-dep-edit-close:hover {\n color: #374151;\n text-decoration: underline;\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: 0px solid rgba(107, 114, 128, 0.3);\n border-radius: 6px;\n padding: 4px 4px;\n font-size: 0.7rem;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n font-family: inherit;\n min-width: 32px;\n justify-content: center;\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: 0px solid rgba(59, 130, 246, 0.4);\n background-color: rgba(59, 130, 246, 0.12);\n border-radius: 4px;\n width: 30px;\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/* Hover-reveal variant for dep add button */\n.gantt-tl-dep-add-hover {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease;\n}\n\n.gantt-tl-row:hover .gantt-tl-dep-add-hover {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Hide add button when a chip is selected (to avoid clutter with delete button) */\n.gantt-tl-dep-add-hidden {\n display: none !important;\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 — clickable to cancel */\n.gantt-tl-row-picking-self .gantt-tl-cell-deps {\n cursor: pointer;\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: normal;\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-default {\n display: inline;\n pointer-events: none;\n}\n\n.gantt-tl-dep-delete-label-hover {\n display: none;\n color: #fff;\n font-weight: 600;\n pointer-events: none;\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}\n\n/* Add task button */\n.gantt-tl-add-btn {\n width: 100%;\n padding: 6px 12px;\n text-align: left;\n background: transparent;\n border: none;\n /* border-top: 1px dashed var(--gantt-grid-line-color, #e0e0e0); */\n cursor: pointer;\n font-size: 12px;\n color: var(--gantt-text-muted, #9ca3af);\n transition: background 0.15s ease, color 0.15s ease;\n font-family: inherit;\n}\n\n.gantt-tl-add-btn:hover {\n background: var(--gantt-hover-bg, rgba(0, 0, 0, 0.04));\n color: var(--gantt-text-color, #374151);\n}\n\n/* Blue top border when dragging over the add button */\n.gantt-tl-add-btn-drag-over {\n position: relative;\n background: rgba(59, 130, 246, 0.08);\n color: #3b82f6;\n}\n\n.gantt-tl-add-btn-drag-over::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 2px;\n background-color: #3b82f6;\n}\n\n.gantt-tl-cell-new-name {\n padding: 2px 4px;\n}\n",".gantt-container {\n width: 100%;\n font-family: var(--gantt-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 border-radius: var(--gantt-container-border-radius, 10px);\n overflow: hidden;\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 font-family: var(--gantt-font-family);\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: transparent;\n border-radius: 0;\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: 280px;\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-family: inherit;\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-cal-weekday {\n width: 32px;\n height: 24px;\n font-size: 0.75rem;\n font-family: inherit;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--gantt-calendar-text-muted);\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\n/* =========================================================\n * DatePicker inline date input\n * ========================================================= */\n\n.gantt-datepicker-input-row {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 8px;\n border-bottom: 1px solid var(--gantt-input-border);\n}\n\n.gantt-datepicker-date-input {\n width: 90px;\n flex-shrink: 0;\n font-family: inherit;\n font-size: 0.875rem;\n font-variant-numeric: tabular-nums;\n background: transparent;\n border: 1px solid var(--gantt-input-border);\n border-radius: 4px;\n outline: none;\n color: var(--gantt-input-text);\n cursor: default;\n letter-spacing: 0.05em;\n text-align: center;\n height: 28px;\n padding: 0 4px;\n}\n\n.gantt-datepicker-date-input:focus {\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);\n}\n\n.gantt-datepicker-date-input::selection {\n background: rgba(59, 130, 246, 0.25);\n}\n\n.gantt-datepicker-shift-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: inherit;\n font-size: 0.75rem;\n font-weight: 500;\n padding: 0 7px;\n height: 28px;\n border: none;\n border-radius: 4px;\n background: var(--gantt-calendar-day-hover, rgba(0,0,0,0.07));\n color: var(--gantt-calendar-text);\n cursor: pointer;\n}\n\n.gantt-datepicker-shift-btn:hover {\n background: var(--gantt-input-border, rgba(0,0,0,0.15));\n}\n\n","/* Gantt Chart CSS Variables - User customizable theming */\n@import './components/ui/ui.css';\n\n:root {\n /* Font */\n --gantt-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n\n /* Grid Colors */\n --gantt-grid-line-color: #e0e0e0;\n --gantt-cell-background: #ffffff;\n --gantt-row-hover-background: #f6f6f7;\n\n /* Dimensions */\n --gantt-row-height: 30px;\n --gantt-header-height: 40px;\n --gantt-day-width: 30px;\n --gantt-container-border-radius: 10px;\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: 1px;\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 /* Task List - Vertical Separators (hidden by default) */\n --gantt-tl-vertical-separators: none;\n --gantt-tl-vertical-separators-width: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n /* To enable separators, set: --gantt-tl-vertical-separators: var(--gantt-tl-vertical-separators-width); */\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 /* Expired task color */\n --gantt-expired-color: #ef4444;\n\n /* Parent Task Styling (Phase 19) - MS Project bracket style */\n --gantt-parent-bar-color: #782fc4;\n --gantt-parent-bar-height: 20px;\n --gantt-parent-bar-radius: 8px;\n --gantt-parent-ear-depth: 6px;\n --gantt-parent-ear-width: 8px;\n --gantt-parent-row-bg: #eeedfb;\n --gantt-divider-grid-color: #d4bceb;\n /* --gantt-parent-row-bg: #f2ebf9; */\n}\n\n/* Remove browser default focus outlines for all gantt elements */\n.gantt-container *:focus,\n.gantt-container *:focus-visible {\n outline: none;\n}\n\n/* Prevent text selection by cursor inside the gantt chart */\n.gantt-container * {\n user-select: none;\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 text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.04em;\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/* Separator divs — absolutely positioned, pixel-aligned with GridBackground.\n top/bottom/height set via inline style per separator (fullHeight vs row-2-only). */\n.gantt-tsh-separator {\n position: absolute;\n width: 1px;\n background-color: var(--gantt-week-separator-color, #e5e7eb);\n pointer-events: none;\n z-index: 1;\n}\n\n.gantt-tsh-separator--thick {\n background-color: 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, #fef3f2);\n}\n\n.gantt-tsh-weekendDay .gantt-tsh-dayLabel {\n color: #ef4444;\n}\n\n.gantt-tsh-today {\n background-color: #dc2626;\n border-radius: 4px 4px 4px 0;\n}\n\n.gantt-tsh-today .gantt-tsh-dayLabel {\n color: #ffffff;\n}\n\n/* Week-view cell in day row (wider 7-day column) */\n.gantt-tsh-weekCell {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 0.5rem;\n box-sizing: border-box;\n}","/**\n * TaskRow Component Styles\n */\n\n:root {\n --gantt-task-bar-border-radius: 6px;\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.gantt-tr-row-filter-match {\n background-color: rgba(250, 204, 21, 0.24);\n}\n\n.gantt-tr-row:hover {\n background-color: rgba(59, 130, 246, 0.04);\n}\n\n.gantt-tr-row.gantt-tr-row-filter-match:hover {\n background-color: rgba(250, 204, 21, 0.3);\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 1px 4px rgba(0, 0, 0, 0.15);\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: #2563eb;\n white-space: nowrap;\n user-select: none;\n}\n\n.gantt-tr-resizeHandle {\n position: absolute;\n top: 0;\n width: 20px;\n height: 100%;\n cursor: ew-resize;\n pointer-events: auto;\n z-index: 10;\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: #6b7280;\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: #6b7280;\n white-space: nowrap;\n}\n\n/* Duration text outside task bar (before progress and task name) */\n.gantt-tr-externalDuration {\n font-size: 0.875rem;\n font-weight: 600;\n color: #374151;\n white-space: nowrap;\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 var(--gantt-divider-grid-color, #d4bceb);\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\n/* ============================================================================\n Parent Task Bar Styles (Phase 19)\n ============================================================================ */\n\n/* Parent task bar - MS Project bracket style */\n.gantt-tr-parentBar {\n background-color: var(--gantt-parent-bar-color, #333333);\n height: var(--gantt-parent-bar-height, 14px) !important;\n border-radius: var(--gantt-parent-bar-radius, 8px) var(--gantt-parent-bar-radius, 8px) 0 0;\n position: relative;\n overflow: visible;\n /* Allow trapezoid ears to extend below the bar */\n /* Center the entire shape (bar + ears) vertically */\n /* Total height = 14px (bar) + 8px (ears) = 22px, midpoint at 11px from top */\n top: calc(50% - 20px);\n transform: none;\n}\n\n/* Trapezoid ears for bracket appearance */\n.gantt-tr-parentBar::before,\n.gantt-tr-parentBar::after {\n content: \"\";\n position: absolute;\n top: calc(var(--gantt-parent-bar-height, 14px) - 1px);\n height: var(--gantt-parent-ear-depth, 8px);\n width: var(--gantt-parent-ear-width, 10px);\n background-color: var(--gantt-parent-bar-color, #333333);\n}\n\n.gantt-tr-parentBar::before {\n left: 0;\n clip-path: polygon(0 0, 100% 0, 60% 100%, 0 100%);\n}\n\n.gantt-tr-parentBar::after {\n right: 0;\n clip-path: polygon(0 0, 100% 0, 100% 100%, 40% 100%);\n}\n","/**\n * TodayIndicator Component Styles\n */\n\n.gantt-ti-indicator {\n position: absolute;\n top: -1px;\n bottom: 0;\n z-index: 0;\n pointer-events: none;\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/* Virtual dependency lines (for hidden tasks inside collapsed parents) */\n.gantt-dependency-virtual {\n stroke-dasharray: 4 2;\n opacity: 0.6;\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 width: var(--tasklist-width, 640px);\n min-width: var(--tasklist-width, 640px);\n}\n\n.gantt-tl-overlay.gantt-tl-overlay-shadowed {\n box-shadow: 10px 0 18px -14px rgba(15, 23, 42, 0.45);\n}\n\n/* Hidden state - animated slide out while preserving layout */\n.gantt-tl-overlay.gantt-tl-hidden {\n opacity: 0;\n visibility: hidden;\n transform: translateX(-100%);\n pointer-events: none;\n width: 0 !important;\n min-width: 0 !important;\n overflow: hidden;\n}\n\n.gantt-tl-overlay {\n transition: opacity 0.25s ease, transform 0.25s ease, visibility 0.25s ease, width 0.25s ease, min-width 0.25s ease;\n}\n\n.gantt-tl-table {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-width: 640px;\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: #6b7280;\n box-sizing: border-box;\n border-right: var(--gantt-tl-vertical-separators);\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 position: relative;\n}\n\n.gantt-tl-row-filter-match {\n background-color: rgba(250, 204, 21, 0.24);\n}\n\n.gantt-tl-row:hover {\n box-shadow: inset 0 0 0 9999px rgba(17, 24, 39, 0.04);\n}\n\n.gantt-tl-row-filter-match:hover {\n box-shadow: inset 0 0 0 9999px rgba(250, 204, 21, 0.3);\n}\n\n.gantt-tl-row-selected {\n box-shadow: inset 0 0 0 9999px rgba(17, 24, 39, 0.08);\n}\n\n.gantt-tl-row-dependency-selected {\n box-shadow: inset 0 0 0 9999px rgba(5, 150, 105, 0.12);\n}\n\n.gantt-tl-row-dependency-selected:hover {\n box-shadow: inset 0 0 0 9999px rgba(5, 150, 105, 0.16);\n}\n\n.gantt-tl-row-dependency-owner {\n box-shadow: inset 0 0 0 9999px rgba(37, 99, 235, 0.12);\n}\n\n.gantt-tl-row-dependency-owner:hover {\n box-shadow: inset 0 0 0 9999px rgba(37, 99, 235, 0.16);\n}\n\n/* Hierarchy row styles */\n.gantt-tl-row-child {\n padding-left: 0;\n}\n\n\n.gantt-tl-row-parent {\n font-weight: 600;\n /* background-color: var(--gantt-parent-row-bg, #f2ebf9); */\n}\n\n/* Bold dates in parent rows */\n.gantt-tl-row-parent .gantt-datepicker-trigger {\n font-weight: 600;\n}\n\n.gantt-tl-collapse-btn {\n position: absolute;\n left: 4px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 2;\n width: 18px;\n height: 18px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--gantt-text-color, #374151);\n padding: 0;\n transition: background-color 0.15s ease;\n}\n\n.gantt-tl-collapse-btn:hover {\n background-color: transparent;\n}\n\n.gantt-tl-collapse-btn svg {\n transition: transform 0.15s ease;\n}\n\n.gantt-tl-collapse-btn:not(.gantt-tl-collapse-btn-collapsed) svg {\n transform: rotate(90deg);\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: var(--gantt-tl-vertical-separators);\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: 32px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 0;\n padding: 0 2px 0 6px;\n flex-shrink: 0;\n cursor: pointer;\n position: relative;\n}\n\n/* Drag handle (hidden by default, reveal on row hover) */\n.gantt-tl-drag-handle {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 8px;\n cursor: grab;\n color: #9ca3af;\n visibility: hidden;\n user-select: none;\n background: transparent;\n}\n\n.gantt-tl-row:hover .gantt-tl-drag-handle,\n.gantt-tl-row-dragging .gantt-tl-drag-handle {\n visibility: visible;\n}\n\n.gantt-tl-row:hover .gantt-tl-num-label {\n visibility: hidden;\n}\n\n.gantt-tl-num-label {\n font-size: 0.75rem;\n opacity: 0.45;\n}\n\n.gantt-tl-drag-handle:active {\n cursor: grabbing;\n}\n\n/* Dragging row (semi-transparent background, blue text) */\n.gantt-tl-row-dragging {\n background-color: rgba(59, 130, 246, 0.15);\n}\n\n.gantt-tl-row-dragging .gantt-tl-cell,\n.gantt-tl-row-dragging .gantt-tl-name-trigger,\n.gantt-tl-row-dragging .gantt-tl-num-label {\n color: #3b82f6 !important;\n}\n\n/* Drop target indicator (blue top border) - uses ::before to avoid layout shift */\n.gantt-tl-row-drag-over {\n position: relative;\n}\n\n.gantt-tl-row-drag-over::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 2px;\n background-color: #3b82f6;\n z-index: 1;\n}\n\n/* Navigate icon removed - single click on task name now selects row */\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: 160px;\n position: relative;\n overflow: visible;\n align-items: center;\n padding: 0 4px;\n /* add right padding for button space */\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/* Duration cell */\n.gantt-tl-cell-duration {\n width: 46px;\n flex-shrink: 0;\n justify-content: center;\n padding: 0 4px;\n cursor: pointer;\n position: relative;\n overflow: visible;\n font-variant-numeric: tabular-nums;\n}\n\n/* Progress cell */\n.gantt-tl-cell-progress {\n width: 56px;\n flex-shrink: 0;\n justify-content: center;\n padding: 0 4px;\n cursor: pointer;\n position: relative;\n overflow: visible;\n font-variant-numeric: tabular-nums;\n}\n\n.gantt-tl-number-editor {\n position: absolute;\n inset: 0;\n}\n\n.gantt-tl-number-input {\n width: 100%;\n height: 100%;\n padding: 0 18px 0 6px;\n border-width: 1px;\n border-color: #93c5fd;\n border-radius: 8px;\n text-align: left;\n font-size: 0.8rem;\n line-height: 1;\n box-shadow: 0 0 0 1px rgba(147, 197, 253, 0.35);\n}\n\n.gantt-tl-number-input::-webkit-outer-spin-button,\n.gantt-tl-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.gantt-tl-number-input[type='number'] {\n -moz-appearance: textfield;\n}\n\n.gantt-tl-number-steppers {\n position: absolute;\n top: 2px;\n right: 2px;\n bottom: 2px;\n width: 14px;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.gantt-tl-number-stepper {\n flex: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 5px;\n background: rgba(248, 250, 252, 0.95);\n color: #64748b;\n padding: 0;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.gantt-tl-number-stepper:hover {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.gantt-tl-number-stepper:active {\n background: #bfdbfe;\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 position: absolute;\n inset: 0;\n padding: 0 4px;\n /* match parent cell padding so text stays visually aligned */\n font-size: 0.8rem;\n line-height: 1.2;\n font-family: inherit;\n font-weight: inherit;\n color: #374151;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n user-select: none;\n white-space: normal;\n word-break: break-word;\n box-sizing: border-box;\n}\n\n.gantt-tl-name-trigger-parent {\n padding-left: 26px;\n}\n\n.gantt-tl-name-trigger-child {\n padding-left: 24px;\n}\n\n.gantt-tl-name-trigger:hover,\n.gantt-tl-name-trigger:active {\n background-color: transparent;\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: 520px;\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-child {\n padding-left: 24px;\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/* Name cell action buttons container */\n.gantt-tl-name-actions {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\n/* Name cell action buttons — hover-reveal */\n.gantt-tl-name-action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 4px;\n width: 20px;\n height: 20px;\n padding: 0;\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease, background-color 0.15s ease;\n}\n\n/* Reveal buttons on row hover (any part of the row) */\n.gantt-tl-row:hover .gantt-tl-name-action-btn {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Hierarchy action buttons (promote/demote) */\n.gantt-tl-action-buttons {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n pointer-events: none;\n}\n\n.gantt-tl-row:hover .gantt-tl-action-buttons {\n opacity: 1;\n pointer-events: auto;\n}\n\n.gantt-tl-action-btn {\n padding: 2px 8px;\n font-size: 11px;\n border: 1px solid var(--gantt-grid-line-color, #e0e0e0);\n background: white;\n border-radius: 4px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.gantt-tl-action-btn:hover {\n background: var(--gantt-cell-background, #f9fafb);\n border-color: var(--gantt-primary-color, #3b82f6);\n}\n\n.gantt-tl-action-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Dependencies column — header and data cells */\n.gantt-tl-cell-deps {\n width: 90px;\n flex-shrink: 0;\n flex-wrap: wrap;\n gap: 4px;\n padding: 2px 4px;\n align-items: center;\n overflow: visible;\n position: relative;\n}\n\n/* Insert button styling (blue) */\n.gantt-tl-action-insert {\n background-color: #3b82f6;\n color: white;\n}\n\n.gantt-tl-action-insert:hover {\n background-color: #2563eb;\n}\n\n/* Delete button styling (red) */\n.gantt-tl-action-delete {\n background-color: #ef4444;\n color: white;\n}\n\n.gantt-tl-action-delete:hover {\n background-color: #dc2626;\n}\n\n/* Delete button confirmation state */\n.gantt-tl-action-delete.gantt-tl-action-delete-confirm {\n min-width: 60px;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n}\n\n.gantt-tl-action-delete.gantt-tl-action-delete-confirm:hover {\n background-color: #b91c1c;\n}\n\n/* Single hierarchy button with directional arrow */\n.gantt-tl-action-hierarchy {\n width: 20px;\n height: 20px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background-color: #4b5563;\n color: white;\n}\n\n.gantt-tl-action-hierarchy:hover {\n background-color: #374151;\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: #6b7280;\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: 6px;\n padding: 4px 4px;\n font-size: 0.7rem;\n color: #1d4ed8;\n white-space: nowrap;\n line-height: 14px;\n cursor: pointer;\n min-width: 42px;\n justify-content: center;\n}\n\n/* Selected chip visual highlight — inverted */\n.gantt-tl-dep-chip-selected {\n background-color: #2563eb;\n border-color: #2563eb;\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/* Dep edit popover — interactive lag counter and delete button */\n.gantt-tl-dep-edit-popover {\n font-size: 0.85rem;\n color: #374151;\n padding: 10px 12px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n min-width: 200px;\n}\n\n.gantt-tl-dep-edit-row {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.gantt-tl-dep-edit-label {\n min-width: 8em;\n}\n\n.gantt-tl-dep-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border: 1px solid #d1d5db;\n border-radius: 4px;\n background: #f9fafb;\n cursor: pointer;\n color: #374151;\n padding: 0;\n line-height: 1;\n}\n\n.gantt-tl-dep-edit-btn:hover {\n background: #e5e7eb;\n}\n\n\n.gantt-tl-dep-edit-input {\n width: 56px;\n text-align: center;\n background: rgba(59, 130, 246, 0.1);\n border: 1px solid rgba(59, 130, 246, 0.3);\n border-radius: 4px;\n padding: 2px 4px;\n color: #1d4ed8;\n -moz-appearance: textfield;\n}\n\n.gantt-tl-dep-edit-input::-webkit-outer-spin-button,\n.gantt-tl-dep-edit-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.gantt-tl-dep-edit-input:focus {\n outline: none;\n border-color: rgba(59, 130, 246, 0.6);\n background: rgba(59, 130, 246, 0.15);\n}\n\n.gantt-tl-dep-edit-input::placeholder {\n color: #1d4ed8;\n opacity: 0.7;\n font-style: italic;\n}\n\n.gantt-tl-dep-edit-task {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n margin-bottom: 6px;\n}\n\n.gantt-tl-dep-edit-pred {\n font-weight: 500;\n color: #111827;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n margin-top: 8px;\n margin-bottom: 10px;\n}\n\n.gantt-tl-dep-edit-divider {\n border: none;\n border-top: 1px solid #e5e7eb;\n margin: 2px 0;\n}\n\n.gantt-tl-dep-edit-delete {\n display: flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n color: #ef4444;\n cursor: pointer;\n padding: 4px 0;\n font-size: 0.8rem;\n font-family: inherit;\n}\n\n.gantt-tl-dep-edit-delete:hover {\n color: #dc2626;\n text-decoration: underline;\n}\n\n/* Actions container for delete + close buttons */\n.gantt-tl-dep-edit-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.gantt-tl-dep-edit-close {\n display: flex;\n align-items: center;\n background: none;\n border: none;\n padding: 4px 0;\n font-size: 0.8rem;\n font-family: inherit;\n color: #6b7280;\n cursor: pointer;\n}\n\n.gantt-tl-dep-edit-close:hover {\n color: #374151;\n text-decoration: underline;\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: 0px solid rgba(107, 114, 128, 0.3);\n border-radius: 6px;\n padding: 4px 4px;\n font-size: 0.7rem;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n font-family: inherit;\n min-width: 32px;\n justify-content: center;\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: 0px solid rgba(59, 130, 246, 0.4);\n background-color: rgba(59, 130, 246, 0.12);\n border-radius: 4px;\n width: 30px;\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/* Hover-reveal variant for dep add button */\n.gantt-tl-dep-add-hover {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease;\n}\n\n.gantt-tl-row:hover .gantt-tl-dep-add-hover {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Hide add button when a chip is selected (to avoid clutter with delete button) */\n.gantt-tl-dep-add-hidden {\n display: none !important;\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 — clickable to cancel */\n.gantt-tl-row-picking-self .gantt-tl-cell-deps {\n cursor: pointer;\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 white-space: normal;\n}\n\n.gantt-tl-dep-source-picker {\n position: absolute;\n top: -80px;\n left: calc(100% + 8px);\n z-index: 20;\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 280px;\n max-width: 280px;\n padding: 12px 10px 10px;\n border: none;\n border-radius: 10px;\n background: #ffffff;\n box-shadow: 0 18px 40px rgba(15, 23, 42, 0.28);\n}\n\n.gantt-tl-dep-source-direction {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 4px;\n}\n\n.gantt-tl-dep-source-direction-btn {\n border: none;\n border-radius: 8px;\n background: transparent;\n color: #111827;\n padding: 6px 8px;\n font-size: 0.75rem;\n font-family: inherit;\n cursor: pointer;\n}\n\n.gantt-tl-dep-source-direction-btn:hover {\n background: rgba(59, 130, 246, 0.08);\n color: #1d4ed8;\n}\n\n.gantt-tl-dep-source-direction-btn-active,\n.gantt-tl-dep-source-direction-btn-active:hover {\n background: rgba(59, 130, 246, 0.16);\n color: #1d4ed8;\n font-weight: 600;\n}\n\n.gantt-tl-dep-source-types {\n display: grid;\n grid-template-columns: repeat(4, minmax(0, 1fr));\n gap: 4px;\n}\n\n.gantt-tl-dep-source-type-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n min-width: 0;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: #111827;\n padding: 6px 4px;\n cursor: pointer;\n font-size: 0.7rem;\n font-family: inherit;\n}\n\n.gantt-tl-dep-source-type-btn:hover {\n color: #1d4ed8;\n background: rgba(59, 130, 246, 0.08);\n}\n\n.gantt-tl-dep-source-type-btn-active {\n background: rgba(59, 130, 246, 0.16);\n color: #1d4ed8;\n font-weight: 600;\n}\n\n.gantt-tl-dep-source-type-btn-active:hover {\n background: rgba(59, 130, 246, 0.16);\n color: #1d4ed8;\n}\n\n.gantt-tl-dep-source-type-btn span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.gantt-tl-dep-source-picker-head {\n display: flex;\n align-items: center;\n}\n\n.gantt-tl-dep-source-input {\n width: 100%;\n min-width: 0;\n height: 34px;\n padding: 0 10px;\n border: 1px solid rgba(59, 130, 246, 0.25);\n border-radius: 6px;\n background: #ffffff;\n font-size: 0.82rem;\n font-family: inherit;\n color: #111827;\n}\n\n.gantt-tl-dep-source-input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.12);\n}\n\n.gantt-tl-dep-source-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 164px;\n overflow-y: auto;\n}\n\n.gantt-tl-dep-source-option {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: #1f2937;\n text-align: left;\n padding: 6px 8px;\n font-size: 0.75rem;\n font-family: inherit;\n cursor: pointer;\n}\n\n.gantt-tl-dep-source-option-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.gantt-tl-dep-source-option:hover,\n.gantt-tl-dep-source-option-active {\n background: rgba(59, 130, 246, 0.16);\n color: #1d4ed8;\n}\n\n.gantt-tl-dep-source-option-linked {\n background: rgba(16, 185, 129, 0.12);\n color: #047857;\n}\n\n.gantt-tl-dep-source-option-linked:hover,\n.gantt-tl-dep-source-option-linked.gantt-tl-dep-source-option-active {\n color: #047857;\n background: rgba(16, 185, 129, 0.14);\n}\n\n.gantt-tl-dep-source-option-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n margin-left: 8px;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: transparent;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.gantt-tl-dep-source-option-linked:hover .gantt-tl-dep-source-option-remove,\n.gantt-tl-dep-source-option-linked.gantt-tl-dep-source-option-active .gantt-tl-dep-source-option-remove {\n color: #dc2626;\n}\n\n.gantt-tl-dep-source-option-remove:hover {\n background: rgba(220, 38, 38, 0.12);\n color: #dc2626;\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: #059669;\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 background: #dc2626;\n}\n\n.gantt-tl-dep-delete-label-default {\n display: inline;\n pointer-events: none;\n}\n\n.gantt-tl-dep-delete-label-hover {\n display: none;\n color: #fff;\n font-weight: 600;\n pointer-events: none;\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}\n\n/* Add task button */\n.gantt-tl-add-btn {\n width: 100%;\n padding: 6px 12px;\n text-align: left;\n background: transparent;\n border: none;\n /* border-top: 1px dashed var(--gantt-grid-line-color, #e0e0e0); */\n cursor: pointer;\n font-size: 12px;\n color: var(--gantt-text-muted, #9ca3af);\n transition: background 0.15s ease, color 0.15s ease;\n font-family: inherit;\n}\n\n.gantt-tl-add-btn:hover {\n background: var(--gantt-hover-bg, rgba(0, 0, 0, 0.04));\n color: var(--gantt-text-color, #374151);\n}\n\n/* Blue top border when dragging over the add button */\n.gantt-tl-add-btn-drag-over {\n position: relative;\n background: rgba(59, 130, 246, 0.08);\n color: #3b82f6;\n}\n\n.gantt-tl-add-btn-drag-over::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 2px;\n background-color: #3b82f6;\n}\n\n.gantt-tl-cell-new-name {\n padding: 2px 4px;\n}\n",".gantt-container {\n width: 100%;\n font-family: var(--gantt-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 border-radius: var(--gantt-container-border-radius, 10px);\n overflow: hidden;\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
|
@@ -125,6 +125,18 @@ declare const getMonthSpans: (dateRange: Date[]) => Array<{
|
|
|
125
125
|
* @returns Formatted date string in DD.MM format
|
|
126
126
|
*/
|
|
127
127
|
declare const formatDateLabel: (date: Date | string) => string;
|
|
128
|
+
/**
|
|
129
|
+
* Format date range smartly in Russian.
|
|
130
|
+
* Examples:
|
|
131
|
+
* - Same month: "1-3 мая"
|
|
132
|
+
* - Different months same year: "15 апр - 7 июн"
|
|
133
|
+
* - Different years: "15 дек 2025 - 7 янв 2026"
|
|
134
|
+
*
|
|
135
|
+
* @param startDate - Start date
|
|
136
|
+
* @param endDate - End date
|
|
137
|
+
* @returns Formatted date range string
|
|
138
|
+
*/
|
|
139
|
+
declare const formatDateRangeLabel: (startDate: Date | string, endDate: Date | string) => string;
|
|
128
140
|
/**
|
|
129
141
|
* Return block boundaries for week-view, splitting on month boundaries.
|
|
130
142
|
* Each block represents a column in the week-view header.
|
|
@@ -199,6 +211,42 @@ declare const normalizeTaskDates: (startDate: string | Date, endDate: string | D
|
|
|
199
211
|
startDate: string;
|
|
200
212
|
endDate: string;
|
|
201
213
|
};
|
|
214
|
+
/**
|
|
215
|
+
* Count business days between two dates (inclusive), excluding weekends
|
|
216
|
+
* @param startDate - Start date (string or Date)
|
|
217
|
+
* @param endDate - End date (string or Date)
|
|
218
|
+
* @param weekendPredicate - Function that returns true for weekends
|
|
219
|
+
* @returns Number of business days (minimum 1)
|
|
220
|
+
*
|
|
221
|
+
* Example:
|
|
222
|
+
* getBusinessDaysCount('2026-03-14', '2026-03-17', (d) => d.getUTCDay() === 0 || d.getUTCDay() === 6)
|
|
223
|
+
* // Returns 2 (Fri + Mon, Sat/Sun excluded)
|
|
224
|
+
*/
|
|
225
|
+
declare function getBusinessDaysCount(startDate: string | Date, endDate: string | Date, weekendPredicate: (date: Date) => boolean): number;
|
|
226
|
+
/**
|
|
227
|
+
* Calculate end date by adding business days to start date
|
|
228
|
+
* @param startDate - Start date (string or Date)
|
|
229
|
+
* @param businessDays - Number of business days to add (minimum 1)
|
|
230
|
+
* @param weekendPredicate - Function that returns true for weekends
|
|
231
|
+
* @returns End date as YYYY-MM-DD string
|
|
232
|
+
*
|
|
233
|
+
* Example:
|
|
234
|
+
* addBusinessDays('2026-03-14', 4, (d) => d.getUTCDay() === 0 || d.getUTCDay() === 6)
|
|
235
|
+
* // Returns '2026-03-19' (Fri + Mon + Tue + Wed, Sat/Sun skipped)
|
|
236
|
+
*/
|
|
237
|
+
declare function addBusinessDays(startDate: string | Date, businessDays: number, weekendPredicate: (date: Date) => boolean): string;
|
|
238
|
+
/**
|
|
239
|
+
* Subtract business days from a date (inverse of addBusinessDays)
|
|
240
|
+
* @param endDate - End date (string or Date)
|
|
241
|
+
* @param businessDays - Number of business days to subtract (minimum 1)
|
|
242
|
+
* @param weekendPredicate - Function that returns true for weekends
|
|
243
|
+
* @returns Start date as YYYY-MM-DD string
|
|
244
|
+
*
|
|
245
|
+
* Example:
|
|
246
|
+
* subtractBusinessDays('2026-03-19', 4, (d) => d.getUTCDay() === 0 || d.getUTCDay() === 6)
|
|
247
|
+
* // Returns '2026-03-14' (going backwards: Fri[Thu][Wed][Tue]Mon, Sat/Sun skipped)
|
|
248
|
+
*/
|
|
249
|
+
declare function subtractBusinessDays(endDate: string | Date, businessDays: number, weekendPredicate: (date: Date) => boolean): string;
|
|
202
250
|
|
|
203
251
|
/**
|
|
204
252
|
* Dependency link types following PM standard
|
|
@@ -216,8 +264,8 @@ interface TaskDependency$1 {
|
|
|
216
264
|
taskId: string;
|
|
217
265
|
/** Type of link: FS (finish-to-start), SS, FF, SF */
|
|
218
266
|
type: LinkType;
|
|
219
|
-
/** Lag in days (positive or negative integer
|
|
220
|
-
lag
|
|
267
|
+
/** Lag in days (positive or negative integer) */
|
|
268
|
+
lag: number;
|
|
221
269
|
}
|
|
222
270
|
/**
|
|
223
271
|
* Error or warning from dependency validation
|
|
@@ -434,7 +482,7 @@ interface Task {
|
|
|
434
482
|
* Optional array of task dependencies
|
|
435
483
|
* - Each dependency references a predecessor task by ID
|
|
436
484
|
* - Supports 4 link types: FS (finish-to-start), SS (start-to-start), FF (finish-to-finish), SF (start-to-finish)
|
|
437
|
-
* - Lag is
|
|
485
|
+
* - Lag is required (positive = delay, negative = overlap)
|
|
438
486
|
*/
|
|
439
487
|
dependencies?: TaskDependency[];
|
|
440
488
|
/**
|
|
@@ -459,8 +507,8 @@ interface TaskDependency {
|
|
|
459
507
|
taskId: string;
|
|
460
508
|
/** Link type: FS, SS, FF, or SF */
|
|
461
509
|
type: 'FS' | 'SS' | 'FF' | 'SF';
|
|
462
|
-
/**
|
|
463
|
-
lag
|
|
510
|
+
/** Lag in days */
|
|
511
|
+
lag: number;
|
|
464
512
|
}
|
|
465
513
|
interface GanttChartProps {
|
|
466
514
|
/** Array of tasks to display */
|
|
@@ -513,6 +561,8 @@ interface GanttChartProps {
|
|
|
513
561
|
customDays?: CustomDayConfig[];
|
|
514
562
|
/** Optional base weekend predicate (checked before customDays overrides) */
|
|
515
563
|
isWeekend?: (date: Date) => boolean;
|
|
564
|
+
/** Считать duration в рабочих днях, исключая выходные (default: true) */
|
|
565
|
+
businessDays?: boolean;
|
|
516
566
|
/**
|
|
517
567
|
* Optional predicate to mark tasks in the current view.
|
|
518
568
|
* Matching tasks stay visible and are highlighted in the chart and task list.
|
|
@@ -594,7 +644,7 @@ interface TaskRowProps {
|
|
|
594
644
|
onCascadeProgress?: (overrides: Map<string, {
|
|
595
645
|
left: number;
|
|
596
646
|
width: number;
|
|
597
|
-
}
|
|
647
|
+
}>, previewTasks?: Task[]) => void;
|
|
598
648
|
/** Called when cascade drag completes; receives all shifted tasks including dragged task */
|
|
599
649
|
onCascade?: (tasks: Task[]) => void;
|
|
600
650
|
/** Optional horizontal divider line - renders above or below the task row */
|
|
@@ -603,6 +653,15 @@ interface TaskRowProps {
|
|
|
603
653
|
highlightExpiredTasks?: boolean;
|
|
604
654
|
/** Whether this row matches the active filter highlight */
|
|
605
655
|
isFilterMatch?: boolean;
|
|
656
|
+
/** Calculate duration in business days (excluding weekends) */
|
|
657
|
+
businessDays?: boolean;
|
|
658
|
+
/** Custom weekend configuration */
|
|
659
|
+
customDays?: Array<{
|
|
660
|
+
date: Date;
|
|
661
|
+
type: 'weekend' | 'workday';
|
|
662
|
+
}>;
|
|
663
|
+
/** Custom weekend predicate (overrides default Saturday/Sunday) */
|
|
664
|
+
isWeekend?: (date: Date) => boolean;
|
|
606
665
|
}
|
|
607
666
|
/**
|
|
608
667
|
* TaskRow component - renders a single task row with a task bar
|
|
@@ -744,6 +803,8 @@ interface TaskListProps {
|
|
|
744
803
|
customDays?: CustomDayConfig[];
|
|
745
804
|
/** Optional base weekend predicate for date picker */
|
|
746
805
|
isWeekend?: (date: Date) => boolean;
|
|
806
|
+
/** Считать duration в рабочих днях */
|
|
807
|
+
businessDays?: boolean;
|
|
747
808
|
/** Task IDs highlighted by the active filter */
|
|
748
809
|
highlightedTaskIds?: Set<string>;
|
|
749
810
|
}
|
|
@@ -842,6 +903,8 @@ interface DatePickerProps {
|
|
|
842
903
|
disabled?: boolean;
|
|
843
904
|
/** Optional predicate for custom weekend logic */
|
|
844
905
|
isWeekend?: (date: Date) => boolean;
|
|
906
|
+
/** Whether to use business days for +1/+7 buttons (default: true) */
|
|
907
|
+
businessDays?: boolean;
|
|
845
908
|
}
|
|
846
909
|
/**
|
|
847
910
|
* DatePicker component — shows formatted date as a button, opens calendar popup on click.
|
|
@@ -892,11 +955,15 @@ interface UseTaskDragOptions {
|
|
|
892
955
|
onCascadeProgress?: (overrides: Map<string, {
|
|
893
956
|
left: number;
|
|
894
957
|
width: number;
|
|
895
|
-
}
|
|
958
|
+
}>, previewTasks?: Task$1[]) => void;
|
|
896
959
|
/** Callback when cascade completes — receives all shifted tasks including dragged task */
|
|
897
960
|
onCascade?: (tasks: Task$1[]) => void;
|
|
898
961
|
/** When true, all drag and resize interactions are disabled for this task */
|
|
899
962
|
locked?: boolean;
|
|
963
|
+
/** If true, dependency cascade calculations skip weekends */
|
|
964
|
+
businessDays?: boolean;
|
|
965
|
+
/** Function that returns true for weekends (for businessDays mode) */
|
|
966
|
+
weekendPredicate?: (date: Date) => boolean;
|
|
900
967
|
}
|
|
901
968
|
/**
|
|
902
969
|
* Return value from useTaskDrag hook
|
|
@@ -925,6 +992,26 @@ interface UseTaskDragReturn {
|
|
|
925
992
|
*/
|
|
926
993
|
declare const useTaskDrag: (options: UseTaskDragOptions) => UseTaskDragReturn;
|
|
927
994
|
|
|
995
|
+
declare function getDependencyLag(dep: Pick<TaskDependency$1, 'lag'>): number;
|
|
996
|
+
declare function normalizeDependencyLag(linkType: LinkType, lag: number, predecessorStart: Date, predecessorEnd: Date, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): number;
|
|
997
|
+
declare function alignToWorkingDay(date: Date, direction: 1 | -1, weekendPredicate: (date: Date) => boolean): Date;
|
|
998
|
+
declare function getTaskDuration(startDate: string | Date, endDate: string | Date, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): number;
|
|
999
|
+
declare function buildTaskRangeFromStart(startDate: Date, duration: number, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean, snapDirection?: 1 | -1): {
|
|
1000
|
+
start: Date;
|
|
1001
|
+
end: Date;
|
|
1002
|
+
};
|
|
1003
|
+
declare function buildTaskRangeFromEnd(endDate: Date, duration: number, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean, snapDirection?: 1 | -1): {
|
|
1004
|
+
start: Date;
|
|
1005
|
+
end: Date;
|
|
1006
|
+
};
|
|
1007
|
+
declare function moveTaskRange(originalStart: string | Date, originalEnd: string | Date, proposedStart: Date, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean, snapDirection?: 1 | -1): {
|
|
1008
|
+
start: Date;
|
|
1009
|
+
end: Date;
|
|
1010
|
+
};
|
|
1011
|
+
declare function clampTaskRangeForIncomingFS(task: Pick<Task$1, 'dependencies'>, proposedStart: Date, proposedEnd: Date, allTasks: Task$1[], businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): {
|
|
1012
|
+
start: Date;
|
|
1013
|
+
end: Date;
|
|
1014
|
+
};
|
|
928
1015
|
/**
|
|
929
1016
|
* Build adjacency list for dependency graph (task -> successors)
|
|
930
1017
|
*/
|
|
@@ -946,7 +1033,7 @@ declare function detectCycles(tasks: Task$1[]): {
|
|
|
946
1033
|
* - FF: lag = succEnd - predEnd
|
|
947
1034
|
* - SF: lag = succEnd - predStart + 1 (symmetric to FS)
|
|
948
1035
|
*/
|
|
949
|
-
declare function computeLagFromDates(linkType: LinkType, predStart: Date, predEnd: Date, succStart: Date, succEnd: Date): number;
|
|
1036
|
+
declare function computeLagFromDates(linkType: LinkType, predStart: Date, predEnd: Date, succStart: Date, succEnd: Date, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): number;
|
|
950
1037
|
/**
|
|
951
1038
|
* Calculate successor date based on predecessor dates, link type, and lag
|
|
952
1039
|
*
|
|
@@ -956,7 +1043,7 @@ declare function computeLagFromDates(linkType: LinkType, predStart: Date, predEn
|
|
|
956
1043
|
* - FF: Successor end = Predecessor end + lag
|
|
957
1044
|
* - SF: Successor end = Predecessor start + lag - 1 day (lag=0 → day before)
|
|
958
1045
|
*/
|
|
959
|
-
declare function calculateSuccessorDate(predecessorStart: Date, predecessorEnd: Date, linkType: LinkType, lag?: number): Date;
|
|
1046
|
+
declare function calculateSuccessorDate(predecessorStart: Date, predecessorEnd: Date, linkType: LinkType, lag?: number, businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): Date;
|
|
960
1047
|
/**
|
|
961
1048
|
* Validate all dependencies in the task list
|
|
962
1049
|
*/
|
|
@@ -1004,7 +1091,7 @@ declare function getTransitiveCascadeChain(changedTaskId: string, allTasks: Task
|
|
|
1004
1091
|
* Recalculate incoming dependency lags after a task's dates change.
|
|
1005
1092
|
* Used when completing a drag or applying a manual date change.
|
|
1006
1093
|
*/
|
|
1007
|
-
declare function recalculateIncomingLags(task: Task$1, newStartDate: Date, newEndDate: Date, allTasks: Task$1[]): NonNullable<Task$1['dependencies']>;
|
|
1094
|
+
declare function recalculateIncomingLags(task: Task$1, newStartDate: Date, newEndDate: Date, allTasks: Task$1[], businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): NonNullable<Task$1['dependencies']>;
|
|
1008
1095
|
/**
|
|
1009
1096
|
* Get all dependency edges for rendering
|
|
1010
1097
|
* Returns array of { predecessorId, successorId, type, lag }
|
|
@@ -1094,8 +1181,10 @@ declare function getAllDescendants(parentId: string, tasks: Task$1[]): Task$1[];
|
|
|
1094
1181
|
* @param newStart - New start date of the moved task.
|
|
1095
1182
|
* @param newEnd - New end date of the moved task.
|
|
1096
1183
|
* @param allTasks - All tasks in the chart (original, unmodified dates).
|
|
1184
|
+
* @param businessDays - If true, dependency calculations skip weekends.
|
|
1185
|
+
* @param weekendPredicate - Function that returns true for weekends.
|
|
1097
1186
|
*/
|
|
1098
|
-
declare function universalCascade(movedTask: Task$1, newStart: Date, newEnd: Date, allTasks: Task$1[]): Task$1[];
|
|
1187
|
+
declare function universalCascade(movedTask: Task$1, newStart: Date, newEnd: Date, allTasks: Task$1[], businessDays?: boolean, weekendPredicate?: (date: Date) => boolean): Task$1[];
|
|
1099
1188
|
|
|
1100
1189
|
/**
|
|
1101
1190
|
* Checks whether a task is behind the expected progress for the current date.
|
|
@@ -1285,4 +1374,4 @@ interface VisibleReorderPosition {
|
|
|
1285
1374
|
*/
|
|
1286
1375
|
declare function getVisibleReorderPosition(orderedTasks: TaskLike[], visibleTasks: TaskLike[], movedTaskId: string, originVisibleIndex: number, dropVisibleIndex: number): VisibleReorderPosition | null;
|
|
1287
1376
|
|
|
1288
|
-
export { Button, type ButtonProps, Calendar, type CalendarProps, type CustomDayConfig, type CustomDayPredicateConfig, DatePicker, type DatePickerProps, DragGuideLines, GanttChart, type GanttChartHandle, type GanttChartProps, type GanttDateRange, GridBackground, type GridConfig, type GridLine, Input, type InputProps, type MonthBlock, type MonthSpan, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type Task, type TaskBarGeometry, type TaskDependency, TaskList, type TaskListProps, type TaskPredicate, TaskRow, TimeScaleHeader, TodayIndicator, type VisibleReorderPosition, type WeekBlock, type WeekSpan, type WeekendBlock, type YearSpan, and, buildAdjacencyList, calculateBezierPath, calculateDependencyPath, calculateGridLines, calculateGridWidth, calculateMonthGridLines, calculateOrthogonalPath, calculateSuccessorDate, calculateTaskBar, calculateWeekGridLines, calculateWeekendBlocks, cascadeByLinks, computeLagFromDates, computeParentDates, computeParentProgress, createCustomDayPredicate, createDateKey, detectCycles, detectEdgeZone, expired, findParentId, flattenHierarchy, formatDateLabel, getAllDependencyEdges, getAllDescendants, getChildren, getCursorForPosition, getDayOffset, getMonthBlocks, getMonthDays, getMonthSpans, getMultiMonthDays, getSuccessorChain, getTransitiveCascadeChain, getVisibleReorderPosition, getWeekBlocks, getWeekSpans, getYearSpans, inDateRange, isTaskExpired, isTaskParent, isToday, isWeekend, nameContains, normalizeHierarchyTasks, normalizeTaskDates, not, or, parseUTCDate, pixelsToDate, progressInRange, recalculateIncomingLags, removeDependenciesBetweenTasks, universalCascade, useTaskDrag, validateDependencies, withoutDeps };
|
|
1377
|
+
export { Button, type ButtonProps, Calendar, type CalendarProps, type CustomDayConfig, type CustomDayPredicateConfig, DatePicker, type DatePickerProps, DragGuideLines, GanttChart, type GanttChartHandle, type GanttChartProps, type GanttDateRange, GridBackground, type GridConfig, type GridLine, Input, type InputProps, type MonthBlock, type MonthSpan, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type Task, type TaskBarGeometry, type TaskDependency, TaskList, type TaskListProps, type TaskPredicate, TaskRow, TimeScaleHeader, TodayIndicator, type VisibleReorderPosition, type WeekBlock, type WeekSpan, type WeekendBlock, type YearSpan, addBusinessDays, alignToWorkingDay, and, buildAdjacencyList, buildTaskRangeFromEnd, buildTaskRangeFromStart, calculateBezierPath, calculateDependencyPath, calculateGridLines, calculateGridWidth, calculateMonthGridLines, calculateOrthogonalPath, calculateSuccessorDate, calculateTaskBar, calculateWeekGridLines, calculateWeekendBlocks, cascadeByLinks, clampTaskRangeForIncomingFS, computeLagFromDates, computeParentDates, computeParentProgress, createCustomDayPredicate, createDateKey, detectCycles, detectEdgeZone, expired, findParentId, flattenHierarchy, formatDateLabel, formatDateRangeLabel, getAllDependencyEdges, getAllDescendants, getBusinessDaysCount, getChildren, getCursorForPosition, getDayOffset, getDependencyLag, getMonthBlocks, getMonthDays, getMonthSpans, getMultiMonthDays, getSuccessorChain, getTaskDuration, getTransitiveCascadeChain, getVisibleReorderPosition, getWeekBlocks, getWeekSpans, getYearSpans, inDateRange, isTaskExpired, isTaskParent, isToday, isWeekend, moveTaskRange, nameContains, normalizeDependencyLag, normalizeHierarchyTasks, normalizeTaskDates, not, or, parseUTCDate, pixelsToDate, progressInRange, recalculateIncomingLags, removeDependenciesBetweenTasks, subtractBusinessDays, universalCascade, useTaskDrag, validateDependencies, withoutDeps };
|