winbox-ui-next
Version:
We Design Vue 2.0: A Vue.js 3 UI Library
101 lines (100 loc) • 2.86 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
const responsiveArray = [
"xxl",
"xl",
"lg",
"md",
"sm",
"xs"
];
const responsiveMap = {
xs: "(max-width: 575px)",
sm: "(min-width: 576px)",
md: "(min-width: 768px)",
lg: "(min-width: 992px)",
xl: "(min-width: 1200px)",
xxl: "(min-width: 1600px)"
};
let subscribers = [];
let subUid = -1;
let screens = {};
const responsiveObserve = {
matchHandlers: {},
dispatch(pointMap, breakpointChecked) {
screens = pointMap;
if (subscribers.length < 1) {
return false;
}
subscribers.forEach((item) => {
item.func(screens, breakpointChecked);
});
return true;
},
subscribe(func) {
if (subscribers.length === 0) {
this.register();
}
const token = (++subUid).toString();
subscribers.push({
token,
func
});
func(screens, null);
return token;
},
unsubscribe(token) {
subscribers = subscribers.filter((item) => item.token !== token);
if (subscribers.length === 0) {
this.unregister();
}
},
unregister() {
Object.keys(responsiveMap).forEach((screen) => {
const matchMediaQuery = responsiveMap[screen];
if (!matchMediaQuery)
return;
const handler = this.matchHandlers[matchMediaQuery];
if (handler && handler.mql && handler.listener) {
handler.mql.removeEventListener("change", handler.listener);
}
});
},
register() {
Object.keys(responsiveMap).forEach((screen) => {
const matchMediaQuery = responsiveMap[screen];
if (!matchMediaQuery)
return;
const listener = ({ matches }) => {
this.dispatch(__spreadProps(__spreadValues({}, screens), {
[screen]: matches
}), screen);
};
const mql = window.matchMedia(matchMediaQuery);
mql.addEventListener("change", listener);
this.matchHandlers[matchMediaQuery] = {
mql,
listener
};
listener(mql);
});
}
};
export { responsiveObserve as default, responsiveArray, responsiveMap };