{"version":3,"file":"ibenvandeveire-ngx-utils.mjs","sources":["../tmp-esm2022/lib/directives/focus-click/focus-click.directive.js","../tmp-esm2022/lib/directives/index.js","../tmp-esm2022/lib/services/broadcast-channel/broadcast-channel.service.js","../tmp-esm2022/lib/services/storage-service/storage.service.js","../tmp-esm2022/lib/services/media-query/mediaquery.service.js","../tmp-esm2022/lib/pipes/btw/btw.pipe.js","../tmp-esm2022/lib/pipes/has-observers/has-observers.pipe.js","../tmp-esm2022/lib/pipes/iban/iban.pipe.js","../tmp-esm2022/lib/tokens/replace-elements.token.js","../tmp-esm2022/lib/pipes/replace-elements/replace-elements.pipe.js","../tmp-esm2022/lib/pipes/transform/transform.pipe.js","../tmp-esm2022/lib/pipes/index.js","../tmp-esm2022/lib/abstracts/query-param-form-sync/query-param-form-sync.component.abstract.js","../tmp-esm2022/lib/providers/replace-elements/replace-elements.provider.js","../tmp-esm2022/lib/utils/simple-changes/simple-changes.util.js","../tmp-esm2022/lib/mocks/broadcast-channel.service.mock.js","../tmp-esm2022/lib/mocks/storage.service.mock.js","../tmp-esm2022/index.js","../tmp-esm2022/ibenvandeveire-ngx-utils.js"],"sourcesContent":["import { Directive, HostListener, input, output } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class FocusClickDirective {\n    // Allow the button to ignore click events when set to true\n    disabled = input(false, ...(ngDevMode ? [{ debugName: \"disabled\" }] : []));\n    // Allow the function passed by the host to be executed\n    // when the emit() method gets called\n    /**\n     * This directive replaces the default `click` directive and allows the user to execute\n     * the `click` event by clicking the mouse **and**  by using the `enter` key on focus.\n     *\n     * A tabindex of `0` gets added to the host.\n     *\n     * @memberof FocusClickDirective\n     */\n    focusClick = output();\n    // Add eventhandler to the click event\n    isClicked(event) {\n        if (!this.disabled()) {\n            this.focusClick.emit(event);\n        }\n    }\n    // Add eventhandler to keydown event When enter is pressed and the event\n    // isn't blocked, execute the click function of the host\n    isEntered() {\n        if (!this.disabled()) {\n            this.focusClick.emit();\n        }\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: FocusClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: FocusClickDirective, isStandalone: true, selector: \"[focusClick]\", inputs: { disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { focusClick: \"focusClick\" }, host: { listeners: { \"click\": \"isClicked($event)\", \"keydown.enter\": \"isEntered()\" }, properties: { \"attr.tabIndex\": \"0\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: FocusClickDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[focusClick]',\n                    standalone: true,\n                    host: {\n                        '[attr.tabIndex]': '0',\n                    },\n                }]\n        }], propDecorators: { isClicked: [{\n                type: HostListener,\n                args: ['click', ['$event']]\n            }], isEntered: [{\n                type: HostListener,\n                args: ['keydown.enter']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtY2xpY2suZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvZGlyZWN0aXZlcy9mb2N1cy1jbGljay9mb2N1cy1jbGljay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQW9CLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBU3pGLE1BQU0sT0FBTyxtQkFBbUI7SUFDL0IsMkRBQTJEO0lBQzNDLFFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxvREFBQyxDQUFDO0lBRWpELHVEQUF1RDtJQUN2RCxxQ0FBcUM7SUFDckM7Ozs7Ozs7T0FPRztJQUNhLFVBQVUsR0FBbUMsTUFBTSxFQUFnQixDQUFDO0lBRXBGLHNDQUFzQztJQUUvQixTQUFTLENBQUMsS0FBWTtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNGLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsd0RBQXdEO0lBRWpELFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0YsQ0FBQzt1R0EvQlcsbUJBQW1COzJGQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBUC9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0wsaUJBQWlCLEVBQUUsR0FBRztxQkFDdEI7aUJBQ0Q7OEJBbUJPLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTFCLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIE91dHB1dEVtaXR0ZXJSZWYsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2ZvY3VzQ2xpY2tdJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aG9zdDoge1xuXHRcdCdbYXR0ci50YWJJbmRleF0nOiAnMCcsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEZvY3VzQ2xpY2tEaXJlY3RpdmUge1xuXHQvLyBBbGxvdyB0aGUgYnV0dG9uIHRvIGlnbm9yZSBjbGljayBldmVudHMgd2hlbiBzZXQgdG8gdHJ1ZVxuXHRwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cblx0Ly8gQWxsb3cgdGhlIGZ1bmN0aW9uIHBhc3NlZCBieSB0aGUgaG9zdCB0byBiZSBleGVjdXRlZFxuXHQvLyB3aGVuIHRoZSBlbWl0KCkgbWV0aG9kIGdldHMgY2FsbGVkXG5cdC8qKlxuXHQgKiBUaGlzIGRpcmVjdGl2ZSByZXBsYWNlcyB0aGUgZGVmYXVsdCBgY2xpY2tgIGRpcmVjdGl2ZSBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGV4ZWN1dGVcblx0ICogdGhlIGBjbGlja2AgZXZlbnQgYnkgY2xpY2tpbmcgdGhlIG1vdXNlICoqYW5kKiogIGJ5IHVzaW5nIHRoZSBgZW50ZXJgIGtleSBvbiBmb2N1cy5cblx0ICpcblx0ICogQSB0YWJpbmRleCBvZiBgMGAgZ2V0cyBhZGRlZCB0byB0aGUgaG9zdC5cblx0ICpcblx0ICogQG1lbWJlcm9mIEZvY3VzQ2xpY2tEaXJlY3RpdmVcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBmb2N1c0NsaWNrOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQgfCBFdmVudD4gPSBvdXRwdXQ8dm9pZCB8IEV2ZW50PigpO1xuXG5cdC8vIEFkZCBldmVudGhhbmRsZXIgdG8gdGhlIGNsaWNrIGV2ZW50XG5cdEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcblx0cHVibGljIGlzQ2xpY2tlZChldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuZGlzYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0NsaWNrLmVtaXQoZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEFkZCBldmVudGhhbmRsZXIgdG8ga2V5ZG93biBldmVudCBXaGVuIGVudGVyIGlzIHByZXNzZWQgYW5kIHRoZSBldmVudFxuXHQvLyBpc24ndCBibG9ja2VkLCBleGVjdXRlIHRoZSBjbGljayBmdW5jdGlvbiBvZiB0aGUgaG9zdFxuXHRASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcblx0cHVibGljIGlzRW50ZXJlZCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuZGlzYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0NsaWNrLmVtaXQoKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==","import { FocusClickDirective } from './focus-click/focus-click.directive';\nexport const Directives = [FocusClickDirective];\nexport { FocusClickDirective } from './focus-click/focus-click.directive';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9kaXJlY3RpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c0NsaWNrRGlyZWN0aXZlIH0gZnJvbSAnLi9mb2N1cy1jbGljay9mb2N1cy1jbGljay5kaXJlY3RpdmUnO1xuXG5leHBvcnQgY29uc3QgRGlyZWN0aXZlcyA9IFtGb2N1c0NsaWNrRGlyZWN0aXZlXTtcblxuZXhwb3J0IHsgRm9jdXNDbGlja0RpcmVjdGl2ZSB9IGZyb20gJy4vZm9jdXMtY2xpY2svZm9jdXMtY2xpY2suZGlyZWN0aXZlJztcbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { NgxWindowService } from '@ibenvandeveire/ngx-core';\nimport { EMPTY, fromEvent } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * A service that wraps the BroadCastChannel API and provides an Observable based implementation to the channel messages.\n *\n * For more information:\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n */\nexport class NgxBroadcastChannelService {\n    windowService = inject(NgxWindowService);\n    /**\n     * A record holding all the broadcast channels\n     */\n    broadcastChannel = {};\n    /**\n     * initChannel\n     *\n     * The initChannel method initializes a new BroadcastChannel instance.\n     *\n     * @param args{ConstructorParameters<typeof BroadcastChannel>} - The arguments to pass to the BroadcastChannel constructor.\n     */\n    initChannel(...args) {\n        // Iben: Only run when in browser\n        this.windowService.runInBrowser(() => {\n            const [channelName] = args;\n            if (!channelName) {\n                console.error('NgxUtils: There was an attempt to initialize a BroadcastChannel without providing a name.');\n                return;\n            }\n            if (!this.broadcastChannel[channelName]) {\n                this.broadcastChannel[channelName] = new BroadcastChannel(...args);\n            }\n        });\n    }\n    /**\n     * closeChannel\n     *\n     * The closeChannel method closes a selected BroadcastChannel instance.\n     *\n     * @param channelName{string} - The name of the Broadcast Channel.\n     */\n    closeChannel(channelName) {\n        if (!channelName || !this.broadcastChannel[channelName]) {\n            return;\n        }\n        this.broadcastChannel[channelName].close();\n        delete this.broadcastChannel[channelName];\n    }\n    /**\n     * postMessage\n     *\n     * The postMessage method sends a message to a selected BroadcastChannel instance.\n     *\n     * @param channelName{string} - The name of the Broadcast Channel.\n     * @param message{any} - The payload to send through the channel.\n     */\n    postMessage(channelName, message) {\n        if (!channelName || !this.broadcastChannel[channelName]) {\n            console.error('NgxUtils: There was an attempt to post a message to a channel without providing a name or the selected channel does not exist. The included message was:', message);\n            return;\n        }\n        this.broadcastChannel[channelName].postMessage(message);\n    }\n    /**\n     * selectChannelMessages\n     *\n     * The selectChannelMessages method subscribes to the `message` (bc.onmessage) event of a selected BroadcastChannel instance.\n     *\n     * @param channelName{string} - The name of the Broadcast Channel.\n     * @returns Observable<MessageEvent> - The message event of the channel wrapped in an observable.\n     */\n    selectChannelMessages(channelName) {\n        if (!channelName || !this.broadcastChannel[channelName]) {\n            console.error(\"NgxUtils: There was an attempt to select a BroadcastChannel's messages without providing a name or the selected channel does not exist.\");\n            return EMPTY;\n        }\n        return fromEvent(this.broadcastChannel[channelName], 'message');\n    }\n    /**\n     * selectChannelMessageErrors\n     *\n     * The selectChannelMessageErrors method subscribes to the `messageerror` (bc.onmessageerror) event of a selected BroadcastChannel instance.\n     *\n     * @param channelName{string} - The name of the Broadcast Channel.\n     * @returns Observable<MessageEvent> - The messageerror event of the channel wrapped in an observable.\n     */\n    selectChannelMessageErrors(channelName) {\n        if (!channelName || !this.broadcastChannel[channelName]) {\n            console.error(\"NgxUtils: There was an attempt to select a BroadcastChannel's message errors without providing a name or the selected channel does not exist.\");\n            return EMPTY;\n        }\n        return fromEvent(this.broadcastChannel[channelName], 'messageerror');\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxBroadcastChannelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxBroadcastChannelService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxBroadcastChannelService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0LWNoYW5uZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL3NlcnZpY2VzL2Jyb2FkY2FzdC1jaGFubmVsL2Jyb2FkY2FzdC1jaGFubmVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxNQUFNLENBQUM7O0FBRXBEOzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNuQixhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFNUQ7O09BRUc7SUFDTyxnQkFBZ0IsR0FBcUMsRUFBRSxDQUFDO0lBRWxFOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxHQUFHLElBQW9EO1FBQ3pFLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUUzQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQ1osMkZBQTJGLENBQzNGLENBQUM7Z0JBRUYsT0FBTztZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFlBQVksQ0FBQyxXQUFtQjtRQUN0QyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTztRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxXQUFXLENBQW9CLFdBQW1CLEVBQUUsT0FBb0I7UUFDOUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQ1osMEpBQTBKLEVBQzFKLE9BQU8sQ0FDUCxDQUFDO1lBRUYsT0FBTztRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0kscUJBQXFCLENBQzNCLFdBQW1CO1FBRW5CLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPLENBQUMsS0FBSyxDQUNaLHlJQUF5SSxDQUN6SSxDQUFDO1lBRUYsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQTRCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLDBCQUEwQixDQUNoQyxXQUFtQjtRQUVuQixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxDQUFDLEtBQUssQ0FDWiwrSUFBK0ksQ0FDL0ksQ0FBQztZQUVGLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFDbEMsY0FBYyxDQUNkLENBQUM7SUFDSCxDQUFDO3VHQXBIVywwQkFBMEI7MkdBQTFCLDBCQUEwQixjQUYxQixNQUFNOzsyRkFFTiwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnQGliZW52YW5kZXZlaXJlL25neC1jb3JlJztcbmltcG9ydCB7IEVNUFRZLCBmcm9tRXZlbnQsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCB3cmFwcyB0aGUgQnJvYWRDYXN0Q2hhbm5lbCBBUEkgYW5kIHByb3ZpZGVzIGFuIE9ic2VydmFibGUgYmFzZWQgaW1wbGVtZW50YXRpb24gdG8gdGhlIGNoYW5uZWwgbWVzc2FnZXMuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb246XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQnJvYWRjYXN0Q2hhbm5lbFxuICovXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmd4QnJvYWRjYXN0Q2hhbm5lbFNlcnZpY2Uge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgd2luZG93U2VydmljZSA9IGluamVjdChOZ3hXaW5kb3dTZXJ2aWNlKTtcblxuXHQvKipcblx0ICogQSByZWNvcmQgaG9sZGluZyBhbGwgdGhlIGJyb2FkY2FzdCBjaGFubmVsc1xuXHQgKi9cblx0cHJvdGVjdGVkIGJyb2FkY2FzdENoYW5uZWw6IFJlY29yZDxzdHJpbmcsIEJyb2FkY2FzdENoYW5uZWw+ID0ge307XG5cblx0LyoqXG5cdCAqIGluaXRDaGFubmVsXG5cdCAqXG5cdCAqIFRoZSBpbml0Q2hhbm5lbCBtZXRob2QgaW5pdGlhbGl6ZXMgYSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIGFyZ3N7Q29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPn0gLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIEJyb2FkY2FzdENoYW5uZWwgY29uc3RydWN0b3IuXG5cdCAqL1xuXHRwdWJsaWMgaW5pdENoYW5uZWwoLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPik6IHZvaWQge1xuXHRcdC8vIEliZW46IE9ubHkgcnVuIHdoZW4gaW4gYnJvd3NlclxuXHRcdHRoaXMud2luZG93U2VydmljZS5ydW5JbkJyb3dzZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW2NoYW5uZWxOYW1lXSA9IGFyZ3M7XG5cblx0XHRcdGlmICghY2hhbm5lbE5hbWUpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHQnTmd4VXRpbHM6IFRoZXJlIHdhcyBhbiBhdHRlbXB0IHRvIGluaXRpYWxpemUgYSBCcm9hZGNhc3RDaGFubmVsIHdpdGhvdXQgcHJvdmlkaW5nIGEgbmFtZS4nXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXRoaXMuYnJvYWRjYXN0Q2hhbm5lbFtjaGFubmVsTmFtZV0pIHtcblx0XHRcdFx0dGhpcy5icm9hZGNhc3RDaGFubmVsW2NoYW5uZWxOYW1lXSA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIGNsb3NlQ2hhbm5lbFxuXHQgKlxuXHQgKiBUaGUgY2xvc2VDaGFubmVsIG1ldGhvZCBjbG9zZXMgYSBzZWxlY3RlZCBCcm9hZGNhc3RDaGFubmVsIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhbm5lbE5hbWV7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBCcm9hZGNhc3QgQ2hhbm5lbC5cblx0ICovXG5cdHB1YmxpYyBjbG9zZUNoYW5uZWwoY2hhbm5lbE5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICghY2hhbm5lbE5hbWUgfHwgIXRoaXMuYnJvYWRjYXN0Q2hhbm5lbFtjaGFubmVsTmFtZV0pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmJyb2FkY2FzdENoYW5uZWxbY2hhbm5lbE5hbWVdLmNsb3NlKCk7XG5cdFx0ZGVsZXRlIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbFtjaGFubmVsTmFtZV07XG5cdH1cblxuXHQvKipcblx0ICogcG9zdE1lc3NhZ2Vcblx0ICpcblx0ICogVGhlIHBvc3RNZXNzYWdlIG1ldGhvZCBzZW5kcyBhIG1lc3NhZ2UgdG8gYSBzZWxlY3RlZCBCcm9hZGNhc3RDaGFubmVsIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhbm5lbE5hbWV7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBCcm9hZGNhc3QgQ2hhbm5lbC5cblx0ICogQHBhcmFtIG1lc3NhZ2V7YW55fSAtIFRoZSBwYXlsb2FkIHRvIHNlbmQgdGhyb3VnaCB0aGUgY2hhbm5lbC5cblx0ICovXG5cdHB1YmxpYyBwb3N0TWVzc2FnZTxNZXNzYWdlVHlwZSA9IGFueT4oY2hhbm5lbE5hbWU6IHN0cmluZywgbWVzc2FnZTogTWVzc2FnZVR5cGUpOiB2b2lkIHtcblx0XHRpZiAoIWNoYW5uZWxOYW1lIHx8ICF0aGlzLmJyb2FkY2FzdENoYW5uZWxbY2hhbm5lbE5hbWVdKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHQnTmd4VXRpbHM6IFRoZXJlIHdhcyBhbiBhdHRlbXB0IHRvIHBvc3QgYSBtZXNzYWdlIHRvIGEgY2hhbm5lbCB3aXRob3V0IHByb3ZpZGluZyBhIG5hbWUgb3IgdGhlIHNlbGVjdGVkIGNoYW5uZWwgZG9lcyBub3QgZXhpc3QuIFRoZSBpbmNsdWRlZCBtZXNzYWdlIHdhczonLFxuXHRcdFx0XHRtZXNzYWdlXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5icm9hZGNhc3RDaGFubmVsW2NoYW5uZWxOYW1lXS5wb3N0TWVzc2FnZShtZXNzYWdlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBzZWxlY3RDaGFubmVsTWVzc2FnZXNcblx0ICpcblx0ICogVGhlIHNlbGVjdENoYW5uZWxNZXNzYWdlcyBtZXRob2Qgc3Vic2NyaWJlcyB0byB0aGUgYG1lc3NhZ2VgIChiYy5vbm1lc3NhZ2UpIGV2ZW50IG9mIGEgc2VsZWN0ZWQgQnJvYWRjYXN0Q2hhbm5lbCBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIGNoYW5uZWxOYW1le3N0cmluZ30gLSBUaGUgbmFtZSBvZiB0aGUgQnJvYWRjYXN0IENoYW5uZWwuXG5cdCAqIEByZXR1cm5zIE9ic2VydmFibGU8TWVzc2FnZUV2ZW50PiAtIFRoZSBtZXNzYWdlIGV2ZW50IG9mIHRoZSBjaGFubmVsIHdyYXBwZWQgaW4gYW4gb2JzZXJ2YWJsZS5cblx0ICovXG5cdHB1YmxpYyBzZWxlY3RDaGFubmVsTWVzc2FnZXM8TWVzc2FnZVR5cGUgPSBhbnk+KFxuXHRcdGNoYW5uZWxOYW1lOiBzdHJpbmdcblx0KTogT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ8TWVzc2FnZVR5cGU+PiB7XG5cdFx0aWYgKCFjaGFubmVsTmFtZSB8fCAhdGhpcy5icm9hZGNhc3RDaGFubmVsW2NoYW5uZWxOYW1lXSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XCJOZ3hVdGlsczogVGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gc2VsZWN0IGEgQnJvYWRjYXN0Q2hhbm5lbCdzIG1lc3NhZ2VzIHdpdGhvdXQgcHJvdmlkaW5nIGEgbmFtZSBvciB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBkb2VzIG5vdCBleGlzdC5cIlxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIEVNUFRZO1xuXHRcdH1cblxuXHRcdHJldHVybiBmcm9tRXZlbnQ8TWVzc2FnZUV2ZW50PE1lc3NhZ2VUeXBlPj4odGhpcy5icm9hZGNhc3RDaGFubmVsW2NoYW5uZWxOYW1lXSwgJ21lc3NhZ2UnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBzZWxlY3RDaGFubmVsTWVzc2FnZUVycm9yc1xuXHQgKlxuXHQgKiBUaGUgc2VsZWN0Q2hhbm5lbE1lc3NhZ2VFcnJvcnMgbWV0aG9kIHN1YnNjcmliZXMgdG8gdGhlIGBtZXNzYWdlZXJyb3JgIChiYy5vbm1lc3NhZ2VlcnJvcikgZXZlbnQgb2YgYSBzZWxlY3RlZCBCcm9hZGNhc3RDaGFubmVsIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhbm5lbE5hbWV7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBCcm9hZGNhc3QgQ2hhbm5lbC5cblx0ICogQHJldHVybnMgT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ+IC0gVGhlIG1lc3NhZ2VlcnJvciBldmVudCBvZiB0aGUgY2hhbm5lbCB3cmFwcGVkIGluIGFuIG9ic2VydmFibGUuXG5cdCAqL1xuXHRwdWJsaWMgc2VsZWN0Q2hhbm5lbE1lc3NhZ2VFcnJvcnM8TWVzc2FnZVR5cGUgPSBhbnk+KFxuXHRcdGNoYW5uZWxOYW1lOiBzdHJpbmdcblx0KTogT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ8TWVzc2FnZVR5cGU+PiB7XG5cdFx0aWYgKCFjaGFubmVsTmFtZSB8fCAhdGhpcy5icm9hZGNhc3RDaGFubmVsW2NoYW5uZWxOYW1lXSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XCJOZ3hVdGlsczogVGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gc2VsZWN0IGEgQnJvYWRjYXN0Q2hhbm5lbCdzIG1lc3NhZ2UgZXJyb3JzIHdpdGhvdXQgcHJvdmlkaW5nIGEgbmFtZSBvciB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBkb2VzIG5vdCBleGlzdC5cIlxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIEVNUFRZO1xuXHRcdH1cblxuXHRcdHJldHVybiBmcm9tRXZlbnQ8TWVzc2FnZUV2ZW50PE1lc3NhZ2VUeXBlPj4oXG5cdFx0XHR0aGlzLmJyb2FkY2FzdENoYW5uZWxbY2hhbm5lbE5hbWVdLFxuXHRcdFx0J21lc3NhZ2VlcnJvcidcblx0XHQpO1xuXHR9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { NgxWindowService } from '@ibenvandeveire/ngx-core';\nimport { BehaviorSubject, NEVER, Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * A service that provides a SSR-proof Observable based approach to the session- and localStorage.\n */\nexport class NgxStorageService {\n    windowService = inject(NgxWindowService);\n    /**\n     * A record to hold the properties in the sessionStorage\n     */\n    sessionStorageRecord = {};\n    /**\n     * A record to hold the properties in the localStorage\n     */\n    localStorageRecord = {};\n    /**\n     * A subject to hold the events of the storage\n     */\n    storageEventSubject = new Subject();\n    /**\n     * An observable that emits whenever the session- or the localStorage was updated\n     */\n    storageEvents$ = this.storageEventSubject.asObservable();\n    constructor() {\n        const windowService = this.windowService;\n        // Iben: Get the initial values of the session and the local storage\n        windowService.runInBrowser(() => {\n            this.setupStorage(sessionStorage, this.sessionStorageRecord);\n            this.setupStorage(localStorage, this.localStorageRecord);\n        });\n    }\n    /**\n     * A localStorage implementation using observables\n     */\n    get localStorage() {\n        return {\n            getItem: (key) => this.getItem(key, localStorage),\n            getItemObservable: (key) => this.getItemObservable(key, this.localStorageRecord),\n            removeItem: (key) => this.removeItem(key, localStorage, this.localStorageRecord, 'local'),\n            setItem: (key, item) => this.setItem(key, item, localStorage, this.localStorageRecord, 'local'),\n            clear: () => this.clearStorage(localStorage, this.localStorageRecord, 'local'),\n        };\n    }\n    /**\n     * A sessionStorage implementation using observables\n     */\n    get sessionStorage() {\n        return {\n            getItem: (key) => this.getItem(key, sessionStorage),\n            getItemObservable: (key) => this.getItemObservable(key, this.sessionStorageRecord),\n            removeItem: (key) => this.removeItem(key, sessionStorage, this.sessionStorageRecord, 'session'),\n            setItem: (key, item) => this.setItem(key, item, sessionStorage, this.sessionStorageRecord, 'session'),\n            clear: () => this.clearStorage(sessionStorage, this.sessionStorageRecord, 'session'),\n        };\n    }\n    getItem(key, storage) {\n        return this.parseValue(storage.getItem(key));\n    }\n    /**\n     * Returns an observable version of the storage value\n     *\n     * @param key - The key of the storage value\n     * @param record  - The storage record\n     */\n    getItemObservable(key, record) {\n        // Iben: Return NEVER when not in browser\n        if (!this.windowService.isBrowser()) {\n            return NEVER;\n        }\n        // Iben: If the subject already exists, we return the observable\n        if (record[key]) {\n            return record[key].asObservable();\n        }\n        // Iben: If no subject exits, we create a new one\n        record[key] = new BehaviorSubject(undefined);\n        // Iben: Return the observable\n        return this.getItemObservable(key, record);\n    }\n    /**\n     * Sets an item in the storage\n     *\n     * @param key - The key of the item\n     * @param item - The item in the storage\n     * @param storage - The storage in which we want to save the item\n     * @param record - The corresponding storage record\n     */\n    setItem(key, item, storage, record, type) {\n        // Iben: Early exit when we're in the browser\n        if (!this.windowService.isBrowser()) {\n            return undefined;\n        }\n        // Iben: Check if there's already a subject for this item. If not, we create one\n        let subject = record[key];\n        if (!subject) {\n            subject = new BehaviorSubject(undefined);\n            storage[key] = subject;\n        }\n        // Iben: Store the current value of the subject\n        const oldValue = subject.getValue();\n        // Iben: Set the item in the storage\n        storage.setItem(key, typeof item === 'string' ? item : JSON.stringify(item));\n        // Iben: Update the subject in the record\n        subject.next(item);\n        // Iben: Create the storage event\n        const event = {\n            key,\n            newValue: item,\n            oldValue,\n            storage: type,\n            type: 'set',\n        };\n        // Iben: Emit the storage event\n        this.storageEventSubject.next(event);\n        // Iben: Return the storage event\n        return event;\n    }\n    /**\n     * Remove an item from the storage and emit a remove event\n     *\n     * @param  key - The key of the item\n     * @param storage - The storage we wish to remove the item from\n     * @param record - The record with the subject\n     * @param type - The type of storage\n     */\n    removeItem(key, storage, record, type) {\n        // Iben: Early exit when we're not in the browser\n        if (!this.windowService.isBrowser()) {\n            return undefined;\n        }\n        // Iben: Get the old item\n        const oldValue = this.parseValue(storage.getItem(key));\n        // Iben: Remove the item from the storage\n        storage.removeItem(key);\n        // Iben Update the subject if it exists\n        record[key]?.next(undefined);\n        // Iben: Create the event and return and emit it\n        const event = {\n            oldValue,\n            storage: type,\n            key,\n            type: 'remove',\n        };\n        this.storageEventSubject.next(event);\n        return event;\n    }\n    /**\n     * Clears the storage, completes all subjects and emits a clear event\n     *\n     * @param storage - The storage we wish to clear\n     * @param record - The record with the subjects\n     * @param type - The type of storage\n     */\n    clearStorage(storage, record, type) {\n        // Iben: Early exit when we're not in the browser\n        if (!this.windowService.isBrowser()) {\n            return undefined;\n        }\n        // Iben: Clear the storage\n        storage.clear();\n        // Iben: Clear the record and complete all subjects\n        Object.entries(record).forEach(([key, subject]) => {\n            subject.next(undefined);\n            subject.complete();\n            record[key] = undefined;\n        });\n        // Iben: Create and emit event\n        const event = {\n            type: 'clear',\n            storage: type,\n        };\n        this.storageEventSubject.next(event);\n        return event;\n    }\n    /**\n     * Grabs the existing storage and updates the record\n     *\n     * @private\n     * @param {Storage} storage - The current state of the storage\n     * @param {NgxStorageRecord} record\n     * @memberof NgxStorageService\n     */\n    setupStorage(storage, record) {\n        Object.entries(storage).forEach(([key, value]) => {\n            record[key] = new BehaviorSubject(this.parseValue(value));\n        });\n    }\n    /**\n     * Parses a string value from the storage to an actual value\n     *\n     * @param value - The provided string value\n     */\n    parseValue(value) {\n        // Iben: If the value does not exist, return the value\n        if (!value) {\n            return value;\n        }\n        // Iben: If the value is either true or false, return a boolean version of the value\n        if (value === 'true' || value === 'false') {\n            return value === 'true';\n        }\n        // Iben: If the value is a number, return the parsed number\n        if (value.match(/^[0-9]*[,.]{0,1}[0-9]*$/)) {\n            return Number(value);\n        }\n        // Iben: If the value is an object, return the parsed object\n        if (value.match(/{(.*:.*[,]{0,1})*}/)) {\n            return JSON.parse(value);\n        }\n        // Iben: Return the string value as is\n        return value;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxStorageService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxStorageService, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvc2VydmljZXMvc3RvcmFnZS1zZXJ2aWNlL3N0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBWW5FOztHQUVHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUNWLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU1RDs7T0FFRztJQUNnQixvQkFBb0IsR0FBcUIsRUFBRSxDQUFDO0lBQy9EOztPQUVHO0lBQ2dCLGtCQUFrQixHQUFxQixFQUFFLENBQUM7SUFDN0Q7O09BRUc7SUFDZ0IsbUJBQW1CLEdBQTZCLElBQUksT0FBTyxFQUFFLENBQUM7SUFFakY7O09BRUc7SUFDYSxjQUFjLEdBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV6QztRQUNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFekMsb0VBQW9FO1FBQ3BFLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxZQUFZO1FB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OzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4V2luZG93U2VydmljZSB9IGZyb20gJ0BpYmVudmFuZGV2ZWlyZS9uZ3gtY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE5FVkVSLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG5cdE5neFN0b3JhZ2UsXG5cdE5neFN0b3JhZ2VDbGVhckV2ZW50LFxuXHROZ3hTdG9yYWdlRXZlbnQsXG5cdE5neFN0b3JhZ2VSZWNvcmQsXG5cdE5neFN0b3JhZ2VSZW1vdmVFdmVudCxcblx0Tmd4U3RvcmFnZVNldEV2ZW50LFxuXHROZ3hTdG9yYWdlVHlwZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIEEgc2VydmljZSB0aGF0IHByb3ZpZGVzIGEgU1NSLXByb29mIE9ic2VydmFibGUgYmFzZWQgYXBwcm9hY2ggdG8gdGhlIHNlc3Npb24tIGFuZCBsb2NhbFN0b3JhZ2UuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmd4U3RvcmFnZVNlcnZpY2Uge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgd2luZG93U2VydmljZSA9IGluamVjdChOZ3hXaW5kb3dTZXJ2aWNlKTtcblxuXHQvKipcblx0ICogQSByZWNvcmQgdG8gaG9sZCB0aGUgcHJvcGVydGllcyBpbiB0aGUgc2Vzc2lvblN0b3JhZ2Vcblx0ICovXG5cdHByb3RlY3RlZCByZWFkb25seSBzZXNzaW9uU3RvcmFnZVJlY29yZDogTmd4U3RvcmFnZVJlY29yZCA9IHt9O1xuXHQvKipcblx0ICogQSByZWNvcmQgdG8gaG9sZCB0aGUgcHJvcGVydGllcyBpbiB0aGUgbG9jYWxTdG9yYWdlXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgbG9jYWxTdG9yYWdlUmVjb3JkOiBOZ3hTdG9yYWdlUmVjb3JkID0ge307XG5cdC8qKlxuXHQgKiBBIHN1YmplY3QgdG8gaG9sZCB0aGUgZXZlbnRzIG9mIHRoZSBzdG9yYWdlXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZUV2ZW50U3ViamVjdDogU3ViamVjdDxOZ3hTdG9yYWdlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuXHQvKipcblx0ICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSBzZXNzaW9uLSBvciB0aGUgbG9jYWxTdG9yYWdlIHdhcyB1cGRhdGVkXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgc3RvcmFnZUV2ZW50cyQ6IE9ic2VydmFibGU8Tmd4U3RvcmFnZUV2ZW50PiA9XG5cdFx0dGhpcy5zdG9yYWdlRXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IHdpbmRvd1NlcnZpY2UgPSB0aGlzLndpbmRvd1NlcnZpY2U7XG5cblx0XHQvLyBJYmVuOiBHZXQgdGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBzZXNzaW9uIGFuZCB0aGUgbG9jYWwgc3RvcmFnZVxuXHRcdHdpbmRvd1NlcnZpY2UucnVuSW5Ccm93c2VyKCgpID0+IHtcblx0XHRcdHRoaXMuc2V0dXBTdG9yYWdlKHNlc3Npb25TdG9yYWdlLCB0aGlzLnNlc3Npb25TdG9yYWdlUmVjb3JkKTtcblx0XHRcdHRoaXMuc2V0dXBTdG9yYWdlKGxvY2FsU3RvcmFnZSwgdGhpcy5sb2NhbFN0b3JhZ2VSZWNvcmQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgbG9jYWxTdG9yYWdlIGltcGxlbWVudGF0aW9uIHVzaW5nIG9ic2VydmFibGVzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGxvY2FsU3RvcmFnZSgpOiBOZ3hTdG9yYWdlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0SXRlbTogPERhdGFUeXBlID0gYW55PihrZXk6IHN0cmluZykgPT4gdGhpcy5nZXRJdGVtPERhdGFUeXBlPihrZXksIGxvY2FsU3RvcmFnZSksXG5cdFx0XHRnZXRJdGVtT2JzZXJ2YWJsZTogPERhdGFUeXBlID0gYW55PihrZXk6IHN0cmluZykgPT5cblx0XHRcdFx0dGhpcy5nZXRJdGVtT2JzZXJ2YWJsZTxEYXRhVHlwZT4oa2V5LCB0aGlzLmxvY2FsU3RvcmFnZVJlY29yZCksXG5cdFx0XHRyZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+XG5cdFx0XHRcdHRoaXMucmVtb3ZlSXRlbShrZXksIGxvY2FsU3RvcmFnZSwgdGhpcy5sb2NhbFN0b3JhZ2VSZWNvcmQsICdsb2NhbCcpLFxuXHRcdFx0c2V0SXRlbTogPERhdGFUeXBlID0gYW55PihrZXk6IHN0cmluZywgaXRlbTogRGF0YVR5cGUpID0+XG5cdFx0XHRcdHRoaXMuc2V0SXRlbShrZXksIGl0ZW0sIGxvY2FsU3RvcmFnZSwgdGhpcy5sb2NhbFN0b3JhZ2VSZWNvcmQsICdsb2NhbCcpLFxuXHRcdFx0Y2xlYXI6ICgpID0+IHRoaXMuY2xlYXJTdG9yYWdlKGxvY2FsU3RvcmFnZSwgdGhpcy5sb2NhbFN0b3JhZ2VSZWNvcmQsICdsb2NhbCcpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQSBzZXNzaW9uU3RvcmFnZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBvYnNlcnZhYmxlc1xuXHQgKi9cblx0cHVibGljIGdldCBzZXNzaW9uU3RvcmFnZSgpOiBOZ3hTdG9yYWdlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0SXRlbTogPERhdGFUeXBlID0gYW55PihrZXk6IHN0cmluZykgPT4gdGhpcy5nZXRJdGVtPERhdGFUeXBlPihrZXksIHNlc3Npb25TdG9yYWdlKSxcblx0XHRcdGdldEl0ZW1PYnNlcnZhYmxlOiA8RGF0YVR5cGUgPSBhbnk+KGtleTogc3RyaW5nKSA9PlxuXHRcdFx0XHR0aGlzLmdldEl0ZW1PYnNlcnZhYmxlPERhdGFUeXBlPihrZXksIHRoaXMuc2Vzc2lvblN0b3JhZ2VSZWNvcmQpLFxuXHRcdFx0cmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PlxuXHRcdFx0XHR0aGlzLnJlbW92ZUl0ZW0oa2V5LCBzZXNzaW9uU3RvcmFnZSwgdGhpcy5zZXNzaW9uU3RvcmFnZVJlY29yZCwgJ3Nlc3Npb24nKSxcblx0XHRcdHNldEl0ZW06IDxEYXRhVHlwZSA9IGFueT4oa2V5OiBzdHJpbmcsIGl0ZW06IERhdGFUeXBlKSA9PlxuXHRcdFx0XHR0aGlzLnNldEl0ZW0oa2V5LCBpdGVtLCBzZXNzaW9uU3RvcmFnZSwgdGhpcy5zZXNzaW9uU3RvcmFnZVJlY29yZCwgJ3Nlc3Npb24nKSxcblx0XHRcdGNsZWFyOiAoKSA9PiB0aGlzLmNsZWFyU3RvcmFnZShzZXNzaW9uU3RvcmFnZSwgdGhpcy5zZXNzaW9uU3RvcmFnZVJlY29yZCwgJ3Nlc3Npb24nKSxcblx0XHR9O1xuXHR9XG5cblx0cHJvdGVjdGVkIGdldEl0ZW08RGF0YVR5cGUgPSBhbnk+KGtleTogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKTogRGF0YVR5cGUge1xuXHRcdHJldHVybiB0aGlzLnBhcnNlVmFsdWUoc3RvcmFnZS5nZXRJdGVtKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB2ZXJzaW9uIG9mIHRoZSBzdG9yYWdlIHZhbHVlXG5cdCAqXG5cdCAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzdG9yYWdlIHZhbHVlXG5cdCAqIEBwYXJhbSByZWNvcmQgIC0gVGhlIHN0b3JhZ2UgcmVjb3JkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0SXRlbU9ic2VydmFibGU8RGF0YVR5cGU+KFxuXHRcdGtleTogc3RyaW5nLFxuXHRcdHJlY29yZDogTmd4U3RvcmFnZVJlY29yZFxuXHQpOiBPYnNlcnZhYmxlPERhdGFUeXBlPiB7XG5cdFx0Ly8gSWJlbjogUmV0dXJuIE5FVkVSIHdoZW4gbm90IGluIGJyb3dzZXJcblx0XHRpZiAoIXRoaXMud2luZG93U2VydmljZS5pc0Jyb3dzZXIoKSkge1xuXHRcdFx0cmV0dXJuIE5FVkVSO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZSBzdWJqZWN0IGFscmVhZHkgZXhpc3RzLCB3ZSByZXR1cm4gdGhlIG9ic2VydmFibGVcblx0XHRpZiAocmVjb3JkW2tleV0pIHtcblx0XHRcdHJldHVybiByZWNvcmRba2V5XS5hc09ic2VydmFibGUoKTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiBubyBzdWJqZWN0IGV4aXRzLCB3ZSBjcmVhdGUgYSBuZXcgb25lXG5cdFx0cmVjb3JkW2tleV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFUeXBlPih1bmRlZmluZWQpO1xuXG5cdFx0Ly8gSWJlbjogUmV0dXJuIHRoZSBvYnNlcnZhYmxlXG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbU9ic2VydmFibGU8RGF0YVR5cGU+KGtleSwgcmVjb3JkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGFuIGl0ZW0gaW4gdGhlIHN0b3JhZ2Vcblx0ICpcblx0ICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIGl0ZW1cblx0ICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbSBpbiB0aGUgc3RvcmFnZVxuXHQgKiBAcGFyYW0gc3RvcmFnZSAtIFRoZSBzdG9yYWdlIGluIHdoaWNoIHdlIHdhbnQgdG8gc2F2ZSB0aGUgaXRlbVxuXHQgKiBAcGFyYW0gcmVjb3JkIC0gVGhlIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSByZWNvcmRcblx0ICovXG5cdHByb3RlY3RlZCBzZXRJdGVtPERhdGFUeXBlID0gYW55Pihcblx0XHRrZXk6IHN0cmluZyxcblx0XHRpdGVtOiBEYXRhVHlwZSxcblx0XHRzdG9yYWdlOiBTdG9yYWdlLFxuXHRcdHJlY29yZDogTmd4U3RvcmFnZVJlY29yZCxcblx0XHR0eXBlOiBOZ3hTdG9yYWdlVHlwZVxuXHQpOiBOZ3hTdG9yYWdlU2V0RXZlbnQgfCB1bmRlZmluZWQge1xuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgd2hlbiB3ZSdyZSBpbiB0aGUgYnJvd3NlclxuXHRcdGlmICghdGhpcy53aW5kb3dTZXJ2aWNlLmlzQnJvd3NlcigpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENoZWNrIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIHN1YmplY3QgZm9yIHRoaXMgaXRlbS4gSWYgbm90LCB3ZSBjcmVhdGUgb25lXG5cdFx0bGV0IHN1YmplY3QgPSByZWNvcmRba2V5XTtcblxuXHRcdGlmICghc3ViamVjdCkge1xuXHRcdFx0c3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVR5cGU+KHVuZGVmaW5lZCk7XG5cdFx0XHRzdG9yYWdlW2tleV0gPSBzdWJqZWN0O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFN0b3JlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdWJqZWN0XG5cdFx0Y29uc3Qgb2xkVmFsdWUgPSBzdWJqZWN0LmdldFZhbHVlKCk7XG5cblx0XHQvLyBJYmVuOiBTZXQgdGhlIGl0ZW0gaW4gdGhlIHN0b3JhZ2Vcblx0XHRzdG9yYWdlLnNldEl0ZW0oa2V5LCB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBpdGVtIDogSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xuXG5cdFx0Ly8gSWJlbjogVXBkYXRlIHRoZSBzdWJqZWN0IGluIHRoZSByZWNvcmRcblx0XHRzdWJqZWN0Lm5leHQoaXRlbSk7XG5cblx0XHQvLyBJYmVuOiBDcmVhdGUgdGhlIHN0b3JhZ2UgZXZlbnRcblx0XHRjb25zdCBldmVudDogTmd4U3RvcmFnZVNldEV2ZW50ID0ge1xuXHRcdFx0a2V5LFxuXHRcdFx0bmV3VmFsdWU6IGl0ZW0sXG5cdFx0XHRvbGRWYWx1ZSxcblx0XHRcdHN0b3JhZ2U6IHR5cGUsXG5cdFx0XHR0eXBlOiAnc2V0Jyxcblx0XHR9O1xuXG5cdFx0Ly8gSWJlbjogRW1pdCB0aGUgc3RvcmFnZSBldmVudFxuXHRcdHRoaXMuc3RvcmFnZUV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcblxuXHRcdC8vIEliZW46IFJldHVybiB0aGUgc3RvcmFnZSBldmVudFxuXHRcdHJldHVybiBldmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBlbWl0IGEgcmVtb3ZlIGV2ZW50XG5cdCAqXG5cdCAqIEBwYXJhbSAga2V5IC0gVGhlIGtleSBvZiB0aGUgaXRlbVxuXHQgKiBAcGFyYW0gc3RvcmFnZSAtIFRoZSBzdG9yYWdlIHdlIHdpc2ggdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb21cblx0ICogQHBhcmFtIHJlY29yZCAtIFRoZSByZWNvcmQgd2l0aCB0aGUgc3ViamVjdFxuXHQgKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIG9mIHN0b3JhZ2Vcblx0ICovXG5cdHByb3RlY3RlZCByZW1vdmVJdGVtKFxuXHRcdGtleTogc3RyaW5nLFxuXHRcdHN0b3JhZ2U6IFN0b3JhZ2UsXG5cdFx0cmVjb3JkOiBOZ3hTdG9yYWdlUmVjb3JkLFxuXHRcdHR5cGU6IE5neFN0b3JhZ2VUeXBlXG5cdCk6IE5neFN0b3JhZ2VSZW1vdmVFdmVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCB3aGVuIHdlJ3JlIG5vdCBpbiB0aGUgYnJvd3NlclxuXHRcdGlmICghdGhpcy53aW5kb3dTZXJ2aWNlLmlzQnJvd3NlcigpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEdldCB0aGUgb2xkIGl0ZW1cblx0XHRjb25zdCBvbGRWYWx1ZSA9IHRoaXMucGFyc2VWYWx1ZShzdG9yYWdlLmdldEl0ZW0oa2V5KSk7XG5cblx0XHQvLyBJYmVuOiBSZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgc3RvcmFnZVxuXHRcdHN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuXG5cdFx0Ly8gSWJlbiBVcGRhdGUgdGhlIHN1YmplY3QgaWYgaXQgZXhpc3RzXG5cdFx0cmVjb3JkW2tleV0/Lm5leHQodW5kZWZpbmVkKTtcblxuXHRcdC8vIEliZW46IENyZWF0ZSB0aGUgZXZlbnQgYW5kIHJldHVybiBhbmQgZW1pdCBpdFxuXHRcdGNvbnN0IGV2ZW50OiBOZ3hTdG9yYWdlUmVtb3ZlRXZlbnQgPSB7XG5cdFx0XHRvbGRWYWx1ZSxcblx0XHRcdHN0b3JhZ2U6IHR5cGUsXG5cdFx0XHRrZXksXG5cdFx0XHR0eXBlOiAncmVtb3ZlJyxcblx0XHR9O1xuXG5cdFx0dGhpcy5zdG9yYWdlRXZlbnRTdWJqZWN0Lm5leHQoZXZlbnQpO1xuXHRcdHJldHVybiBldmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHN0b3JhZ2UsIGNvbXBsZXRlcyBhbGwgc3ViamVjdHMgYW5kIGVtaXRzIGEgY2xlYXIgZXZlbnRcblx0ICpcblx0ICogQHBhcmFtIHN0b3JhZ2UgLSBUaGUgc3RvcmFnZSB3ZSB3aXNoIHRvIGNsZWFyXG5cdCAqIEBwYXJhbSByZWNvcmQgLSBUaGUgcmVjb3JkIHdpdGggdGhlIHN1YmplY3RzXG5cdCAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2Ygc3RvcmFnZVxuXHQgKi9cblx0cHJvdGVjdGVkIGNsZWFyU3RvcmFnZShcblx0XHRzdG9yYWdlOiBTdG9yYWdlLFxuXHRcdHJlY29yZDogTmd4U3RvcmFnZVJlY29yZCxcblx0XHR0eXBlOiBOZ3hTdG9yYWdlVHlwZVxuXHQpOiBOZ3hTdG9yYWdlQ2xlYXJFdmVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCB3aGVuIHdlJ3JlIG5vdCBpbiB0aGUgYnJvd3NlclxuXHRcdGlmICghdGhpcy53aW5kb3dTZXJ2aWNlLmlzQnJvd3NlcigpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENsZWFyIHRoZSBzdG9yYWdlXG5cdFx0c3RvcmFnZS5jbGVhcigpO1xuXG5cdFx0Ly8gSWJlbjogQ2xlYXIgdGhlIHJlY29yZCBhbmQgY29tcGxldGUgYWxsIHN1YmplY3RzXG5cdFx0T2JqZWN0LmVudHJpZXMocmVjb3JkKS5mb3JFYWNoKChba2V5LCBzdWJqZWN0XSkgPT4ge1xuXHRcdFx0c3ViamVjdC5uZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHRzdWJqZWN0LmNvbXBsZXRlKCk7XG5cblx0XHRcdHJlY29yZFtrZXldID0gdW5kZWZpbmVkO1xuXHRcdH0pO1xuXG5cdFx0Ly8gSWJlbjogQ3JlYXRlIGFuZCBlbWl0IGV2ZW50XG5cdFx0Y29uc3QgZXZlbnQ6IE5neFN0b3JhZ2VDbGVhckV2ZW50ID0ge1xuXHRcdFx0dHlwZTogJ2NsZWFyJyxcblx0XHRcdHN0b3JhZ2U6IHR5cGUsXG5cdFx0fTtcblxuXHRcdHRoaXMuc3RvcmFnZUV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcblxuXHRcdHJldHVybiBldmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHcmFicyB0aGUgZXhpc3Rpbmcgc3RvcmFnZSBhbmQgdXBkYXRlcyB0aGUgcmVjb3JkXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RvcmFnZX0gc3RvcmFnZSAtIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdG9yYWdlXG5cdCAqIEBwYXJhbSB7Tmd4U3RvcmFnZVJlY29yZH0gcmVjb3JkXG5cdCAqIEBtZW1iZXJvZiBOZ3hTdG9yYWdlU2VydmljZVxuXHQgKi9cblx0cHJvdGVjdGVkIHNldHVwU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlLCByZWNvcmQ6IE5neFN0b3JhZ2VSZWNvcmQpIHtcblx0XHRPYmplY3QuZW50cmllcyhzdG9yYWdlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdHJlY29yZFtrZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLnBhcnNlVmFsdWUodmFsdWUpKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgYSBzdHJpbmcgdmFsdWUgZnJvbSB0aGUgc3RvcmFnZSB0byBhbiBhY3R1YWwgdmFsdWVcblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIC0gVGhlIHByb3ZpZGVkIHN0cmluZyB2YWx1ZVxuXHQgKi9cblx0cHJvdGVjdGVkIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyk6IGFueSB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlIHZhbHVlIGRvZXMgbm90IGV4aXN0LCByZXR1cm4gdGhlIHZhbHVlXG5cdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZSB2YWx1ZSBpcyBlaXRoZXIgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIGEgYm9vbGVhbiB2ZXJzaW9uIG9mIHRoZSB2YWx1ZVxuXHRcdGlmICh2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnZmFsc2UnKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09ICd0cnVlJztcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgdmFsdWUgaXMgYSBudW1iZXIsIHJldHVybiB0aGUgcGFyc2VkIG51bWJlclxuXHRcdGlmICh2YWx1ZS5tYXRjaCgvXlswLTldKlssLl17MCwxfVswLTldKiQvKSkge1xuXHRcdFx0cmV0dXJuIE51bWJlcih2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgcmV0dXJuIHRoZSBwYXJzZWQgb2JqZWN0XG5cdFx0aWYgKHZhbHVlLm1hdGNoKC97KC4qOi4qWyxdezAsMX0pKn0vKSkge1xuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFJldHVybiB0aGUgc3RyaW5nIHZhbHVlIGFzIGlzXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { NgxWindowService } from '@ibenvandeveire/ngx-core';\nimport { filter, map, ReplaySubject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated This service will be deprecated in the next major release. Please use the NgxMediaQueryService from `@ibenvandeveire/ngx-layout` instead.\n */\nexport class NgxMediaQueryService {\n    windowService = inject(NgxWindowService);\n    /**\n     * A map of media queries that are registered with the service.\n     */\n    queryListMap = new Map();\n    /**\n     * A map of the registered media queries with their id.\n     */\n    queryIdMap = new Map();\n    /*\n     * A map of listeners that are registered with the service.\n     * They are saved to be able to remove them when the service is destroyed.\n     */\n    mediaQueryListenerMap = new Map();\n    /**\n     * A subject that emits the id of the media query that has changed.\n     */\n    queryChangedSubject = new ReplaySubject();\n    /**\n     * Register a list of media queries that need to be tracked by the service.\n     *\n     * @param queries - A list of media queries that should be registered with the service.\n     */\n    registerMediaQueries(...queries) {\n        this.windowService.runInBrowser(({ browserWindow }) => {\n            for (const [id, query] of queries) {\n                // Wouter: Warn if the id has already been registered.\n                if (this.queryIdMap.get(id)) {\n                    return console.warn(`NgxMediaQueryService: Media query with id '${id}' already exists and is defined by '${this.queryIdMap.get(id)}'`);\n                }\n                // Wouter: If the query has already been registered, throw an error to prevent duplicate subscriptions\n                if ([...this.queryIdMap].some(([_, value]) => value === query)) {\n                    const duplicateQuery = [...this.queryIdMap].find(([_, value]) => value === query);\n                    throw new Error(`NgxMediaQueryService: Query of ['${id}', ${query}] already exists and is defined by ['${duplicateQuery[0]}', ${duplicateQuery[1]}]`);\n                }\n                // Wouter: save the id and query\n                this.queryIdMap.set(id, query);\n                // Wouter: For each query, create a MediaQueryList object\n                const matchedQuery = browserWindow.matchMedia(query);\n                // Wouter: Save the query\n                this.queryListMap.set(id, matchedQuery);\n                // Wouter: Emit the id of the query that has changed\n                this.queryChangedSubject.next(id);\n                // Wouter: Create a listener for the query. This is done separately to be\n                // able to remove the listener when the service is destroyed\n                const listener = (queryChangedEvent) => {\n                    this.queryListMap.set(id, queryChangedEvent.currentTarget);\n                    // Wouter: Emit the id of the query that has changed\n                    this.queryChangedSubject.next(id);\n                };\n                // Wouter: Register the listener to the query\n                matchedQuery.addEventListener('change', listener);\n                // Wouter: Save the listener\n                this.mediaQueryListenerMap.set(id, listener);\n            }\n        });\n    }\n    /**\n     * Pass the id of the query whose changes need to be listened to.\n     *\n     * @param id - The id of the media query that should be checked.\n     * @returns An observable that emits a boolean value whenever the requested media query changes.\n     */\n    getMatchingQuery$(id) {\n        // Wouter: Throw an error if the query has not been registered\n        if (!this.queryIdMap.has(id)) {\n            throw new Error(`NgxMediaQueryService: No media query with id '${id}' has been registered. Please register the media query first using the 'registerMediaQueries' method.`);\n        }\n        return this.queryChangedSubject.asObservable().pipe(\n        // Wouter: Filter the query that has changed.\n        // This will make sure only the [id] streams are triggered.\n        filter((queryId) => queryId === id), map(() => this.queryListMap.get(id).matches));\n    }\n    /**\n     * Unregister all media query subscriptions from the service.\n     */\n    ngOnDestroy() {\n        this.windowService.runInBrowser(() => {\n            // Wouter: Remove all eventListeners\n            for (const [id, query] of this.queryListMap) {\n                query.removeEventListener('change', this.mediaQueryListenerMap.get(id));\n            }\n            // Wouter: Complete subscriptions\n            this.queryChangedSubject.next(null);\n            this.queryChangedSubject.complete();\n            // Wouter: Clear maps\n            this.queryListMap.clear();\n            this.mediaQueryListenerMap.clear();\n        });\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxMediaQueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxMediaQueryService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxMediaQueryService, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFxdWVyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvc2VydmljZXMvbWVkaWEtcXVlcnkvbWVkaWFxdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFOUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ2YsYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTFEOztPQUVHO0lBQ2MsWUFBWSxHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXZFOztPQUVHO0lBQ2MsVUFBVSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTdEOzs7T0FHRztJQUNjLHFCQUFxQixHQUdsQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRWQ7O09BRUc7SUFDYyxtQkFBbUIsR0FBMEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUVsRjs7OztPQUlHO0lBQ0ksb0JBQW9CLENBQUMsR0FBRyxPQUFzQztRQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUNyRCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ25DLHNEQUFzRDtnQkFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM3QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQ2xCLDhDQUE4QyxFQUFFLHVDQUF1QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDekcsRUFBRSxDQUNGLEdBQUcsQ0FDSixDQUFDO2dCQUNILENBQUM7Z0JBRUQsc0dBQXNHO2dCQUN0RyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNoRSxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDL0MsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FDL0IsQ0FBQztvQkFDRixNQUFNLElBQUksS0FBSyxDQUNkLG9DQUFvQyxFQUFFLE1BQU0sS0FBSyx3Q0FBd0MsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUNwSSxDQUFDO2dCQUNILENBQUM7Z0JBRUQsZ0NBQWdDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRS9CLHlEQUF5RDtnQkFDekQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFckQseUJBQXlCO2dCQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBRXhDLG9EQUFvRDtnQkFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFbEMseUVBQXlFO2dCQUN6RSw0REFBNEQ7Z0JBQzVELE1BQU0sUUFBUSxHQUFHLENBQUMsaUJBQXNDLEVBQUUsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLGFBQStCLENBQUMsQ0FBQztvQkFFN0Usb0RBQW9EO29CQUNwRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUM7Z0JBRUYsNkNBQTZDO2dCQUM3QyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUVsRCw0QkFBNEI7Z0JBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLEVBQVU7UUFDbEMsOERBQThEO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2QsaURBQWlELEVBQUUsdUdBQXVHLENBQzFKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSTtRQUNsRCw2Q0FBNkM7UUFDN0MsMkRBQTJEO1FBQzNELE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxFQUNuQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxvQ0FBb0M7WUFDcEMsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDN0MsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVwQyxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO3VHQTVIVyxvQkFBb0I7MkdBQXBCLG9CQUFvQixjQURQLE1BQU07OzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFdpbmRvd1NlcnZpY2UgfSBmcm9tICdAaWJlbnZhbmRldmVpcmUvbmd4LWNvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHNlcnZpY2Ugd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSB1c2UgdGhlIE5neE1lZGlhUXVlcnlTZXJ2aWNlIGZyb20gYEBpYmVudmFuZGV2ZWlyZS9uZ3gtbGF5b3V0YCBpbnN0ZWFkLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE5neE1lZGlhUXVlcnlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHJpdmF0ZSByZWFkb25seSB3aW5kb3dTZXJ2aWNlID0gaW5qZWN0KE5neFdpbmRvd1NlcnZpY2UpO1xuXG5cdC8qKlxuXHQgKiBBIG1hcCBvZiBtZWRpYSBxdWVyaWVzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2VydmljZS5cblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgcXVlcnlMaXN0TWFwOiBNYXA8c3RyaW5nLCBNZWRpYVF1ZXJ5TGlzdD4gPSBuZXcgTWFwKCk7XG5cblx0LyoqXG5cdCAqIEEgbWFwIG9mIHRoZSByZWdpc3RlcmVkIG1lZGlhIHF1ZXJpZXMgd2l0aCB0aGVpciBpZC5cblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgcXVlcnlJZE1hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcblxuXHQvKlxuXHQgKiBBIG1hcCBvZiBsaXN0ZW5lcnMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzZXJ2aWNlLlxuXHQgKiBUaGV5IGFyZSBzYXZlZCB0byBiZSBhYmxlIHRvIHJlbW92ZSB0aGVtIHdoZW4gdGhlIHNlcnZpY2UgaXMgZGVzdHJveWVkLlxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBtZWRpYVF1ZXJ5TGlzdGVuZXJNYXA6IE1hcDxcblx0XHRzdHJpbmcsXG5cdFx0KHF1ZXJ5Q2hhbmdlZEV2ZW50OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB2b2lkXG5cdD4gPSBuZXcgTWFwKCk7XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0aGF0IGVtaXRzIHRoZSBpZCBvZiB0aGUgbWVkaWEgcXVlcnkgdGhhdCBoYXMgY2hhbmdlZC5cblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgcXVlcnlDaGFuZ2VkU3ViamVjdDogUmVwbGF5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuXHQvKipcblx0ICogUmVnaXN0ZXIgYSBsaXN0IG9mIG1lZGlhIHF1ZXJpZXMgdGhhdCBuZWVkIHRvIGJlIHRyYWNrZWQgYnkgdGhlIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBxdWVyaWVzIC0gQSBsaXN0IG9mIG1lZGlhIHF1ZXJpZXMgdGhhdCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzZXJ2aWNlLlxuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyTWVkaWFRdWVyaWVzKC4uLnF1ZXJpZXM6IFtpZDogc3RyaW5nLCBxdWVyeTogc3RyaW5nXVtdKTogdm9pZCB7XG5cdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyV2luZG93IH0pID0+IHtcblx0XHRcdGZvciAoY29uc3QgW2lkLCBxdWVyeV0gb2YgcXVlcmllcykge1xuXHRcdFx0XHQvLyBXb3V0ZXI6IFdhcm4gaWYgdGhlIGlkIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZC5cblx0XHRcdFx0aWYgKHRoaXMucXVlcnlJZE1hcC5nZXQoaWQpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnNvbGUud2Fybihcblx0XHRcdFx0XHRcdGBOZ3hNZWRpYVF1ZXJ5U2VydmljZTogTWVkaWEgcXVlcnkgd2l0aCBpZCAnJHtpZH0nIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBkZWZpbmVkIGJ5ICcke3RoaXMucXVlcnlJZE1hcC5nZXQoXG5cdFx0XHRcdFx0XHRcdGlkXG5cdFx0XHRcdFx0XHQpfSdgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdvdXRlcjogSWYgdGhlIHF1ZXJ5IGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCwgdGhyb3cgYW4gZXJyb3IgdG8gcHJldmVudCBkdXBsaWNhdGUgc3Vic2NyaXB0aW9uc1xuXHRcdFx0XHRpZiAoWy4uLnRoaXMucXVlcnlJZE1hcF0uc29tZSgoW18sIHZhbHVlXSkgPT4gdmFsdWUgPT09IHF1ZXJ5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGR1cGxpY2F0ZVF1ZXJ5ID0gWy4uLnRoaXMucXVlcnlJZE1hcF0uZmluZChcblx0XHRcdFx0XHRcdChbXywgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gcXVlcnlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdGBOZ3hNZWRpYVF1ZXJ5U2VydmljZTogUXVlcnkgb2YgWycke2lkfScsICR7cXVlcnl9XSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgZGVmaW5lZCBieSBbJyR7ZHVwbGljYXRlUXVlcnlbMF19JywgJHtkdXBsaWNhdGVRdWVyeVsxXX1dYFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXb3V0ZXI6IHNhdmUgdGhlIGlkIGFuZCBxdWVyeVxuXHRcdFx0XHR0aGlzLnF1ZXJ5SWRNYXAuc2V0KGlkLCBxdWVyeSk7XG5cblx0XHRcdFx0Ly8gV291dGVyOiBGb3IgZWFjaCBxdWVyeSwgY3JlYXRlIGEgTWVkaWFRdWVyeUxpc3Qgb2JqZWN0XG5cdFx0XHRcdGNvbnN0IG1hdGNoZWRRdWVyeSA9IGJyb3dzZXJXaW5kb3cubWF0Y2hNZWRpYShxdWVyeSk7XG5cblx0XHRcdFx0Ly8gV291dGVyOiBTYXZlIHRoZSBxdWVyeVxuXHRcdFx0XHR0aGlzLnF1ZXJ5TGlzdE1hcC5zZXQoaWQsIG1hdGNoZWRRdWVyeSk7XG5cblx0XHRcdFx0Ly8gV291dGVyOiBFbWl0IHRoZSBpZCBvZiB0aGUgcXVlcnkgdGhhdCBoYXMgY2hhbmdlZFxuXHRcdFx0XHR0aGlzLnF1ZXJ5Q2hhbmdlZFN1YmplY3QubmV4dChpZCk7XG5cblx0XHRcdFx0Ly8gV291dGVyOiBDcmVhdGUgYSBsaXN0ZW5lciBmb3IgdGhlIHF1ZXJ5LiBUaGlzIGlzIGRvbmUgc2VwYXJhdGVseSB0byBiZVxuXHRcdFx0XHQvLyBhYmxlIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIgd2hlbiB0aGUgc2VydmljZSBpcyBkZXN0cm95ZWRcblx0XHRcdFx0Y29uc3QgbGlzdGVuZXIgPSAocXVlcnlDaGFuZ2VkRXZlbnQ6IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHtcblx0XHRcdFx0XHR0aGlzLnF1ZXJ5TGlzdE1hcC5zZXQoaWQsIHF1ZXJ5Q2hhbmdlZEV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgTWVkaWFRdWVyeUxpc3QpO1xuXG5cdFx0XHRcdFx0Ly8gV291dGVyOiBFbWl0IHRoZSBpZCBvZiB0aGUgcXVlcnkgdGhhdCBoYXMgY2hhbmdlZFxuXHRcdFx0XHRcdHRoaXMucXVlcnlDaGFuZ2VkU3ViamVjdC5uZXh0KGlkKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBXb3V0ZXI6IFJlZ2lzdGVyIHRoZSBsaXN0ZW5lciB0byB0aGUgcXVlcnlcblx0XHRcdFx0bWF0Y2hlZFF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuXHRcdFx0XHQvLyBXb3V0ZXI6IFNhdmUgdGhlIGxpc3RlbmVyXG5cdFx0XHRcdHRoaXMubWVkaWFRdWVyeUxpc3RlbmVyTWFwLnNldChpZCwgbGlzdGVuZXIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhc3MgdGhlIGlkIG9mIHRoZSBxdWVyeSB3aG9zZSBjaGFuZ2VzIG5lZWQgdG8gYmUgbGlzdGVuZWQgdG8uXG5cdCAqXG5cdCAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgbWVkaWEgcXVlcnkgdGhhdCBzaG91bGQgYmUgY2hlY2tlZC5cblx0ICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgYm9vbGVhbiB2YWx1ZSB3aGVuZXZlciB0aGUgcmVxdWVzdGVkIG1lZGlhIHF1ZXJ5IGNoYW5nZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWF0Y2hpbmdRdWVyeSQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXHRcdC8vIFdvdXRlcjogVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHF1ZXJ5IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkXG5cdFx0aWYgKCF0aGlzLnF1ZXJ5SWRNYXAuaGFzKGlkKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgTmd4TWVkaWFRdWVyeVNlcnZpY2U6IE5vIG1lZGlhIHF1ZXJ5IHdpdGggaWQgJyR7aWR9JyBoYXMgYmVlbiByZWdpc3RlcmVkLiBQbGVhc2UgcmVnaXN0ZXIgdGhlIG1lZGlhIHF1ZXJ5IGZpcnN0IHVzaW5nIHRoZSAncmVnaXN0ZXJNZWRpYVF1ZXJpZXMnIG1ldGhvZC5gXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5Q2hhbmdlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcblx0XHRcdC8vIFdvdXRlcjogRmlsdGVyIHRoZSBxdWVyeSB0aGF0IGhhcyBjaGFuZ2VkLlxuXHRcdFx0Ly8gVGhpcyB3aWxsIG1ha2Ugc3VyZSBvbmx5IHRoZSBbaWRdIHN0cmVhbXMgYXJlIHRyaWdnZXJlZC5cblx0XHRcdGZpbHRlcigocXVlcnlJZCkgPT4gcXVlcnlJZCA9PT0gaWQpLFxuXHRcdFx0bWFwKCgpID0+IHRoaXMucXVlcnlMaXN0TWFwLmdldChpZCkubWF0Y2hlcylcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVucmVnaXN0ZXIgYWxsIG1lZGlhIHF1ZXJ5IHN1YnNjcmlwdGlvbnMgZnJvbSB0aGUgc2VydmljZS5cblx0ICovXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLndpbmRvd1NlcnZpY2UucnVuSW5Ccm93c2VyKCgpID0+IHtcblx0XHRcdC8vIFdvdXRlcjogUmVtb3ZlIGFsbCBldmVudExpc3RlbmVyc1xuXHRcdFx0Zm9yIChjb25zdCBbaWQsIHF1ZXJ5XSBvZiB0aGlzLnF1ZXJ5TGlzdE1hcCkge1xuXHRcdFx0XHRxdWVyeS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm1lZGlhUXVlcnlMaXN0ZW5lck1hcC5nZXQoaWQpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV291dGVyOiBDb21wbGV0ZSBzdWJzY3JpcHRpb25zXG5cdFx0XHR0aGlzLnF1ZXJ5Q2hhbmdlZFN1YmplY3QubmV4dChudWxsKTtcblx0XHRcdHRoaXMucXVlcnlDaGFuZ2VkU3ViamVjdC5jb21wbGV0ZSgpO1xuXG5cdFx0XHQvLyBXb3V0ZXI6IENsZWFyIG1hcHNcblx0XHRcdHRoaXMucXVlcnlMaXN0TWFwLmNsZWFyKCk7XG5cdFx0XHR0aGlzLm1lZGlhUXVlcnlMaXN0ZW5lck1hcC5jbGVhcigpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BtwPipe {\n    /**\n     * Converts a BTW number to the correct format\n     *\n     * @param value - The value we wish to convert\n     */\n    transform(value) {\n        if (!value) {\n            // Denis: if the value is falsy, return it without transform.\n            return value;\n        }\n        const addCharAtIndex = (original, char, index) => {\n            return original.slice(0, index) + char + original.slice(index);\n        };\n        // Iben: Convert to string if it's a number\n        value = value.toString();\n        if (value.replace(/\\./g, '').length === 9) {\n            value = '0' + value;\n        }\n        // Iben: Format: xxxx.xxx.xxx\n        if (value.charAt(4) !== '.') {\n            value = addCharAtIndex(value, '.', 4);\n        }\n        if (value.charAt(8) !== '.') {\n            value = addCharAtIndex(value, '.', 8);\n        }\n        return value;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: BtwPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\n    static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.2.1\", ngImport: i0, type: BtwPipe, isStandalone: true, name: \"btw\" });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: BtwPipe, decorators: [{\n            type: Pipe,\n            args: [{\n                    name: 'btw',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnR3LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9waXBlcy9idHcvYnR3LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxPQUFPO0lBQ25COzs7O09BSUc7SUFDSSxTQUFTLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWiw2REFBNkQ7WUFDN0QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBRSxLQUFhLEVBQVUsRUFBRTtZQUNoRixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQztRQUVGLDJDQUEyQztRQUMzQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzdCLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzdCLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO3VHQWpDVyxPQUFPO3FHQUFQLE9BQU87OzJGQUFQLE9BQU87a0JBSm5CLElBQUk7bUJBQUM7b0JBQ0wsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsVUFBVSxFQUFFLElBQUk7aUJBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG5cdG5hbWU6ICdidHcnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBCdHdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIEJUVyBudW1iZXIgdG8gdGhlIGNvcnJlY3QgZm9ybWF0XG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB3ZSB3aXNoIHRvIGNvbnZlcnRcblx0ICovXG5cdHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0Ly8gRGVuaXM6IGlmIHRoZSB2YWx1ZSBpcyBmYWxzeSwgcmV0dXJuIGl0IHdpdGhvdXQgdHJhbnNmb3JtLlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFkZENoYXJBdEluZGV4ID0gKG9yaWdpbmFsOiBzdHJpbmcsIGNoYXI6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0XHRyZXR1cm4gb3JpZ2luYWwuc2xpY2UoMCwgaW5kZXgpICsgY2hhciArIG9yaWdpbmFsLnNsaWNlKGluZGV4KTtcblx0XHR9O1xuXG5cdFx0Ly8gSWJlbjogQ29udmVydCB0byBzdHJpbmcgaWYgaXQncyBhIG51bWJlclxuXHRcdHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuXHRcdGlmICh2YWx1ZS5yZXBsYWNlKC9cXC4vZywgJycpLmxlbmd0aCA9PT0gOSkge1xuXHRcdFx0dmFsdWUgPSAnMCcgKyB2YWx1ZTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBGb3JtYXQ6IHh4eHgueHh4Lnh4eFxuXHRcdGlmICh2YWx1ZS5jaGFyQXQoNCkgIT09ICcuJykge1xuXHRcdFx0dmFsdWUgPSBhZGRDaGFyQXRJbmRleCh2YWx1ZSwgJy4nLCA0KTtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUuY2hhckF0KDgpICE9PSAnLicpIHtcblx0XHRcdHZhbHVlID0gYWRkQ2hhckF0SW5kZXgodmFsdWUsICcuJywgOCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class HasObserversPipe {\n    transform(output) {\n        return output && output.observers.length > 0;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: HasObserversPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\n    static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.2.1\", ngImport: i0, type: HasObserversPipe, isStandalone: true, name: \"hasObservers\" });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: HasObserversPipe, decorators: [{\n            type: Pipe,\n            args: [{\n                    name: 'hasObservers',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW9ic2VydmVycy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvcGlwZXMvaGFzLW9ic2VydmVycy9oYXMtb2JzZXJ2ZXJzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBK0IsTUFBTSxlQUFlLENBQUM7O0FBTWxFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDckIsU0FBUyxDQUFDLE1BQTZCO1FBQzdDLE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO3VHQUhXLGdCQUFnQjtxR0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNMLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVLEVBQUUsSUFBSTtpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuXHRuYW1lOiAnaGFzT2JzZXJ2ZXJzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSGFzT2JzZXJ2ZXJzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXHRwdWJsaWMgdHJhbnNmb3JtKG91dHB1dDogRXZlbnRFbWl0dGVyPHVua25vd24+KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIG91dHB1dCAmJiBvdXRwdXQub2JzZXJ2ZXJzLmxlbmd0aCA+IDA7XG5cdH1cbn1cbiJdfQ==","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class IbanPipe {\n    transform(value = '') {\n        value = value.replace(/\\s/g, ''); // replace all spaces\n        let reformat = value.replace(/(.{4})/g, function (match) {\n            return match + ' '; // reformat into groups of 4 succeeded with a space\n        });\n        reformat = reformat.trim(); // remove trailing space\n        return reformat;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: IbanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\n    static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.2.1\", ngImport: i0, type: IbanPipe, isStandalone: true, name: \"IBAN\" });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: IbanPipe, decorators: [{\n            type: Pipe,\n            args: [{\n                    name: 'IBAN',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWJhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvcGlwZXMvaWJhbi9pYmFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxRQUFRO0lBQ2IsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQzFCLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUV2RCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLEtBQUs7WUFDdEQsT0FBTyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsbURBQW1EO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtRQUVwRCxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO3VHQVhXLFFBQVE7cUdBQVIsUUFBUTs7MkZBQVIsUUFBUTtrQkFKcEIsSUFBSTttQkFBQztvQkFDTCxJQUFJLEVBQUUsTUFBTTtvQkFDWixVQUFVLEVBQUUsSUFBSTtpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcblx0bmFtZTogJ0lCQU4nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJYmFuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXHRwdWJsaWMgdHJhbnNmb3JtKHZhbHVlID0gJycpOiBzdHJpbmcge1xuXHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxzL2csICcnKTsgLy8gcmVwbGFjZSBhbGwgc3BhY2VzXG5cblx0XHRsZXQgcmVmb3JtYXQgPSB2YWx1ZS5yZXBsYWNlKC8oLns0fSkvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0XHRyZXR1cm4gbWF0Y2ggKyAnICc7IC8vIHJlZm9ybWF0IGludG8gZ3JvdXBzIG9mIDQgc3VjY2VlZGVkIHdpdGggYSBzcGFjZVxuXHRcdH0pO1xuXG5cdFx0cmVmb3JtYXQgPSByZWZvcm1hdC50cmltKCk7IC8vIHJlbW92ZSB0cmFpbGluZyBzcGFjZVxuXG5cdFx0cmV0dXJuIHJlZm9ybWF0O1xuXHR9XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\n/** The configuration token for the NgxReplaceElementsPipe */\nexport const NgxReplaceElementsConfigurationToken = new InjectionToken('NgxReplaceElementsConfigurationToken');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS1lbGVtZW50cy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL3Rva2Vucy9yZXBsYWNlLWVsZW1lbnRzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsNkRBQTZEO0FBQzdELE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUNoRCxJQUFJLGNBQWMsQ0FBa0Msc0NBQXNDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFJlcGxhY2VFbGVtZW50c0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKiBUaGUgY29uZmlndXJhdGlvbiB0b2tlbiBmb3IgdGhlIE5neFJlcGxhY2VFbGVtZW50c1BpcGUgKi9cbmV4cG9ydCBjb25zdCBOZ3hSZXBsYWNlRWxlbWVudHNDb25maWd1cmF0aW9uVG9rZW4gPVxuXHRuZXcgSW5qZWN0aW9uVG9rZW48Tmd4UmVwbGFjZUVsZW1lbnRzQ29uZmlndXJhdGlvbj4oJ05neFJlcGxhY2VFbGVtZW50c0NvbmZpZ3VyYXRpb25Ub2tlbicpO1xuIl19","import { Pipe, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { NgxReplaceElementsConfigurationToken } from '../../tokens';\nimport * as i0 from \"@angular/core\";\n/**\n * A pipe that allows to replace text elements with a WebComponent\n */\nexport class NgxReplaceElementsPipe {\n    configuration = inject(NgxReplaceElementsConfigurationToken);\n    sanitizer = inject(DomSanitizer);\n    /**\n     * Replaces all matches of a specific selector with provided WebComponents\n     *\n     * @param value - The original string value\n     * @param items - The items we wish to replace\n     */\n    transform(value, items) {\n        // Iben: If the value isn't a string we early exit and warn the user\n        if (typeof value !== 'string') {\n            console.warn('NgxReplaceElements: A non string-value was provided to the NgxReplaceElementsPipe');\n            return '';\n        }\n        // Iben: If no items were provided to replace, we just return the value\n        if (!items || items.length === 0) {\n            return value;\n        }\n        // Iben: set up a new instance of the DOMParser and parse the value as text/html.\n        // This will return a Document which we can work with to find/replace elements.\n        const parser = new DOMParser();\n        const body = parser.parseFromString(value, 'text/html');\n        // Iben: Loop over all items we wish to replace\n        items.forEach((item) => {\n            // Iben: Get the selector and the element we want to replace the target with\n            const { selector, element, includeInnerHtml } = this.configuration[item.elementId];\n            // Iben: Select the target\n            const target = body.querySelector(selector.replace('{{id}}', item.id));\n            // Iben: If no target was found, early exit\n            if (!target) {\n                return;\n            }\n            // Iben: Create a new element within the Document based on the provided selector.\n            // The selector can be any native or custom web component (not an Angular component).\n            // Keep in mind that the element will need to have a lowercase input prop for the reference.\n            const replacement = body.createElement(element);\n            // Iben: If the item included data, we set these attributes\n            if (item.data) {\n                Object.entries(item.data).forEach(([key, value]) => {\n                    replacement.setAttribute(key, value);\n                });\n            }\n            // Iben: Copy the innerHtml of the target element to the new element if needed.\n            if (includeInnerHtml) {\n                replacement.innerHTML = target.innerHTML;\n            }\n            // Iben: Replace the target with the new element within the Document.\n            target.replaceWith(replacement);\n        });\n        // Iben: sanitize the document and mark it as trusted HTML before returning it to the template.\n        return this.sanitizer.bypassSecurityTrustHtml(body.documentElement.innerHTML);\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxReplaceElementsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\n    static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxReplaceElementsPipe, isStandalone: true, name: \"ngxReplaceElements\" });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxReplaceElementsPipe, decorators: [{\n            type: Pipe,\n            args: [{\n                    name: 'ngxReplaceElements',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS1lbGVtZW50cy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvcGlwZXMvcmVwbGFjZS1lbGVtZW50cy9yZXBsYWNlLWVsZW1lbnRzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBR3BFOztHQUVHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQixhQUFhLEdBQUcsTUFBTSxDQUFrQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQzlGLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbEQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQStCO1FBQ3ZELG9FQUFvRTtRQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQ1gsbUZBQW1GLENBQ25GLENBQUM7WUFDRixPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELGlGQUFpRjtRQUNqRiwrRUFBK0U7UUFDL0UsTUFBTSxNQUFNLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBYSxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVsRSwrQ0FBK0M7UUFDL0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLDRFQUE0RTtZQUM1RSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRW5GLDBCQUEwQjtZQUMxQixNQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVwRiwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNiLE9BQU87WUFDUixDQUFDO1lBRUQsaUZBQWlGO1lBQ2pGLHFGQUFxRjtZQUNyRiw0RkFBNEY7WUFDNUYsTUFBTSxXQUFXLEdBQWdCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0QsMkRBQTJEO1lBQzNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ2xELFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNKLENBQUM7WUFFRCwrRUFBK0U7WUFDNUUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQixXQUFXLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDMUMsQ0FBQztZQUVBLHFFQUFxRTtZQUNyRSxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0ZBQStGO1FBQy9GLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7dUdBakVXLHNCQUFzQjtxR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUpsQyxJQUFJO21CQUFDO29CQUNMLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO2lCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBOZ3hSZXBsYWNlRWxlbWVudHNDb25maWd1cmF0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgTmd4UmVwbGFjZUVsZW1lbnRzQ29uZmlndXJhdGlvbiwgTmd4UmVwbGFjZUVsZW1lbnRzSXRlbSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIHBpcGUgdGhhdCBhbGxvd3MgdG8gcmVwbGFjZSB0ZXh0IGVsZW1lbnRzIHdpdGggYSBXZWJDb21wb25lbnRcbiAqL1xuQFBpcGUoe1xuXHRuYW1lOiAnbmd4UmVwbGFjZUVsZW1lbnRzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4UmVwbGFjZUVsZW1lbnRzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb24gPSBpbmplY3Q8Tmd4UmVwbGFjZUVsZW1lbnRzQ29uZmlndXJhdGlvbj4oTmd4UmVwbGFjZUVsZW1lbnRzQ29uZmlndXJhdGlvblRva2VuKTtcblx0cHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuXHQvKipcblx0ICogUmVwbGFjZXMgYWxsIG1hdGNoZXMgb2YgYSBzcGVjaWZpYyBzZWxlY3RvciB3aXRoIHByb3ZpZGVkIFdlYkNvbXBvbmVudHNcblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIC0gVGhlIG9yaWdpbmFsIHN0cmluZyB2YWx1ZVxuXHQgKiBAcGFyYW0gaXRlbXMgLSBUaGUgaXRlbXMgd2Ugd2lzaCB0byByZXBsYWNlXG5cdCAqL1xuXHR0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgaXRlbXM6IE5neFJlcGxhY2VFbGVtZW50c0l0ZW1bXSk6IFNhZmVIdG1sIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgdmFsdWUgaXNuJ3QgYSBzdHJpbmcgd2UgZWFybHkgZXhpdCBhbmQgd2FybiB0aGUgdXNlclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdCdOZ3hSZXBsYWNlRWxlbWVudHM6IEEgbm9uIHN0cmluZy12YWx1ZSB3YXMgcHJvdmlkZWQgdG8gdGhlIE5neFJlcGxhY2VFbGVtZW50c1BpcGUnXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIG5vIGl0ZW1zIHdlcmUgcHJvdmlkZWQgdG8gcmVwbGFjZSwgd2UganVzdCByZXR1cm4gdGhlIHZhbHVlXG5cdFx0aWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBzZXQgdXAgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIERPTVBhcnNlciBhbmQgcGFyc2UgdGhlIHZhbHVlIGFzIHRleHQvaHRtbC5cblx0XHQvLyBUaGlzIHdpbGwgcmV0dXJuIGEgRG9jdW1lbnQgd2hpY2ggd2UgY2FuIHdvcmsgd2l0aCB0byBmaW5kL3JlcGxhY2UgZWxlbWVudHMuXG5cdFx0Y29uc3QgcGFyc2VyOiBET01QYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG5cdFx0Y29uc3QgYm9keTogRG9jdW1lbnQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCAndGV4dC9odG1sJyk7XG5cblx0XHQvLyBJYmVuOiBMb29wIG92ZXIgYWxsIGl0ZW1zIHdlIHdpc2ggdG8gcmVwbGFjZVxuXHRcdGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdC8vIEliZW46IEdldCB0aGUgc2VsZWN0b3IgYW5kIHRoZSBlbGVtZW50IHdlIHdhbnQgdG8gcmVwbGFjZSB0aGUgdGFyZ2V0IHdpdGhcblx0XHRcdGNvbnN0IHsgc2VsZWN0b3IsIGVsZW1lbnQsIGluY2x1ZGVJbm5lckh0bWwgfSA9IHRoaXMuY29uZmlndXJhdGlvbltpdGVtLmVsZW1lbnRJZF07XG5cblx0XHRcdC8vIEliZW46IFNlbGVjdCB0aGUgdGFyZ2V0XG5cdFx0XHRjb25zdCB0YXJnZXQ6IEhUTUxFbGVtZW50ID0gYm9keS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yLnJlcGxhY2UoJ3t7aWR9fScsIGl0ZW0uaWQpKTtcblxuXHRcdFx0Ly8gSWJlbjogSWYgbm8gdGFyZ2V0IHdhcyBmb3VuZCwgZWFybHkgZXhpdFxuXHRcdFx0aWYgKCF0YXJnZXQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJYmVuOiBDcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoaW4gdGhlIERvY3VtZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzZWxlY3Rvci5cblx0XHRcdC8vIFRoZSBzZWxlY3RvciBjYW4gYmUgYW55IG5hdGl2ZSBvciBjdXN0b20gd2ViIGNvbXBvbmVudCAobm90IGFuIEFuZ3VsYXIgY29tcG9uZW50KS5cblx0XHRcdC8vIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbmVlZCB0byBoYXZlIGEgbG93ZXJjYXNlIGlucHV0IHByb3AgZm9yIHRoZSByZWZlcmVuY2UuXG5cdFx0XHRjb25zdCByZXBsYWNlbWVudDogSFRNTEVsZW1lbnQgPSBib2R5LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCk7XG5cblx0XHRcdC8vIEliZW46IElmIHRoZSBpdGVtIGluY2x1ZGVkIGRhdGEsIHdlIHNldCB0aGVzZSBhdHRyaWJ1dGVzXG5cdFx0XHRpZiAoaXRlbS5kYXRhKSB7XG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKGl0ZW0uZGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWJlbjogQ29weSB0aGUgaW5uZXJIdG1sIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byB0aGUgbmV3IGVsZW1lbnQgaWYgbmVlZGVkLlxuICAgICAgaWYgKGluY2x1ZGVJbm5lckh0bWwpIHtcblx0XHRcdHJlcGxhY2VtZW50LmlubmVySFRNTCA9IHRhcmdldC5pbm5lckhUTUw7XG5cdFx0fVxuXG5cdFx0XHQvLyBJYmVuOiBSZXBsYWNlIHRoZSB0YXJnZXQgd2l0aCB0aGUgbmV3IGVsZW1lbnQgd2l0aGluIHRoZSBEb2N1bWVudC5cblx0XHRcdHRhcmdldC5yZXBsYWNlV2l0aChyZXBsYWNlbWVudCk7XG5cdFx0fSk7XG5cblx0XHQvLyBJYmVuOiBzYW5pdGl6ZSB0aGUgZG9jdW1lbnQgYW5kIG1hcmsgaXQgYXMgdHJ1c3RlZCBIVE1MIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlIHRlbXBsYXRlLlxuXHRcdHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChib2R5LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwpO1xuXHR9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * A pipe to pass a transformer function to. By using this setup, we can use functions without causing rerender issues\n */\nexport class TransformPipe {\n    /**\n     * Transforms a value based on a provided transform function\n     *\n     * @param value - The provided value we wish to transform\n     * @param transformer - A provided transform function\n     */\n    transform(value, transformer) {\n        // Iben: If no transformer is passed, we return the original value\n        if (!transformer) {\n            return value;\n        }\n        // Iben: Transform the value and return\n        return transformer(value);\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: TransformPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\n    static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.2.1\", ngImport: i0, type: TransformPipe, isStandalone: true, name: \"transform\" });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: TransformPipe, decorators: [{\n            type: Pipe,\n            args: [{\n                    name: 'transform',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9waXBlcy90cmFuc2Zvcm0vdHJhbnNmb3JtLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBRXBEOztHQUVHO0FBS0gsTUFBTSxPQUFPLGFBQWE7SUFDekI7Ozs7O09BS0c7SUFDSSxTQUFTLENBQXdCLEtBQVUsRUFBRSxXQUFxQjtRQUN4RSxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO3VHQWZXLGFBQWE7cUdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDTCxJQUFJLEVBQUUsV0FBVztvQkFDakIsVUFBVSxFQUFFLElBQUk7aUJBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgcGlwZSB0byBwYXNzIGEgdHJhbnNmb3JtZXIgZnVuY3Rpb24gdG8uIEJ5IHVzaW5nIHRoaXMgc2V0dXAsIHdlIGNhbiB1c2UgZnVuY3Rpb25zIHdpdGhvdXQgY2F1c2luZyByZXJlbmRlciBpc3N1ZXNcbiAqL1xuQFBpcGUoe1xuXHRuYW1lOiAndHJhbnNmb3JtJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXHQvKipcblx0ICogVHJhbnNmb3JtcyBhIHZhbHVlIGJhc2VkIG9uIGEgcHJvdmlkZWQgdHJhbnNmb3JtIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBwcm92aWRlZCB2YWx1ZSB3ZSB3aXNoIHRvIHRyYW5zZm9ybVxuXHQgKiBAcGFyYW0gdHJhbnNmb3JtZXIgLSBBIHByb3ZpZGVkIHRyYW5zZm9ybSBmdW5jdGlvblxuXHQgKi9cblx0cHVibGljIHRyYW5zZm9ybTxUcmFuc2Zvcm1lclR5cGUgPSBhbnk+KHZhbHVlOiBhbnksIHRyYW5zZm9ybWVyOiBGdW5jdGlvbik6IFRyYW5zZm9ybWVyVHlwZSB7XG5cdFx0Ly8gSWJlbjogSWYgbm8gdHJhbnNmb3JtZXIgaXMgcGFzc2VkLCB3ZSByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlXG5cdFx0aWYgKCF0cmFuc2Zvcm1lcikge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFRyYW5zZm9ybSB0aGUgdmFsdWUgYW5kIHJldHVyblxuXHRcdHJldHVybiB0cmFuc2Zvcm1lcih2YWx1ZSk7XG5cdH1cbn1cbiJdfQ==","import { BtwPipe } from './btw/btw.pipe';\nimport { HasObserversPipe } from './has-observers/has-observers.pipe';\nimport { IbanPipe } from './iban/iban.pipe';\nimport { NgxReplaceElementsPipe } from './replace-elements/replace-elements.pipe';\nimport { TransformPipe } from './transform/transform.pipe';\nexport const Pipes = [BtwPipe, HasObserversPipe, IbanPipe, TransformPipe, NgxReplaceElementsPipe];\nexport { BtwPipe } from './btw/btw.pipe';\nexport { HasObserversPipe } from './has-observers/has-observers.pipe';\nexport { IbanPipe } from './iban/iban.pipe';\nexport { TransformPipe } from './transform/transform.pipe';\nexport { NgxReplaceElementsPipe } from './replace-elements/replace-elements.pipe';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9waXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBRWxHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnR3UGlwZSB9IGZyb20gJy4vYnR3L2J0dy5waXBlJztcbmltcG9ydCB7IEhhc09ic2VydmVyc1BpcGUgfSBmcm9tICcuL2hhcy1vYnNlcnZlcnMvaGFzLW9ic2VydmVycy5waXBlJztcbmltcG9ydCB7IEliYW5QaXBlIH0gZnJvbSAnLi9pYmFuL2liYW4ucGlwZSc7XG5pbXBvcnQgeyBOZ3hSZXBsYWNlRWxlbWVudHNQaXBlIH0gZnJvbSAnLi9yZXBsYWNlLWVsZW1lbnRzL3JlcGxhY2UtZWxlbWVudHMucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2Zvcm1QaXBlIH0gZnJvbSAnLi90cmFuc2Zvcm0vdHJhbnNmb3JtLnBpcGUnO1xuXG5leHBvcnQgY29uc3QgUGlwZXMgPSBbQnR3UGlwZSwgSGFzT2JzZXJ2ZXJzUGlwZSwgSWJhblBpcGUsIFRyYW5zZm9ybVBpcGUsIE5neFJlcGxhY2VFbGVtZW50c1BpcGVdO1xuXG5leHBvcnQgeyBCdHdQaXBlIH0gZnJvbSAnLi9idHcvYnR3LnBpcGUnO1xuZXhwb3J0IHsgSGFzT2JzZXJ2ZXJzUGlwZSB9IGZyb20gJy4vaGFzLW9ic2VydmVycy9oYXMtb2JzZXJ2ZXJzLnBpcGUnO1xuZXhwb3J0IHsgSWJhblBpcGUgfSBmcm9tICcuL2liYW4vaWJhbi5waXBlJztcbmV4cG9ydCB7IFRyYW5zZm9ybVBpcGUgfSBmcm9tICcuL3RyYW5zZm9ybS90cmFuc2Zvcm0ucGlwZSc7XG5leHBvcnQgeyBOZ3hSZXBsYWNlRWxlbWVudHNQaXBlIH0gZnJvbSAnLi9yZXBsYWNlLWVsZW1lbnRzL3JlcGxhY2UtZWxlbWVudHMucGlwZSc7XG4iXX0=","import { Directive, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subject, filter, take, takeUntil, tap } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class NgxQueryParamFormSyncComponent {\n    route = inject(ActivatedRoute);\n    router = inject(Router);\n    destroyed$ = new Subject();\n    /**\n     * The form in which we will save the queryParam data\n     */\n    form;\n    /**\n     * The query params we wish to form\n     */\n    queryParams$ = this.route\n        .queryParams;\n    ngOnInit() {\n        //Iben: Warn the user if one of the two methods isn't provided\n        if ((!this.scrambleParams && this.unscrambleParams) ||\n            (this.scrambleParams && !this.unscrambleParams)) {\n            console.error(`NgxUtils: NgxQueryParamFormSyncComponent detected the use of the parameter scrambling but is missing an implementation for the ${this.scrambleParams ? 'unscrambleParams' : 'scrambleParams'} method. Please provide this method in order for this flow to work correctly.`);\n        }\n        // Iben: Setup the form for the data\n        this.form = this.initForm();\n        // Iben: Listen to the form changes\n        this.form.valueChanges\n            .pipe(tap((data) => {\n            // Iben: Update the route params\n            this.setDataInRoute(data);\n            // Iben: Handle the route data changes\n            if (this.handleDataChanges) {\n                this.handleDataChanges(data);\n            }\n        }), takeUntil(this.destroyed$))\n            .subscribe();\n        // Iben: Listen to the initial query param update so we can set the data in the form if we navigate to a link with the params\n        this.queryParams$\n            .pipe(take(1), filter(Boolean), tap((data) => {\n            // Iben: Convert the route data properties to the actual data\n            let value = Object.keys(data || {}).reduce((previous, current) => {\n                return {\n                    ...previous,\n                    [current]: data[current] ? JSON.parse(data[current]) : undefined,\n                };\n            }, {});\n            // Iben: In case the unscrambleParams method is provided, we unscramble the data\n            if (this.unscrambleParams) {\n                value = this.unscrambleParams(value);\n            }\n            //Iben: If the entire object is empty, we early exit and do not set the form\n            if (Object.keys(value).length === 0) {\n                return;\n            }\n            // Iben: Set the current form value\n            this.form.setValue(value);\n        }), takeUntil(this.destroyed$))\n            .subscribe();\n    }\n    ngOnDestroy() {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n        this.clearData();\n    }\n    /**\n     * Clears the data in the form\n     */\n    clearData() {\n        this.form.reset();\n    }\n    /**\n     * Sets the provided data in the route, so the filtered view can be shared by url\n     *\n     * @param  data - The provided data\n     */\n    setDataInRoute(data) {\n        // Iben: If no data was provided, we simply unset the current params\n        if (Object.keys(data || {}).length === 0) {\n            this.router.navigate([], {\n                relativeTo: this.route,\n                queryParams: {},\n            });\n            return;\n        }\n        // Iben: In case a scrambleParams function was provided, we scramble the params first\n        const parsedData = this.scrambleParams ? this.scrambleParams(data) : data;\n        // Iben: Stringify all properties of the data\n        const queryParams = Object.keys(parsedData || {}).reduce((previous, current) => {\n            return {\n                ...previous,\n                [current]: JSON.stringify(parsedData[current]),\n            };\n        }, {});\n        // Iben: Add the queryParams to the route\n        this.router.navigate([], {\n            relativeTo: this.route,\n            queryParamsHandling: 'merge',\n            queryParams,\n        });\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxQueryParamFormSyncComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.1\", type: NgxQueryParamFormSyncComponent, isStandalone: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxQueryParamFormSyncComponent, decorators: [{\n            type: Directive\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW0tZm9ybS1zeW5jLmNvbXBvbmVudC5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2Fic3RyYWN0cy9xdWVyeS1wYXJhbS1mb3JtLXN5bmMvcXVlcnktcGFyYW0tZm9ybS1zeW5jLmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPekUsTUFBTSxPQUFnQiw4QkFBOEI7SUFNaEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhCLFVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUU3RDs7T0FFRztJQUNJLElBQUksQ0FBVztJQUV0Qjs7T0FFRztJQUNPLFlBQVksR0FBNEQsSUFBSSxDQUFDLEtBQUs7U0FDMUYsV0FBc0UsQ0FBQztJQUVsRSxRQUFRO1FBQ2QsOERBQThEO1FBQzlELElBQ0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQy9DLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUM5QyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEtBQUssQ0FDWixrSUFDQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMs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LENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUUxRSw2Q0FBNkM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzlFLE9BQU87Z0JBQ04sR0FBRyxRQUFRO2dCQUNYLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUMsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3RCLG1CQUFtQixFQUFFLE9BQU87WUFDNUIsV0FBVztTQUNYLENBQUMsQ0FBQztJQUNKLENBQUM7dUdBeElvQiw4QkFBOEI7MkZBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEbkQsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIFN0cmluZ2lmaWVkUXVlcnlQYXJhbXNUeXBlPFF1ZXJ5UGFyYW1zVHlwZT4gPSB7XG5cdFtrZXkgaW4ga2V5b2YgUXVlcnlQYXJhbXNUeXBlXTogc3RyaW5nO1xufTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4UXVlcnlQYXJhbUZvcm1TeW5jQ29tcG9uZW50PFxuXHRcdFF1ZXJ5UGFyYW1zVHlwZSxcblx0XHRGb3JtVHlwZSBleHRlbmRzIEFic3RyYWN0Q29udHJvbCxcblx0PlxuXHRpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG5cdHByb3RlY3RlZCByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG5cdHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBmb3JtIGluIHdoaWNoIHdlIHdpbGwgc2F2ZSB0aGUgcXVlcnlQYXJhbSBkYXRhXG5cdCAqL1xuXHRwdWJsaWMgZm9ybTogRm9ybVR5cGU7XG5cblx0LyoqXG5cdCAqIFRoZSBxdWVyeSBwYXJhbXMgd2Ugd2lzaCB0byBmb3JtXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcXVlcnlQYXJhbXMkOiBPYnNlcnZhYmxlPFN0cmluZ2lmaWVkUXVlcnlQYXJhbXNUeXBlPFF1ZXJ5UGFyYW1zVHlwZT4+ID0gdGhpcy5yb3V0ZVxuXHRcdC5xdWVyeVBhcmFtcyBhcyBPYnNlcnZhYmxlPFN0cmluZ2lmaWVkUXVlcnlQYXJhbXNUeXBlPFF1ZXJ5UGFyYW1zVHlwZT4+O1xuXG5cdHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHQvL0liZW46IFdhcm4gdGhlIHVzZXIgaWYgb25lIG9mIHRoZSB0d28gbWV0aG9kcyBpc24ndCBwcm92aWRlZFxuXHRcdGlmIChcblx0XHRcdCghdGhpcy5zY3JhbWJsZVBhcmFtcyAmJiB0aGlzLnVuc2NyYW1ibGVQYXJhbXMpIHx8XG5cdFx0XHQodGhpcy5zY3JhbWJsZVBhcmFtcyAmJiAhdGhpcy51bnNjcmFtYmxlUGFyYW1zKVxuXHRcdCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YE5neFV0aWxzOiBOZ3hRdWVyeVBhcmFtRm9ybVN5bmNDb21wb25lbnQgZGV0ZWN0ZWQgdGhlIHVzZSBvZiB0aGUgcGFyYW1ldGVyIHNjcmFtYmxpbmcgYnV0IGlzIG1pc3NpbmcgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoZSAke1xuXHRcdFx0XHRcdHRoaXMuc2NyYW1ibGVQYXJhbXMgPyAndW5zY3JhbWJsZVBhcmFtcycgOiAnc2NyYW1ibGVQYXJhbXMnXG5cdFx0XHRcdH0gbWV0aG9kLiBQbGVhc2UgcHJvdmlkZSB0aGlzIG1ldGhvZCBpbiBvcmRlciBmb3IgdGhpcyBmbG93IHRvIHdvcmsgY29ycmVjdGx5LmBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogU2V0dXAgdGhlIGZvcm0gZm9yIHRoZSBkYXRhXG5cdFx0dGhpcy5mb3JtID0gdGhpcy5pbml0Rm9ybSgpO1xuXG5cdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBmb3JtIGNoYW5nZXNcblx0XHR0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0dGFwKChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSWJlbjogVXBkYXRlIHRoZSByb3V0ZSBwYXJhbXNcblx0XHRcdFx0XHR0aGlzLnNldERhdGFJblJvdXRlKGRhdGEpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogSGFuZGxlIHRoZSByb3V0ZSBkYXRhIGNoYW5nZXNcblx0XHRcdFx0XHRpZiAodGhpcy5oYW5kbGVEYXRhQ2hhbmdlcykge1xuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVEYXRhQ2hhbmdlcyhkYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBpbml0aWFsIHF1ZXJ5IHBhcmFtIHVwZGF0ZSBzbyB3ZSBjYW4gc2V0IHRoZSBkYXRhIGluIHRoZSBmb3JtIGlmIHdlIG5hdmlnYXRlIHRvIGEgbGluayB3aXRoIHRoZSBwYXJhbXNcblx0XHR0aGlzLnF1ZXJ5UGFyYW1zJFxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdGZpbHRlcihCb29sZWFuKSxcblx0XHRcdFx0dGFwKChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSWJlbjogQ29udmVydCB0aGUgcm91dGUgZGF0YSBwcm9wZXJ0aWVzIHRvIHRoZSBhY3R1YWwgZGF0YVxuXHRcdFx0XHRcdGxldCB2YWx1ZTogUXVlcnlQYXJhbXNUeXBlID0gT2JqZWN0LmtleXMoZGF0YSB8fCB7fSkucmVkdWNlKFxuXHRcdFx0XHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Li4ucHJldmlvdXMsXG5cdFx0XHRcdFx0XHRcdFx0W2N1cnJlbnRdOiBkYXRhW2N1cnJlbnRdID8gSlNPTi5wYXJzZShkYXRhW2N1cnJlbnRdKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7fVxuXHRcdFx0XHRcdCkgYXMgUXVlcnlQYXJhbXNUeXBlO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogSW4gY2FzZSB0aGUgdW5zY3JhbWJsZVBhcmFtcyBtZXRob2QgaXMgcHJvdmlkZWQsIHdlIHVuc2NyYW1ibGUgdGhlIGRhdGFcblx0XHRcdFx0XHRpZiAodGhpcy51bnNjcmFtYmxlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudW5zY3JhbWJsZVBhcmFtcyh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly9JYmVuOiBJZiB0aGUgZW50aXJlIG9iamVjdCBpcyBlbXB0eSwgd2UgZWFybHkgZXhpdCBhbmQgZG8gbm90IHNldCB0aGUgZm9ybVxuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWJlbjogU2V0IHRoZSBjdXJyZW50IGZvcm0gdmFsdWVcblx0XHRcdFx0XHR0aGlzLmZvcm0uc2V0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuXHRcdHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuXG5cdFx0dGhpcy5jbGVhckRhdGEoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIGRhdGEgaW4gdGhlIGZvcm1cblx0ICovXG5cdHB1YmxpYyBjbGVhckRhdGEoKTogdm9pZCB7XG5cdFx0dGhpcy5mb3JtLnJlc2V0KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgcHJvdmlkZWQgZGF0YSBpbiB0aGUgcm91dGUsIHNvIHRoZSBmaWx0ZXJlZCB2aWV3IGNhbiBiZSBzaGFyZWQgYnkgdXJsXG5cdCAqXG5cdCAqIEBwYXJhbSAgZGF0YSAtIFRoZSBwcm92aWRlZCBkYXRhXG5cdCAqL1xuXHRwcml2YXRlIHNldERhdGFJblJvdXRlKGRhdGE6IFF1ZXJ5UGFyYW1zVHlwZSk6IHZvaWQge1xuXHRcdC8vIEliZW46IElmIG5vIGRhdGEgd2FzIHByb3ZpZGVkLCB3ZSBzaW1wbHkgdW5zZXQgdGhlIGN1cnJlbnQgcGFyYW1zXG5cdFx0aWYgKE9iamVjdC5rZXlzKGRhdGEgfHwge30pLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcblx0XHRcdFx0cmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJbiBjYXNlIGEgc2NyYW1ibGVQYXJhbXMgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3ZSBzY3JhbWJsZSB0aGUgcGFyYW1zIGZpcnN0XG5cdFx0Y29uc3QgcGFyc2VkRGF0YSA9IHRoaXMuc2NyYW1ibGVQYXJhbXMgPyB0aGlzLnNjcmFtYmxlUGFyYW1zKGRhdGEpIDogZGF0YTtcblxuXHRcdC8vIEliZW46IFN0cmluZ2lmeSBhbGwgcHJvcGVydGllcyBvZiB0aGUgZGF0YVxuXHRcdGNvbnN0IHF1ZXJ5UGFyYW1zID0gT2JqZWN0LmtleXMocGFyc2VkRGF0YSB8fCB7fSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Li4ucHJldmlvdXMsXG5cdFx0XHRcdFtjdXJyZW50XTogSlNPTi5zdHJpbmdpZnkocGFyc2VkRGF0YVtjdXJyZW50XSksXG5cdFx0XHR9O1xuXHRcdH0sIHt9KTtcblxuXHRcdC8vIEliZW46IEFkZCB0aGUgcXVlcnlQYXJhbXMgdG8gdGhlIHJvdXRlXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcblx0XHRcdHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG5cdFx0XHRxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuXHRcdFx0cXVlcnlQYXJhbXMsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBtZXRob2QgdGhhdCB0aGF0IHdpbGwgcHJvdmlkZSBhIGZvcm0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGN1cnJlbnQgZGF0YVxuXHQgKi9cblx0cHJvdGVjdGVkIGFic3RyYWN0IGluaXRGb3JtKCk6IEZvcm1UeXBlO1xuXG5cdC8qKlxuXHQgKiBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCB3aWxsIGhhbmRsZSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZGF0YSBoYXZlIGJlZW4gdXBkYXRlZC4gRG8gTk9UIHN1YnNjcmliZSB0byBhbiBPYnNlcnZhYmxlIGluIHRoaXMgbWV0aG9kLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgaW4gY2FzZSB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgdG8gYSBnbG9iYWwgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGZvcm1cblx0ICovXG5cdHByb3RlY3RlZCBhYnN0cmFjdCBoYW5kbGVEYXRhQ2hhbmdlcz8oZGF0YTogUXVlcnlQYXJhbXNUeXBlKTogdm9pZDtcblxuXHQvKipcblx0ICogQW4gb3B0aW9uYWwgbWV0aG9kIHRvIHNjcmFtYmxlIHRoZSBwYXJhbWV0ZXJzIGlmIG5lZWRlZCwgc28gbm8gZGF0YSBnZXRzIGFkZGVkIGludG8gdGhlIHJvdXRlIHRoYXQgc2hvdWxkbid0IGJlIHNoYXJlZFxuXHQgKlxuXHQgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHByb3ZpZGVkIHBhcmFtcyB3ZSB3aXNoIHRvIHNldCBpbiB0aGUgcm91dGVcblx0ICovXG5cdHByb3RlY3RlZCBzY3JhbWJsZVBhcmFtcz8ocGFyYW1zOiBRdWVyeVBhcmFtc1R5cGUpOiBRdWVyeVBhcmFtc1R5cGU7XG5cdC8qKlxuXHQgKiBBbiBvcHRpb25hbCBtZXRob2QgdG8gdW5zY3JhbWJsZSB0aGUgcGFyYW1ldGVycyBpZiBuZWVkZWQsIHNvIG5vIGRhdGEgZ2V0cyBhZGRlZCBpbnRvIHRoZSByb3V0ZSB0aGF0IHNob3VsZG4ndCBiZSBzaGFyZWRcblx0ICpcblx0ICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwcm92aWRlZCBwYXJhbXMgd2Ugd2lzaCB0byBwYXRjaCBpbiB0aGUgZm9ybVxuXHQgKi9cblx0cHJvdGVjdGVkIHVuc2NyYW1ibGVQYXJhbXM/KHBhcmFtczogUXVlcnlQYXJhbXNUeXBlKTogUXVlcnlQYXJhbXNUeXBlO1xufVxuIl19","import { NgxReplaceElementsConfigurationToken } from '../../tokens';\n/**\n * Provides the configuration for the NgxReplaceElements directive\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxReplaceElementsConfiguration = (configuration) => {\n    return {\n        provide: NgxReplaceElementsConfigurationToken,\n        useValue: configuration,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS1lbGVtZW50cy5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL3Byb3ZpZGVycy9yZXBsYWNlLWVsZW1lbnRzL3JlcGxhY2UtZWxlbWVudHMucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3BFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FBRyxDQUNyRCxhQUE4QyxFQUNuQyxFQUFFO0lBQ2IsT0FBTztRQUNOLE9BQU8sRUFBRSxvQ0FBb0M7UUFDN0MsUUFBUSxFQUFFLGFBQWE7S0FDdkIsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFJlcGxhY2VFbGVtZW50c0NvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBOZ3hSZXBsYWNlRWxlbWVudHNDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgTmd4UmVwbGFjZUVsZW1lbnRzIGRpcmVjdGl2ZVxuICpcbiAqIEBwYXJhbSBjb25maWd1cmF0aW9uIC0gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVOZ3hSZXBsYWNlRWxlbWVudHNDb25maWd1cmF0aW9uID0gKFxuXHRjb25maWd1cmF0aW9uOiBOZ3hSZXBsYWNlRWxlbWVudHNDb25maWd1cmF0aW9uXG4pOiBQcm92aWRlciA9PiB7XG5cdHJldHVybiB7XG5cdFx0cHJvdmlkZTogTmd4UmVwbGFjZUVsZW1lbnRzQ29uZmlndXJhdGlvblRva2VuLFxuXHRcdHVzZVZhbHVlOiBjb25maWd1cmF0aW9uLFxuXHR9O1xufTtcbiJdfQ==","/**\n * Method checks if given value has changed\n * @param {SimpleChange} value: value to check\n * @returns {boolean} whether or not if the given input has changed\n */\nexport const simpleChangeHasChanged = (value) => {\n    return value && JSON.stringify(value.previousValue) !== JSON.stringify(value.currentValue);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWNoYW5nZXMudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL3V0aWxzL3NpbXBsZS1jaGFuZ2VzL3NpbXBsZS1jaGFuZ2VzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBbUIsRUFBVyxFQUFFO0lBQ3RFLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpbXBsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIE1ldGhvZCBjaGVja3MgaWYgZ2l2ZW4gdmFsdWUgaGFzIGNoYW5nZWRcbiAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlfSB2YWx1ZTogdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCBpZiB0aGUgZ2l2ZW4gaW5wdXQgaGFzIGNoYW5nZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNpbXBsZUNoYW5nZUhhc0NoYW5nZWQgPSAodmFsdWU6IFNpbXBsZUNoYW5nZSk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gdmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkodmFsdWUucHJldmlvdXNWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlLmN1cnJlbnRWYWx1ZSk7XG59O1xuIl19","/**\n * Returns a mock version of the `NgxBroadcastChannelService`\n *\n * @param testFunction - The test function we wish to use\n */\nexport const NgxBroadcastChannelServiceMock = (testFunction) => ({\n    initChannel: testFunction,\n    closeChannel: testFunction,\n    postMessage: testFunction,\n    selectChannelMessages: testFunction,\n    selectChannelMessageErrors: testFunction,\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0LWNoYW5uZWwuc2VydmljZS5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvbW9ja3MvYnJvYWRjYXN0LWNoYW5uZWwuc2VydmljZS5tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFlBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsV0FBVyxFQUFFLFlBQVk7SUFDekIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsV0FBVyxFQUFFLFlBQVk7SUFDekIscUJBQXFCLEVBQUUsWUFBWTtJQUNuQywwQkFBMEIsRUFBRSxZQUFZO0NBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJucyBhIG1vY2sgdmVyc2lvbiBvZiB0aGUgYE5neEJyb2FkY2FzdENoYW5uZWxTZXJ2aWNlYFxuICpcbiAqIEBwYXJhbSB0ZXN0RnVuY3Rpb24gLSBUaGUgdGVzdCBmdW5jdGlvbiB3ZSB3aXNoIHRvIHVzZVxuICovXG5leHBvcnQgY29uc3QgTmd4QnJvYWRjYXN0Q2hhbm5lbFNlcnZpY2VNb2NrID0gKHRlc3RGdW5jdGlvbjogRnVuY3Rpb24pID0+ICh7XG5cdGluaXRDaGFubmVsOiB0ZXN0RnVuY3Rpb24sXG5cdGNsb3NlQ2hhbm5lbDogdGVzdEZ1bmN0aW9uLFxuXHRwb3N0TWVzc2FnZTogdGVzdEZ1bmN0aW9uLFxuXHRzZWxlY3RDaGFubmVsTWVzc2FnZXM6IHRlc3RGdW5jdGlvbixcblx0c2VsZWN0Q2hhbm5lbE1lc3NhZ2VFcnJvcnM6IHRlc3RGdW5jdGlvbixcbn0pO1xuIl19","import { Subject } from 'rxjs';\n/**\n * Returns a mock version of the `NgxStorageServiceMock`.\n *\n * @param testFunction - The test function we wish to use.\n */\nexport const NgxStorageServiceMock = (testFunction) => ({\n    storageEvents$: new Subject(),\n    localStorage: {\n        getItem: testFunction,\n        getItemObservable: testFunction,\n        removeItem: testFunction,\n        setItem: testFunction,\n        clear: testFunction,\n    },\n    sessionStorage: {\n        getItem: testFunction,\n        getItemObservable: testFunction,\n        removeItem: testFunction,\n        setItem: testFunction,\n        clear: testFunction,\n    },\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLm1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9tb2Nrcy9zdG9yYWdlLnNlcnZpY2UubW9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFlBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakUsY0FBYyxFQUFFLElBQUksT0FBTyxFQUFFO0lBQzdCLFlBQVksRUFBRTtRQUNiLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLGlCQUFpQixFQUFFLFlBQVk7UUFDL0IsVUFBVSxFQUFFLFlBQVk7UUFDeEIsT0FBTyxFQUFFLFlBQVk7UUFDckIsS0FBSyxFQUFFLFlBQVk7S0FDbkI7SUFDRCxjQUFjLEVBQUU7UUFDZixPQUFPLEVBQUUsWUFBWTtRQUNyQixpQkFBaUIsRUFBRSxZQUFZO1FBQy9CLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLEtBQUssRUFBRSxZQUFZO0tBQ25CO0NBQ0QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFJldHVybnMgYSBtb2NrIHZlcnNpb24gb2YgdGhlIGBOZ3hTdG9yYWdlU2VydmljZU1vY2tgLlxuICpcbiAqIEBwYXJhbSB0ZXN0RnVuY3Rpb24gLSBUaGUgdGVzdCBmdW5jdGlvbiB3ZSB3aXNoIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE5neFN0b3JhZ2VTZXJ2aWNlTW9jayA9ICh0ZXN0RnVuY3Rpb246IEZ1bmN0aW9uKSA9PiAoe1xuXHRzdG9yYWdlRXZlbnRzJDogbmV3IFN1YmplY3QoKSxcblx0bG9jYWxTdG9yYWdlOiB7XG5cdFx0Z2V0SXRlbTogdGVzdEZ1bmN0aW9uLFxuXHRcdGdldEl0ZW1PYnNlcnZhYmxlOiB0ZXN0RnVuY3Rpb24sXG5cdFx0cmVtb3ZlSXRlbTogdGVzdEZ1bmN0aW9uLFxuXHRcdHNldEl0ZW06IHRlc3RGdW5jdGlvbixcblx0XHRjbGVhcjogdGVzdEZ1bmN0aW9uLFxuXHR9LFxuXHRzZXNzaW9uU3RvcmFnZToge1xuXHRcdGdldEl0ZW06IHRlc3RGdW5jdGlvbixcblx0XHRnZXRJdGVtT2JzZXJ2YWJsZTogdGVzdEZ1bmN0aW9uLFxuXHRcdHJlbW92ZUl0ZW06IHRlc3RGdW5jdGlvbixcblx0XHRzZXRJdGVtOiB0ZXN0RnVuY3Rpb24sXG5cdFx0Y2xlYXI6IHRlc3RGdW5jdGlvbixcblx0fSxcbn0pO1xuIl19","/*\n * Public API Surface of utils\n */\nexport * from './lib/directives';\nexport * from './lib/services';\nexport * from './lib/pipes';\nexport * from './lib/types';\nexport * from './lib/abstracts';\nexport * from './lib/providers';\nexport * from './lib/tokens';\nexport * from './lib/utils';\nexport * from './lib/mocks';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdXRpbHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Fic3RyYWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vY2tzJztcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWJlbnZhbmRldmVpcmUtbmd4LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9pYmVudmFuZGV2ZWlyZS1uZ3gtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}