import { IconName } from '@mesalvo/icons';
import { Locale } from '@mesalvo/ts-definitions';
import { ReactNode } from 'react';
import { CountryCode } from '../i18n';
import { PrivilegeType } from '../models/privileges/types';
import { AlignEnum, BooleanEnum, BrandColorsEnum, ColorsEnum, DirectionEnum, FileTypes, GetValuesEnum, HeadingLevelEnum, HttpStatusEnum, MainSizesEnum, Methods, OrientationsEnum, RoundedSizesEnum, ScopesEnum, SidesEnum, SizesEnum, SortDirectionEnum, StateColorsEnum, TriggerReasonEnum } from './enums';
export type Identification = string | number;
export type DeepPartial<T> = T extends object ? {
    [P in keyof T]?: DeepPartial<T[P]>;
} : T;
/**
 * @name OnOff
 * @description Type for booleans, on and off states
  

 */
export type OnOff = Record<BooleanEnum, string>;
/**
 * @name StateColors
 * @description Type for the different state colors
  

 */
export type StateColors = Record<StateColorsEnum, string>;
/**
 * @name BrandColors
 * @description Type for the different brand colors
  

 */
export type BrandColors = Record<BrandColorsEnum, string>;
/**
 * @name ColorsType
 * @description Type for the different colors, including state and brand colors
  

 */
export type ColorsType = Record<GetValuesEnum<typeof ColorsEnum>, string>;
/**
 * @name Colors
 * @description Type for the different colors, including state and brand colors, and custom colors if provided by the user
  

 */
export type Colors = keyof typeof ColorsEnum;
/**
 * @name HeadingLevel
 * @description Type for the different heading levels, from h1 to h6
  

 */
export type HeadingLevel = keyof typeof HeadingLevelEnum;
/**
 * @name Positions
 * @description Type for the different positions, from top-left to bottom-right, and center, center-left, center-right, top-center and bottom-center
 * @see PositionsEnum for the different positions
 * @alias PositionsEnum
  

 *
 */
export interface Positions {
    "bottom-left": string;
    "bottom-right": string;
    "bottom-center": string;
    "top-left": string;
    "top-center": string;
    "top-right": string;
    "center-left": string;
    center: string;
    "center-right": string;
}
/**
 * @name MainSizes
 * @description Type for the main different sizes, from xs to xl
 * @see MainSizesEnum for the different sizes

 */
export type MainSizesType = Record<GetValuesEnum<typeof MainSizesEnum>, string>;
/**
 * @name MainSizesElastic
 * @description Type for the main different sizes, from xs to xl, it also includes any value provided by the user
 * @see MainSizesEnum for the different sizes of the library
 * @property {string} [key] - Any value provided by the user
  

 */
export type MainSizes = keyof typeof MainSizesEnum;
/**
 * @name Sizes
 * @description Type for the different sizes, from xs to 7xl, dynamic from the SizesEnum enum
 * @see SizesEnum for the different sizes
  

 */
export type Sizes = Record<GetValuesEnum<typeof SizesEnum>, string>;
/**
 * @name RoundedSizes
 * @description Type for the different rounded sizes, from xs to 7xl, dynamic from the RoundedSizesEnum enum
 * @see RoundedSizesEnum for the different sizes
  

 */
export type RoundedSizes = keyof typeof RoundedSizesEnum;
/**
 * @name RoundedSizesTypes
 * @description Type for the different rounded sizes, from xs to 7xl, dynamic from the RoundedSizesEnum enum
 * @see RoundedSizesEnum for the different sizes
 * @extends RoundedSizesType
  

 */
export type RoundedSizesTypes = Record<GetValuesEnum<typeof RoundedSizesEnum>, string>;
/**
 * @name RoundedSizesElastic
 * @description Type for the different rounded sizes, from xs to 7xl, dynamic from the RoundedSizesEnum enum, it also includes any value provided by the user
 * @see RoundedSizesEnum for the different sizes
 * @extends RoundedSizesType
  

 */
export interface RoundedSizesElastic extends RoundedSizesTypes {
    [key: string]: string;
}
/**
 * @name ContentPositions
 * @description Interface for the different content positions
  

 */
export interface ContentPositions {
    center: string;
}
/**
 * @name TriggerReason
 * @description Type for the different trigger reasons, from click to hover, dynamic from the TriggerReasonEnum enum
 * @see TriggerReasonEnum for the different trigger reasons
  

 */
export type TriggerReason = `${TriggerReasonEnum}`;
/**
 * @name Direction
 * @description Type for the different directions, from top to bottom, dynamic from the DirectionEnum enum
 * @see DirectionEnum for the different directions
  

 */
export type Direction = `${DirectionEnum}`;
export type Side = `${SidesEnum}`;
export type Align = `${AlignEnum}`;
export type Orientation = `${OrientationsEnum}`;
export type ClassName = string | undefined;
export type WithClassName<P = unknown> = P & {
    className?: ClassName;
};
export interface Resource {
    component: ReactNode;
    privilege?: PrivilegeType;
}
export interface CompleteResource {
    list?: Resource;
    edit?: Resource;
    create?: Resource;
}
export interface MenuItem {
    path: string;
    privilege?: PrivilegeType;
    icon: IconName;
    action?: () => void;
    label: string;
    subMenus?: SubMenuMultiple[];
}
export interface SubMenuMultiple {
    name?: string;
    privilege?: PrivilegeType;
    items?: SubMenu[];
}
export interface SubMenu {
    path: string;
    privilege?: {
        view?: PrivilegeType;
        manage?: PrivilegeType;
    };
    label: string;
}
export type Menu = MenuItem[];
export interface Language {
    locale: Locale;
    country?: CountryCode;
    language: string;
    flagCode?: CountryCode;
    basedOn?: Locale[];
}
export type Translation = Record<string, string>;
export type AllTranslations = Record<Locale, Translation>;
export type SomeTranslations = Partial<AllTranslations>;
export type Method = `${Methods}`;
export type HttpStatusLabel = keyof typeof HttpStatusEnum;
export type HttpStatus = `${HttpStatusEnum}`;
export type SortDirection = `${SortDirectionEnum}`;
export type GenericObject = Record<string, any>;
export type FileType = `${FileTypes}`;
export type Scope = `${ScopesEnum}`;
export type DescriptionAndFields = {
    description: string;
    fields: Record<string, string>;
};
export type WithDebug = {
    debug?: boolean;
};
export interface DataMustHaveId {
    id: string;
    [key: string]: any;
}
//# sourceMappingURL=types.d.ts.map