import { ViewTemplate } from '@ni/fast-element';
import { TableColumnAlignment, TableColumnSortDirection, type TableFieldName } from '../../../table/types';
import type { TableCell } from '../../../table/components/cell';
import { TableColumnSortOperation } from '../types';
import type { TableGroupRow } from '../../../table/components/group-row';
import type { ColumnValidator } from './column-validator';
export interface ColumnInternalsOptions<TColumnValidator extends ColumnValidator<[]> = ColumnValidator<[]>> {
    /**
     * The tag (element name) of the custom element that renders the cell content for the column.
     * That element should derive from TableCellView<TCellRecord, TColumnConfig>.
     */
    readonly cellViewTag: string;
    /**
     * The names of the fields that should be present in TCellRecord.
     * This array is parallel with the field names specified by `dataRecordFieldNames`.
     */
    readonly cellRecordFieldNames: readonly TableFieldName[];
    /**
     * The tag to use to render the group header content for a column.
     * The element this tag refers to must derive from TableGroupHeaderView.
     */
    readonly groupHeaderViewTag?: string;
    /**
     * The names of events that should be delegated from the cell view to the column.
     */
    readonly delegatedEvents: readonly string[];
    /**
     * The names of slots that need to be forwarded into a cell.
     */
    readonly slotNames?: readonly string[];
    /**
     * The sort operation to use for the column (defaults to TableColumnSortOperation.basic)
     */
    readonly sortOperation?: TableColumnSortOperation;
    /**
     * The validator for the column
     */
    readonly validator: TColumnValidator;
}
/**
 * Internal column state configured by plugin authors
 * @internal
 */
export declare class ColumnInternals<TColumnConfig, TColumnValidator extends ColumnValidator<[]>> {
    /**
     * @see ColumnInternalsOptions.cellRecordFieldNames
     */
    readonly cellRecordFieldNames: readonly TableFieldName[];
    /**
     * A unique id used internally in the table to identify specific column instances
     */
    readonly uniqueId: string;
    /**
     * Template for the cell view
     */
    readonly cellViewTemplate: ViewTemplate<TableCell>;
    /**
     * The names of events that should be delegated from the cell view to the column.
     */
    readonly delegatedEvents: readonly string[];
    /**
     * The names of slots that need to be forwarded into a cell.
     */
    readonly slotNames: readonly string[];
    /**
     * The relevant, static configuration a column requires its cell view to have access to.
     */
    columnConfig?: TColumnConfig;
    /**
     * The name of the data field that will be used for operations on the table, such as sorting and grouping.
     */
    operandDataRecordFieldName?: TableFieldName;
    /**
     * The operation to use when sorting the table by this column.
     */
    sortOperation: TableColumnSortOperation;
    /**
     * The names of the fields from the row's record that correlate to the data that will be in TCellRecord.
     * This array is parallel with the field names specified by `cellRecordFieldNames`.
     */
    dataRecordFieldNames: readonly (TableFieldName | undefined)[];
    /**
     * Template for the group header view
     */
    readonly groupHeaderViewTemplate?: ViewTemplate<TableGroupRow>;
    /**
     * Whether or not this column can be used to group rows by
     */
    groupingDisabled: boolean;
    /**
     * Specifies the grouping precedence of the column within the set of all columns participating in grouping.
     * Columns are rendered in the grouping tree from lowest group-index as the tree root to highest
     * group-index as tree leaves.
     */
    groupIndex?: number;
    /**
     * Used by column plugins to set a specific pixel width. Sets currentPixelWidth when changed.
     */
    pixelWidth?: number;
    /**
     * Used by column plugins to size a column proportionally to the available
     * width of a row. Sets currentFractionalWidth when changed.
     */
    fractionalWidth: number;
    /**
     * The minimum size in pixels according to the design doc
     */
    minPixelWidth: number;
    /**
     * Whether or not resizing the column has been disabled.
     */
    resizingDisabled: boolean;
    /**
     * Whether or not the grouping and sorting indicators should be hidden in the column header
     * when the column is grouped or sorted.
     */
    hideHeaderIndicators: boolean;
    /**
     * How to align the header content.
     */
    headerAlignment: TableColumnAlignment;
    /**
     * @internal Do not write to this value directly. It is used by the Table in order to store
     * the resolved value of the fractionalWidth after updates programmatic or interactive updates.
     */
    currentFractionalWidth: number;
    /**
     * @internal Do not write to this value directly. It is used by the Table in order to store
     * the resolved value of the pixelWidth after programmatic or interactive updates.
     */
    currentPixelWidth?: number;
    /**
     * Whether or not this column can be sorted
     */
    sortingDisabled: boolean;
    /**
     * @internal Do not write to this value directly. It is used by the Table in order to store
     * the resolved value of the sortIndex after programmatic or interactive updates.
     */
    currentSortIndex?: number;
    /**
     * @internal Do not write to this value directly. It is used by the Table in order to store
     * the resolved value of the sortDirection after programmatic or interactive updates.
     */
    currentSortDirection: TableColumnSortDirection;
    readonly validator: TColumnValidator;
    constructor(options: ColumnInternalsOptions<TColumnValidator>);
    protected fractionalWidthChanged(): void;
    protected pixelWidthChanged(): void;
}
export declare function isColumnInternalsProperty(changedProperty: string, ...args: (keyof ColumnInternals<unknown, ColumnValidator<[]>>)[]): boolean;
