interface BaseConfig { [key: string]: number; } interface Breakpoint { breakpoint: keyof C; maxWidth?: number | null; minWidth: C[keyof C]; } interface MediaQuery { breakpoint: keyof C; maxWidth: number | null; minWidth: C[keyof C]; query: string; } type GetCurrentBreakPoint = (mediaQueries: MediaQuery[], defaultBreakpoint: D) => Breakpoint | EmptyBreakpoint; type CreateMediaQueries = (breakpoints: C) => MediaQuery[]; interface EmptyBreakpoint { breakpoint: undefined; minWidth: undefined; maxWidth: undefined; } interface UseResponsiveParams { config: C; defaultBreakpoint?: D; } type UseResponsiveResponse = D extends undefined ? Breakpoint | EmptyBreakpoint : D extends keyof C ? Breakpoint : never; export { BaseConfig, Breakpoint, CreateMediaQueries, EmptyBreakpoint, GetCurrentBreakPoint, MediaQuery, UseResponsiveParams, UseResponsiveResponse };