{"version":3,"file":"useMediaQueries.cjs","sources":["../../../src/hooks/useMediaQueries/useMediaQueries.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useSyncExternalStore } from 'react'\n\nimport { entries, fromEntries } from '../../libs/object'\nimport { shallowEqual } from '../../libs/shallowEqual'\n\ntype MediaQueryListMap = {\n  [key: string]: string\n}\n\ntype MediaQueryMatches<T> = {\n  [K in keyof T]: boolean\n}\n\nexport const useMediaQueries = <T extends MediaQueryListMap>(queries: T): MediaQueryMatches<T> => {\n  const getMatchMediaList = useCallback(\n    () => entries(queries).map(([key, query]) => [key, window.matchMedia(query)] as const),\n    [queries],\n  )\n  const lastSnapshotRef = useRef<MediaQueryMatches<T> | null>(null)\n\n  const serverSnapshot = useMemo(\n    () =>\n      fromEntries(entries(queries).map(([key]) => [key, false] as const)) as MediaQueryMatches<T>,\n    [queries],\n  )\n\n  const getServerSnapshot = useCallback(\n    () => serverSnapshot,\n    [serverSnapshot],\n  ) satisfies () => MediaQueryMatches<T>\n\n  const getSnapshot = useCallback((): MediaQueryMatches<T> => {\n    if (typeof window === 'undefined' || !window.matchMedia) {\n      return serverSnapshot\n    }\n\n    const ret = fromEntries(getMatchMediaList().map(([key, m]) => [key, m.matches] as const))\n    if (lastSnapshotRef.current && shallowEqual(lastSnapshotRef.current, ret)) {\n      return lastSnapshotRef.current\n    }\n    lastSnapshotRef.current = ret\n    return ret\n  }, [getMatchMediaList, serverSnapshot])\n\n  const subscribe = useCallback(\n    (f: () => void) => {\n      if (typeof window === 'undefined' || !window.matchMedia) {\n        return () => {}\n      }\n      const matchMediaList = getMatchMediaList()\n      matchMediaList.forEach(([, m]) => {\n        m.addEventListener('change', f)\n      })\n      return () => {\n        matchMediaList.forEach(([, m]) => {\n          m.removeEventListener('change', f)\n        })\n      }\n    },\n    [getMatchMediaList],\n  )\n\n  return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n}\n"],"names":["useCallback","entries","useRef","useMemo","fromEntries","shallowEqual","useSyncExternalStore"],"mappings":";;;;;;AAaO,MAAM,eAAe,GAAG,CAA8B,OAAU,KAA0B;AAC/F,IAAA,MAAM,iBAAiB,GAAGA,iBAAW,CACnC,MAAMC,mBAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAU,CAAC,EACtF,CAAC,OAAO,CAAC,CACV;AACD,IAAA,MAAM,eAAe,GAAGC,YAAM,CAA8B,IAAI,CAAC;AAEjE,IAAA,MAAM,cAAc,GAAGC,aAAO,CAC5B,MACEC,uBAAW,CAACH,mBAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAU,CAAC,CAAyB,EAC7F,CAAC,OAAO,CAAC,CACV;AAED,IAAA,MAAM,iBAAiB,GAAGD,iBAAW,CACnC,MAAM,cAAc,EACpB,CAAC,cAAc,CAAC,CACoB;AAEtC,IAAA,MAAM,WAAW,GAAGA,iBAAW,CAAC,MAA2B;QACzD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACvD,YAAA,OAAO,cAAc;QACvB;QAEA,MAAM,GAAG,GAAGI,uBAAW,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAU,CAAC,CAAC;AACzF,QAAA,IAAI,eAAe,CAAC,OAAO,IAAIC,8BAAY,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACzE,OAAO,eAAe,CAAC,OAAO;QAChC;AACA,QAAA,eAAe,CAAC,OAAO,GAAG,GAAG;AAC7B,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAEvC,IAAA,MAAM,SAAS,GAAGL,iBAAW,CAC3B,CAAC,CAAa,KAAI;QAChB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACvD,YAAA,OAAO,MAAK,EAAE,CAAC;QACjB;AACA,QAAA,MAAM,cAAc,GAAG,iBAAiB,EAAE;QAC1C,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAI;AAC/B,YAAA,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAK;YACV,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAI;AAC/B,gBAAA,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AACH,IAAA,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB;IAED,OAAOM,0BAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,CAAC;AACxE;;;;"}