UNPKG

@wordpress/compose

Version:
76 lines (74 loc) 2.37 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // packages/compose/src/hooks/use-media-query/index.ts var use_media_query_exports = {}; __export(use_media_query_exports, { default: () => useMediaQuery }); module.exports = __toCommonJS(use_media_query_exports); var import_element = require("@wordpress/element"); var perWindowCache = /* @__PURE__ */ new WeakMap(); function getMediaQueryList(view, query) { if (!query) { return null; } const matchMediaCache = perWindowCache.get(view) ?? /* @__PURE__ */ new Map(); if (!perWindowCache.has(view)) { perWindowCache.set(view, matchMediaCache); } let match = matchMediaCache.get(query); if (match) { return match; } if (typeof view?.matchMedia === "function") { match = view.matchMedia(query); matchMediaCache.set(query, match); return match; } return null; } function useMediaQuery(query, view = window) { const source = (0, import_element.useMemo)(() => { const mediaQueryList = getMediaQueryList(view, query); return { subscribe(onStoreChange) { if (!mediaQueryList) { return () => { }; } mediaQueryList.addEventListener?.("change", onStoreChange); return () => { mediaQueryList.removeEventListener?.( "change", onStoreChange ); }; }, getValue() { return mediaQueryList?.matches ?? false; } }; }, [view, query]); return (0, import_element.useSyncExternalStore)( source.subscribe, source.getValue, () => false ); } //# sourceMappingURL=index.cjs.map