import type { Observable } from 'rxjs';
export interface ItemRecord<T, U = unknown> {
    label: string;
    value: T;
    alt?: U;
    icon?: string;
    disabled?: boolean;
    permission?: string;
    category?: number | string;
    additionalData?: string;
}
export type ItemRecords$<T, U = unknown> = Observable<ItemRecord<T, U>[] | undefined> | ItemRecord<T, U>[];
export type ItemToId<T> = (item: T) => string | number;
export type Class = {
    new (...args: any[]): any;
};
export type Singleton<T> = T extends any[] ? T[number] : T;
export type AtLeast<T, K extends keyof T> = Partial<T> & Pick<T, K>;
export type DeepPartial<T> = T extends object ? {
    [P in keyof T]?: DeepPartial<T[P]>;
} : T;
