UNPKG

@wordpress/compose

Version:
82 lines (80 loc) 2.56 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(); var EMPTY_SUBSCRIBER = { subscribe: () => () => { }, getValue: () => false }; function getMQLSubscriber(view, query) { if (!view || !query || typeof view.matchMedia !== "function") { return EMPTY_SUBSCRIBER; } let queryCache = perWindowCache.get(view); if (!queryCache) { queryCache = /* @__PURE__ */ new Map(); perWindowCache.set(view, queryCache); } const cached = queryCache.get(query); if (cached) { return cached; } const mediaQueryList = view.matchMedia(query); const listeners = /* @__PURE__ */ new Set(); const notify = () => { for (const listener of listeners) { listener(); } }; const subscriber = { subscribe(onStoreChange) { if (listeners.size === 0) { mediaQueryList.addEventListener?.("change", notify); } listeners.add(onStoreChange); return () => { listeners.delete(onStoreChange); if (listeners.size === 0) { mediaQueryList.removeEventListener?.("change", notify); } }; }, getValue() { return mediaQueryList.matches; } }; queryCache.set(query, subscriber); return subscriber; } function useMediaQuery(query, view = typeof window !== "undefined" ? window : void 0) { const source = getMQLSubscriber(view, query); return (0, import_element.useSyncExternalStore)( source.subscribe, source.getValue, () => false ); } //# sourceMappingURL=index.cjs.map