UNPKG

ngx-slice-kit

Version:

[![npm version](https://badge.fury.io/js/ngx-slice-kit.svg)](https://badge.fury.io/js/ngx-slice-kit)

101 lines 13.5 kB
import { Inject, Injectable } from '@angular/core'; import { getSupportedInputTypes, supportsPassiveEventListeners, supportsScrollBehavior } from '@angular/cdk/platform'; import { BehaviorSubject, of } from 'rxjs'; import { DOCUMENT } from '@angular/common'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/platform"; const DEFAULT_MOBILE_LAYOUT_WIDTH = 1024; const CHAR_STRING = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; const LOWER_INDEX = 1000; export class LayoutControlService { constructor(document, platform) { this.document = document; this.platform = platform; this.supportedInputTypes = Array.from(getSupportedInputTypes()).join(', '); this.supportsPassiveEventListeners = supportsPassiveEventListeners(); this.supportsScrollBehavior = supportsScrollBehavior(); /** * simple bool behaviorSubject which returns is mobileLayout active or not */ this.$mobileLayoutWidth = new BehaviorSubject(DEFAULT_MOBILE_LAYOUT_WIDTH); this.$focusTrap = new BehaviorSubject([]); } get trapped() { const elements = this.$focusTrap.getValue(); return elements.length ? elements[0] : undefined; } get focusTrap() { return this.$focusTrap.getValue(); } get isMobileLayout() { const { width = 0 } = this.getViewport(); return width <= this.mobileLayoutWidth; } get mobileLayoutObservable() { return of(this.isMobileLayout); } get mobileLayoutDetectionEnabled() { return this.isMobileLayout !== null ? this.isMobileLayout : false; } get mobileLayoutWidth() { return this.$mobileLayoutWidth.getValue(); } set mobileLayoutWidth(w) { this.$mobileLayoutWidth.next(w); } focus(elem) { this.$focusTrap.next([elem, ...this.$focusTrap.getValue()]); } getPlatformClass() { return this.platform.IOS ? 'ios' : this.platform.ANDROID ? 'android' : 'browser'; } generateLayoutElementHash() { let result = ''; for (let i = 0; i < 32; i++) { result += CHAR_STRING.charAt(Math.floor(Math.random() * CHAR_STRING.length)); } return result; } catch(elem) { this.$focusTrap.next([elem, ...this.$focusTrap.getValue()]); } getViewport() { if (!this.platform.isBrowser) { return; } const win = window; const d = this.document; const e = d.documentElement; const g = d.body; const w = win.innerWidth || e.clientWidth || g.clientWidth; const h = win.innerHeight || e.clientHeight || g.clientHeight; return { width: w, height: h }; } getWindowScrollTop() { if (!this.platform.isBrowser) { return; } const doc = this.document.documentElement; return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); } getWindowScrollLeft() { if (!this.platform.isBrowser) { return; } const doc = this.document.documentElement; return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0); } } LayoutControlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: LayoutControlService, deps: [{ token: DOCUMENT }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); LayoutControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: LayoutControlService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: LayoutControlService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i1.Platform }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL2NvcmUvbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQVksNkJBQTZCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUUzQyxNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQztBQUV6QyxNQUFNLFdBQVcsR0FBRyxnRUFBZ0UsQ0FBQztBQUNyRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFLekIsTUFBTSxPQUFPLG9CQUFvQjtJQVk3QixZQUM4QixRQUFhLEVBQ3ZCLFFBQWtCO1FBRFIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBWnRCLHdCQUFtQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RSxrQ0FBNkIsR0FBRyw2QkFBNkIsRUFBRSxDQUFDO1FBQ2hFLDJCQUFzQixHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFFbEU7O1dBRUc7UUFDSyx1QkFBa0IsR0FBNEIsSUFBSSxlQUFlLENBQVMsMkJBQTJCLENBQUMsQ0FBQztRQUN2RyxlQUFVLEdBQTJCLElBQUksZUFBZSxDQUFLLEVBQUUsQ0FBQyxDQUFDO0lBTXpFLENBQUM7SUFFRCxJQUFXLE9BQU87UUFD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T0FBTyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDOztpSEFwR1Esb0JBQW9CLGtCQWFqQixRQUFRO3FIQWJYLG9CQUFvQixjQUZqQixNQUFNOzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWNRLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0U3VwcG9ydGVkSW5wdXRUeXBlcywgUGxhdGZvcm0sIHN1cHBvcnRzUGFzc2l2ZUV2ZW50TGlzdGVuZXJzLCBzdXBwb3J0c1Njcm9sbEJlaGF2aW9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY29uc3QgREVGQVVMVF9NT0JJTEVfTEFZT1VUX1dJRFRIID0gMTAyNDtcblxuY29uc3QgQ0hBUl9TVFJJTkcgPSAnMTIzNDU2Nzg5MEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuY29uc3QgTE9XRVJfSU5ERVggPSAxMDAwO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIExheW91dENvbnRyb2xTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyByZWFkb25seSBzdXBwb3J0ZWRJbnB1dFR5cGVzID0gQXJyYXkuZnJvbShnZXRTdXBwb3J0ZWRJbnB1dFR5cGVzKCkpLmpvaW4oJywgJyk7XG4gICAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzUGFzc2l2ZUV2ZW50TGlzdGVuZXJzID0gc3VwcG9ydHNQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNTY3JvbGxCZWhhdmlvciA9IHN1cHBvcnRzU2Nyb2xsQmVoYXZpb3IoKTtcblxuICAgIC8qKlxuICAgICAqIHNpbXBsZSBib29sIGJlaGF2aW9yU3ViamVjdCB3aGljaCByZXR1cm5zIGlzIG1vYmlsZUxheW91dCBhY3RpdmUgb3Igbm90XG4gICAgICovXG4gICAgcHJpdmF0ZSAkbW9iaWxlTGF5b3V0V2lkdGg6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTU9CSUxFX0xBWU9VVF9XSURUSCk7XG4gICAgcHJpdmF0ZSAkZm9jdXNUcmFwOiBCZWhhdmlvclN1YmplY3Q8YW55W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxbXT4oW10pO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICApIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRyYXBwZWQoKTogYW55IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLiRmb2N1c1RyYXAuZ2V0VmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmxlbmd0aCA/IGVsZW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZm9jdXNUcmFwKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGZvY3VzVHJhcC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNb2JpbGVMYXlvdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCA9IDB9ID0gdGhpcy5nZXRWaWV3cG9ydCgpO1xuICAgICAgICByZXR1cm4gd2lkdGggPD0gdGhpcy5tb2JpbGVMYXlvdXRXaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vYmlsZUxheW91dE9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmlzTW9iaWxlTGF5b3V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vYmlsZUxheW91dERldGVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9iaWxlTGF5b3V0ICE9PSBudWxsID8gdGhpcy5pc01vYmlsZUxheW91dCA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9iaWxlTGF5b3V0V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG1vYmlsZUxheW91dFdpZHRoLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBtb2JpbGVMYXlvdXRXaWR0aCh3OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy4kbW9iaWxlTGF5b3V0V2lkdGgubmV4dCh3KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXMoZWxlbTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuJGZvY3VzVHJhcC5uZXh0KFtlbGVtLCAuLi50aGlzLiRmb2N1c1RyYXAuZ2V0VmFsdWUoKV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF0Zm9ybUNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLklPUyA/ICdpb3MnIDpcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0uQU5EUk9JRCA/ICdhbmRyb2lkJyA6ICdicm93c2VyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVMYXlvdXRFbGVtZW50SGFzaCgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0ICs9IENIQVJfU1RSSU5HLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBDSEFSX1NUUklORy5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYXRjaChlbGVtOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJGZvY3VzVHJhcC5uZXh0KFtlbGVtLCAuLi50aGlzLiRmb2N1c1RyYXAuZ2V0VmFsdWUoKV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWaWV3cG9ydCgpOiBhbnkge1xuICAgICAgICBpZiAoIXRoaXMucGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3c7XG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRvY3VtZW50O1xuICAgICAgICBjb25zdCBlID0gZC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGcgPSBkLmJvZHk7XG4gICAgICAgIGNvbnN0IHcgPSB3aW4uaW5uZXJXaWR0aCB8fCBlLmNsaWVudFdpZHRoIHx8IGcuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGggPSB3aW4uaW5uZXJIZWlnaHQgfHwgZS5jbGllbnRIZWlnaHQgfHwgZy5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHt3aWR0aDogdywgaGVpZ2h0OiBofTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2luZG93U2Nyb2xsVG9wKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZXR1cm4gKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAtIChkb2MuY2xpZW50VG9wIHx8IDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaW5kb3dTY3JvbGxMZWZ0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZXR1cm4gKHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2Muc2Nyb2xsTGVmdCkgLSAoZG9jLmNsaWVudExlZnQgfHwgMCk7XG4gICAgfVxufVxuIl19