import { Color, Size, MaybeAsync, NestedKeyOf, Operator, OperatorHasData, OperatorNoData, Filter, FilterAndOr, FilterBetween, FilterHasData, FilterNoData, Order, PagingReq, PagingRes, QueryReq } from '@sdcorejs/utils/models';
export { Color, Filter, FilterAndOr, FilterBetween, FilterHasData, FilterNoData, MaybeAsync, NestedKeyOf, Operator, OperatorHasData, OperatorNoData, Order, PagingReq, PagingRes, QueryReq, Size, ValidationPattern, ValidationPatternType, normalizeAsync, resolveMaybeAsync } from '@sdcorejs/utils/models';
import * as rxjs from 'rxjs';
import { InputSignalWithTransform, InputSignal, ModelSignal } from '@angular/core';
export { EMPTY_STR, VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';

/** @deprecated Use {@link Color} from `@sdcorejs/utils/models` instead */
type SdColor = Color;

/** @deprecated Use {@link Size} from `@sdcorejs/utils/models` instead */
type SdSize = Size;

type MaterialIconFontSet = 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp';
declare const DefaultMaterialIconFontSet: MaterialIconFontSet;

/**
 * @deprecated Use {@link ValidationPatternType} from `@sdcorejs/utils/models` instead.
 * Note: member names changed — PHONE_VN → VN_PHONE, IDVN → VN_ID, IDVN_OR_PASSPORT → VN_ID_OR_PASSPORT.
 */
type SdPatternType = 'EMAIL' | 'PHONE' | 'PHONE_VN' | 'IDVN' | 'PASSPORT' | 'IDVN_OR_PASSPORT' | 'TIME';
/**
 * @deprecated Use {@link ValidationPattern} from `@sdcorejs/utils/models` instead.
 * Note: `regex` field renamed to `pattern` to align with Angular `Validators.pattern()`.
 */
interface SdPatternCommon {
    type: SdPatternType;
    name: string;
    regex: string;
    errorMessage: string;
}
/** @deprecated Use `VALIDATION_PATTERNS` from `@sdcorejs/utils/constants` instead. */
declare const SdPatternCommons: SdPatternCommon[];

/** @deprecated Use {@link EMPTY_STR} from `@sdcorejs/utils/constants` instead */
declare const SD_EMPTY_STR = "--";

/** @deprecated Use {@link MaybeAsync} from `@sdcorejs/utils/models` instead */
type SdMaybeAsync<T> = MaybeAsync<T>;
/** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */
declare const SdResolveMaybeAsync: <T>(value: MaybeAsync<T>) => Promise<T>;
/** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */
declare const SdNormalizeAsync: <T>(value: MaybeAsync<T>) => rxjs.Observable<T>;

/** @deprecated Use {@link NestedKeyOf} from `@sdcorejs/utils/models` instead */
type SdNestedKeyOf<T> = NestedKeyOf<T>;

/**
 * Utility Type: Bóc tách kiểu dữ liệu gốc từ Angular Signal Inputs & Models
 */
type SdUnwrapSignal<T> = T extends InputSignalWithTransform<any, infer WriteT> ? WriteT : T extends InputSignal<infer ReadT> ? ReadT : T extends ModelSignal<infer ModelT> ? ModelT : T;
type SdUnwrapSafe<T> = SdUnwrapSignal<NonNullable<T>>;

/** @deprecated Use {@link Operator} from `@sdcorejs/utils/models` instead */
type SdOperator = Operator;
/** @deprecated Use {@link OperatorHasData} from `@sdcorejs/utils/models` instead */
type SdOperatorHasData = OperatorHasData;
/** @deprecated Use {@link OperatorNoData} from `@sdcorejs/utils/models` instead */
type SdOperatorNoData = OperatorNoData;
declare const SdOperators: {
    value: Operator;
    symbol?: string;
    display: string;
}[];

/** @deprecated Use {@link Filter} from `@sdcorejs/utils/models` instead */
type SdFilter<T = any> = Filter<T>;
/** @deprecated Use {@link FilterHasData} from `@sdcorejs/utils/models` instead */
type SdFilterHasData<T = any> = FilterHasData<T>;
/** @deprecated Use {@link FilterBetween} from `@sdcorejs/utils/models` instead */
type SdFilterBetween<T = any> = FilterBetween<T>;
/** @deprecated Use {@link FilterNoData} from `@sdcorejs/utils/models` instead */
type SdFilterNoData<T = any> = FilterNoData<T>;
/** @deprecated Use {@link FilterAndOr} from `@sdcorejs/utils/models` instead */
type SdFilterAndOr<T = any> = FilterAndOr<T>;

/** @deprecated Use {@link Order} from `@sdcorejs/utils/models` instead */
type SdOrder<T = any> = Order<T>;

/** @deprecated Use {@link QueryReq} from `@sdcorejs/utils/models` instead */
type SdQueryReq<T = any> = QueryReq<T>;
/** @deprecated Use {@link PagingReq} from `@sdcorejs/utils/models` instead */
type SdPagingReq<T = any> = PagingReq<T>;
/** @deprecated Use {@link PagingRes} from `@sdcorejs/utils/models` instead */
type SdPagingRes<T = any> = PagingRes<T>;

export { DefaultMaterialIconFontSet, SD_EMPTY_STR, SdNormalizeAsync, SdOperators, SdPatternCommons, SdResolveMaybeAsync };
export type { MaterialIconFontSet, SdColor, SdFilter, SdFilterAndOr, SdFilterBetween, SdFilterHasData, SdFilterNoData, SdMaybeAsync, SdNestedKeyOf, SdOperator, SdOperatorHasData, SdOperatorNoData, SdOrder, SdPagingReq, SdPagingRes, SdPatternCommon, SdPatternType, SdQueryReq, SdSize, SdUnwrapSafe, SdUnwrapSignal };
