import { ListLoadingState, ObservableOrValue, MaybeObservableOrValue } from '@dereekb/rxjs';
import { Observable } from 'rxjs';
import { OnDestroy, Signal } from '@angular/core';
import { DbxListConfig } from './list.component';
import { DbxListSelectionMode, DbxListView, ListSelectionState } from './list.view';
import { type Maybe } from '@dereekb/util';
import { DbxListViewWrapper } from './list.wrapper';
import * as i0 from "@angular/core";
import * as i1 from "./list.component";
export declare const DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE = "\n  <dbx-list [state]=\"currentState$\" [config]=\"configSignal()\" [hasMore]=\"hasMore()\" [disabled]=\"disabled()\" [selectionMode]=\"selectionModeSignal()\">\n    <ng-content top select=\"[top]\"></ng-content>\n    <ng-content bottom select=\"[bottom]\"></ng-content>\n    <ng-content empty select=\"[empty]\"></ng-content>\n    <ng-content emptyLoading select=\"[emptyLoading]\"></ng-content>\n    <ng-content end select=\"[end]\"></ng-content>\n  </dbx-list>";
export declare class DbxListWrapperComponentImportsModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<DbxListWrapperComponentImportsModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<DbxListWrapperComponentImportsModule, never, [typeof i1.DbxListComponent], [typeof i1.DbxListComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<DbxListWrapperComponentImportsModule>;
}
export type DbxListWrapperConfig<T, V extends DbxListView<T> = DbxListView<T>> = Omit<DbxListConfig<T, V>, 'onClick' | 'loadMore'>;
export declare abstract class AbstractDbxListWrapperDirective<T, V extends DbxListView<T> = DbxListView<T>, C extends DbxListWrapperConfig<T, V> = DbxListWrapperConfig<T, V>, S extends ListLoadingState<T> = ListLoadingState<T>> implements OnDestroy, DbxListViewWrapper<T, S> {
    private readonly _config;
    private readonly _stateOverride;
    private readonly _selectionModeOverride;
    private readonly _selectionModeOverrideSignal;
    readonly hasMore: import("@angular/core").InputSignal<Maybe<boolean>>;
    readonly clickItem: import("@angular/core").OutputEmitterRef<T>;
    readonly loadMore: import("@angular/core").OutputEmitterRef<void>;
    readonly disabled: import("@angular/core").InputSignal<Maybe<boolean>>;
    readonly selectionMode: import("@angular/core").InputSignal<Maybe<DbxListSelectionMode>>;
    readonly state: import("@angular/core").InputSignal<Maybe<ObservableOrValue<S>>>;
    /**
     * @deprecated use state as the input instead.
     */
    readonly deprecatedInputState$: import("@angular/core").InputSignal<Maybe<Observable<S>>>;
    readonly selectionModeSignal: Signal<Maybe<DbxListSelectionMode>>;
    readonly currentState$: Observable<Maybe<S>>;
    readonly config$: Observable<DbxListConfig<T, V> | undefined>;
    readonly configSignal: Signal<DbxListConfig<T, V> | undefined>;
    constructor(initConfig: ObservableOrValue<C>);
    ngOnDestroy(): void;
    setState(stateObs: MaybeObservableOrValue<S>): void;
    setSelectionMode(selectionMode: MaybeObservableOrValue<DbxListSelectionMode>): void;
    protected _buildListConfig(config: C): DbxListConfig<T, V>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractDbxListWrapperDirective<any, any, any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractDbxListWrapperDirective<any, any, any, any>, never, never, { "hasMore": { "alias": "hasMore"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "deprecatedInputState$": { "alias": "state$"; "required": false; "isSignal": true; }; }, { "clickItem": "clickItem"; "loadMore": "loadMore"; }, never, never, false, never>;
}
export type DbxSelectionListWrapperConfig<T, V extends DbxListView<T> = DbxListView<T>> = Omit<DbxListWrapperConfig<T, V>, 'onSelectionChange'>;
export declare abstract class AbstractDbxSelectionListWrapperDirective<T, V extends DbxListView<T> = DbxListView<T>, C extends DbxSelectionListWrapperConfig<T, V> = DbxSelectionListWrapperConfig<T, V>, S extends ListLoadingState<T> = ListLoadingState<T>> extends AbstractDbxListWrapperDirective<T, V, C, S> {
    readonly selectionChange: import("@angular/core").OutputEmitterRef<ListSelectionState<T>>;
    protected _buildListConfig(config: C): DbxListConfig<T, V>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractDbxSelectionListWrapperDirective<any, any, any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractDbxSelectionListWrapperDirective<any, any, any, any>, never, never, {}, { "selectionChange": "selectionChange"; }, never, never, false, never>;
}
/**
 * @deprecated update components to use DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION instead of just referencing only the template and DbxListWrapperComponentImportsModule.
 */
export declare const DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE = "\n  <dbx-list [state]=\"currentState$\" [config]=\"configSignal()\" [hasMore]=\"hasMore()\" [disabled]=\"disabled()\" [selectionMode]=\"selectionModeSignal()\">\n    <ng-content top select=\"[top]\"></ng-content>\n    <ng-content bottom select=\"[bottom]\"></ng-content>\n    <ng-content empty select=\"[empty]\"></ng-content>\n    <ng-content emptyLoading select=\"[emptyLoading]\"></ng-content>\n    <ng-content end select=\"[end]\"></ng-content>\n  </dbx-list>";
