// TypeScript Version: 2.4 import { Reducer, StoreEnhancerStoreCreator } from 'redux' export interface IResponsiveEnhancer { (next: StoreEnhancerStoreCreator): StoreEnhancerStoreCreator } export type BreakPointsDefaultNames = | 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge' | 'infinity' export type IBreakPoints = { [k in BPNames]: number | string } export type IBreakPointResults = { [k in keyof BP]: boolean } export interface IBrowser { _responsiveState: boolean mediaType: string orientation: string lessThan: IBreakPointResults greaterThan: IBreakPointResults is: IBreakPointResults breakpoints: BP } export interface IResponsiveReducerOptions { initialMediaType?: string infinity?: string extraFields?(breakPoints: IBrowser): EF } export interface IResponsiveEnhancerOptions { calculateInitialState?: boolean } /* `breakpoints?: BP` doesn't work when we call createResponsiveStateReducer(undefined, {}) // BP is undefined here instead of defaults so instead we use overloads */ export function createResponsiveStateReducer(): Reducer export function createResponsiveStateReducer, EF = {}>( breakpoints: BP, options?: IResponsiveReducerOptions ): Reducer & EF> export function createResponsiveStateReducer( breakpoints: undefined | null, options?: IResponsiveReducerOptions ): Reducer export function createResponsiveStoreEnhancer( options?: IResponsiveEnhancerOptions ): IResponsiveEnhancer export const responsiveStateReducer: Reducer export const responsiveStoreEnhancer: IResponsiveEnhancer export interface ICalculateResponsiveStateAction { type: 'redux-responsive/CALCULATE_RESPONSIVE_STATE' } export type IWindowLike = Pick export function calculateResponsiveState(window: IWindowLike): ICalculateResponsiveStateAction