UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

78 lines 10.5 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { DOCUMENT } from "@angular/common"; import { Inject, Injectable } from "@angular/core"; import * as i0 from "@angular/core"; // TODO: Refactor class to use strongly typed values /** * Service providing DOM utilities */ /** * @ignore */ export class DomUtilService { constructor(document) { this.document = document; /** * Gets the closest parent element matching the specified selector * @param elem the source element * @param selector the selector to match * @returns the matching element */ this.getClosest = (elem, selector) => { // Element.matches() polyfill if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector || function (slctr) { const matches = // @ts-ignore: 'this' implicitly has type 'any' because it does not have a type annotation // An outer value of 'this' is shadowed by this container. (this.document || this.ownerDocument).querySelectorAll(slctr); let index = matches.length - 1; // @ts-ignore: 'this' implicitly has type 'any' because it does not have a type annotation // An outer value of 'this' is shadowed by this container. while (index >= 0 && matches.item(index) !== this) { --index; } return index > -1; }; } // Get the closest matching element for (; elem && elem !== this.document; elem = elem.parentElement ?? undefined) { if (elem?.matches(selector)) { return elem; } } return null; }; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DomUtilService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DomUtilService, providedIn: "root" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DomUtilService, decorators: [{ type: Injectable, args: [{ providedIn: "root" }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9kb20tdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRW5ELG9EQUFvRDtBQUNwRDs7R0FFRztBQUNIOztHQUVHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFDdkIsWUFBc0MsUUFBYTtRQUFiLGFBQVEsR0FBUixRQUFRLENBQUs7UUFFbkQ7Ozs7O1dBS0c7UUFDSSxlQUFVLEdBQUcsQ0FDaEIsSUFBNkIsRUFDN0IsUUFBZ0IsRUFDRSxFQUFFO1lBQ3BCLDZCQUE2QjtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTztvQkFDcEIsT0FBTyxDQUFDLFNBQWlCLENBQUMsaUJBQWlCO3dCQUM1QyxPQUFPLENBQUMsU0FBUyxDQUFDLHFCQUFxQjt3QkFDdkMsVUFBVSxLQUFhOzRCQUNuQixNQUFNLE9BQU87NEJBQ1QsMEZBQTBGOzRCQUMxRiwwREFBMEQ7NEJBQzFELENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsZ0JBQWdCLENBQ2xELEtBQUssQ0FDUixDQUFDOzRCQUNOLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzRCQUMvQiwwRkFBMEY7NEJBQzFGLDBEQUEwRDs0QkFDMUQsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO2dDQUMvQyxFQUFFLEtBQUssQ0FBQzs2QkFDWDs0QkFDRCxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsQ0FBQyxDQUFDO2FBQ1Q7WUFFRCxtQ0FBbUM7WUFDbkMsT0FFSSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFDeEM7Z0JBQ0UsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6QixPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO0lBN0NvRCxDQUFDOytHQUQ5QyxjQUFjLGtCQUNILFFBQVE7bUhBRG5CLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUVqQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vLyBUT0RPOiBSZWZhY3RvciBjbGFzcyB0byB1c2Ugc3Ryb25nbHkgdHlwZWQgdmFsdWVzXG4vKipcbiAqIFNlcnZpY2UgcHJvdmlkaW5nIERPTSB1dGlsaXRpZXNcbiAqL1xuLyoqXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBEb21VdGlsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55KSB7fVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2xvc2VzdCBwYXJlbnQgZWxlbWVudCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yXG4gICAgICogQHBhcmFtIGVsZW0gdGhlIHNvdXJjZSBlbGVtZW50XG4gICAgICogQHBhcmFtIHNlbGVjdG9yIHRoZSBzZWxlY3RvciB0byBtYXRjaFxuICAgICAqIEByZXR1cm5zIHRoZSBtYXRjaGluZyBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGdldENsb3Nlc3QgPSAoXG4gICAgICAgIGVsZW06IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkLFxuICAgICAgICBzZWxlY3Rvcjogc3RyaW5nXG4gICAgKTogSFRNTEVsZW1lbnQgfCBudWxsID0+IHtcbiAgICAgICAgLy8gRWxlbWVudC5tYXRjaGVzKCkgcG9seWZpbGxcbiAgICAgICAgaWYgKCFFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKSB7XG4gICAgICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID1cbiAgICAgICAgICAgICAgICAoRWxlbWVudC5wcm90b3R5cGUgYXMgYW55KS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChzbGN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogJ3RoaXMnIGltcGxpY2l0bHkgaGFzIHR5cGUgJ2FueScgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBhbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBvdXRlciB2YWx1ZSBvZiAndGhpcycgaXMgc2hhZG93ZWQgYnkgdGhpcyBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5kb2N1bWVudCB8fCB0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xjdHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IG1hdGNoZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogJ3RoaXMnIGltcGxpY2l0bHkgaGFzIHR5cGUgJ2FueScgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgdHlwZSBhbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIEFuIG91dGVyIHZhbHVlIG9mICd0aGlzJyBpcyBzaGFkb3dlZCBieSB0aGlzIGNvbnRhaW5lci5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4ID49IDAgJiYgbWF0Y2hlcy5pdGVtKGluZGV4KSAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPiAtMTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBjbG9zZXN0IG1hdGNoaW5nIGVsZW1lbnRcbiAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGVsZW0gJiYgZWxlbSAhPT0gdGhpcy5kb2N1bWVudDtcbiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudEVsZW1lbnQgPz8gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGVsZW0/Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cbiJdfQ==