import { ColumnFilterConfig, ColumnType, ContextMenuConfig, FilterValue, Key, NumberFilterValue, PinPosition } from '../contracts/dataGridContract'; import { default as GridModel } from './gridModel'; import { default as HeaderCellModel } from './headerCellModel'; /** Discriminates the structural role of a column — replaces scattered `key === *_CELL_KEY` checks. */ export type ColumnKind = 'data' | 'rowNumber' | 'rowSelection' | 'rowDetail' | 'grouping'; export default class ColumnModel { readonly def: ColumnType; readonly grid: GridModel; private parent?; constructor(def: ColumnType, grid: GridModel, parent?: ColumnModel | undefined); columns: ColumnModel[]; get kind(): ColumnKind; get isRowNumber(): boolean; get isRowSelection(): boolean; get isRowDetail(): boolean; get isGrouping(): boolean; get isData(): boolean; readonly pinFlags: import('../../../utils/memo').Memo<{ isLeftPinned: boolean; isRightPinned: boolean; isPinned: boolean; isFirstLeftPinned: boolean; isLastLeftPinned: boolean; isFirstRightPinned: boolean; isLastRightPinned: boolean; }>; /** Variant flags for the body cell that depend only on the column (not the row). */ readonly cellVariant: import('../../../utils/memo').Memo<{ isPinned: boolean; isFirstLeftPinned: boolean; isLastLeftPinned: boolean; isFirstRightPinned: boolean; isLastRightPinned: boolean; isRowSelection: boolean; isRowNumber: boolean; isFirstLeaf: boolean; isLastLeaf: boolean; isRowDetail: boolean; }>; /** Static CSS-var references for the body/filter cell (stable string identity). */ readonly cellStyleVars: import('../../../utils/memo').Memo<{ width: string; height: string; left: string | undefined; right: string | undefined; }>; /** Derived state for this column's header cell + context menu. */ private readonly _headerCell; get headerCell(): HeaderCellModel; get visibleColumns(): ColumnModel[]; get isFirstLeaf(): boolean; get isLastLeaf(): boolean; get key(): Key; get header(): string | undefined; get align(): "center" | "right" | "left" | undefined; /** Whether an explicit `align` was provided (mirrors the original `'align' in def` check). */ get hasAlign(): boolean; get isLeaf(): boolean; get Cell(): import('react').ComponentType<{ cell: import('./cellModel').default; }> | undefined; get filterable(): boolean | ColumnFilterConfig | undefined; /** Resolved filter config, or undefined when this column isn't filterable. */ get filterConfig(): ColumnFilterConfig | undefined; /** The active filter on this column, if any. */ get currentFilter(): FilterValue | undefined; /** Options for a multiselect filter (config-provided, else unique values from data). */ get filterOptions(): { label: string; value: string | number | boolean | null; }[]; setTextFilter(value: string): void; setNumberFilter(operator: NumberFilterValue['operator'], value: string | number, valueTo?: string | number): void; setMultiselectFilter(values: (string | number | boolean | null)[]): void; clearFilter(): void; /** Whether sorting is enabled for this column. Column-level setting takes priority over grid-level. */ get sortable(): boolean; /** Whether resizing is enabled for this column. Column-level setting takes priority over grid-level. */ get resizable(): boolean; /** Resolved context menu configuration. Column-level takes priority over grid-level. Default: true. */ get contextMenu(): boolean | ContextMenuConfig; /** Whether the context menu button should be shown at all. */ get showContextMenu(): boolean; /** Resolved context menu sections visibility. */ get contextMenuSections(): { sort: boolean; pin: boolean; group: boolean; }; /** Whether column participates in flex distribution. Default true unless explicitly false. */ get isFlexible(): boolean; /** The base width before flex calculation (what user set or DEFAULT). */ get baseWidth(): number; private _pin?; get pin(): PinPosition | undefined; get uniqueKey(): string; getPinnedColumn(pin?: PinPosition): ColumnModel | undefined; private hasPin; get death(): number; get flatColumns(): ColumnModel[]; private _inlineWidth?; get inlineWidth(): number | undefined; get left(): number; get right(): number; get isEdge(): boolean; get isVisible(): boolean; get leafs(): ColumnModel[]; get groupColumnWidthVarName(): string; get widthVarName(): string; get leftVarName(): string; get rightVarName(): string; get gridRows(): number; private _resizeStartX; private _resizeSizes; private _resizeTotalWidth; /** Begin a resize drag from a pointer x-coordinate (page space). */ beginResize: (startX: number) => void; /** Apply the drag to a new pointer x-coordinate, distributing the delta across leafs. Notifies subscribers. */ resizeTo: (currentX: number) => void; /** End a resize drag. */ endResize: () => void; pinColumn: (pin?: PinPosition) => void; toggleGrouping: () => void; sortColumn: (sortDirection?: SortDirection) => void; setWidth: (width: number) => void; toggleVisibility: () => void; }