UNPKG

matrix-react-sdk

Version:
92 lines (89 loc) 12.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.UI_EVENTS = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _events = _interopRequireDefault(require("events")); /* Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ let UI_EVENTS = exports.UI_EVENTS = /*#__PURE__*/function (UI_EVENTS) { UI_EVENTS["Resize"] = "resize"; return UI_EVENTS; }({}); class UIStore extends _events.default { constructor() { super(); // eslint-disable-next-line no-restricted-properties (0, _defineProperty2.default)(this, "resizeObserver", void 0); (0, _defineProperty2.default)(this, "uiElementDimensions", new Map()); (0, _defineProperty2.default)(this, "trackedUiElements", new Map()); (0, _defineProperty2.default)(this, "windowWidth", void 0); (0, _defineProperty2.default)(this, "windowHeight", void 0); (0, _defineProperty2.default)(this, "resizeObserverCallback", entries => { const windowEntry = entries.find(entry => entry.target === document.body); if (windowEntry) { this.windowWidth = windowEntry.contentRect.width; this.windowHeight = windowEntry.contentRect.height; } entries.forEach(entry => { const trackedElementName = this.trackedUiElements.get(entry.target); if (trackedElementName) { this.uiElementDimensions.set(trackedElementName, entry.contentRect); this.emit(trackedElementName, UI_EVENTS.Resize, entry); } }); this.emit(UI_EVENTS.Resize, entries); }); this.windowWidth = window.innerWidth; // eslint-disable-next-line no-restricted-properties this.windowHeight = window.innerHeight; this.resizeObserver = new ResizeObserver(this.resizeObserverCallback); this.resizeObserver.observe(document.body); } static get instance() { if (!UIStore._instance) { UIStore._instance = new UIStore(); } return UIStore._instance; } static destroy() { if (UIStore._instance) { UIStore._instance.resizeObserver.disconnect(); UIStore._instance.removeAllListeners(); UIStore._instance = null; } } getElementDimensions(name) { return this.uiElementDimensions.get(name); } trackElementDimensions(name, element) { this.trackedUiElements.set(element, name); this.resizeObserver.observe(element); } stopTrackingElementDimensions(name) { let trackedElement; this.trackedUiElements.forEach((trackedElementName, element) => { if (trackedElementName === name) { trackedElement = element; } }); if (trackedElement) { this.resizeObserver.unobserve(trackedElement); this.uiElementDimensions.delete(name); this.trackedUiElements.delete(trackedElement); } } isTrackingElementDimensions(name) { return this.uiElementDimensions.has(name); } } exports.default = UIStore; (0, _defineProperty2.default)(UIStore, "_instance", null); window.mxUIStore = UIStore.instance; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJVSV9FVkVOVFMiLCJleHBvcnRzIiwiVUlTdG9yZSIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJNYXAiLCJlbnRyaWVzIiwid2luZG93RW50cnkiLCJmaW5kIiwiZW50cnkiLCJ0YXJnZXQiLCJkb2N1bWVudCIsImJvZHkiLCJ3aW5kb3dXaWR0aCIsImNvbnRlbnRSZWN0Iiwid2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJoZWlnaHQiLCJmb3JFYWNoIiwidHJhY2tlZEVsZW1lbnROYW1lIiwidHJhY2tlZFVpRWxlbWVudHMiLCJnZXQiLCJ1aUVsZW1lbnREaW1lbnNpb25zIiwic2V0IiwiZW1pdCIsIlJlc2l6ZSIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJyZXNpemVPYnNlcnZlckNhbGxiYWNrIiwib2JzZXJ2ZSIsImluc3RhbmNlIiwiX2luc3RhbmNlIiwiZGVzdHJveSIsImRpc2Nvbm5lY3QiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJnZXRFbGVtZW50RGltZW5zaW9ucyIsIm5hbWUiLCJ0cmFja0VsZW1lbnREaW1lbnNpb25zIiwiZWxlbWVudCIsInN0b3BUcmFja2luZ0VsZW1lbnREaW1lbnNpb25zIiwidHJhY2tlZEVsZW1lbnQiLCJ1bm9ic2VydmUiLCJkZWxldGUiLCJpc1RyYWNraW5nRWxlbWVudERpbWVuc2lvbnMiLCJoYXMiLCJteFVJU3RvcmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmVzL1VJU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIFVJX0VWRU5UUyB7XG4gICAgUmVzaXplID0gXCJyZXNpemVcIixcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUlTdG9yZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBVSVN0b3JlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIHByaXZhdGUgdWlFbGVtZW50RGltZW5zaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBET01SZWN0UmVhZE9ubHk+KCk7XG4gICAgcHJpdmF0ZSB0cmFja2VkVWlFbGVtZW50cyA9IG5ldyBNYXA8RWxlbWVudCwgc3RyaW5nPigpO1xuXG4gICAgcHVibGljIHdpbmRvd1dpZHRoOiBudW1iZXI7XG4gICAgcHVibGljIHdpbmRvd0hlaWdodDogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG4gICAgICAgIHRoaXMud2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5yZXNpemVPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IFVJU3RvcmUge1xuICAgICAgICBpZiAoIVVJU3RvcmUuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICBVSVN0b3JlLl9pbnN0YW5jZSA9IG5ldyBVSVN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFVJU3RvcmUuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFVJU3RvcmUuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICBVSVN0b3JlLl9pbnN0YW5jZS5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICBVSVN0b3JlLl9pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIFVJU3RvcmUuX2luc3RhbmNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFbGVtZW50RGltZW5zaW9ucyhuYW1lOiBzdHJpbmcpOiBET01SZWN0UmVhZE9ubHkgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy51aUVsZW1lbnREaW1lbnNpb25zLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tFbGVtZW50RGltZW5zaW9ucyhuYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmFja2VkVWlFbGVtZW50cy5zZXQoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcFRyYWNraW5nRWxlbWVudERpbWVuc2lvbnMobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCB0cmFja2VkRWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50cmFja2VkVWlFbGVtZW50cy5mb3JFYWNoKCh0cmFja2VkRWxlbWVudE5hbWUsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0cmFja2VkRWxlbWVudE5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICB0cmFja2VkRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHJhY2tlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRyYWNrZWRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMudWlFbGVtZW50RGltZW5zaW9ucy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRVaUVsZW1lbnRzLmRlbGV0ZSh0cmFja2VkRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUcmFja2luZ0VsZW1lbnREaW1lbnNpb25zKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51aUVsZW1lbnREaW1lbnNpb25zLmhhcyhuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0VudHJ5ID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSBkb2N1bWVudC5ib2R5KTtcblxuICAgICAgICBpZiAod2luZG93RW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93V2lkdGggPSB3aW5kb3dFbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICAgICAgICAgIHRoaXMud2luZG93SGVpZ2h0ID0gd2luZG93RW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tlZEVsZW1lbnROYW1lID0gdGhpcy50cmFja2VkVWlFbGVtZW50cy5nZXQoZW50cnkudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICh0cmFja2VkRWxlbWVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVpRWxlbWVudERpbWVuc2lvbnMuc2V0KHRyYWNrZWRFbGVtZW50TmFtZSwgZW50cnkuY29udGVudFJlY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCh0cmFja2VkRWxlbWVudE5hbWUsIFVJX0VWRU5UUy5SZXNpemUsIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbWl0KFVJX0VWRU5UUy5SZXNpemUsIGVudHJpZXMpO1xuICAgIH07XG59XG5cbndpbmRvdy5teFVJU3RvcmUgPSBVSVN0b3JlLmluc3RhbmNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUFVWUMsU0FBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsMEJBQVRBLFNBQVM7RUFBVEEsU0FBUztFQUFBLE9BQVRBLFNBQVM7QUFBQTtBQUlOLE1BQU1FLE9BQU8sU0FBU0MsZUFBWSxDQUFDO0VBV3ZDQyxXQUFXQSxDQUFBLEVBQUc7SUFDakIsS0FBSyxDQUFDLENBQUM7O0lBRVA7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSwrQkFUMEIsSUFBSUMsR0FBRyxDQUEwQixDQUFDO0lBQUEsSUFBQUYsZ0JBQUEsQ0FBQUMsT0FBQSw2QkFDcEMsSUFBSUMsR0FBRyxDQUFrQixDQUFDO0lBQUEsSUFBQUYsZ0JBQUEs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