UNPKG

solid-use

Version:
8 lines (7 loc) 2.16 kB
{ "version": 3, "sources": ["../../../src/media-query.ts"], "sourcesContent": ["import { createEffect, createSignal, onCleanup } from 'solid-js';\nimport { isServer } from 'solid-js/web';\n\nconst MEDIA = new Map<string, MediaQueryList>();\n\nfunction getMediaMatcher(query: string): MediaQueryList {\n const media = MEDIA.get(query);\n if (media) {\n return media;\n }\n const newMedia = window.matchMedia(query);\n MEDIA.set(query, newMedia);\n return newMedia;\n}\n\nexport const useMediaQuery = isServer\n ? (_query: string): (() => boolean) =>\n () =>\n false\n : (query: string): (() => boolean) => {\n const media = getMediaMatcher(query);\n const [state, setState] = createSignal(false);\n\n createEffect(() => {\n const callback = () => {\n setState(media.matches);\n };\n callback();\n media.addEventListener('change', callback, false);\n onCleanup(() => {\n media.removeEventListener('change', callback, false);\n });\n });\n\n return state;\n };\n\nexport function usePrefersDark(): () => boolean {\n return useMediaQuery('(prefers-color-scheme: dark)');\n}\n\nexport function usePrefersLight(): () => boolean {\n return useMediaQuery('(prefers-color-scheme: light)');\n}\n\nexport function usePrefersReducedMotion(): () => boolean {\n return useMediaQuery('(prefers-reduced-motion)');\n}\n"], "mappings": ";AAAA,SAAS,cAAc,cAAc,iBAAiB;AACtD,SAAS,gBAAgB;AAEzB,IAAM,QAAQ,oBAAI,IAA4B;AAE9C,SAAS,gBAAgB,OAA+B;AACtD,QAAM,QAAQ,MAAM,IAAI,KAAK;AAC7B,MAAI,OAAO;AACT,WAAO;AAAA,EACT;AACA,QAAM,WAAW,OAAO,WAAW,KAAK;AACxC,QAAM,IAAI,OAAO,QAAQ;AACzB,SAAO;AACT;AAEO,IAAM,gBAAgB,WACzB,CAAC,WACC,MACE,QACJ,CAAC,UAAmC;AAClC,QAAM,QAAQ,gBAAgB,KAAK;AACnC,QAAM,CAAC,OAAO,QAAQ,IAAI,aAAa,KAAK;AAE5C,eAAa,MAAM;AACjB,UAAM,WAAW,MAAM;AACrB,eAAS,MAAM,OAAO;AAAA,IACxB;AACA,aAAS;AACT,UAAM,iBAAiB,UAAU,UAAU,KAAK;AAChD,cAAU,MAAM;AACd,YAAM,oBAAoB,UAAU,UAAU,KAAK;AAAA,IACrD,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;AAEG,SAAS,iBAAgC;AAC9C,SAAO,cAAc,8BAA8B;AACrD;AAEO,SAAS,kBAAiC;AAC/C,SAAO,cAAc,+BAA+B;AACtD;AAEO,SAAS,0BAAyC;AACvD,SAAO,cAAc,0BAA0B;AACjD;", "names": [] }