import { Injector } from '@angular/core';
import { AbstractControl } from '@angular/forms';
import { BaseDataSource, BaseDataSourceMetadata, BaseDataSourceViewer, DataSourceLoader } from '@rxap/data-source';
import { IdOrInstanceOrToken } from '@rxap/definition';
import { ControlOptions } from '@rxap/utilities';
import { UseDataSourceSettings, UseDataSourceValue } from '../decorators/use-data-source';
import { InputSelectOptionsSettings } from '../directives/input-select-options.directive';
import { ExtractControlMixin } from './extract-control.mixin';
import { ExtractDataSourcesMixin } from './extract-data-sources.mixin';
import { ExtractFormDefinitionMixin } from './extract-form-definition.mixin';
export type UseOptionsDataSourceSettings<Source> = UseDataSourceSettings<Source, ControlOptions | Record<string, any>>;
export declare const DATA_SOURCE_NAME = "options";
export declare function ComposeOptionsTransformers(...fnc: Array<(value: any) => any>): (value: any) => any;
export declare function UseOptionsDataSource<Source>(dataSource: IdOrInstanceOrToken<BaseDataSource<Source>>, settings?: InputSelectOptionsSettings<Source>): (target: any, propertyKey: string) => any;
export interface ExtractOptionsDataSourceMixin extends ExtractFormDefinitionMixin, ExtractDataSourcesMixin, ExtractControlMixin {
}
export declare class ExtractOptionsDataSourceMixin {
    protected settings?: UseOptionsDataSourceSettings<any>;
    protected readonly dataSourceLoader: DataSourceLoader;
    protected metadata?: BaseDataSourceMetadata;
    protected viewer?: BaseDataSourceViewer;
    protected dataSource?: BaseDataSource<ControlOptions | Record<string, any>>;
    protected readonly injector: Injector;
    protected useDataSourceValue?: UseDataSourceValue<ControlOptions | Record<string, any>>;
    protected extractOptionsDatasource(control?: AbstractControl): BaseDataSource<ControlOptions | Record<string, any>>;
}
