import type { RenderWindow } from '../../plugin.types'; import type { SchedulerModule, SchedulerRuntime } from '../scheduler-runtime'; /** * Draws everything behind the event bars: slot columns, row separators, * non-working shading, the today column and the current-time marker. * * Split from the bar renderer because the two have completely different change * rates. Bars move whenever an event does; the backdrop only changes when the * timeline, the slot window or the row window changes — so keeping them apart * means a drag repaints bars without touching a single gridline. * * ## Why the scheduler draws its own row separators * * The grid already draws a bottom border on every `.pg-row`, but those rows live * inside the column panels. With every resource column pinned left, the centre * panel is empty, so there is nothing under the timeline to carry a line. Rather * than depend on that accident, the backdrop draws its own separators from the * same `RenderWindow.rows` the bars are positioned from — which is what * guarantees they line up with the left-hand section exactly, at any scroll * offset and with any row height. */ export declare class SchedulerBackdrop implements SchedulerModule { private readonly runtime; private readonly layerEl; private canvasEl; private readonly colPool; private readonly liveCols; private readonly linePool; private readonly liveLines; private nowEl; /** Last-written values, so an unchanged frame writes nothing. */ private builtWidth; private builtSlotStart; private builtSlotEnd; private builtBandTop; private builtBandHeight; private builtRowCount; /** * Band top as of the last row-line pass. * * Tracked separately from the column pass: columns run first and update * their own `builtBandTop`, so a shared field would always compare equal * here and the lines would never move -- they would stay where the first * frame put them and drift away from the rows on every scroll. */ private builtLinesBandTop; private builtNowPx; private readonly weekendDays; private readonly holidayDays; private readonly shade; constructor(runtime: SchedulerRuntime, layerEl: HTMLElement); /** * Repaints the backdrop for one frame. * * Everything is guarded on a cached value, so a pure horizontal scroll that * does not uncover a new slot, and a vertical scroll that does not change the * rendered row band, both write nothing at all. */ render(window: RenderWindow): void; destroy(): void; private ensureCanvas; /** Slot columns, virtualized to the visible window and recycled. */ private renderColumns; /** Marks a column as weekend, holiday or today. */ private applyColumnTone; /** * Horizontal separators, one per rendered row. * * Positioned from the same rows the bars use, so they align with the pinned * resource columns by construction rather than by matching a row height * setting in two places. */ private renderRowLines; /** A 2px rule at the current instant, when it falls inside the timeline. */ private renderNowMarker; } //# sourceMappingURL=scheduler-backdrop.d.ts.map