import TreeNode from '../../../utils/dataStructures/tree'; import type { HeaderVisibility } from './utils'; import type SourceSettings from './sourceSettings'; /** * Interface representing the base header settings shape. */ export interface HeaderSettings { label: string; colspan: number; origColspan: number; rowspan?: number; origRowspan?: number; collapsible: boolean; isCollapsed: boolean; crossHiddenColumns: number[]; isHidden: boolean; isRoot: boolean; isPlaceholder: boolean; isRowspanPlaceholder?: boolean; headerClassNames: string[]; /** * Explicit per-header collapse-visibility marker. Unset means the header follows the default * ('expanded' - hidden when its group collapses) within a group that uses `visibleWhen`. */ visibleWhen?: HeaderVisibility; [key: string]: unknown; } /** * Interface representing header node data in the tree * (extends base settings with tree-specific properties). */ export interface HeaderNodeData extends HeaderSettings { headerLevel: number; columnIndex: number; /** * A cloned subtree stored during collapse, restored on expand. */ clonedTree?: TreeNode | null; } /** * Builds and manages a tree structure representing the nested headers configuration, mapping visual column indexes to header nodes. * * @private * @class HeadersTree */ export default class HeadersTree { #private; /** * Initializes the headers tree with the given source settings used to build the nested header structure. */ constructor(sourceSettings: SourceSettings); /** * Gets an array of the all root nodes. * * @returns {TreeNode[]} */ getRoots(): TreeNode[]; /** * Gets a root node by specified visual column index. * * @param {number} columnIndex A visual column index. * @returns {TreeNode|undefined} */ getRootByColumn(columnIndex: number): TreeNode | undefined; /** * Gets a tree node by its position in the grid settings. * * @param {number} headerLevel Header level index. * @param {number} columnIndex A visual column index. * @returns {TreeNode|undefined} */ getNode(headerLevel: number, columnIndex: number): TreeNode | undefined; /** * Builds (or rebuilds if called again) root nodes indexes. */ rebuildTreeIndex(): void; /** * Builds trees based on SourceSettings class. */ buildTree(): void; /** * Builds leaves for specified tree node. * * @param {TreeNode} parentNode A node to which the leaves applies. * @param {number} columnIndex A visual column index. * @param {number} headerLevel Currently processed header level. * @param {number} [extractionLength=1] Determines column extraction length for node children. */ buildLeaves(parentNode: TreeNode, columnIndex: number, headerLevel: number, extractionLength?: number): void; /** * Clears the tree to the initial state. */ clear(): void; }