| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = useResponsiveObserver;
- exports.responsiveArray = void 0;
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
- var _vue = require("vue");
- var _internal = require("../theme/internal");
- const responsiveArray = exports.responsiveArray = ['xxxl', 'xxl', 'xl', 'lg', 'md', 'sm', 'xs'];
- const getResponsiveMap = token => ({
- xs: `(max-width: ${token.screenXSMax}px)`,
- sm: `(min-width: ${token.screenSM}px)`,
- md: `(min-width: ${token.screenMD}px)`,
- lg: `(min-width: ${token.screenLG}px)`,
- xl: `(min-width: ${token.screenXL}px)`,
- xxl: `(min-width: ${token.screenXXL}px)`,
- xxxl: `{min-width: ${token.screenXXXL}px}`
- });
- function useResponsiveObserver() {
- const [, token] = (0, _internal.useToken)();
- return (0, _vue.computed)(() => {
- const responsiveMap = getResponsiveMap(token.value);
- const subscribers = new Map();
- let subUid = -1;
- let screens = {};
- return {
- matchHandlers: {},
- dispatch(pointMap) {
- screens = pointMap;
- subscribers.forEach(func => func(screens));
- return subscribers.size >= 1;
- },
- subscribe(func) {
- if (!subscribers.size) this.register();
- subUid += 1;
- subscribers.set(subUid, func);
- func(screens);
- return subUid;
- },
- unsubscribe(paramToken) {
- subscribers.delete(paramToken);
- if (!subscribers.size) this.unregister();
- },
- unregister() {
- Object.keys(responsiveMap).forEach(screen => {
- const matchMediaQuery = responsiveMap[screen];
- const handler = this.matchHandlers[matchMediaQuery];
- handler === null || handler === void 0 ? void 0 : handler.mql.removeListener(handler === null || handler === void 0 ? void 0 : handler.listener);
- });
- subscribers.clear();
- },
- register() {
- Object.keys(responsiveMap).forEach(screen => {
- const matchMediaQuery = responsiveMap[screen];
- const listener = _ref => {
- let {
- matches
- } = _ref;
- this.dispatch((0, _extends2.default)((0, _extends2.default)({}, screens), {
- [screen]: matches
- }));
- };
- const mql = window.matchMedia(matchMediaQuery);
- mql.addListener(listener);
- this.matchHandlers[matchMediaQuery] = {
- mql,
- listener
- };
- listener(mql);
- });
- },
- responsiveMap
- };
- });
- }
|