import type { NamedBean } from '../context/bean'; import { BeanStub } from '../context/beanStub'; import type { BeanCollection } from '../context/context'; import type { AgColumn } from '../entities/agColumn'; import type { AgColumnGroup } from '../entities/agColumnGroup'; import type { RowNode } from '../entities/rowNode'; import type { ColumnEventType } from '../events'; /** Per-section total pixel widths (left-pinned, centre body, right-pinned). */ type SectionWidths = { left: number; center: number; right: number; }; /** @internal AG_GRID_INTERNAL - Not for public use. Can change / be removed at any time. */ export declare class VisibleColsService extends BeanStub implements NamedBean { beanName: "visibleCols"; private colModel; private colGroupSvc; private colViewport; private ctrlsSvc; private colFlex?; /** True iff any centre col has `flex > 0` — lets the flex pass be skipped when nothing flexes. */ private flexActive; treeLeft: (AgColumn | AgColumnGroup)[]; treeRight: (AgColumn | AgColumnGroup)[]; treeCenter: (AgColumn | AgColumnGroup)[]; leftCols: AgColumn[]; rightCols: AgColumn[]; centerCols: AgColumn[]; /** `leftCols + centerCols + rightCols` (RTL: right + center + left). */ allCols: AgColumn[]; /** `allCols` with `colDef.autoHeight`. Reused across refreshes to stay warm. */ readonly autoHeightCols: AgColumn[]; /** Number of header rows to render, accounting for group depth + padding rules. */ headerGroupRowCount: number; /** Centre body width. Cached for body sizing and row insert/resize. */ bodyWidth: number; leftWidth: number; rightWidth: number; totalWidth: number; /** `bodyWidth` changed in the last `updateBodyWidths()` — drives the RTL virtual-col calc. */ isBodyWidthDirty: boolean; /** Prev refresh's pinned-edge cols — drive an O(1) role-swap in `setFirstRightAndLastLeftPinned`. */ private prevLastLeftPinned; private prevFirstRightPinned; wireBeans(beans: BeanCollection): void; /** `skipTreeBuild=true` reuses the trees; valid only when liveCols are unchanged (group toggle, width autosize). */ refresh(source: ColumnEventType, skipTreeBuild: boolean): void; /** `widths` reuses totals already computed on the hot `refresh` path; omit to re-sum. */ updateBodyWidths(widths?: SectionWidths): void; /** Repositions each col's section-relative `left` without rebuilding the displayed set; returns * per-section widths. Lighter sibling of `joinCols`, for resize / autosize / flex. */ setLeftValues(source: ColumnEventType): SectionWidths; private setLeftValuesOfGroups; private setFirstRightAndLastLeftPinned; private buildTrees; /** Single pass over `colsList`: filter to displayable cols and bucket by pin. The selection col is held * back until a non-service col proves it isn't the only displayed col — a lone checkbox adds nothing. */ private partitionVisibleCols; clear(): void; private stampAriaColIndexes; /** One pass over displayed cols: stamps `allColsIndex` (display order; RTL flips sections) and * section-relative `left`, returning per-section widths so {@link updateBodyWidths} needn't re-sum. */ private joinCols; /** Lays one section's cols into `all`: stamps `allColsIndex` + section-relative `left`, folding in * `autoHeightCols`/`flexActive`/`headerGroupRowCount`. A method not a closure, so it allocates nothing. */ private layoutSection; getLeftColsForRow(rowNode: RowNode): AgColumn[]; getRightColsForRow(rowNode: RowNode): AgColumn[]; /** `filterCallback` is only set for the centre (virtualised) area. A col-spanned run is kept if * ANY spanned col passes the filter. */ getColsForRow(rowNode: RowNode, displayedColumns: AgColumn[], filterCallback?: (column: AgColumn) => boolean, emptySpaceBeforeColumn?: (column: AgColumn) => boolean): AgColumn[]; getColBefore(col: AgColumn): AgColumn | null; getColAfter(col: AgColumn): AgColumn | null; /** Prefer the recomputed width: the `leftWidth` cache can be stale mid column-move. */ getLeftStickyColumnContainerWidth(): number; /** Prefer the recomputed width: the `rightWidth` cache can be stale mid column-move. */ getRightStickyColumnContainerWidth(): number; isColAtEdge(col: AgColumn | AgColumnGroup, edge: 'first' | 'last'): boolean; } export {};