import { type Notifier, type Subscriber } from '@ni/fast-element';
import type { TableStringField, TableBooleanField, TableNumberField } from '../../table/types';
import { TableColumn } from '../base';
import { Mapping } from '../../mapping/base';
import type { MappingKeyType } from './types';
import type { MappingConfig } from './models/mapping-config';
import type { MappingKey } from '../../mapping/base/types';
import type { TableColumnEnumBaseValidator } from './models/table-column-enum-base-validator';
import type { TableColumnTextBaseColumnConfig } from '../text-base/cell-view';
export type TableColumnEnumCellRecord = TableStringField<'value'> | TableBooleanField<'value'> | TableNumberField<'value'>;
export type MappingConfigs = Map<MappingKey, MappingConfig>;
export interface TableColumnEnumColumnConfig extends TableColumnTextBaseColumnConfig {
    mappingConfigs: MappingConfigs;
}
/**
 * Base class for table columns that map values to content
 */
export declare abstract class TableColumnEnumBase<TColumnConfig extends TableColumnEnumColumnConfig, TEnumValidator extends TableColumnEnumBaseValidator<[]>> extends TableColumn<TColumnConfig, TEnumValidator> implements Subscriber {
    /** @internal */
    mappingNotifiers: Notifier[];
    /** @internal */
    mappings: Mapping<unknown>[];
    fieldName?: string;
    keyType: MappingKeyType;
    /**
     * @internal
     *
     * Triggers a request to update the columnConfig when any observable property on
     * a mapping is updated.
     */
    handleChange(source: unknown, args: unknown): void;
    /**
     * Implementations should throw an error if an invalid Mapping is passed.
     */
    protected abstract createMappingConfig(mapping: Mapping<unknown>): MappingConfig;
    protected abstract createColumnConfig(mappingConfigs: MappingConfigs): TColumnConfig;
    /**
     * Called when any Mapping related state has changed.
     */
    private updateColumnConfig;
    private getMappingConfigs;
    private fieldNameChanged;
    private mappingsChanged;
    private keyTypeChanged;
    private removeMappingObservers;
    private observeMappings;
}
