{"version":3,"sources":["../../src/useResponsive/index.ts"],"names":["useMemo","useState","useCallback","useEnhancedEffect","createMediaQueries","getCurrentBreakPoint","useResponsive","config","defaultBreakpoint","mediaQueries","currentBreakpoint","setCurrentBreakpoint","updateBreakpoint","matches","breakpoint","unsubscribers","_a","_b","query","__objRest","mediaQuery","handleChange","event","unsubscriber","useResponsive_default"],"mappings":"qCAAA,OAAS,WAAAA,EAAS,YAAAC,EAAU,eAAAC,MAAmB,QAC/C,OAAOC,MAAuB,yCAC9B,OAAS,sBAAAC,EAAoB,wBAAAC,MAA4B,UASzD,MAAMC,EAAgB,CAAsD,CAC1E,OAAAC,EACA,kBAAAC,CACF,IAA8D,CAC5D,MAAMC,EAAeT,EAAQ,IAAMI,EAAmBG,CAAM,EAAG,CAACA,CAAM,CAAC,EAEjE,CAACG,EAAmBC,CAAoB,EAAIV,EAChDI,EAA2BI,EAAcD,CAAsB,CACjE,EAEMI,EAAmBV,EACvB,CAAC,CAAE,QAAAW,CAAQ,EAAyCC,IAA8B,CAC5ED,GACFF,EAAqBG,CAAU,CAEnC,EACA,CAAC,CACH,EAEA,OAAAX,EAAkB,IAAM,CACtB,MAAMY,EAAgBN,EAAa,IAAKO,GAA6B,CAA7B,IAAAC,EAAAD,EAAE,OAAAE,CA/B9C,EA+B4CD,EAAYH,EAAAK,EAAZF,EAAY,CAAV,UACxC,MAAMG,EAAa,OAAO,WAAWF,CAAK,EAE1CN,EAAiBQ,EAAYN,CAA2B,EAExD,MAAMO,EAAgBC,GAA+B,CACnDV,EAAiBU,EAAOR,CAA2B,CACrD,EAEA,OAAIM,GAAA,MAAAA,EAAY,iBACdA,EAAW,iBAAiB,SAAUC,CAAY,EACzCD,GAAA,MAAAA,EAAY,aACrBA,EAAW,YAAYC,CAAY,EAG9B,IAAM,CACPD,GAAA,MAAAA,EAAY,oBACdA,EAAW,oBAAoB,SAAUC,CAAY,EAC5CD,GAAA,MAAAA,EAAY,gBACrBA,EAAW,eAAeC,CAAY,CAE1C,CACF,CAAC,EAED,MAAO,IAAMN,EAAc,QAAQQ,GAAgBA,EAAa,CAAC,CACnE,EAAG,CAACd,EAAcG,CAAgB,CAAC,EAE5BF,CACT,EAEA,IAAOc,EAAQlB","sourcesContent":["import { useMemo, useState, useCallback } from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect/useEnhancedEffect';\nimport { createMediaQueries, getCurrentBreakPoint } from './utils';\nimport type {\n  Breakpoint,\n  BaseConfig,\n  UseResponsiveResponse,\n  EmptyBreakpoint,\n  UseResponsiveParams\n} from './types';\n\nconst useResponsive = <C extends BaseConfig, D extends keyof C | undefined>({\n  config,\n  defaultBreakpoint\n}: UseResponsiveParams<C, D>): UseResponsiveResponse<C, D> => {\n  const mediaQueries = useMemo(() => createMediaQueries(config), [config]);\n\n  const [currentBreakpoint, setCurrentBreakpoint] = useState<Breakpoint<C> | EmptyBreakpoint>(\n    getCurrentBreakPoint<C, D>(mediaQueries, defaultBreakpoint as D)\n  );\n\n  const updateBreakpoint = useCallback(\n    ({ matches }: MediaQueryList | MediaQueryListEvent, breakpoint: Breakpoint<C>) => {\n      if (matches) {\n        setCurrentBreakpoint(breakpoint);\n      }\n    },\n    []\n  );\n\n  useEnhancedEffect(() => {\n    const unsubscribers = mediaQueries.map(({ query, ...breakpoint }) => {\n      const mediaQuery = window.matchMedia(query);\n\n      updateBreakpoint(mediaQuery, breakpoint as Breakpoint<C>);\n\n      const handleChange = (event: MediaQueryListEvent) => {\n        updateBreakpoint(event, breakpoint as Breakpoint<C>);\n      };\n\n      if (mediaQuery?.addEventListener) {\n        mediaQuery.addEventListener('change', handleChange);\n      } else if (mediaQuery?.addListener) {\n        mediaQuery.addListener(handleChange);\n      }\n\n      return () => {\n        if (mediaQuery?.removeEventListener) {\n          mediaQuery.removeEventListener('change', handleChange);\n        } else if (mediaQuery?.removeListener) {\n          mediaQuery.removeListener(handleChange);\n        }\n      };\n    });\n\n    return () => unsubscribers.forEach(unsubscriber => unsubscriber());\n  }, [mediaQueries, updateBreakpoint]);\n\n  return currentBreakpoint as UseResponsiveResponse<C, D>;\n};\n\nexport default useResponsive;\n"]}