{"version":3,"file":"ibenvandeveire-ngx-inform.mjs","sources":["../tmp-esm2022/lib/tokens/tooltip/tooltip-configuration.token.js","../tmp-esm2022/lib/tokens/modal/modal-configuration.token.js","../tmp-esm2022/lib/tokens/tour/tour-step.token.js","../tmp-esm2022/lib/tokens/toast/toast-configuration.token.js","../tmp-esm2022/lib/services/tooltip/tooltip.service.js","../tmp-esm2022/lib/services/modal/modal.service.js","../tmp-esm2022/lib/utils/element-visible-in-viewport/element-visible-in-viewport.util.js","../tmp-esm2022/lib/services/tour/tour.service.js","../tmp-esm2022/lib/services/toast/toast.service.js","../tmp-esm2022/lib/directives/tooltip/tooltip.directive.js","../tmp-esm2022/lib/directives/tour-item/tour-item.directive.js","../tmp-esm2022/lib/directives/tour-show-when/tour-show-when.directive.js","../tmp-esm2022/lib/providers/tooltip/tooltip-configuration.provider.js","../tmp-esm2022/lib/providers/modal/modal-configuration.provider.js","../tmp-esm2022/lib/providers/tour/tour-configuration.provider.js","../tmp-esm2022/lib/providers/toast/toast-configuration.provider.js","../tmp-esm2022/lib/abstracts/tooltip/tooltip.abstract.component.js","../tmp-esm2022/lib/abstracts/modal/modal.abstract.component.js","../tmp-esm2022/lib/abstracts/tour-step/tour-step.component.js","../tmp-esm2022/lib/abstracts/toast/toast.component.js","../tmp-esm2022/lib/abstracts/toast/toast-bundler.component.js","../tmp-esm2022/lib/operators/tour/use-mock-data-during-tour/use-mock-data-during-tour.operator.js","../tmp-esm2022/lib/operators/tour/start-tour/start-tour.operator.js","../tmp-esm2022/lib/operators/toast/on-error/toast-on-error.operator.js","../tmp-esm2022/lib/operators/toast/on-success/toast-on-success.operator.js","../tmp-esm2022/lib/operators/modal/open-modal/open-modal.operator.js","../tmp-esm2022/lib/components/toast-container/toast-container.component.js","../tmp-esm2022/lib/mocks/tour-step.component.mock.js","../tmp-esm2022/lib/mocks/overlay.mock.js","../tmp-esm2022/lib/mocks/tour-holder.component.mock.js","../tmp-esm2022/lib/mocks/public/modal-service.mock.js","../tmp-esm2022/lib/mocks/public/toast-service.mock.js","../tmp-esm2022/lib/mocks/public/tooltip-service.mock.js","../tmp-esm2022/lib/mocks/public/tour-service.mock.js","../tmp-esm2022/ibenvandeveire-ngx-inform.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n/**\n * A token to provide the necessary configuration to the NgxTooltipDirective. This is exported\n * due to testing frameworks (like Storybook) not being able to resolve the InjectionToken in the\n * `provideNgxTooltipConfiguration`.\n */\nexport const NgxTooltipConfigurationToken = new InjectionToken('NgxTooltipConfiguration');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1jb25maWd1cmF0aW9uLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL3Rva2Vucy90b29sdGlwL3Rvb2x0aXAtY29uZmlndXJhdGlvbi50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FDN0QseUJBQXlCLENBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hUb29sdGlwQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIHRva2VuIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIHRvIHRoZSBOZ3hUb29sdGlwRGlyZWN0aXZlLiBUaGlzIGlzIGV4cG9ydGVkXG4gKiBkdWUgdG8gdGVzdGluZyBmcmFtZXdvcmtzIChsaWtlIFN0b3J5Ym9vaykgbm90IGJlaW5nIGFibGUgdG8gcmVzb2x2ZSB0aGUgSW5qZWN0aW9uVG9rZW4gaW4gdGhlXG4gKiBgcHJvdmlkZU5neFRvb2x0aXBDb25maWd1cmF0aW9uYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE5neFRvb2x0aXBDb25maWd1cmF0aW9uVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd4VG9vbHRpcENvbmZpZ3VyYXRpb24+KFxuXHQnTmd4VG9vbHRpcENvbmZpZ3VyYXRpb24nXG4pO1xuIl19","import { InjectionToken } from '@angular/core';\n/**\n * A token to provide the optional configuration to the NgxModalService\n */\n// This is exported due to testing frameworks (like Storybook) not being able to resolve the InjectionToken in the `provideNgxTooltipConfiguration`.\nexport const NgxModalConfigurationToken = new InjectionToken('NgxModalConfiguration');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlndXJhdGlvbi50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi90b2tlbnMvbW9kYWwvbW9kYWwtY29uZmlndXJhdGlvbi50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DOztHQUVHO0FBQ0gsb0pBQW9KO0FBQ3BKLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUMzRCx1QkFBdUIsQ0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neE1vZGFsQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIHRva2VuIHRvIHByb3ZpZGUgdGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gdGhlIE5neE1vZGFsU2VydmljZVxuICovXG4vLyBUaGlzIGlzIGV4cG9ydGVkIGR1ZSB0byB0ZXN0aW5nIGZyYW1ld29ya3MgKGxpa2UgU3Rvcnlib29rKSBub3QgYmVpbmcgYWJsZSB0byByZXNvbHZlIHRoZSBJbmplY3Rpb25Ub2tlbiBpbiB0aGUgYHByb3ZpZGVOZ3hUb29sdGlwQ29uZmlndXJhdGlvbmAuXG5leHBvcnQgY29uc3QgTmd4TW9kYWxDb25maWd1cmF0aW9uVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd4TW9kYWxDb25maWd1cmF0aW9uPihcblx0J05neE1vZGFsQ29uZmlndXJhdGlvbidcbik7XG4iXX0=","import { InjectionToken } from '@angular/core';\n/**\n * A token to provide the necessary configuration to the tour service\n */\nexport const NgxTourStepToken = new InjectionToken('NgxTourStepToken');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zdGVwLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL3Rva2Vucy90b3VyL3RvdXItc3RlcC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBSXJEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQTZCLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hUb3VyU3RlcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Fic3RyYWN0cyc7XG5cbi8qKlxuICogQSB0b2tlbiB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiB0byB0aGUgdG91ciBzZXJ2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBOZ3hUb3VyU3RlcFRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8Tmd4VG91clN0ZXBDb21wb25lbnQ+PignTmd4VG91clN0ZXBUb2tlbicpO1xuIl19","import { InjectionToken } from '@angular/core';\n/**\n * A token to provide the optional configuration to the NgxToastService\n */\n// This is exported due to testing frameworks (like Storybook) not being able to resolve the InjectionToken in the `provideNgxTooltipConfiguration`.\nexport const NgxToastConfigurationToken = new InjectionToken('NgxToastConfiguration');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29uZmlndXJhdGlvbi50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi90b2tlbnMvdG9hc3QvdG9hc3QtY29uZmlndXJhdGlvbi50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DOztHQUVHO0FBQ0gsb0pBQW9KO0FBQ3BKLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUMzRCx1QkFBdUIsQ0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFRvYXN0RGVmYXVsdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogQSB0b2tlbiB0byBwcm92aWRlIHRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIHRoZSBOZ3hUb2FzdFNlcnZpY2VcbiAqL1xuLy8gVGhpcyBpcyBleHBvcnRlZCBkdWUgdG8gdGVzdGluZyBmcmFtZXdvcmtzIChsaWtlIFN0b3J5Ym9vaykgbm90IGJlaW5nIGFibGUgdG8gcmVzb2x2ZSB0aGUgSW5qZWN0aW9uVG9rZW4gaW4gdGhlIGBwcm92aWRlTmd4VG9vbHRpcENvbmZpZ3VyYXRpb25gLlxuZXhwb3J0IGNvbnN0IE5neFRvYXN0Q29uZmlndXJhdGlvblRva2VuID0gbmV3IEluamVjdGlvblRva2VuPE5neFRvYXN0RGVmYXVsdENvbmZpZ3VyYXRpb24+KFxuXHQnTmd4VG9hc3RDb25maWd1cmF0aW9uJ1xuKTtcbiJdfQ==","import { Overlay, OverlayPositionBuilder, } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, pairwise, Subject, takeUntil, tap } from 'rxjs';\nimport { NgxTooltipConfigurationToken } from '../../tokens';\nimport * as i0 from \"@angular/core\";\nexport class NgxTooltipService {\n    configuration = inject(NgxTooltipConfigurationToken);\n    overlayService = inject(Overlay);\n    overlayPositionBuilder = inject(OverlayPositionBuilder);\n    // Iben: The id of the active tooltip\n    activeTooltip = undefined;\n    /**\n     * A subject to hold the tooltip events\n     */\n    tooltipEventsSubject = new BehaviorSubject(undefined);\n    /**\n     * A subject to hold the destroy event\n     */\n    onDestroySubject = new Subject();\n    /**\n     * The overlayRef used to attach the tooltip too\n     */\n    overlayRef;\n    /**\n     * The position record for the tooltip\n     */\n    positionRecord = {\n        below: { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n        above: { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n        left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n        right: { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' },\n    };\n    constructor() {\n        // Iben: Listen to the tooltip events and handle accordingly\n        this.tooltipEventsSubject\n            .pipe(pairwise(), tap(([previous, next]) => {\n            // Iben: When we enter an element, we show the tooltip\n            if (next.active && next.source === 'element') {\n                // Iben: Check if we have a previous element, and if so, if we have to remove it\n                if (previous &&\n                    this.overlayRef?.hasAttached() &&\n                    this.activeTooltip !== next.id) {\n                    this.removeToolTip();\n                }\n                // Iben: Add the new tooltip\n                const { component, text, position, elementRef, id } = next;\n                this.showToolTip({\n                    component: component,\n                    text: text,\n                    position: position,\n                    elementRef: elementRef,\n                    id: id,\n                });\n                return;\n            }\n            // Iben: We do a check on previous here so we can continue safely in the upcoming checks\n            if (!previous) {\n                return;\n            }\n            // Iben: If we're entering a new element, we early exit\n            if (previous.id !== next.id) {\n                return;\n            }\n            // Iben: If the sources are the same, we check if we need to remove the tooltip\n            // In this case we either leave the tooltip or leave the element\n            if (previous.source === next.source) {\n                if (!next.active) {\n                    this.removeToolTip();\n                    return;\n                }\n            }\n            // Iben: If both actives are false (element => tooltip => outside or tooltip => element => outside), we remove the tooltip\n            if (!next.active && !previous.active) {\n                this.removeToolTip();\n            }\n        }), takeUntil(this.onDestroySubject.asObservable()))\n            .subscribe();\n    }\n    /**\n     * Show a tooltip\n     *\n     * @param tooltip - The configuration of the tooltip\n     */\n    showToolTip(tooltip) {\n        // Iben: If no tooltip was provided or if we already have a tooltip attached, we early exit\n        if (!tooltip || this.overlayRef?.hasAttached()) {\n            return;\n        }\n        // Iben: Get the configuration of the tooltip\n        const { text, component, position, elementRef, id } = tooltip;\n        // Iben: Set the active tooltip\n        this.activeTooltip = id;\n        // Iben: Get the tooltip position. If no position was provided by the tooltip, we use the configured default, if none is configured we use 'above'\n        const tooltipPosition = position || this.configuration.defaultPosition || 'above';\n        // Iben: If the previous overlayRef still exists, we remove it\n        if (!this.overlayRef) {\n            this.overlayRef = this.overlayService.create({\n                // Iben: Set the scroll strategy to reposition so that whenever the user scrolls, the tooltip is still near the element\n                scrollStrategy: this.overlayService.scrollStrategies.reposition(),\n            });\n        }\n        // Iben: Create the position of the overlay\n        const positionStrategy = this.overlayPositionBuilder\n            .flexibleConnectedTo(elementRef)\n            .withPositions([this.positionRecord[tooltipPosition]]);\n        // Iben: Update the position of the current overlayRef\n        this.overlayRef.updatePositionStrategy(positionStrategy);\n        // Iben: Create a new component portal\n        const tooltipPortal = new ComponentPortal(component || this.configuration.component);\n        // Iben: Attach the tooltipPortal to the overlayRef\n        const tooltipRef = this.overlayRef.attach(tooltipPortal);\n        // Iben: Pass the data to the component\n        tooltipRef.setInput('text', text);\n        tooltipRef.setInput('position', tooltipPosition);\n        tooltipRef.setInput('positionClass', `ngx-tooltip-position-${tooltipPosition}`);\n        tooltipRef.setInput('id', id);\n    }\n    /**\n     * Removes the tooltip.\n     */\n    removeToolTip() {\n        if (this.activeTooltip) {\n            // Iben: Unset the active tooltip\n            this.activeTooltip = undefined;\n            // Iben: Remove the active tooltip from view\n            this.overlayRef.detach();\n        }\n    }\n    /**\n     * Dispatches the tooltip event to the subject\n     *\n     * @param event - A tooltip event\n     */\n    setToolTipEvent(event) {\n        // Iben: We add a delay so that the user can navigate between the tooltip and the element\n        setTimeout(() => {\n            this.tooltipEventsSubject.next(event);\n        }, event.active ? 0 : 100);\n    }\n    /**\n     * Emit the destroy event\n     */\n    ngOnDestroy() {\n        this.onDestroySubject.next();\n        this.onDestroySubject.complete();\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL3NlcnZpY2VzL3Rvb2x0aXAvdG9vbHRpcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixPQUFPLEVBQ1Asc0JBQXNCLEdBRXRCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFXNUQsTUFBTSxPQUFPLGlCQUFpQjtJQUNaLGFBQWEsR0FBRyxNQUFNLENBQTBCLDRCQUE0QixDQUFDLENBQUM7SUFDOUUsY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUV6RSxxQ0FBcUM7SUFDN0IsYUFBYSxHQUFXLFNBQVMsQ0FBQztJQUUxQzs7T0FFRztJQUNjLG9CQUFvQixHQUNwQyxJQUFJLGVBQWUsQ0FBOEIsU0FBUyxDQUFDLENBQUM7SUFFN0Q7O09BRUc7SUFDYyxnQkFBZ0IsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVqRTs7T0FFRztJQUNLLFVBQVUsQ0FBYTtJQUUvQjs7T0FFRztJQUNjLGNBQWMsR0FBa0Q7UUFDaEYsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxF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Q0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1lBRS9CLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWUsQ0FBQyxLQUFzQjtRQUM1Qyx5RkFBeUY7UUFDekYsVUFBVSxDQUNULEdBQUcsRUFBRTtZQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxFQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7dUdBbExXLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBRmpCLE1BQU07OzJGQUVOLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb25uZWN0ZWRQb3NpdGlvbixcblx0T3ZlcmxheSxcblx0T3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcblx0T3ZlcmxheVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBwYWlyd2lzZSwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4VG9vbHRpcENvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQge1xuXHROZ3hUb29sdGlwQ29uZmlndXJhdGlvbixcblx0Tmd4VG9vbHRpcEV2ZW50LFxuXHROZ3hUb29sdGlwSXRlbSxcblx0Tmd4VG9vbHRpcFBvc2l0aW9uLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUb29sdGlwU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbiA9IGluamVjdDxOZ3hUb29sdGlwQ29uZmlndXJhdGlvbj4oTmd4VG9vbHRpcENvbmZpZ3VyYXRpb25Ub2tlbik7XG5cdHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheVBvc2l0aW9uQnVpbGRlciA9IGluamVjdChPdmVybGF5UG9zaXRpb25CdWlsZGVyKTtcblxuXHQvLyBJYmVuOiBUaGUgaWQgb2YgdGhlIGFjdGl2ZSB0b29sdGlwXG5cdHByaXZhdGUgYWN0aXZlVG9vbHRpcDogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBBIHN1YmplY3QgdG8gaG9sZCB0aGUgdG9vbHRpcCBldmVudHNcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgdG9vbHRpcEV2ZW50c1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxOZ3hUb29sdGlwRXZlbnQgfCB1bmRlZmluZWQ+ID1cblx0XHRuZXcgQmVoYXZpb3JTdWJqZWN0PE5neFRvb2x0aXBFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuXHQvKipcblx0ICogQSBzdWJqZWN0IHRvIGhvbGQgdGhlIGRlc3Ryb3kgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95U3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBvdmVybGF5UmVmIHVzZWQgdG8gYXR0YWNoIHRoZSB0b29sdGlwIHRvb1xuXHQgKi9cblx0cHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuXG5cdC8qKlxuXHQgKiBUaGUgcG9zaXRpb24gcmVjb3JkIGZvciB0aGUgdG9vbHRpcFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBwb3NpdGlvblJlY29yZDogUmVjb3JkPE5neFRvb2x0aXBQb3NpdGlvbiwgQ29ubmVjdGVkUG9zaXRpb24+ID0ge1xuXHRcdGJlbG93OiB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sXG5cdFx0YWJvdmU6IHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcblx0XHRsZWZ0OiB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnY2VudGVyJyB9LFxuXHRcdHJpZ2h0OiB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnYm90dG9tJyB9LFxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgdG9vbHRpcCBldmVudHMgYW5kIGhhbmRsZSBhY2NvcmRpbmdseVxuXHRcdHRoaXMudG9vbHRpcEV2ZW50c1N1YmplY3Rcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRwYWlyd2lzZSgpLFxuXHRcdFx0XHR0YXAoKFtwcmV2aW91cywgbmV4dF0pID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBXaGVuIHdlIGVudGVyIGFuIGVsZW1lbnQsIHdlIHNob3cgdGhlIHRvb2x0aXBcblx0XHRcdFx0XHRpZiAobmV4dC5hY3RpdmUgJiYgbmV4dC5zb3VyY2UgPT09ICdlbGVtZW50Jykge1xuXHRcdFx0XHRcdFx0Ly8gSWJlbjogQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXZpb3VzIGVsZW1lbnQsIGFuZCBpZiBzbywgaWYgd2UgaGF2ZSB0byByZW1vdmUgaXRcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0cHJldmlvdXMgJiZcblx0XHRcdFx0XHRcdFx0dGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpICYmXG5cdFx0XHRcdFx0XHRcdHRoaXMuYWN0aXZlVG9vbHRpcCAhPT0gbmV4dC5pZFxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlVG9vbFRpcCgpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJYmVuOiBBZGQgdGhlIG5ldyB0b29sdGlwXG5cdFx0XHRcdFx0XHRjb25zdCB7IGNvbXBvbmVudCwgdGV4dCwgcG9zaXRpb24sIGVsZW1lbnRSZWYsIGlkIH0gPSBuZXh0O1xuXG5cdFx0XHRcdFx0XHR0aGlzLnNob3dUb29sVGlwKHtcblx0XHRcdFx0XHRcdFx0Y29tcG9uZW50OiBjb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRleHQsXG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHRcdFx0XHRcdFx0ZWxlbWVudFJlZjogZWxlbWVudFJlZixcblx0XHRcdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBXZSBkbyBhIGNoZWNrIG9uIHByZXZpb3VzIGhlcmUgc28gd2UgY2FuIGNvbnRpbnVlIHNhZmVseSBpbiB0aGUgdXBjb21pbmcgY2hlY2tzXG5cdFx0XHRcdFx0aWYgKCFwcmV2aW91cykge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IElmIHdlJ3JlIGVudGVyaW5nIGEgbmV3IGVsZW1lbnQsIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAocHJldmlvdXMuaWQgIT09IG5leHQuaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJZiB0aGUgc291cmNlcyBhcmUgdGhlIHNhbWUsIHdlIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSB0b29sdGlwXG5cdFx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlIHdlIGVpdGhlciBsZWF2ZSB0aGUgdG9vbHRpcCBvciBsZWF2ZSB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGlmIChwcmV2aW91cy5zb3VyY2UgPT09IG5leHQuc291cmNlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW5leHQuYWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlVG9vbFRpcCgpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJZiBib3RoIGFjdGl2ZXMgYXJlIGZhbHNlIChlbGVtZW50ID0+IHRvb2x0aXAgPT4gb3V0c2lkZSBvciB0b29sdGlwID0+IGVsZW1lbnQgPT4gb3V0c2lkZSksIHdlIHJlbW92ZSB0aGUgdG9vbHRpcFxuXHRcdFx0XHRcdGlmICghbmV4dC5hY3RpdmUgJiYgIXByZXZpb3VzLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVUb29sVGlwKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsKHRoaXMub25EZXN0cm95U3ViamVjdC5hc09ic2VydmFibGUoKSlcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IGEgdG9vbHRpcFxuXHQgKlxuXHQgKiBAcGFyYW0gdG9vbHRpcCAtIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB0b29sdGlwXG5cdCAqL1xuXHRwdWJsaWMgc2hvd1Rvb2xUaXAodG9vbHRpcDogTmd4VG9vbHRpcEl0ZW0pOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBJZiBubyB0b29sdGlwIHdhcyBwcm92aWRlZCBvciBpZiB3ZSBhbHJlYWR5IGhhdmUgYSB0b29sdGlwIGF0dGFjaGVkLCB3ZSBlYXJseSBleGl0XG5cdFx0aWYgKCF0b29sdGlwIHx8IHRoaXMub3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEdldCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdG9vbHRpcFxuXHRcdGNvbnN0IHsgdGV4dCwgY29tcG9uZW50LCBwb3NpdGlvbiwgZWxlbWVudFJlZiwgaWQgfSA9IHRvb2x0aXA7XG5cblx0XHQvLyBJYmVuOiBTZXQgdGhlIGFjdGl2ZSB0b29sdGlwXG5cdFx0dGhpcy5hY3RpdmVUb29sdGlwID0gaWQ7XG5cblx0XHQvLyBJYmVuOiBHZXQgdGhlIHRvb2x0aXAgcG9zaXRpb24uIElmIG5vIHBvc2l0aW9uIHdhcyBwcm92aWRlZCBieSB0aGUgdG9vbHRpcCwgd2UgdXNlIHRoZSBjb25maWd1cmVkIGRlZmF1bHQsIGlmIG5vbmUgaXMgY29uZmlndXJlZCB3ZSB1c2UgJ2Fib3ZlJ1xuXHRcdGNvbnN0IHRvb2x0aXBQb3NpdGlvbiA9IHBvc2l0aW9uIHx8IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UG9zaXRpb24gfHwgJ2Fib3ZlJztcblxuXHRcdC8vIEliZW46IElmIHRoZSBwcmV2aW91cyBvdmVybGF5UmVmIHN0aWxsIGV4aXN0cywgd2UgcmVtb3ZlIGl0XG5cdFx0aWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcblx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKHtcblx0XHRcdFx0Ly8gSWJlbjogU2V0IHRoZSBzY3JvbGwgc3RyYXRlZ3kgdG8gcmVwb3NpdGlvbiBzbyB0aGF0IHdoZW5ldmVyIHRoZSB1c2VyIHNjcm9sbHMsIHRoZSB0b29sdGlwIGlzIHN0aWxsIG5lYXIgdGhlIGVsZW1lbnRcblx0XHRcdFx0c2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheVNlcnZpY2Uuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBDcmVhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5XG5cdFx0Y29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheVBvc2l0aW9uQnVpbGRlclxuXHRcdFx0LmZsZXhpYmxlQ29ubmVjdGVkVG8oZWxlbWVudFJlZilcblx0XHRcdC53aXRoUG9zaXRpb25zKFt0aGlzLnBvc2l0aW9uUmVjb3JkW3Rvb2x0aXBQb3NpdGlvbl1dKTtcblxuXHRcdC8vIEliZW46IFVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgb3ZlcmxheVJlZlxuXHRcdHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU3RyYXRlZ3kpO1xuXG5cdFx0Ly8gSWJlbjogQ3JlYXRlIGEgbmV3IGNvbXBvbmVudCBwb3J0YWxcblx0XHRjb25zdCB0b29sdGlwUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChjb21wb25lbnQgfHwgdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudCk7XG5cblx0XHQvLyBJYmVuOiBBdHRhY2ggdGhlIHRvb2x0aXBQb3J0YWwgdG8gdGhlIG92ZXJsYXlSZWZcbiAgICBjb25zdCB0b29sdGlwUmVmID0gdGhpcy5vdmVybGF5UmVmLmF0dGFjaCggdG9vbHRpcFBvcnRhbCApO1xuXG5cdFx0Ly8gSWJlbjogUGFzcyB0aGUgZGF0YSB0byB0aGUgY29tcG9uZW50XG5cdFx0dG9vbHRpcFJlZi5zZXRJbnB1dCgndGV4dCcsIHRleHQpO1xuXHRcdHRvb2x0aXBSZWYuc2V0SW5wdXQoJ3Bvc2l0aW9uJywgdG9vbHRpcFBvc2l0aW9uKTtcblx0XHR0b29sdGlwUmVmLnNldElucHV0KCdwb3NpdGlvbkNsYXNzJywgYG5neC10b29sdGlwLXBvc2l0aW9uLSR7dG9vbHRpcFBvc2l0aW9ufWApO1xuXHRcdHRvb2x0aXBSZWYuc2V0SW5wdXQoJ2lkJywgaWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIHRvb2x0aXAuXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlVG9vbFRpcCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5hY3RpdmVUb29sdGlwKSB7XG5cdFx0XHQvLyBJYmVuOiBVbnNldCB0aGUgYWN0aXZlIHRvb2x0aXBcblx0XHRcdHRoaXMuYWN0aXZlVG9vbHRpcCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gSWJlbjogUmVtb3ZlIHRoZSBhY3RpdmUgdG9vbHRpcCBmcm9tIHZpZXdcblx0XHRcdHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGF0Y2hlcyB0aGUgdG9vbHRpcCBldmVudCB0byB0aGUgc3ViamVjdFxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnQgLSBBIHRvb2x0aXAgZXZlbnRcblx0ICovXG5cdHB1YmxpYyBzZXRUb29sVGlwRXZlbnQoZXZlbnQ6IE5neFRvb2x0aXBFdmVudCk6IHZvaWQge1xuXHRcdC8vIEliZW46IFdlIGFkZCBhIGRlbGF5IHNvIHRoYXQgdGhlIHVzZXIgY2FuIG5hdmlnYXRlIGJldHdlZW4gdGhlIHRvb2x0aXAgYW5kIHRoZSBlbGVtZW50XG5cdFx0c2V0VGltZW91dChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy50b29sdGlwRXZlbnRzU3ViamVjdC5uZXh0KGV2ZW50KTtcblx0XHRcdH0sXG5cdFx0XHRldmVudC5hY3RpdmUgPyAwIDogMTAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0IHRoZSBkZXN0cm95IGV2ZW50XG5cdCAqL1xuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5vbkRlc3Ryb3lTdWJqZWN0Lm5leHQoKTtcblx0XHR0aGlzLm9uRGVzdHJveVN1YmplY3QuY29tcGxldGUoKTtcblx0fVxufVxuIl19","import { Dialog } from '@angular/cdk/dialog';\nimport { Injectable, inject } from '@angular/core';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, combineLatest, filter, map, NEVER, startWith, takeUntil, tap, } from 'rxjs';\nimport { NgxModalConfigurationToken } from '../../tokens';\nimport * as i0 from \"@angular/core\";\n/**\n * A wrapper service to Angular CDK Dialog that provides a WCAG/ARIA compliant implementation of modals\n *\n * @export\n * @class NgxModalService\n */\nexport class NgxModalService {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    configuration = inject(NgxModalConfigurationToken, {\n        optional: true,\n    });\n    dialogService = inject(Dialog);\n    /**\n     * A subject that keeps track of whether a modal is currently active\n     */\n    hasModalSubject = new BehaviorSubject(false);\n    /**\n     * An observable that keeps track of whether a modal is currently active.\n     */\n    hasActiveModal$ = this.hasModalSubject.asObservable();\n    /**\n     * Opens a modal based on the provided options\n     *\n     * @param {NgxModalOptions<ActionType>} options - The modal options\n     */\n    open(options) {\n        // Iben: If a previous modal is still active, we early exit.\n        if (this.hasModalSubject.value) {\n            console.warn('NgxInform: An active modal is currently displayed, close the active modal before opening a new one');\n            return NEVER;\n        }\n        // Iben: Declare the modal as active\n        this.hasModalSubject.next(true);\n        // Iben: Fetch the type of component we wish to show\n        const configuration = this.configuration?.modals?.[options.type];\n        const component = options.component ||\n            configuration.component;\n        // Iben: Check if all the correct parameters are set and return NEVER when they're not correctly set\n        if (!this.runARIAChecks(options, component)) {\n            return NEVER;\n        }\n        // Iben: Render the modal\n        const modal = this.createModalComponent(options, component);\n        // Iben: Return the modal action\n        return combineLatest([\n            // Iben: Set the start value to undefined so both actions at least emit once\n            outputToObservable(modal.action).pipe(startWith(undefined)),\n            outputToObservable(modal.close).pipe(\n            // Iben: Map so we can keep the emit value void, but can work with the filter later down the line\n            map(() => 'NgxModalClose'), \n            // Iben: Set the start value to undefined so both actions at least emit once\n            startWith(undefined)),\n        ]).pipe(\n        // Iben: Only emit if one of the two actions actually has an emit\n        filter(([action, closed]) => {\n            return Boolean(action) || Boolean(closed);\n        }), map(([action, closed]) => {\n            return closed || action;\n        }), tap((action) => {\n            // Iben: If the autoClose is specifically set to false, we early exit unless we're running in a close event\n            if (action !== 'NgxModalClose' &&\n                ((options.autoClose !== undefined && options.autoClose === false) ||\n                    (configuration?.autoClose !== undefined &&\n                        configuration.autoClose === false))) {\n                return;\n            }\n            // Iben: Close the modal\n            this.close(options.onClose);\n        }), \n        // Iben: Map the action back to the ActionType\n        map((action) => {\n            return action === 'NgxModalClose' ? undefined : action;\n        }), \n        // Wouter: Unsubscribe wen no modal is open\n        takeUntil(this.hasModalSubject.pipe(filter((hasModal) => !hasModal))));\n    }\n    /**\n     * Closes the currently active modal\n     *\n     * * @param onClose - An optional onClose function\n     */\n    close(onClose) {\n        // Wouter: The setTimeout delay is needed, so that the `open` method can emit before its subscription end gets triggered\n        setTimeout(() => {\n            // Iben: Close the modal\n            this.dialogService.closeAll();\n            // Iben: Mark the modal as closed\n            this.hasModalSubject.next(false);\n            // Iben: Run an optional onClose function\n            if (onClose) {\n                onClose();\n            }\n        });\n    }\n    /**\n     * Checks if all the necessary preconditions are met\n     *\n     * @param options - The options of the modal\n     * @param  component - The component we wish to render\n     */\n    runARIAChecks(options, component) {\n        // Iben: If no component was found, we return NEVER and throw an error\n        if (!component) {\n            console.error('@ibenvandeveire/ngx-inform - NgxModalService: No component was provided or found in the configuration to render.');\n            return false;\n        }\n        // Iben: If no description was provided when required, we return NEVER and throw an error\n        if (!this.hasRequiredDescription(options)) {\n            console.error('@ibenvandeveire/ngx-inform - NgxModalService: The role of the modal was set to \"alertdialog\" but no \"describedById\" was provided.');\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Creates the modal component\n     *\n     * @param options - The options of the modal\n     * @param  component - The component we wish to render\n     */\n    createModalComponent(options, component) {\n        const configuration = this.configuration?.modals?.[options.type];\n        // Iben: Create the modal and render it\n        const dialogRef = this.dialogService.open(component, {\n            role: configuration?.role || options.role,\n            ariaLabel: options.label,\n            ariaLabelledBy: options.labelledById,\n            ariaDescribedBy: options.describedById,\n            disableClose: true,\n            restoreFocus: this.getValue(undefined, options.restoreFocus, true),\n            autoFocus: this.getValue(undefined, options.autoFocus, true),\n            viewContainerRef: options.viewContainerRef,\n            direction: configuration?.direction || options.direction,\n            hasBackdrop: this.getValue(configuration?.hasBackdrop, options.hasBackdrop, true),\n            panelClass: this.getValue(configuration?.panelClass, options.panelClass, []),\n            closeOnNavigation: this.getValue(configuration?.closeOnNavigation, options.closeOnNavigation, true),\n            closeOnDestroy: true,\n            closeOnOverlayDetachments: true,\n        });\n        const modal = dialogRef.componentInstance;\n        // Iben: Set the data of the modal\n        dialogRef.componentRef.setInput('data', this.getValue(configuration?.data, options.data, undefined));\n        dialogRef.componentRef.setInput('ariaDescribedBy', options.describedById);\n        dialogRef.componentRef.setInput('ariaLabelledBy', options.labelledById);\n        return modal;\n    }\n    /**\n     * Checks if the description is provided when the role requires it\n     *\n     * @param options - The options of the modal\n     */\n    hasRequiredDescription(options) {\n        // Iben: If the options has provided a default type, we check based on the configuration role\n        if (options.type) {\n            const configuration = this.configuration?.modals[options.type];\n            return !(configuration.role === 'alertdialog' && !options.describedById);\n        }\n        //  Iben: Check based on the options role\n        return !(options.role === 'alertdialog' && !options.describedById);\n    }\n    /**\n     * Returns a value based on whether one of the overwrites is defined\n     *\n     * @private\n     * @param configurationValue - The overwrite on configuration level\n     * @param optionsValue - The overwrite on options level\n     * @param defaultValue - The default value if no overwrite was defined\n     */\n    getValue(configurationValue, optionsValue, defaultValue) {\n        if (configurationValue === undefined && optionsValue === undefined) {\n            return defaultValue;\n        }\n        if (optionsValue !== undefined) {\n            return optionsValue;\n        }\n        return configurationValue;\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxModalService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxModalService, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9zZXJ2aWNlcy9tb2RhbC9tb2RhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ04sZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sR0FBRyxFQUNILEtBQUssRUFFTCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSCxNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFHMUQ7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQUMzQixvRUFBb0U7SUFDbkQsYUFBYSxHQUFHLE1BQU0sQ0FBd0IsMEJBQTBCLEVBQUU7UUFDMUYsUUFBUSxFQUFFLElBQUk7S0FDZCxDQUFFLENBQUM7SUFDYSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhEOztPQUVHO0lBQ0ssZUFBZSxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvRTs7T0FFRztJQUNhLGVBQWUsR0FBd0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUzRjs7OztPQUlHO0lBQ0ksSUFBSSxDQUNWLE9BQThDO1FBRTlDLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FDWCxvR0FBb0csQ0FDcEcsQ0FBQztZQUVGLE9BQU8s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QUNsQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0QsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELHlDQUF5QztRQUN6QyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLGFBQWEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLFFBQVEsQ0FBQyxrQkFBdUIsRUFBRSxZQUFpQixFQUFFLFlBQWlCO1FBQzdFLElBQUksa0JBQWtCLEtBQUssU0FBUyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwRSxPQUFPLFlBQVksQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsT0FBTyxZQUFZLENBQUM7UUFDckIsQ0FBQztRQUVELE9BQU8sa0JBQWtCLENBQUM7SUFDM0IsQ0FBQzt1R0FuT1csZUFBZTsyR0FBZixlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RpYWxvZyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dFRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG5cdEJlaGF2aW9yU3ViamVjdCxcblx0Y29tYmluZUxhdGVzdCxcblx0ZmlsdGVyLFxuXHRtYXAsXG5cdE5FVkVSLFxuXHRPYnNlcnZhYmxlLFxuXHRzdGFydFdpdGgsXG5cdHRha2VVbnRpbCxcblx0dGFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4TW9kYWxBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Fic3RyYWN0cyc7XG5pbXBvcnQgeyBOZ3hNb2RhbENvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBOZ3hNb2RhbEFjdGlvblR5cGUsIE5neE1vZGFsQ29uZmlndXJhdGlvbiwgTmd4TW9kYWxPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIEEgd3JhcHBlciBzZXJ2aWNlIHRvIEFuZ3VsYXIgQ0RLIERpYWxvZyB0aGF0IHByb3ZpZGVzIGEgV0NBRy9BUklBIGNvbXBsaWFudCBpbXBsZW1lbnRhdGlvbiBvZiBtb2RhbHNcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTmd4TW9kYWxTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmd4TW9kYWxTZXJ2aWNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cblx0cHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uID0gaW5qZWN0PE5neE1vZGFsQ29uZmlndXJhdGlvbj4oTmd4TW9kYWxDb25maWd1cmF0aW9uVG9rZW4sIHtcblx0XHRvcHRpb25hbDogdHJ1ZSxcblx0fSkhO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nKTtcblxuXHQvKipcblx0ICogQSBzdWJqZWN0IHRoYXQga2VlcHMgdHJhY2sgb2Ygd2hldGhlciBhIG1vZGFsIGlzIGN1cnJlbnRseSBhY3RpdmVcblx0ICovXG5cdHByaXZhdGUgaGFzTW9kYWxTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvKipcblx0ICogQW4gb2JzZXJ2YWJsZSB0aGF0IGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgYSBtb2RhbCBpcyBjdXJyZW50bHkgYWN0aXZlLlxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGhhc0FjdGl2ZU1vZGFsJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuaGFzTW9kYWxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBPcGVucyBhIG1vZGFsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tmd4TW9kYWxPcHRpb25zPEFjdGlvblR5cGU+fSBvcHRpb25zIC0gVGhlIG1vZGFsIG9wdGlvbnNcblx0ICovXG5cdHB1YmxpYyBvcGVuPEFjdGlvblR5cGUgZXh0ZW5kcyBOZ3hNb2RhbEFjdGlvblR5cGUgPSBzdHJpbmcsIERhdGFUeXBlID0gYW55Pihcblx0XHRvcHRpb25zOiBOZ3hNb2RhbE9wdGlvbnM8QWN0aW9uVHlwZSwgRGF0YVR5cGU+XG5cdCk6IE9ic2VydmFibGU8QWN0aW9uVHlwZT4ge1xuXHRcdC8vIEliZW46IElmIGEgcHJldmlvdXMgbW9kYWwgaXMgc3RpbGwgYWN0aXZlLCB3ZSBlYXJseSBleGl0LlxuXHRcdGlmICh0aGlzLmhhc01vZGFsU3ViamVjdC52YWx1ZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XHQnTmd4SW5mb3JtOiBBbiBhY3RpdmUgbW9kYWwgaXMgY3VycmVudGx5IGRpc3BsYXllZCwgY2xvc2UgdGhlIGFjdGl2ZSBtb2RhbCBiZWZvcmUgb3BlbmluZyBhIG5ldyBvbmUnXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm4gTkVWRVI7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRGVjbGFyZSB0aGUgbW9kYWwgYXMgYWN0aXZlXG5cdFx0dGhpcy5oYXNNb2RhbFN1YmplY3QubmV4dCh0cnVlKTtcblxuXHRcdC8vIEliZW46IEZldGNoIHRoZSB0eXBlIG9mIGNvbXBvbmVudCB3ZSB3aXNoIHRvIHNob3dcblx0XHRjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uPy5tb2RhbHM/LltvcHRpb25zLnR5cGVdO1xuXHRcdGNvbnN0IGNvbXBvbmVudDogVHlwZTxOZ3hNb2RhbEFic3RyYWN0Q29tcG9uZW50PEFjdGlvblR5cGUsIERhdGFUeXBlPj4gPVxuXHRcdFx0b3B0aW9ucy5jb21wb25lbnQgfHxcblx0XHRcdChjb25maWd1cmF0aW9uLmNvbXBvbmVudCBhcyBUeXBlPE5neE1vZGFsQWJzdHJhY3RDb21wb25lbnQ8QWN0aW9uVHlwZSwgRGF0YVR5cGU+Pik7XG5cblx0XHQvLyBJYmVuOiBDaGVjayBpZiBhbGwgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCByZXR1cm4gTkVWRVIgd2hlbiB0aGV5J3JlIG5vdCBjb3JyZWN0bHkgc2V0XG5cdFx0aWYgKCF0aGlzLnJ1bkFSSUFDaGVja3M8QWN0aW9uVHlwZT4ob3B0aW9ucywgY29tcG9uZW50KSkge1xuXHRcdFx0cmV0dXJuIE5FVkVSO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFJlbmRlciB0aGUgbW9kYWxcblx0XHRjb25zdCBtb2RhbCA9IHRoaXMuY3JlYXRlTW9kYWxDb21wb25lbnQ8QWN0aW9uVHlwZSwgRGF0YVR5cGU+KG9wdGlvbnMsIGNvbXBvbmVudCk7XG5cblx0XHQvLyBJYmVuOiBSZXR1cm4gdGhlIG1vZGFsIGFjdGlvblxuXHRcdHJldHVybiBjb21iaW5lTGF0ZXN0KFtcblx0XHRcdC8vIEliZW46IFNldCB0aGUgc3RhcnQgdmFsdWUgdG8gdW5kZWZpbmVkIHNvIGJvdGggYWN0aW9ucyBhdCBsZWFzdCBlbWl0IG9uY2Vcblx0XHRcdG91dHB1dFRvT2JzZXJ2YWJsZShtb2RhbC5hY3Rpb24pLnBpcGUoc3RhcnRXaXRoKHVuZGVmaW5lZCkpLFxuXHRcdFx0b3V0cHV0VG9PYnNlcnZhYmxlKG1vZGFsLmNsb3NlKS5waXBlKFxuXHRcdFx0XHQvLyBJYmVuOiBNYXAgc28gd2UgY2FuIGtlZXAgdGhlIGVtaXQgdmFsdWUgdm9pZCwgYnV0IGNhbiB3b3JrIHdpdGggdGhlIGZpbHRlciBsYXRlciBkb3duIHRoZSBsaW5lXG5cdFx0XHRcdG1hcCgoKSA9PiAnTmd4TW9kYWxDbG9zZScpLFxuXHRcdFx0XHQvLyBJYmVuOiBTZXQgdGhlIHN0YXJ0IHZhbHVlIHRvIHVuZGVmaW5lZCBzbyBib3RoIGFjdGlvbnMgYXQgbGVhc3QgZW1pdCBvbmNlXG5cdFx0XHRcdHN0YXJ0V2l0aCh1bmRlZmluZWQpXG5cdFx0XHQpLFxuXHRcdF0pLnBpcGUoXG5cdFx0XHQvLyBJYmVuOiBPbmx5IGVtaXQgaWYgb25lIG9mIHRoZSB0d28gYWN0aW9ucyBhY3R1YWxseSBoYXMgYW4gZW1pdFxuXHRcdFx0ZmlsdGVyKChbYWN0aW9uLCBjbG9zZWRdOiBbQWN0aW9uVHlwZSwgJ05neE1vZGFsQ2xvc2UnXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gQm9vbGVhbihhY3Rpb24pIHx8IEJvb2xlYW4oY2xvc2VkKTtcblx0XHRcdH0pLFxuXHRcdFx0bWFwKChbYWN0aW9uLCBjbG9zZWRdOiBbQWN0aW9uVHlwZSwgJ05neE1vZGFsQ2xvc2UnXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY2xvc2VkIHx8IGFjdGlvbjtcblx0XHRcdH0pLFxuXHRcdFx0dGFwKChhY3Rpb246IEFjdGlvblR5cGUgfCAnTmd4TW9kYWxDbG9zZScpID0+IHtcblx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIGF1dG9DbG9zZSBpcyBzcGVjaWZpY2FsbHkgc2V0IHRvIGZhbHNlLCB3ZSBlYXJseSBleGl0IHVubGVzcyB3ZSdyZSBydW5uaW5nIGluIGEgY2xvc2UgZXZlbnRcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFjdGlvbiAhPT0gJ05neE1vZGFsQ2xvc2UnICYmXG5cdFx0XHRcdFx0KChvcHRpb25zLmF1dG9DbG9zZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYXV0b0Nsb3NlID09PSBmYWxzZSkgfHxcblx0XHRcdFx0XHRcdChjb25maWd1cmF0aW9uPy5hdXRvQ2xvc2UgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRjb25maWd1cmF0aW9uLmF1dG9DbG9zZSA9PT0gZmFsc2UpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJYmVuOiBDbG9zZSB0aGUgbW9kYWxcblx0XHRcdFx0dGhpcy5jbG9zZShvcHRpb25zLm9uQ2xvc2UpO1xuXHRcdFx0fSksXG5cdFx0XHQvLyBJYmVuOiBNYXAgdGhlIGFjdGlvbiBiYWNrIHRvIHRoZSBBY3Rpb25UeXBlXG5cdFx0XHRtYXAoKGFjdGlvbjogQWN0aW9uVHlwZSB8ICdOZ3hNb2RhbENsb3NlJykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uID09PSAnTmd4TW9kYWxDbG9zZScgPyB1bmRlZmluZWQgOiAoYWN0aW9uIGFzIEFjdGlvblR5cGUpO1xuXHRcdFx0fSksXG5cdFx0XHQvLyBXb3V0ZXI6IFVuc3Vic2NyaWJlIHdlbiBubyBtb2RhbCBpcyBvcGVuXG5cdFx0XHR0YWtlVW50aWwodGhpcy5oYXNNb2RhbFN1YmplY3QucGlwZShmaWx0ZXIoKGhhc01vZGFsKSA9PiAhaGFzTW9kYWwpKSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBtb2RhbFxuXHQgKlxuXHQgKiAqIEBwYXJhbSBvbkNsb3NlIC0gQW4gb3B0aW9uYWwgb25DbG9zZSBmdW5jdGlvblxuXHQgKi9cblx0cHVibGljIGNsb3NlKG9uQ2xvc2U/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Ly8gV291dGVyOiBUaGUgc2V0VGltZW91dCBkZWxheSBpcyBuZWVkZWQsIHNvIHRoYXQgdGhlIGBvcGVuYCBtZXRob2QgY2FuIGVtaXQgYmVmb3JlIGl0cyBzdWJzY3JpcHRpb24gZW5kIGdldHMgdHJpZ2dlcmVkXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQvLyBJYmVuOiBDbG9zZSB0aGUgbW9kYWxcblx0XHRcdHRoaXMuZGlhbG9nU2VydmljZS5jbG9zZUFsbCgpO1xuXG5cdFx0XHQvLyBJYmVuOiBNYXJrIHRoZSBtb2RhbCBhcyBjbG9zZWRcblx0XHRcdHRoaXMuaGFzTW9kYWxTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG5cdFx0XHQvLyBJYmVuOiBSdW4gYW4gb3B0aW9uYWwgb25DbG9zZSBmdW5jdGlvblxuXHRcdFx0aWYgKG9uQ2xvc2UpIHtcblx0XHRcdFx0b25DbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhbGwgdGhlIG5lY2Vzc2FyeSBwcmVjb25kaXRpb25zIGFyZSBtZXRcblx0ICpcblx0ICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvZiB0aGUgbW9kYWxcblx0ICogQHBhcmFtICBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHdlIHdpc2ggdG8gcmVuZGVyXG5cdCAqL1xuXHRwcml2YXRlIHJ1bkFSSUFDaGVja3M8QWN0aW9uVHlwZSBleHRlbmRzIE5neE1vZGFsQWN0aW9uVHlwZT4oXG5cdFx0b3B0aW9uczogTmd4TW9kYWxPcHRpb25zPEFjdGlvblR5cGU+LFxuXHRcdGNvbXBvbmVudDogVHlwZTxOZ3hNb2RhbEFic3RyYWN0Q29tcG9uZW50PEFjdGlvblR5cGU+PlxuXHQpOiBib29sZWFuIHtcblx0XHQvLyBJYmVuOiBJZiBubyBjb21wb25lbnQgd2FzIGZvdW5kLCB3ZSByZXR1cm4gTkVWRVIgYW5kIHRocm93IGFuIGVycm9yXG5cdFx0aWYgKCFjb21wb25lbnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdCdAaWJlbnZhbmRldmVpcmUvbmd4LWluZm9ybSAtIE5neE1vZGFsU2VydmljZTogTm8gY29tcG9uZW50IHdhcyBwcm92aWRlZCBvciBmb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byByZW5kZXIuJ1xuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIG5vIGRlc2NyaXB0aW9uIHdhcyBwcm92aWRlZCB3aGVuIHJlcXVpcmVkLCB3ZSByZXR1cm4gTkVWRVIgYW5kIHRocm93IGFuIGVycm9yXG5cdFx0aWYgKCF0aGlzLmhhc1JlcXVpcmVkRGVzY3JpcHRpb24ob3B0aW9ucykpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdCdAaWJlbnZhbmRldmVpcmUvbmd4LWluZm9ybSAtIE5neE1vZGFsU2VydmljZTogVGhlIHJvbGUgb2YgdGhlIG1vZGFsIHdhcyBzZXQgdG8gXCJhbGVydGRpYWxvZ1wiIGJ1dCBubyBcImRlc2NyaWJlZEJ5SWRcIiB3YXMgcHJvdmlkZWQuJ1xuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIG1vZGFsIGNvbXBvbmVudFxuXHQgKlxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9mIHRoZSBtb2RhbFxuXHQgKiBAcGFyYW0gIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgd2Ugd2lzaCB0byByZW5kZXJcblx0ICovXG5cdHByaXZhdGUgY3JlYXRlTW9kYWxDb21wb25lbnQ8QWN0aW9uVHlwZSBleHRlbmRzIE5neE1vZGFsQWN0aW9uVHlwZSwgRGF0YVR5cGUgPSBhbnk+KFxuXHRcdG9wdGlvbnM6IE5neE1vZGFsT3B0aW9uczxBY3Rpb25UeXBlPixcblx0XHRjb21wb25lbnQ6IFR5cGU8Tmd4TW9kYWxBYnN0cmFjdENvbXBvbmVudDxBY3Rpb25UeXBlLCBEYXRhVHlwZT4+XG5cdCk6IE5neE1vZGFsQWJzdHJhY3RDb21wb25lbnQ8QWN0aW9uVHlwZT4ge1xuXHRcdGNvbnN0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24/Lm1vZGFscz8uW29wdGlvbnMudHlwZV07XG5cblx0XHQvLyBJYmVuOiBDcmVhdGUgdGhlIG1vZGFsIGFuZCByZW5kZXIgaXRcblx0XHRjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIHtcblx0XHRcdHJvbGU6IGNvbmZpZ3VyYXRpb24/LnJvbGUgfHwgb3B0aW9ucy5yb2xlLFxuXHRcdFx0YXJpYUxhYmVsOiBvcHRpb25zLmxhYmVsLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IG9wdGlvbnMubGFiZWxsZWRCeUlkLFxuXHRcdFx0YXJpYURlc2NyaWJlZEJ5OiBvcHRpb25zLmRlc2NyaWJlZEJ5SWQsXG5cdFx0XHRkaXNhYmxlQ2xvc2U6IHRydWUsXG5cdFx0XHRyZXN0b3JlRm9jdXM6IHRoaXMuZ2V0VmFsdWUodW5kZWZpbmVkLCBvcHRpb25zLnJlc3RvcmVGb2N1cywgdHJ1ZSksXG5cdFx0XHRhdXRvRm9jdXM6IHRoaXMuZ2V0VmFsdWUodW5kZWZpbmVkLCBvcHRpb25zLmF1dG9Gb2N1cywgdHJ1ZSksXG5cdFx0XHR2aWV3Q29udGFpbmVyUmVmOiBvcHRpb25zLnZpZXdDb250YWluZXJSZWYsXG5cdFx0XHRkaXJlY3Rpb246IGNvbmZpZ3VyYXRpb24/LmRpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbixcblx0XHRcdGhhc0JhY2tkcm9wOiB0aGlzLmdldFZhbHVlKGNvbmZpZ3VyYXRpb24/Lmhhc0JhY2tkcm9wLCBvcHRpb25zLmhhc0JhY2tkcm9wLCB0cnVlKSxcblx0XHRcdHBhbmVsQ2xhc3M6IHRoaXMuZ2V0VmFsdWUoY29uZmlndXJhdGlvbj8ucGFuZWxDbGFzcywgb3B0aW9ucy5wYW5lbENsYXNzLCBbXSksXG5cdFx0XHRjbG9zZU9uTmF2aWdhdGlvbjogdGhpcy5nZXRWYWx1ZShcblx0XHRcdFx0Y29uZmlndXJhdGlvbj8uY2xvc2VPbk5hdmlnYXRpb24sXG5cdFx0XHRcdG9wdGlvbnMuY2xvc2VPbk5hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRjbG9zZU9uRGVzdHJveTogdHJ1ZSxcblx0XHRcdGNsb3NlT25PdmVybGF5RGV0YWNobWVudHM6IHRydWUsXG5cdFx0fSk7XG5cdFx0Y29uc3QgbW9kYWwgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2U7XG5cblx0XHQvLyBJYmVuOiBTZXQgdGhlIGRhdGEgb2YgdGhlIG1vZGFsXG5cdFx0ZGlhbG9nUmVmLmNvbXBvbmVudFJlZi5zZXRJbnB1dChcblx0XHRcdCdkYXRhJyxcblx0XHRcdHRoaXMuZ2V0VmFsdWUoY29uZmlndXJhdGlvbj8uZGF0YSwgb3B0aW9ucy5kYXRhLCB1bmRlZmluZWQpXG5cdFx0KTtcblx0XHRkaWFsb2dSZWYuY29tcG9uZW50UmVmLnNldElucHV0KCdhcmlhRGVzY3JpYmVkQnknLCBvcHRpb25zLmRlc2NyaWJlZEJ5SWQpO1xuXHRcdGRpYWxvZ1JlZi5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2FyaWFMYWJlbGxlZEJ5Jywgb3B0aW9ucy5sYWJlbGxlZEJ5SWQpO1xuXG5cdFx0cmV0dXJuIG1vZGFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZGVzY3JpcHRpb24gaXMgcHJvdmlkZWQgd2hlbiB0aGUgcm9sZSByZXF1aXJlcyBpdFxuXHQgKlxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9mIHRoZSBtb2RhbFxuXHQgKi9cblx0cHJpdmF0ZSBoYXNSZXF1aXJlZERlc2NyaXB0aW9uPEFjdGlvblR5cGUgZXh0ZW5kcyBOZ3hNb2RhbEFjdGlvblR5cGU+KFxuXHRcdG9wdGlvbnM6IE5neE1vZGFsT3B0aW9uczxBY3Rpb25UeXBlPlxuXHQpOiBib29sZWFuIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgb3B0aW9ucyBoYXMgcHJvdmlkZWQgYSBkZWZhdWx0IHR5cGUsIHdlIGNoZWNrIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHJvbGVcblx0XHRpZiAob3B0aW9ucy50eXBlKSB7XG5cdFx0XHRjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uPy5tb2RhbHNbb3B0aW9ucy50eXBlXTtcblxuXHRcdFx0cmV0dXJuICEoY29uZmlndXJhdGlvbi5yb2xlID09PSAnYWxlcnRkaWFsb2cnICYmICFvcHRpb25zLmRlc2NyaWJlZEJ5SWQpO1xuXHRcdH1cblxuXHRcdC8vICBJYmVuOiBDaGVjayBiYXNlZCBvbiB0aGUgb3B0aW9ucyByb2xlXG5cdFx0cmV0dXJuICEob3B0aW9ucy5yb2xlID09PSAnYWxlcnRkaWFsb2cnICYmICFvcHRpb25zLmRlc2NyaWJlZEJ5SWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIG9uZSBvZiB0aGUgb3ZlcndyaXRlcyBpcyBkZWZpbmVkXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBjb25maWd1cmF0aW9uVmFsdWUgLSBUaGUgb3ZlcndyaXRlIG9uIGNvbmZpZ3VyYXRpb24gbGV2ZWxcblx0ICogQHBhcmFtIG9wdGlvbnNWYWx1ZSAtIFRoZSBvdmVyd3JpdGUgb24gb3B0aW9ucyBsZXZlbFxuXHQgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gVGhlIGRlZmF1bHQgdmFsdWUgaWYgbm8gb3ZlcndyaXRlIHdhcyBkZWZpbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldFZhbHVlKGNvbmZpZ3VyYXRpb25WYWx1ZTogYW55LCBvcHRpb25zVmFsdWU6IGFueSwgZGVmYXVsdFZhbHVlOiBhbnkpOiBhbnkge1xuXHRcdGlmIChjb25maWd1cmF0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uc1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBvcHRpb25zVmFsdWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbmZpZ3VyYXRpb25WYWx1ZTtcblx0fVxufVxuIl19","/**\n * Determines whether an element is visible in the viewport.\n * It calculates the position that should be scrolled to, taking into account the provided offset and\n * the relative position of the element to the center of the viewport.s\n *\n * @param element - The provided element\n * @param offset - The optional configurable margin around the cutout\n */\nexport const elementIsVisibleInViewport = (element, margin, offset) => {\n    if (!element) {\n        // Wouter: If element is not provided, return \"true\" as to prevent scrolling\n        return { isVisible: true, scrollY: undefined, relativeTo: 'top' };\n    }\n    const { top, bottom, height: elementHeight } = element.getBoundingClientRect();\n    const { innerHeight, scrollY } = window;\n    const isVisible = top >= 0 && bottom <= innerHeight;\n    // Wouter: If the vertical center of the element is on top of the vertical center of the viewport, the element is closer to the top\n    const isCloserToTop = top + elementHeight / 2 <= innerHeight / 2;\n    // Wouter: If element is in viewport, return true\n    if (isVisible) {\n        // Wouter: Take the required offset into account\n        if (isCloserToTop) {\n            return { isVisible: true, scrollY: scrollY - (offset?.top || 0), relativeTo: 'top' };\n        }\n        return { isVisible: true, scrollY: scrollY + (offset?.bottom || 0), relativeTo: 'bottom' };\n    }\n    // Wouter: If element is not in viewport, calculate whether it is closer to top or bottom.\n    if (isCloserToTop) {\n        // Wouter: If closer to top, set scrollY to top of viewport and the provided offset\n        return {\n            isVisible: false,\n            scrollY: top - margin - (offset?.top || 0),\n            relativeTo: 'top',\n        };\n    }\n    // Wouter: If closer to bottom, set scrollY to bottom of viewport with an offset of the cutout height and the provided offset\n    return {\n        isVisible: false,\n        scrollY: bottom - innerHeight + margin + (offset?.bottom || 0),\n        relativeTo: 'bottom',\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC12aXNpYmxlLWluLXZpZXdwb3J0LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvdXRpbHMvZWxlbWVudC12aXNpYmxlLWluLXZpZXdwb3J0L2VsZW1lbnQtdmlzaWJsZS1pbi12aWV3cG9ydC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN6QyxPQUFvQixFQUNwQixNQUFjLEVBQ2QsTUFBMEIsRUFLekIsRUFBRTtJQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLDRFQUE0RTtRQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUYsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9FLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXhDLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQztJQUVwRCxtSUFBbUk7SUFDbkksTUFBTSxhQUFhLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUVqRSxpREFBaUQ7SUFDakQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNmLGdEQUFnRDtRQUNoRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN0RixDQUFDO1FBRUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzVGLENBQUM7SUFFRCwwRkFBMEY7SUFDMUYsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNuQixtRkFBbUY7UUFDbkYsT0FBTztZQUNOLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE9BQU8sRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUMsVUFBVSxFQUFFLEtBQUs7U0FDakIsQ0FBQztJQUNILENBQUM7SUFFRCw2SEFBNkg7SUFDN0gsT0FBTztRQUNOLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLE9BQU8sRUFBRSxNQUFNLEdBQUcsV0FBVyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzlELFVBQVUsRUFBRSxRQUFRO0tBQ3BCLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hUb3VyU3RlcE9mZnNldCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC5cbiAqIEl0IGNhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIHRoYXQgc2hvdWxkIGJlIHNjcm9sbGVkIHRvLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwcm92aWRlZCBvZmZzZXQgYW5kXG4gKiB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgdG8gdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQuc1xuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIHByb3ZpZGVkIGVsZW1lbnRcbiAqIEBwYXJhbSBvZmZzZXQgLSBUaGUgb3B0aW9uYWwgY29uZmlndXJhYmxlIG1hcmdpbiBhcm91bmQgdGhlIGN1dG91dFxuICovXG5leHBvcnQgY29uc3QgZWxlbWVudElzVmlzaWJsZUluVmlld3BvcnQgPSAoXG5cdGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuXHRtYXJnaW46IG51bWJlcixcblx0b2Zmc2V0PzogTmd4VG91clN0ZXBPZmZzZXRcbik6IHtcblx0aXNWaXNpYmxlOiBib29sZWFuO1xuXHRzY3JvbGxZOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cdHJlbGF0aXZlVG86ICd0b3AnIHwgJ2JvdHRvbSc7XG59ID0+IHtcblx0aWYgKCFlbGVtZW50KSB7XG5cdFx0Ly8gV291dGVyOiBJZiBlbGVtZW50IGlzIG5vdCBwcm92aWRlZCwgcmV0dXJuIFwidHJ1ZVwiIGFzIHRvIHByZXZlbnQgc2Nyb2xsaW5nXG5cdFx0cmV0dXJuIHsgaXNWaXNpYmxlOiB0cnVlLCBzY3JvbGxZOiB1bmRlZmluZWQsIHJlbGF0aXZlVG86ICd0b3AnIH07XG4gIH1cblxuXHRjb25zdCB7IHRvcCwgYm90dG9tLCBoZWlnaHQ6IGVsZW1lbnRIZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IHsgaW5uZXJIZWlnaHQsIHNjcm9sbFkgfSA9IHdpbmRvdztcblxuXHRjb25zdCBpc1Zpc2libGUgPSB0b3AgPj0gMCAmJiBib3R0b20gPD0gaW5uZXJIZWlnaHQ7XG5cblx0Ly8gV291dGVyOiBJZiB0aGUgdmVydGljYWwgY2VudGVyIG9mIHRoZSBlbGVtZW50IGlzIG9uIHRvcCBvZiB0aGUgdmVydGljYWwgY2VudGVyIG9mIHRoZSB2aWV3cG9ydCwgdGhlIGVsZW1lbnQgaXMgY2xvc2VyIHRvIHRoZSB0b3Bcblx0Y29uc3QgaXNDbG9zZXJUb1RvcCA9IHRvcCArIGVsZW1lbnRIZWlnaHQgLyAyIDw9IGlubmVySGVpZ2h0IC8gMjtcblxuXHQvLyBXb3V0ZXI6IElmIGVsZW1lbnQgaXMgaW4gdmlld3BvcnQsIHJldHVybiB0cnVlXG5cdGlmIChpc1Zpc2libGUpIHtcblx0XHQvLyBXb3V0ZXI6IFRha2UgdGhlIHJlcXVpcmVkIG9mZnNldCBpbnRvIGFjY291bnRcblx0XHRpZiAoaXNDbG9zZXJUb1RvcCkge1xuXHRcdFx0cmV0dXJuIHsgaXNWaXNpYmxlOiB0cnVlLCBzY3JvbGxZOiBzY3JvbGxZIC0gKG9mZnNldD8udG9wIHx8IDApLCByZWxhdGl2ZVRvOiAndG9wJyB9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7IGlzVmlzaWJsZTogdHJ1ZSwgc2Nyb2xsWTogc2Nyb2xsWSArIChvZmZzZXQ/LmJvdHRvbSB8fCAwKSwgcmVsYXRpdmVUbzogJ2JvdHRvbScgfTtcblx0fVxuXG5cdC8vIFdvdXRlcjogSWYgZWxlbWVudCBpcyBub3QgaW4gdmlld3BvcnQsIGNhbGN1bGF0ZSB3aGV0aGVyIGl0IGlzIGNsb3NlciB0byB0b3Agb3IgYm90dG9tLlxuXHRpZiAoaXNDbG9zZXJUb1RvcCkge1xuXHRcdC8vIFdvdXRlcjogSWYgY2xvc2VyIHRvIHRvcCwgc2V0IHNjcm9sbFkgdG8gdG9wIG9mIHZpZXdwb3J0IGFuZCB0aGUgcHJvdmlkZWQgb2Zmc2V0XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlzVmlzaWJsZTogZmFsc2UsXG5cdFx0XHRzY3JvbGxZOiB0b3AgLSBtYXJnaW4gLSAob2Zmc2V0Py50b3AgfHwgMCksXG5cdFx0XHRyZWxhdGl2ZVRvOiAndG9wJyxcblx0XHR9O1xuXHR9XG5cblx0Ly8gV291dGVyOiBJZiBjbG9zZXIgdG8gYm90dG9tLCBzZXQgc2Nyb2xsWSB0byBib3R0b20gb2Ygdmlld3BvcnQgd2l0aCBhbiBvZmZzZXQgb2YgdGhlIGN1dG91dCBoZWlnaHQgYW5kIHRoZSBwcm92aWRlZCBvZmZzZXRcblx0cmV0dXJuIHtcblx0XHRpc1Zpc2libGU6IGZhbHNlLFxuXHRcdHNjcm9sbFk6IGJvdHRvbSAtIGlubmVySGVpZ2h0ICsgbWFyZ2luICsgKG9mZnNldD8uYm90dG9tIHx8IDApLFxuXHRcdHJlbGF0aXZlVG86ICdib3R0b20nLFxuXHR9O1xufTtcbiJdfQ==","import { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Injectable, inject } from '@angular/core';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { NgxWindowService } from '@ibenvandeveire/ngx-core';\nimport { BehaviorSubject, Subject, auditTime, combineLatest, concatMap, delay, distinctUntilChanged, filter, map, of, startWith, switchMap, take, takeUntil, tap, } from 'rxjs';\nimport { NgxTourStepToken } from '../../tokens';\nimport { elementIsVisibleInViewport } from '../../utils';\nimport * as i0 from \"@angular/core\";\n/**\n * A singleton service used to run help tours through an application.\n */\nexport class NgxTourService {\n    cdkOverlayService = inject(Overlay);\n    windowService = inject(NgxWindowService);\n    configuration = inject(NgxTourStepToken);\n    /**\n     * A subject to hold the destroyed event\n     */\n    destroyedSubject = new Subject();\n    /**\n     * A subject to hold the window resize event\n     */\n    windowResizeSubject = new Subject();\n    /**\n     * A subject to hold the backdrop clip event\n     */\n    backdropClipEventSubject = new Subject();\n    /**\n     * A record of registered step elements we wish to highlight\n     */\n    elements = {};\n    /**\n     * Property to hold the current body overflow behavior\n     */\n    bodyOverflow;\n    /**\n     * A record of positions to place the\n     */\n    positionMap = {\n        below: { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n        above: { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n        left: { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom' },\n        right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'bottom' },\n    };\n    /**\n     * The currently active overlay\n     */\n    overlayRef;\n    /**\n     * The amount of steps of the current tour\n     */\n    amountOfSteps = 0;\n    /**\n     * The current direction we're moving the tour in\n     */\n    currentDirection;\n    /**\n     * The currently active step in the tour as a subject\n     */\n    currentStepSubject = new BehaviorSubject(undefined);\n    /**\n     * The previously active step in the tour as a subject\n     */\n    previousStepSubject = new BehaviorSubject(undefined);\n    /**\n     * The index of the current step of the tour as a subject\n     */\n    currentIndexSubject = new BehaviorSubject(undefined);\n    /**\n     * Whether the tour has started as a subject\n     */\n    tourStartedSubject = new Subject();\n    /**\n     * Whether the tour has ended as a subject\n     */\n    tourEndedSubject = new Subject();\n    /**\n     * The currently active tour as a subject\n     */\n    currentTourSubject = new BehaviorSubject(undefined);\n    /**\n     * A subject to hold the registration events\n     */\n    registerElementSubject = new Subject();\n    /**\n     * The start scroll position of the page\n     */\n    startingScrollPosition;\n    /**\n     * The currently active tour\n     */\n    currentTour$ = this.currentTourSubject.asObservable();\n    /**\n     * The currently active step\n     */\n    currentStep$ = this.currentStepSubject\n        .asObservable()\n        .pipe(distinctUntilChanged(), filter(Boolean));\n    /**\n     * The currently active index\n     */\n    currentIndex$ = this.currentIndexSubject\n        .asObservable()\n        .pipe(distinctUntilChanged());\n    /**\n     * The previously active step\n     */\n    previousStep$ = this.previousStepSubject\n        .asObservable()\n        .pipe(distinctUntilChanged(), filter(Boolean));\n    /**\n     * Whether the tour has ended\n     */\n    tourEnded$ = this.tourEndedSubject.asObservable();\n    /**\n     * Whether the tour has started\n     */\n    tourStarted$ = this.tourStartedSubject.asObservable();\n    /**\n     * Whether the tour is active\n     */\n    tourActive$ = this.currentStepSubject\n        .asObservable()\n        .pipe(map(Boolean));\n    constructor() {\n        // Iben: We use a subject with concatMap here because we want each event to be handled correctly and the elements record should finish updating before updating it again.\n        this.registerElementSubject\n            .pipe(filter(Boolean), concatMap((event) => {\n            return this.handleRegistrationEvent(event);\n        }), takeUntil(this.destroyedSubject))\n            .subscribe();\n        // Iben: Listen to the onresize event of the window\n        this.windowService.runInBrowser(({ browserWindow }) => {\n            browserWindow.onresize = () => {\n                this.windowResizeSubject.next();\n            };\n        });\n    }\n    /**\n     * Start a provided tour\n     *\n     * @param tour - The tour we wish to start\n     * @param onClose - An optional on close function we wish to run\n     * @param startIndex - An optional index we wish to start the tour from , default this is 0\n     */\n    startTour(tour, onClose, startIndex = 0) {\n        // Wouter: Early exit if the tour is run on the server, for which this service is not intended\n        if (!this.windowService.isBrowser()) {\n            console.warn('NgxTourService: The tour service is not intended to be run on the server. The tour will not be started.');\n            return of(null);\n        }\n        this.windowService.runInBrowser(({ browserWindow, browserDocument }) => {\n            // Iben: Save the current scroll position so we can return to it when we close the tour\n            this.startingScrollPosition = browserWindow.scrollY;\n            // Iben: Save the current\n            this.bodyOverflow = browserDocument.body.style.overflow;\n        });\n        // Iben: Loop over the tour and set subjects for all elements that haven't been found yet\n        tour.forEach((step) => {\n            if (!this.elements[step.tourItem]) {\n                this.elements[step.tourItem] = new BehaviorSubject(undefined);\n            }\n        });\n        // Iben: Set the new tour\n        this.currentTourSubject.next(tour);\n        // Iben: Set the amount of steps based on the length of the tour\n        this.amountOfSteps = tour.length;\n        // Iben: Set the first two starting subjects\n        this.currentIndexSubject.next(startIndex);\n        this.tourStartedSubject.next();\n        // Wouter: Set a class onto the body to indicate onto which styling can be added by the user\n        this.handleBodyClass('set');\n        // Iben: Listen to the window resize and the backdrop clip event, so that when the window resizes, the clip path still works correctly\n        combineLatest([\n            this.windowResizeSubject.pipe(startWith(undefined)),\n            this.backdropClipEventSubject,\n        ])\n            .pipe(tap(([, event]) => {\n            // Iben: Set the clip path based on the event\n            this.setClipPath(event);\n        }), takeUntil(this.tourEnded$))\n            .subscribe();\n        // Iben: Start the first tour, and run it until the tour is ended\n        this.setStep(tour[startIndex]).pipe(takeUntil(this.tourEnded$)).subscribe();\n        // Iben: Listen to the end of the tour and run the end function when needed\n        return this.tourEndedSubject.asObservable().pipe(take(1), switchMap(() => this.runStepFunction(onClose)), tap(() => {\n            this.windowService.runInBrowser(({ browserWindow, browserDocument }) => {\n                // Iben: Scroll back to the starting position\n                browserWindow.scrollTo({ top: this.startingScrollPosition });\n                // Iben: Restore the body overflow\n                browserDocument.body.style.overflow = this.bodyOverflow;\n            });\n        }), map(() => undefined));\n    }\n    /**\n     * Registers a template element so it can be highlighted\n     *\n     * @param element - The highlighted element\n     */\n    registerElement(element) {\n        this.registerElementSubject.next({\n            tourItem: element.tourItem(),\n            element,\n            type: 'register',\n        });\n    }\n    /**\n     * Removes an element from the record\n     *\n     * @param tourItem - The id of the element\n     */\n    unregisterElement(tourItem) {\n        this.registerElementSubject.next({\n            tourItem,\n            type: 'unregister',\n        });\n    }\n    /**\n     * Closes the currently running tour\n     */\n    closeTour() {\n        // Iben: Remove the current overlay\n        if (this.overlayRef) {\n            this.overlayRef.dispose();\n            this.overlayRef = undefined;\n        }\n        // Iben: Set the current and previous item to inactive\n        this.elements[this.currentStepSubject.getValue()?.tourItem]?.getValue()?.setActive(false);\n        this.elements[this.previousStepSubject.getValue()?.tourItem]?.getValue()?.setActive(false);\n        // Iben: Reset the subjects\n        this.currentStepSubject.next(undefined);\n        this.previousStepSubject.next(undefined);\n        this.currentIndexSubject.next(undefined);\n        // Iben: Reset the tour and the tour length\n        this.currentTourSubject.next(undefined);\n        this.amountOfSteps = 0;\n        // Wouter: Remove the body class\n        this.handleBodyClass('remove');\n        // Iben: Emit the end of the tour\n        this.tourEndedSubject.next();\n        // Iben: Return an empty Observable\n        return of(null);\n    }\n    ngOnDestroy() {\n        // Iben: Complete all subscriptions\n        this.destroyedSubject.next();\n        this.destroyedSubject.complete();\n        this.tourEndedSubject.next();\n        this.tourEndedSubject.complete();\n        this.windowResizeSubject.next();\n        this.windowResizeSubject.complete();\n        // Wouter: Remove the body class\n        this.handleBodyClass('remove');\n        // Iben: Get rid of the onresize event\n        this.windowService.runInBrowser(({ browserWindow }) => {\n            browserWindow.onresize = null;\n        });\n    }\n    /**\n     * Sets a provided step in the tour\n     *\n     * @param currentStep - The provided step we want to set\n     */\n    setStep(currentStep) {\n        // Iben: Get the previous step, if it exists\n        const previousStep = this.currentStepSubject.getValue();\n        const previousItem = this.elements[previousStep?.tourItem]?.getValue();\n        // Iben: Set the previous item back to inactive\n        if (previousItem) {\n            previousItem.setActive(false);\n        }\n        // Iben: Early exit and close tour if there's no current step\n        if (!currentStep) {\n            return this.closeTour();\n        }\n        // Iben: Run the afterVisible of the previous step\n        return this.runStepFunction(previousStep?.afterVisible).pipe(\n        // Iben: Run the beforeVisible of the current step\n        concatMap(() => {\n            return this.runStepFunction(currentStep.beforeVisible);\n        }), \n        // Wouter: Add a delay to allow the change detection to be ran before the step is visualized.\n        // This makes sure the bounding box of the highlighted element is correct.\n        delay(1), concatMap(() => {\n            // Iben: If no tourItem was provided, we render the step in the center of the page\n            if (!currentStep.tourItem) {\n                return this.handleStepInteractions(currentStep);\n            }\n            // Iben: If a tourItem was provided, we know we have to search for the element\n            return this.elements[currentStep.tourItem].pipe(\n            // Iben: Check if the item already exists. If not, we wait and grab the latest emit using auditTime\n            // We do this to avoid a delay when going back and forth in the tour\n            concatMap((item) => {\n                return item\n                    ? of(item)\n                    : this.elements[currentStep.tourItem].pipe(\n                    // Iben: If no delay was provided, we use the default of 100ms\n                    auditTime(currentStep.delay || 100));\n            }), take(1), switchMap((item) => {\n                // Iben: If an item wasn't found, we move in the current direction until we find an element\n                if (!item) {\n                    return this.handleNext(this.currentDirection || 'next');\n                }\n                // Iben: If the item was found, we visualize the step\n                return this.handleStepInteractions(currentStep, item);\n            }));\n        }));\n    }\n    /**\n     * Handles the next action in the tour\n     *\n     * @param direction - The direction we wish to move in\n     */\n    handleNext(direction) {\n        // Iben set the current direction so we know in which way we're moving the tour\n        this.currentDirection = direction;\n        // Iben: Get the new index\n        const index = direction === 'next'\n            ? this.currentIndexSubject.getValue() + 1\n            : this.currentIndexSubject.getValue() - 1;\n        // Iben: Update the new index\n        this.currentIndexSubject.next(index);\n        // Iben: Set the next step in the tour\n        return this.setStep(this.currentTourSubject.getValue()[index]);\n    }\n    /**\n     * Visualizes the current step\n     *\n     * @private\n     * @param currentStep - The step we wish to visualize\n     * @param item - The item we wish to highlight\n     */\n    visualizeStep(currentStep, item) {\n        return this.windowService.runInBrowser(({ browserDocument, browserWindow }) => {\n            // Iben: Update the previous and current step subject\n            this.previousStepSubject.next(this.currentStepSubject.getValue());\n            this.currentStepSubject.next(currentStep);\n            // Iben: Restore the body overflow so we can scroll to the right element\n            browserDocument.body.style.overflow = this.bodyOverflow;\n            // Iben: Calculate the defaultOffsets\n            // Wouter: This needs to happen before we calculate the scroll position\n            const margin = this.getCutoutMargin(currentStep);\n            // Iben: Scroll to the top before each step to get consistent behavior when going back and forth\n            browserWindow.scrollTo({ top: 0 });\n            const { isVisible, scrollY, relativeTo } = elementIsVisibleInViewport(item?.elementRef?.nativeElement, margin, { ...this.configuration.offset, ...currentStep?.offset });\n            // Iben: Scroll to the element if it's not in view\n            if (!isVisible) {\n                browserWindow.scrollTo({ top: scrollY });\n            }\n            // Iben: Disable scrolling\n            browserDocument.body.style.overflow = 'hidden';\n            // Wouter: Calculate the step's position so that it is rendered relatively to the cutout\n            const relativeDisplay = relativeTo == 'bottom' ? 'above' : 'below';\n            const positionY = currentStep.position ? currentStep.position : relativeDisplay;\n            const offsetY = positionY === 'above' ? -margin : margin;\n            const offsetX = currentStep.position === 'right' ? margin : -margin;\n            // Iben: Determine the position of the item based on whether a tourItem was provided\n            const positionStrategy = item\n                ? this.cdkOverlayService\n                    .position()\n                    .flexibleConnectedTo(item.elementRef)\n                    .withDefaultOffsetY(offsetY)\n                    .withDefaultOffsetX(offsetX)\n                    .withPositions([this.positionMap[currentStep.position || relativeDisplay]])\n                : this.cdkOverlayService\n                    .position()\n                    .global()\n                    .centerHorizontally()\n                    .centerVertically();\n            // Iben: Create an overlay if it does not exist\n            if (!this.overlayRef) {\n                // Iben: Create an overlay config\n                const config = new OverlayConfig({\n                    hasBackdrop: !currentStep.disableBackDrop,\n                    // Iben: Due to issues with how the scrollingStrategy.block() works with scrolling to items that are not in view, we set this to noop\n                    scrollStrategy: this.cdkOverlayService.scrollStrategies.noop(),\n                    positionStrategy,\n                });\n                // Create the overlay\n                this.overlayRef = this.cdkOverlayService.create(config);\n            }\n            else {\n                // Iben: Detach the previous portal\n                this.overlayRef.detach();\n                // Iben: If the overlay exists, we update the position strategy\n                this.overlayRef.updatePositionStrategy(positionStrategy);\n                // Iben: If the current step has no backdrop, we detach the backdrop\n                if (currentStep.disableBackDrop) {\n                    this.overlayRef.detachBackdrop();\n                }\n            }\n            // Iben: Create a portal and attach the component\n            const portal = new ComponentPortal(\n            // Iben: If the currentStep has its own component, we overwrite it\n            currentStep.component || this.configuration.component);\n            const componentRef = this.overlayRef.attach(portal);\n            // Iben: Update the data of the component\n            componentRef.setInput('content', currentStep.content);\n            componentRef.setInput('title', currentStep.title);\n            componentRef.setInput('data', currentStep.data);\n            componentRef.setInput('currentStep', this.currentIndexSubject.getValue());\n            componentRef.setInput('amountOfSteps', this.amountOfSteps);\n            componentRef.setInput('position', item ? currentStep.position || 'below' : undefined);\n            componentRef.setInput('stepClass', currentStep.stepClass);\n            componentRef.setInput('elementId', item?.elementId);\n            // Iben: Highlight the current html item as active if one is provided\n            if (item) {\n                // Iben: Set the active class of the item\n                item.setActive(true);\n            }\n            // Iben: Set the clip path of the backdrop\n            this.backdropClipEventSubject.next({\n                backdrop: this.overlayRef.backdropElement,\n                item: item?.elementRef?.nativeElement,\n                cutoutMargin: this.getCutoutMargin(currentStep),\n            });\n            // Iben: Return the new component\n            return componentRef;\n        });\n    }\n    /**\n     * Handles the interactions with a step\n     *\n     * @param  currentStep - The provided step\n     * @param  item - An optional item\n     */\n    handleStepInteractions(currentStep, item) {\n        // Iben: If the item was found, we visualize the step\n        const componentRef = this.visualizeStep(currentStep, item);\n        return this.runStepFunction(currentStep.onVisible).pipe(concatMap(() => {\n            // Iben: Listen to the component interactions and respond accordingly\n            return outputToObservable(componentRef.instance.handleInteraction).pipe(take(1), concatMap((interaction) => {\n                return interaction === 'close'\n                    ? this.closeTour()\n                    : this.handleNext(interaction);\n            }));\n        }));\n    }\n    /**\n     * Returns an observable based on whether a step function was provided\n     *\n     * @param stepFunction - The provided step function\n     */\n    runStepFunction(stepFunction) {\n        // Iben: If no step function was provided, we simply return a single void of\n        if (!stepFunction) {\n            return of(null);\n        }\n        // Iben: Run the step function and depending on the result, we return the result or an of.\n        return (stepFunction(this.currentStepSubject.getValue(), this.currentIndexSubject.getValue()) ||\n            of(null)).pipe(\n        // Iben: We add a take(1) as an extra safety measure in case users end up not taking care of this\n        take(1));\n    }\n    /**\n     * Surrounds the provided item with a cutout in the backdrop\n     *\n     * @private\n     * @param event.backdrop - The provided backdrop\n     * @param event.item - The item we wish to surround\n     * @param event.cutoutMargin - The amount of margin we want around the item\n     */\n    setClipPath(event) {\n        const { backdrop, item, cutoutMargin } = event;\n        // Iben: Early exit in case no backdrop or item is present\n        if (!backdrop || !item) {\n            return;\n        }\n        // Iben: Get the positions of the path around the item\n        const { top, left, bottom, right } = item.getBoundingClientRect();\n        const positionTop = top - cutoutMargin;\n        const positionLeft = left - cutoutMargin;\n        const positionBottom = bottom + cutoutMargin;\n        const positionRight = right + cutoutMargin;\n        // Iben: Create the box around the item\n        const box = `${positionLeft}px ${positionTop}px, ${positionRight}px ${positionTop}px, ${positionRight}px ${positionBottom}px, ${positionLeft}px ${positionBottom}px, ${positionLeft}px ${positionTop}px`;\n        // Iben: Clip the box out of the backdrop\n        backdrop.style.clipPath = `polygon(evenodd, 0% 0%, 0% 100%, 100% 100%, 100% 0%, 0% 0%,${box})`;\n    }\n    /**\n     * Handles the registration event\n     *\n     * @param event - The registration event we wish to handle\n     */\n    handleRegistrationEvent(event) {\n        // Iben: Early exit if no event was found\n        if (!event) {\n            return of(null);\n        }\n        // Iben: Unregister the element if it's an unregister event\n        if (event.type === 'unregister') {\n            this.elements[event.tourItem]?.next(undefined);\n            return of(null);\n        }\n        // Iben: Early exit if no element was found\n        if (!event.element) {\n            return of(null);\n        }\n        // Iben: Check if there is already an item with the current id. If it is, update it, if not, make a new BehaviorSubject\n        const elementSubject = this.elements[event.tourItem];\n        // Iben: If we have an element subject already, we check if it already has an element\n        if (elementSubject) {\n            // Iben: If the current value is undefined, we register the element\n            if (elementSubject.getValue() === undefined) {\n                elementSubject.next(event.element);\n            }\n            return of(null);\n        }\n        // Iben: If no BehaviorSubject exists, we create one\n        this.elements[event.tourItem] = new BehaviorSubject(event.element);\n        return of(null);\n    }\n    /**\n     * Returns the provided cutoutMargin of a step, or 5px if none is provided\n     *\n     * @param step - The current step\n     */\n    getCutoutMargin(step) {\n        return step?.cutoutMargin === undefined ? 5 : step.cutoutMargin;\n    }\n    /**\n     * Sets or removes the body class to indicate the tour is active\n     */\n    handleBodyClass(action) {\n        this.windowService.runInBrowser(({ browserDocument }) => {\n            if (action === 'set') {\n                browserDocument.body.classList.add('ngx-tour-active');\n            }\n            else {\n                browserDocument.body.classList.remove('ngx-tour-active');\n            }\n        });\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL3NlcnZpY2VzL3RvdXIvdG91ci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQWdCLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUNOLGVBQWUsRUFFZixPQUFPLEVBQ1AsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEVBQ1QsS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILEVBQUUsRUFDRixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNILE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBV2hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFekQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQUNULGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekMsYUFBYSxHQUFHLE1BQU0sQ0FBNEIsZ0JBQWdCLENBQUMsQ0FBQztJQUVyRjs7T0FFRztJQUNjLGdCQUFnQixHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXZFOztP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QUMsTUFBd0I7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7WUFDdkQsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDUCxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO3VHQTlwQlcsY0FBYzsyR0FBZCxjQUFjLGNBRmQsTUFBTTs7MkZBRU4sY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0VG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTmd4V2luZG93U2VydmljZSB9IGZyb20gJ0BpYmVudmFuZGV2ZWlyZS9uZ3gtY29yZSc7XG5pbXBvcnQge1xuXHRCZWhhdmlvclN1YmplY3QsXG5cdE9ic2VydmFibGUsXG5cdFN1YmplY3QsXG5cdGF1ZGl0VGltZSxcblx0Y29tYmluZUxhdGVzdCxcblx0Y29uY2F0TWFwLFxuXHRkZWxheSxcblx0ZGlzdGluY3RVbnRpbENoYW5nZWQsXG5cdGZpbHRlcixcblx0bWFwLFxuXHRvZixcblx0c3RhcnRXaXRoLFxuXHRzd2l0Y2hNYXAsXG5cdHRha2UsXG5cdHRha2VVbnRpbCxcblx0dGFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4VG91clN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuaW1wb3J0IHsgTmd4VG91ckl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IE5neFRvdXJTdGVwVG9rZW4gfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHtcblx0Tmd4VG91ckRpcmVjdGlvbixcblx0Tmd4VG91ckFjdGlvbixcblx0Tmd4VG91clN0ZXAsXG5cdE5neFRvdXJJbnRlcmFjdGlvbixcblx0Tmd4VG91clN0ZXBQb3NpdGlvbixcblx0Tmd4VG91clJlZ2lzdHJhdGlvbkV2ZW50LFxuXHROZ3hUb3VyQmFja2Ryb3BDbGlwRXZlbnQsXG5cdE5neFRvdXJUb2tlbkNvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vKipcbiAqIEEgc2luZ2xldG9uIHNlcnZpY2UgdXNlZCB0byBydW4gaGVscCB0b3VycyB0aHJvdWdoIGFuIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmd4VG91clNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IGNka092ZXJsYXlTZXJ2aWNlID0gaW5qZWN0KE92ZXJsYXkpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2UgPSBpbmplY3QoTmd4V2luZG93U2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbiA9IGluamVjdDxOZ3hUb3VyVG9rZW5Db25maWd1cmF0aW9uPihOZ3hUb3VyU3RlcFRva2VuKTtcblxuXHQvKipcblx0ICogQSBzdWJqZWN0IHRvIGhvbGQgdGhlIGRlc3Ryb3llZCBldmVudFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBkZXN0cm95ZWRTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuXHQvKipcblx0ICogQSBzdWJqZWN0IHRvIGhvbGQgdGhlIHdpbmRvdyByZXNpemUgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgd2luZG93UmVzaXplU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0byBob2xkIHRoZSBiYWNrZHJvcCBjbGlwIGV2ZW50XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IGJhY2tkcm9wQ2xpcEV2ZW50U3ViamVjdDogU3ViamVjdDxOZ3hUb3VyQmFja2Ryb3BDbGlwRXZlbnQ+ID1cblx0XHRuZXcgU3ViamVjdDxOZ3hUb3VyQmFja2Ryb3BDbGlwRXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIEEgcmVjb3JkIG9mIHJlZ2lzdGVyZWQgc3RlcCBlbGVtZW50cyB3ZSB3aXNoIHRvIGhpZ2hsaWdodFxuXHQgKi9cblx0cHJpdmF0ZSBlbGVtZW50czogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PE5neFRvdXJJdGVtRGlyZWN0aXZlPj4gPSB7fTtcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gaG9sZCB0aGUgY3VycmVudCBib2R5IG92ZXJmbG93IGJlaGF2aW9yXG5cdCAqL1xuXHRwcml2YXRlIGJvZHlPdmVyZmxvdzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBBIHJlY29yZCBvZiBwb3NpdGlvbnMgdG8gcGxhY2UgdGhlXG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHBvc2l0aW9uTWFwOiBSZWNvcmQ8Tmd4VG91clN0ZXBQb3NpdGlvbiwgQ29ubmVjdGVkUG9zaXRpb24+ID0ge1xuXHRcdGJlbG93OiB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sXG5cdFx0YWJvdmU6IHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcblx0XHRsZWZ0OiB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnYm90dG9tJyB9LFxuXHRcdHJpZ2h0OiB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnYm90dG9tJyB9LFxuXHR9O1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBvdmVybGF5XG5cdCAqL1xuXHRwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2Ygc3RlcHMgb2YgdGhlIGN1cnJlbnQgdG91clxuXHQgKi9cblx0cHJpdmF0ZSBhbW91bnRPZlN0ZXBzOiBudW1iZXIgPSAwO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBkaXJlY3Rpb24gd2UncmUgbW92aW5nIHRoZSB0b3VyIGluXG5cdCAqL1xuXHRwcml2YXRlIGN1cnJlbnREaXJlY3Rpb246IE5neFRvdXJEaXJlY3Rpb247XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIHN0ZXAgaW4gdGhlIHRvdXIgYXMgYSBzdWJqZWN0XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRTdGVwU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PE5neFRvdXJTdGVwPiA9XG5cdFx0bmV3IEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VyU3RlcD4odW5kZWZpbmVkKTtcblxuXHQvKipcblx0ICogVGhlIHByZXZpb3VzbHkgYWN0aXZlIHN0ZXAgaW4gdGhlIHRvdXIgYXMgYSBzdWJqZWN0XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHByZXZpb3VzU3RlcFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VyU3RlcD4gPVxuXHRcdG5ldyBCZWhhdmlvclN1YmplY3Q8Tmd4VG91clN0ZXA+KHVuZGVmaW5lZCk7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB0b3VyIGFzIGEgc3ViamVjdFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBjdXJyZW50SW5kZXhTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihcblx0XHR1bmRlZmluZWRcblx0KTtcblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgdG91ciBoYXMgc3RhcnRlZCBhcyBhIHN1YmplY3Rcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgdG91clN0YXJ0ZWRTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgdG91ciBoYXMgZW5kZWQgYXMgYSBzdWJqZWN0XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHRvdXJFbmRlZFN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSB0b3VyIGFzIGEgc3ViamVjdFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBjdXJyZW50VG91clN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VyU3RlcFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG5cdFx0Tmd4VG91clN0ZXBbXVxuXHQ+KHVuZGVmaW5lZCk7XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0byBob2xkIHRoZSByZWdpc3RyYXRpb24gZXZlbnRzXG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdGVyRWxlbWVudFN1YmplY3Q6IFN1YmplY3Q8Tmd4VG91clJlZ2lzdHJhdGlvbkV2ZW50PiA9XG5cdFx0bmV3IFN1YmplY3Q8Tmd4VG91clJlZ2lzdHJhdGlvbkV2ZW50PigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgc3RhcnQgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBwYWdlXG5cdCAqL1xuXHRwcml2YXRlIHN0YXJ0aW5nU2Nyb2xsUG9zaXRpb246IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnRseSBhY3RpdmUgdG91clxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGN1cnJlbnRUb3VyJDogT2JzZXJ2YWJsZTxOZ3hUb3VyU3RlcFtdPiA9XG5cdFx0dGhpcy5jdXJyZW50VG91clN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIHN0ZXBcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjdXJyZW50U3RlcCQ6IE9ic2VydmFibGU8Tmd4VG91clN0ZXA+ID0gdGhpcy5jdXJyZW50U3RlcFN1YmplY3Rcblx0XHQuYXNPYnNlcnZhYmxlKClcblx0XHQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBmaWx0ZXIoQm9vbGVhbikpO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBpbmRleFxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGN1cnJlbnRJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuY3VycmVudEluZGV4U3ViamVjdFxuXHRcdC5hc09ic2VydmFibGUoKVxuXHRcdC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG5cdC8qKlxuXHQgKiBUaGUgcHJldmlvdXNseSBhY3RpdmUgc3RlcFxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IHByZXZpb3VzU3RlcCQ6IE9ic2VydmFibGU8Tmd4VG91clN0ZXA+ID0gdGhpcy5wcmV2aW91c1N0ZXBTdWJqZWN0XG5cdFx0LmFzT2JzZXJ2YWJsZSgpXG5cdFx0LnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZmlsdGVyKEJvb2xlYW4pKTtcblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgdG91ciBoYXMgZW5kZWRcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSB0b3VyRW5kZWQkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy50b3VyRW5kZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSB0b3VyIGhhcyBzdGFydGVkXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgdG91clN0YXJ0ZWQkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy50b3VyU3RhcnRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIHRvdXIgaXMgYWN0aXZlXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgdG91ckFjdGl2ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmN1cnJlbnRTdGVwU3ViamVjdFxuXHRcdC5hc09ic2VydmFibGUoKVxuXHRcdC5waXBlKG1hcChCb29sZWFuKSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Ly8gSWJlbjogV2UgdXNlIGEgc3ViamVjdCB3aXRoIGNvbmNhdE1hcCBoZXJlIGJlY2F1c2Ugd2Ugd2FudCBlYWNoIGV2ZW50IHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5IGFuZCB0aGUgZWxlbWVudHMgcmVjb3JkIHNob3VsZCBmaW5pc2ggdXBkYXRpbmcgYmVmb3JlIHVwZGF0aW5nIGl0IGFnYWluLlxuXHRcdHRoaXMucmVnaXN0ZXJFbGVtZW50U3ViamVjdFxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdGZpbHRlcihCb29sZWFuKSxcblx0XHRcdFx0Y29uY2F0TWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVJlZ2lzdHJhdGlvbkV2ZW50KGV2ZW50KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZFN1YmplY3QpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cblx0XHQvLyBJYmVuOiBMaXN0ZW4gdG8gdGhlIG9ucmVzaXplIGV2ZW50IG9mIHRoZSB3aW5kb3dcblx0XHR0aGlzLndpbmRvd1NlcnZpY2UucnVuSW5Ccm93c2VyKCh7IGJyb3dzZXJXaW5kb3cgfSkgPT4ge1xuXHRcdFx0YnJvd3NlcldpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy53aW5kb3dSZXNpemVTdWJqZWN0Lm5leHQoKTtcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU3RhcnQgYSBwcm92aWRlZCB0b3VyXG5cdCAqXG5cdCAqIEBwYXJhbSB0b3VyIC0gVGhlIHRvdXIgd2Ugd2lzaCB0byBzdGFydFxuXHQgKiBAcGFyYW0gb25DbG9zZSAtIEFuIG9wdGlvbmFsIG9uIGNsb3NlIGZ1bmN0aW9uIHdlIHdpc2ggdG8gcnVuXG5cdCAqIEBwYXJhbSBzdGFydEluZGV4IC0gQW4gb3B0aW9uYWwgaW5kZXggd2Ugd2lzaCB0byBzdGFydCB0aGUgdG91ciBmcm9tICwgZGVmYXVsdCB0aGlzIGlzIDBcblx0ICovXG5cdHB1YmxpYyBzdGFydFRvdXIoXG5cdFx0dG91cjogTmd4VG91clN0ZXBbXSxcblx0XHRvbkNsb3NlPzogTmd4VG91ckFjdGlvbixcblx0XHRzdGFydEluZGV4ID0gMFxuXHQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcblx0XHQvLyBXb3V0ZXI6IEVhcmx5IGV4aXQgaWYgdGhlIHRvdXIgaXMgcnVuIG9uIHRoZSBzZXJ2ZXIsIGZvciB3aGljaCB0aGlzIHNlcnZpY2UgaXMgbm90IGludGVuZGVkXG5cdFx0aWYgKCF0aGlzLndpbmRvd1NlcnZpY2UuaXNCcm93c2VyKCkpIHtcblx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0J05neFRvdXJTZXJ2aWNlOiBUaGUgdG91ciBzZXJ2aWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBydW4gb24gdGhlIHNlcnZlci4gVGhlIHRvdXIgd2lsbCBub3QgYmUgc3RhcnRlZC4nXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XG5cdFx0fVxuXG5cdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyV2luZG93LCBicm93c2VyRG9jdW1lbnQgfSkgPT4ge1xuXHRcdFx0Ly8gSWJlbjogU2F2ZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gc28gd2UgY2FuIHJldHVybiB0byBpdCB3aGVuIHdlIGNsb3NlIHRoZSB0b3VyXG5cdFx0XHR0aGlzLnN0YXJ0aW5nU2Nyb2xsUG9zaXRpb24gPSBicm93c2VyV2luZG93LnNjcm9sbFk7XG5cblx0XHRcdC8vIEliZW46IFNhdmUgdGhlIGN1cnJlbnRcblx0XHRcdHRoaXMuYm9keU92ZXJmbG93ID0gYnJvd3NlckRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG5cdFx0fSk7XG5cblx0XHQvLyBJYmVuOiBMb29wIG92ZXIgdGhlIHRvdXIgYW5kIHNldCBzdWJqZWN0cyBmb3IgYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZW4ndCBiZWVuIGZvdW5kIHlldFxuXHRcdHRvdXIuZm9yRWFjaCgoc3RlcCkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLmVsZW1lbnRzW3N0ZXAudG91ckl0ZW1dKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudHNbc3RlcC50b3VySXRlbV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5neFRvdXJJdGVtRGlyZWN0aXZlPih1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBuZXcgdG91clxuXHRcdHRoaXMuY3VycmVudFRvdXJTdWJqZWN0Lm5leHQodG91cik7XG5cblx0XHQvLyBJYmVuOiBTZXQgdGhlIGFtb3VudCBvZiBzdGVwcyBiYXNlZCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSB0b3VyXG5cdFx0dGhpcy5hbW91bnRPZlN0ZXBzID0gdG91ci5sZW5ndGg7XG5cblx0XHQvLyBJYmVuOiBTZXQgdGhlIGZpcnN0IHR3byBzdGFydGluZyBzdWJqZWN0c1xuXHRcdHRoaXMuY3VycmVudEluZGV4U3ViamVjdC5uZXh0KHN0YXJ0SW5kZXgpO1xuXHRcdHRoaXMudG91clN0YXJ0ZWRTdWJqZWN0Lm5leHQoKTtcblxuXHRcdC8vIFdvdXRlcjogU2V0IGEgY2xhc3Mgb250byB0aGUgYm9keSB0byBpbmRpY2F0ZSBvbnRvIHdoaWNoIHN0eWxpbmcgY2FuIGJlIGFkZGVkIGJ5IHRoZSB1c2VyXG5cdFx0dGhpcy5oYW5kbGVCb2R5Q2xhc3MoJ3NldCcpO1xuXG5cdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSB3aW5kb3cgcmVzaXplIGFuZCB0aGUgYmFja2Ryb3AgY2xpcCBldmVudCwgc28gdGhhdCB3aGVuIHRoZSB3aW5kb3cgcmVzaXplcywgdGhlIGNsaXAgcGF0aCBzdGlsbCB3b3JrcyBjb3JyZWN0bHlcblx0XHRjb21iaW5lTGF0ZXN0KFtcblx0XHRcdHRoaXMud2luZG93UmVzaXplU3ViamVjdC5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpKSxcblx0XHRcdHRoaXMuYmFja2Ryb3BDbGlwRXZlbnRTdWJqZWN0LFxuXHRcdF0pXG5cdFx0XHQucGlwZShcblx0XHRcdFx0dGFwKChbLCBldmVudF0pID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBTZXQgdGhlIGNsaXAgcGF0aCBiYXNlZCBvbiB0aGUgZXZlbnRcblx0XHRcdFx0XHR0aGlzLnNldENsaXBQYXRoKGV2ZW50KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLnRvdXJFbmRlZCQpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cblx0XHQvLyBJYmVuOiBTdGFydCB0aGUgZmlyc3QgdG91ciwgYW5kIHJ1biBpdCB1bnRpbCB0aGUgdG91ciBpcyBlbmRlZFxuXHRcdHRoaXMuc2V0U3RlcCh0b3VyW3N0YXJ0SW5kZXhdKS5waXBlKHRha2VVbnRpbCh0aGlzLnRvdXJFbmRlZCQpKS5zdWJzY3JpYmUoKTtcblxuXHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgZW5kIG9mIHRoZSB0b3VyIGFuZCBydW4gdGhlIGVuZCBmdW5jdGlvbiB3aGVuIG5lZWRlZFxuXHRcdHJldHVybiB0aGlzLnRvdXJFbmRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcblx0XHRcdHRha2UoMSksXG5cdFx0XHRzd2l0Y2hNYXAoKCkgPT4gdGhpcy5ydW5TdGVwRnVuY3Rpb24ob25DbG9zZSkpLFxuXHRcdFx0dGFwKCgpID0+IHtcblx0XHRcdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyV2luZG93LCBicm93c2VyRG9jdW1lbnQgfSkgPT4ge1xuXHRcdFx0XHRcdC8vIEliZW46IFNjcm9sbCBiYWNrIHRvIHRoZSBzdGFydGluZyBwb3NpdGlvblxuXHRcdFx0XHRcdGJyb3dzZXJXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRoaXMuc3RhcnRpbmdTY3JvbGxQb3NpdGlvbiB9KTtcblxuXHRcdFx0XHRcdC8vIEliZW46IFJlc3RvcmUgdGhlIGJvZHkgb3ZlcmZsb3dcblx0XHRcdFx0XHRicm93c2VyRG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHRoaXMuYm9keU92ZXJmbG93O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pLFxuXHRcdFx0bWFwKCgpID0+IHVuZGVmaW5lZClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhIHRlbXBsYXRlIGVsZW1lbnQgc28gaXQgY2FuIGJlIGhpZ2hsaWdodGVkXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGhpZ2hsaWdodGVkIGVsZW1lbnRcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckVsZW1lbnQoZWxlbWVudDogTmd4VG91ckl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcblx0XHR0aGlzLnJlZ2lzdGVyRWxlbWVudFN1YmplY3QubmV4dCh7XG5cdFx0XHR0b3VySXRlbTogZWxlbWVudC50b3VySXRlbSgpLFxuXHRcdFx0ZWxlbWVudCxcblx0XHRcdHR5cGU6ICdyZWdpc3RlcicsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbiBlbGVtZW50IGZyb20gdGhlIHJlY29yZFxuXHQgKlxuXHQgKiBAcGFyYW0gdG91ckl0ZW0gLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnRcblx0ICovXG5cdHB1YmxpYyB1bnJlZ2lzdGVyRWxlbWVudCh0b3VySXRlbTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5yZWdpc3RlckVsZW1lbnRTdWJqZWN0Lm5leHQoe1xuXHRcdFx0dG91ckl0ZW0sXG5cdFx0XHR0eXBlOiAndW5yZWdpc3RlcicsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBjdXJyZW50bHkgcnVubmluZyB0b3VyXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2VUb3VyKCk6IE9ic2VydmFibGU8Tmd4VG91ckludGVyYWN0aW9uPiB7XG5cdFx0Ly8gSWJlbjogUmVtb3ZlIHRoZSBjdXJyZW50IG92ZXJsYXlcblx0XHRpZiAodGhpcy5vdmVybGF5UmVmKSB7XG5cdFx0XHR0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFNldCB0aGUgY3VycmVudCBhbmQgcHJldmlvdXMgaXRlbSB0byBpbmFjdGl2ZVxuXHRcdHRoaXMuZWxlbWVudHNbdGhpcy5jdXJyZW50U3RlcFN1YmplY3QuZ2V0VmFsdWUoKT8udG91ckl0ZW1dPy5nZXRWYWx1ZSgpPy5zZXRBY3RpdmUoZmFsc2UpO1xuXHRcdHRoaXMuZWxlbWVudHNbdGhpcy5wcmV2aW91c1N0ZXBTdWJqZWN0LmdldFZhbHVlKCk/LnRvdXJJdGVtXT8uZ2V0VmFsdWUoKT8uc2V0QWN0aXZlKGZhbHNlKTtcblxuXHRcdC8vIEliZW46IFJlc2V0IHRoZSBzdWJqZWN0c1xuXHRcdHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0Lm5leHQodW5kZWZpbmVkKTtcblx0XHR0aGlzLnByZXZpb3VzU3RlcFN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMuY3VycmVudEluZGV4U3ViamVjdC5uZXh0KHVuZGVmaW5lZCk7XG5cblx0XHQvLyBJYmVuOiBSZXNldCB0aGUgdG91ciBhbmQgdGhlIHRvdXIgbGVuZ3RoXG5cdFx0dGhpcy5jdXJyZW50VG91clN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMuYW1vdW50T2ZTdGVwcyA9IDA7XG5cblx0XHQvLyBXb3V0ZXI6IFJlbW92ZSB0aGUgYm9keSBjbGFzc1xuXHRcdHRoaXMuaGFuZGxlQm9keUNsYXNzKCdyZW1vdmUnKTtcblxuXHRcdC8vIEliZW46IEVtaXQgdGhlIGVuZCBvZiB0aGUgdG91clxuXHRcdHRoaXMudG91ckVuZGVkU3ViamVjdC5uZXh0KCk7XG5cblx0XHQvLyBJYmVuOiBSZXR1cm4gYW4gZW1wdHkgT2JzZXJ2YWJsZVxuXHRcdHJldHVybiBvZihudWxsKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IENvbXBsZXRlIGFsbCBzdWJzY3JpcHRpb25zXG5cdFx0dGhpcy5kZXN0cm95ZWRTdWJqZWN0Lm5leHQoKTtcblx0XHR0aGlzLmRlc3Ryb3llZFN1YmplY3QuY29tcGxldGUoKTtcblx0XHR0aGlzLnRvdXJFbmRlZFN1YmplY3QubmV4dCgpO1xuXHRcdHRoaXMudG91ckVuZGVkU3ViamVjdC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMud2luZG93UmVzaXplU3ViamVjdC5uZXh0KCk7XG5cdFx0dGhpcy53aW5kb3dSZXNpemVTdWJqZWN0LmNvbXBsZXRlKCk7XG5cblx0XHQvLyBXb3V0ZXI6IFJlbW92ZSB0aGUgYm9keSBjbGFzc1xuXHRcdHRoaXMuaGFuZGxlQm9keUNsYXNzKCdyZW1vdmUnKTtcblxuXHRcdC8vIEliZW46IEdldCByaWQgb2YgdGhlIG9ucmVzaXplIGV2ZW50XG5cdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyV2luZG93IH0pID0+IHtcblx0XHRcdGJyb3dzZXJXaW5kb3cub25yZXNpemUgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBwcm92aWRlZCBzdGVwIGluIHRoZSB0b3VyXG5cdCAqXG5cdCAqIEBwYXJhbSBjdXJyZW50U3RlcCAtIFRoZSBwcm92aWRlZCBzdGVwIHdlIHdhbnQgdG8gc2V0XG5cdCAqL1xuXHRwcml2YXRlIHNldFN0ZXAoY3VycmVudFN0ZXA6IE5neFRvdXJTdGVwKTogT2JzZXJ2YWJsZTxOZ3hUb3VySW50ZXJhY3Rpb24+IHtcblx0XHQvLyBJYmVuOiBHZXQgdGhlIHByZXZpb3VzIHN0ZXAsIGlmIGl0IGV4aXN0c1xuXHRcdGNvbnN0IHByZXZpb3VzU3RlcCA9IHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgcHJldmlvdXNJdGVtID0gdGhpcy5lbGVtZW50c1twcmV2aW91c1N0ZXA/LnRvdXJJdGVtXT8uZ2V0VmFsdWUoKTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgcHJldmlvdXMgaXRlbSBiYWNrIHRvIGluYWN0aXZlXG5cdFx0aWYgKHByZXZpb3VzSXRlbSkge1xuXHRcdFx0cHJldmlvdXNJdGVtLnNldEFjdGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBhbmQgY2xvc2UgdG91ciBpZiB0aGVyZSdzIG5vIGN1cnJlbnQgc3RlcFxuXHRcdGlmICghY3VycmVudFN0ZXApIHtcblx0XHRcdHJldHVybiB0aGlzLmNsb3NlVG91cigpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFJ1biB0aGUgYWZ0ZXJWaXNpYmxlIG9mIHRoZSBwcmV2aW91cyBzdGVwXG5cdFx0cmV0dXJuIHRoaXMucnVuU3RlcEZ1bmN0aW9uKHByZXZpb3VzU3RlcD8uYWZ0ZXJWaXNpYmxlKS5waXBlKFxuXHRcdFx0Ly8gSWJlbjogUnVuIHRoZSBiZWZvcmVWaXNpYmxlIG9mIHRoZSBjdXJyZW50IHN0ZXBcblx0XHRcdGNvbmNhdE1hcCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJ1blN0ZXBGdW5jdGlvbihjdXJyZW50U3RlcC5iZWZvcmVWaXNpYmxlKTtcblx0XHRcdH0pLFxuXHRcdFx0Ly8gV291dGVyOiBBZGQgYSBkZWxheSB0byBhbGxvdyB0aGUgY2hhbmdlIGRldGVjdGlvbiB0byBiZSByYW4gYmVmb3JlIHRoZSBzdGVwIGlzIHZpc3VhbGl6ZWQuXG5cdFx0XHQvLyBUaGlzIG1ha2VzIHN1cmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgaGlnaGxpZ2h0ZWQgZWxlbWVudCBpcyBjb3JyZWN0LlxuXHRcdFx0ZGVsYXkoMSksXG5cdFx0XHRjb25jYXRNYXAoKCkgPT4ge1xuXHRcdFx0XHQvLyBJYmVuOiBJZiBubyB0b3VySXRlbSB3YXMgcHJvdmlkZWQsIHdlIHJlbmRlciB0aGUgc3RlcCBpbiB0aGUgY2VudGVyIG9mIHRoZSBwYWdlXG5cdFx0XHRcdGlmICghY3VycmVudFN0ZXAudG91ckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVTdGVwSW50ZXJhY3Rpb25zKGN1cnJlbnRTdGVwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEliZW46IElmIGEgdG91ckl0ZW0gd2FzIHByb3ZpZGVkLCB3ZSBrbm93IHdlIGhhdmUgdG8gc2VhcmNoIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbGVtZW50c1tjdXJyZW50U3RlcC50b3VySXRlbV0ucGlwZShcblx0XHRcdFx0XHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgaXRlbSBhbHJlYWR5IGV4aXN0cy4gSWYgbm90LCB3ZSB3YWl0IGFuZCBncmFiIHRoZSBsYXRlc3QgZW1pdCB1c2luZyBhdWRpdFRpbWVcblx0XHRcdFx0XHQvLyBXZSBkbyB0aGlzIHRvIGF2b2lkIGEgZGVsYXkgd2hlbiBnb2luZyBiYWNrIGFuZCBmb3J0aCBpbiB0aGUgdG91clxuXHRcdFx0XHRcdGNvbmNhdE1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1cblx0XHRcdFx0XHRcdFx0PyBvZihpdGVtKVxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMuZWxlbWVudHNbY3VycmVudFN0ZXAudG91ckl0ZW1dLnBpcGUoXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJYmVuOiBJZiBubyBkZWxheSB3YXMgcHJvdmlkZWQsIHdlIHVzZSB0aGUgZGVmYXVsdCBvZiAxMDBtc1xuXHRcdFx0XHRcdFx0XHRcdFx0YXVkaXRUaW1lKGN1cnJlbnRTdGVwLmRlbGF5IHx8IDEwMClcblx0XHRcdFx0XHRcdFx0ICApO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdFx0c3dpdGNoTWFwKChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBJYmVuOiBJZiBhbiBpdGVtIHdhc24ndCBmb3VuZCwgd2UgbW92ZSBpbiB0aGUgY3VycmVudCBkaXJlY3Rpb24gdW50aWwgd2UgZmluZCBhbiBlbGVtZW50XG5cdFx0XHRcdFx0XHRpZiAoIWl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTmV4dCh0aGlzLmN1cnJlbnREaXJlY3Rpb24gfHwgJ25leHQnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEliZW46IElmIHRoZSBpdGVtIHdhcyBmb3VuZCwgd2UgdmlzdWFsaXplIHRoZSBzdGVwXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVTdGVwSW50ZXJhY3Rpb25zKGN1cnJlbnRTdGVwLCBpdGVtKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIG5leHQgYWN0aW9uIGluIHRoZSB0b3VyXG5cdCAqXG5cdCAqIEBwYXJhbSBkaXJlY3Rpb24gLSBUaGUgZGlyZWN0aW9uIHdlIHdpc2ggdG8gbW92ZSBpblxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVOZXh0KGRpcmVjdGlvbjogTmd4VG91ckRpcmVjdGlvbik6IE9ic2VydmFibGU8Tmd4VG91ckludGVyYWN0aW9uPiB7XG5cdFx0Ly8gSWJlbiBzZXQgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIHNvIHdlIGtub3cgaW4gd2hpY2ggd2F5IHdlJ3JlIG1vdmluZyB0aGUgdG91clxuXHRcdHRoaXMuY3VycmVudERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcblxuXHRcdC8vIEliZW46IEdldCB0aGUgbmV3IGluZGV4XG5cdFx0Y29uc3QgaW5kZXggPVxuXHRcdFx0ZGlyZWN0aW9uID09PSAnbmV4dCdcblx0XHRcdFx0PyB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QuZ2V0VmFsdWUoKSArIDFcblx0XHRcdFx0OiB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QuZ2V0VmFsdWUoKSAtIDE7XG5cblx0XHQvLyBJYmVuOiBVcGRhdGUgdGhlIG5ldyBpbmRleFxuXHRcdHRoaXMuY3VycmVudEluZGV4U3ViamVjdC5uZXh0KGluZGV4KTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgbmV4dCBzdGVwIGluIHRoZSB0b3VyXG5cdFx0cmV0dXJuIHRoaXMuc2V0U3RlcCh0aGlzLmN1cnJlbnRUb3VyU3ViamVjdC5nZXRWYWx1ZSgpW2luZGV4XSk7XG5cdH1cblxuXHQvKipcblx0ICogVmlzdWFsaXplcyB0aGUgY3VycmVudCBzdGVwXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBjdXJyZW50U3RlcCAtIFRoZSBzdGVwIHdlIHdpc2ggdG8gdmlzdWFsaXplXG5cdCAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gd2Ugd2lzaCB0byBoaWdobGlnaHRcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXplU3RlcChcblx0XHRjdXJyZW50U3RlcDogTmd4VG91clN0ZXAsXG5cdFx0aXRlbT86IE5neFRvdXJJdGVtRGlyZWN0aXZlXG5cdCk6IENvbXBvbmVudFJlZjxOZ3hUb3VyU3RlcENvbXBvbmVudD4ge1xuXHRcdHJldHVybiB0aGlzLndpbmRvd1NlcnZpY2UucnVuSW5Ccm93c2VyKCh7IGJyb3dzZXJEb2N1bWVudCwgYnJvd3NlcldpbmRvdyB9KSA9PiB7XG5cdFx0XHQvLyBJYmVuOiBVcGRhdGUgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHN0ZXAgc3ViamVjdFxuICAgICAgdGhpcy5wcmV2aW91c1N0ZXBTdWJqZWN0Lm5leHQoIHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0LmdldFZhbHVlKCkgKTtcblx0XHRcdHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0Lm5leHQoY3VycmVudFN0ZXApO1xuXG5cdFx0XHQvLyBJYmVuOiBSZXN0b3JlIHRoZSBib2R5IG92ZXJmbG93IHNvIHdlIGNhbiBzY3JvbGwgdG8gdGhlIHJpZ2h0IGVsZW1lbnRcblx0XHRcdGJyb3dzZXJEb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gdGhpcy5ib2R5T3ZlcmZsb3c7XG5cblx0XHRcdC8vIEliZW46IENhbGN1bGF0ZSB0aGUgZGVmYXVsdE9mZnNldHNcblx0XHRcdC8vIFdvdXRlcjogVGhpcyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlIHdlIGNhbGN1bGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uXG5cdFx0XHRjb25zdCBtYXJnaW4gPSB0aGlzLmdldEN1dG91dE1hcmdpbihjdXJyZW50U3RlcCk7XG5cblx0XHRcdC8vIEliZW46IFNjcm9sbCB0byB0aGUgdG9wIGJlZm9yZSBlYWNoIHN0ZXAgdG8gZ2V0IGNvbnNpc3RlbnQgYmVoYXZpb3Igd2hlbiBnb2luZyBiYWNrIGFuZCBmb3J0aFxuXHRcdFx0YnJvd3NlcldpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCB9KTtcblxuXHRcdFx0Y29uc3QgeyBpc1Zpc2libGUsIHNjcm9sbFksIHJlbGF0aXZlVG8gfSA9IGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0KFxuXHRcdFx0XHRpdGVtPy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHRtYXJnaW4sXG5cdFx0XHRcdHsgLi4udGhpcy5jb25maWd1cmF0aW9uLm9mZnNldCwgLi4uY3VycmVudFN0ZXA/Lm9mZnNldCB9XG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBJYmVuOiBTY3JvbGwgdG8gdGhlIGVsZW1lbnQgaWYgaXQncyBub3QgaW4gdmlld1xuXHRcdFx0aWYgKCFpc1Zpc2libGUpIHtcblx0XHRcdFx0YnJvd3NlcldpbmRvdy5zY3JvbGxUbyh7IHRvcDogc2Nyb2xsWSB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWJlbjogRGlzYWJsZSBzY3JvbGxpbmdcblx0XHRcdGJyb3dzZXJEb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cblx0XHRcdC8vIFdvdXRlcjogQ2FsY3VsYXRlIHRoZSBzdGVwJ3MgcG9zaXRpb24gc28gdGhhdCBpdCBpcyByZW5kZXJlZCByZWxhdGl2ZWx5IHRvIHRoZSBjdXRvdXRcblx0XHRcdGNvbnN0IHJlbGF0aXZlRGlzcGxheTogTmd4VG91clN0ZXBQb3NpdGlvbiA9IHJlbGF0aXZlVG8gPT0gJ2JvdHRvbScgPyAnYWJvdmUnIDogJ2JlbG93Jztcblx0XHRcdGNvbnN0IHBvc2l0aW9uWSA9IGN1cnJlbnRTdGVwLnBvc2l0aW9uID8gY3VycmVudFN0ZXAucG9zaXRpb24gOiByZWxhdGl2ZURpc3BsYXk7XG5cdFx0XHRjb25zdCBvZmZzZXRZID0gcG9zaXRpb25ZID09PSAnYWJvdmUnID8gLW1hcmdpbiA6IG1hcmdpbjtcblx0XHRcdGNvbnN0IG9mZnNldFggPSBjdXJyZW50U3RlcC5wb3NpdGlvbiA9PT0gJ3JpZ2h0JyA/IG1hcmdpbiA6IC1tYXJnaW47XG5cblx0XHRcdC8vIEliZW46IERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgdGhlIGl0ZW0gYmFzZWQgb24gd2hldGhlciBhIHRvdXJJdGVtIHdhcyBwcm92aWRlZFxuXHRcdFx0Y29uc3QgcG9zaXRpb25TdHJhdGVneSA9IGl0ZW1cblx0XHRcdFx0PyB0aGlzLmNka092ZXJsYXlTZXJ2aWNlXG5cdFx0XHRcdFx0XHQucG9zaXRpb24oKVxuXHRcdFx0XHRcdFx0LmZsZXhpYmxlQ29ubmVjdGVkVG8oaXRlbS5lbGVtZW50UmVmKVxuXHRcdFx0XHRcdFx0LndpdGhEZWZhdWx0T2Zmc2V0WShvZmZzZXRZKVxuXHRcdFx0XHRcdFx0LndpdGhEZWZhdWx0T2Zmc2V0WChvZmZzZXRYKVxuXHRcdFx0XHRcdFx0LndpdGhQb3NpdGlvbnMoW3RoaXMucG9zaXRpb25NYXBbY3VycmVudFN0ZXAucG9zaXRpb24gfHwgcmVsYXRpdmVEaXNwbGF5XV0pXG5cdFx0XHRcdDogdGhpcy5jZGtPdmVybGF5U2VydmljZVxuXHRcdFx0XHRcdFx0LnBvc2l0aW9uKClcblx0XHRcdFx0XHRcdC5nbG9iYWwoKVxuXHRcdFx0XHRcdFx0LmNlbnRlckhvcml6b250YWxseSgpXG5cdFx0XHRcdFx0XHQuY2VudGVyVmVydGljYWxseSgpO1xuXG5cdFx0XHQvLyBJYmVuOiBDcmVhdGUgYW4gb3ZlcmxheSBpZiBpdCBkb2VzIG5vdCBleGlzdFxuXHRcdFx0aWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcblx0XHRcdFx0Ly8gSWJlbjogQ3JlYXRlIGFuIG92ZXJsYXkgY29uZmlnXG5cdFx0XHRcdGNvbnN0IGNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcblx0XHRcdFx0XHRoYXNCYWNrZHJvcDogIWN1cnJlbnRTdGVwLmRpc2FibGVCYWNrRHJvcCxcblx0XHRcdFx0XHQvLyBJYmVuOiBEdWUgdG8gaXNzdWVzIHdpdGggaG93IHRoZSBzY3JvbGxpbmdTdHJhdGVneS5ibG9jaygpIHdvcmtzIHdpdGggc2Nyb2xsaW5nIHRvIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB2aWV3LCB3ZSBzZXQgdGhpcyB0byBub29wXG5cdFx0XHRcdFx0c2Nyb2xsU3RyYXRlZ3k6IHRoaXMuY2RrT3ZlcmxheVNlcnZpY2Uuc2Nyb2xsU3RyYXRlZ2llcy5ub29wKCksXG5cdFx0XHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBvdmVybGF5XG5cdFx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IHRoaXMuY2RrT3ZlcmxheVNlcnZpY2UuY3JlYXRlKGNvbmZpZyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJYmVuOiBEZXRhY2ggdGhlIHByZXZpb3VzIHBvcnRhbFxuXHRcdFx0XHR0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XG5cblx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIG92ZXJsYXkgZXhpc3RzLCB3ZSB1cGRhdGUgdGhlIHBvc2l0aW9uIHN0cmF0ZWd5XG5cdFx0XHRcdHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9uU3RyYXRlZ3kpO1xuXG5cdFx0XHRcdC8vIEliZW46IElmIHRoZSBjdXJyZW50IHN0ZXAgaGFzIG5vIGJhY2tkcm9wLCB3ZSBkZXRhY2ggdGhlIGJhY2tkcm9wXG5cdFx0XHRcdGlmIChjdXJyZW50U3RlcC5kaXNhYmxlQmFja0Ryb3ApIHtcblx0XHRcdFx0XHR0aGlzLm92ZXJsYXlSZWYuZGV0YWNoQmFja2Ryb3AoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJYmVuOiBDcmVhdGUgYSBwb3J0YWwgYW5kIGF0dGFjaCB0aGUgY29tcG9uZW50XG5cdFx0XHRjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPE5neFRvdXJTdGVwQ29tcG9uZW50Pihcblx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIGN1cnJlbnRTdGVwIGhhcyBpdHMgb3duIGNvbXBvbmVudCwgd2Ugb3ZlcndyaXRlIGl0XG5cdFx0XHRcdGN1cnJlbnRTdGVwLmNvbXBvbmVudCB8fCB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50XG5cdFx0XHQpO1xuXG5cdFx0XHRjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG5cblx0XHRcdC8vIEliZW46IFVwZGF0ZSB0aGUgZGF0YSBvZiB0aGUgY29tcG9uZW50XG5cdFx0XHRjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NvbnRlbnQnLCBjdXJyZW50U3RlcC5jb250ZW50KTtcblx0XHRcdGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndGl0bGUnLCBjdXJyZW50U3RlcC50aXRsZSk7XG5cdFx0XHRjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2RhdGEnLCBjdXJyZW50U3RlcC5kYXRhKTtcblx0XHRcdGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnY3VycmVudFN0ZXAnLCB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QuZ2V0VmFsdWUoKSk7XG5cdFx0XHRjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Ftb3VudE9mU3RlcHMnLCB0aGlzLmFtb3VudE9mU3RlcHMpO1xuXHRcdFx0Y29tcG9uZW50UmVmLnNldElucHV0KCdwb3NpdGlvbicsIGl0ZW0gPyBjdXJyZW50U3RlcC5wb3NpdGlvbiB8fCAnYmVsb3cnIDogdW5kZWZpbmVkKTtcblx0XHRcdGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc3RlcENsYXNzJywgY3VycmVudFN0ZXAuc3RlcENsYXNzKTtcblx0XHRcdGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZWxlbWVudElkJywgaXRlbT8uZWxlbWVudElkKTtcblxuXHRcdFx0Ly8gSWJlbjogSGlnaGxpZ2h0IHRoZSBjdXJyZW50IGh0bWwgaXRlbSBhcyBhY3RpdmUgaWYgb25lIGlzIHByb3ZpZGVkXG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHQvLyBJYmVuOiBTZXQgdGhlIGFjdGl2ZSBjbGFzcyBvZiB0aGUgaXRlbVxuXHRcdFx0XHRpdGVtLnNldEFjdGl2ZSh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWJlbjogU2V0IHRoZSBjbGlwIHBhdGggb2YgdGhlIGJhY2tkcm9wXG5cdFx0XHR0aGlzLmJhY2tkcm9wQ2xpcEV2ZW50U3ViamVjdC5uZXh0KHtcblx0XHRcdFx0YmFja2Ryb3A6IHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcEVsZW1lbnQsXG5cdFx0XHRcdGl0ZW06IGl0ZW0/LmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdGN1dG91dE1hcmdpbjogdGhpcy5nZXRDdXRvdXRNYXJnaW4oY3VycmVudFN0ZXApLFxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEliZW46IFJldHVybiB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0cmV0dXJuIGNvbXBvbmVudFJlZjtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBhIHN0ZXBcblx0ICpcblx0ICogQHBhcmFtICBjdXJyZW50U3RlcCAtIFRoZSBwcm92aWRlZCBzdGVwXG5cdCAqIEBwYXJhbSAgaXRlbSAtIEFuIG9wdGlvbmFsIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlU3RlcEludGVyYWN0aW9ucyhcblx0XHRjdXJyZW50U3RlcDogTmd4VG91clN0ZXAsXG5cdFx0aXRlbT86IE5neFRvdXJJdGVtRGlyZWN0aXZlXG5cdCk6IE9ic2VydmFibGU8Tmd4VG91ckludGVyYWN0aW9uPiB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlIGl0ZW0gd2FzIGZvdW5kLCB3ZSB2aXN1YWxpemUgdGhlIHN0ZXBcblx0XHRjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZpc3VhbGl6ZVN0ZXAoY3VycmVudFN0ZXAsIGl0ZW0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucnVuU3RlcEZ1bmN0aW9uKGN1cnJlbnRTdGVwLm9uVmlzaWJsZSkucGlwZShcblx0XHRcdGNvbmNhdE1hcCgoKSA9PiB7XG5cdFx0XHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgY29tcG9uZW50IGludGVyYWN0aW9ucyBhbmQgcmVzcG9uZCBhY2NvcmRpbmdseVxuXHRcdFx0XHRyZXR1cm4gb3V0cHV0VG9PYnNlcnZhYmxlKGNvbXBvbmVudFJlZi5pbnN0YW5jZS5oYW5kbGVJbnRlcmFjdGlvbikucGlwZShcblx0XHRcdFx0XHR0YWtlKDEpLFxuXHRcdFx0XHRcdGNvbmNhdE1hcCgoaW50ZXJhY3Rpb246IE5neFRvdXJJbnRlcmFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGludGVyYWN0aW9uID09PSAnY2xvc2UnXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5jbG9zZVRvdXIoKVxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMuaGFuZGxlTmV4dChpbnRlcmFjdGlvbik7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgYmFzZWQgb24gd2hldGhlciBhIHN0ZXAgZnVuY3Rpb24gd2FzIHByb3ZpZGVkXG5cdCAqXG5cdCAqIEBwYXJhbSBzdGVwRnVuY3Rpb24gLSBUaGUgcHJvdmlkZWQgc3RlcCBmdW5jdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBydW5TdGVwRnVuY3Rpb24oc3RlcEZ1bmN0aW9uPzogTmd4VG91ckFjdGlvbik6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuXHRcdC8vIEliZW46IElmIG5vIHN0ZXAgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3ZSBzaW1wbHkgcmV0dXJuIGEgc2luZ2xlIHZvaWQgb2Zcblx0XHRpZiAoIXN0ZXBGdW5jdGlvbikge1xuXHRcdFx0cmV0dXJuIG9mKG51bGwpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFJ1biB0aGUgc3RlcCBmdW5jdGlvbiBhbmQgZGVwZW5kaW5nIG9uIHRoZSByZXN1bHQsIHdlIHJldHVybiB0aGUgcmVzdWx0IG9yIGFuIG9mLlxuXHRcdHJldHVybiAoXG5cdFx0XHRzdGVwRnVuY3Rpb24odGhpcy5jdXJyZW50U3RlcFN1YmplY3QuZ2V0VmFsdWUoKSwgdGhpcy5jdXJyZW50SW5kZXhTdWJqZWN0LmdldFZhbHVlKCkpIHx8XG5cdFx0XHRvZihudWxsKVxuXHRcdCkucGlwZShcblx0XHRcdC8vIEliZW46IFdlIGFkZCBhIHRha2UoMSkgYXMgYW4gZXh0cmEgc2FmZXR5IG1lYXN1cmUgaW4gY2FzZSB1c2VycyBlbmQgdXAgbm90IHRha2luZyBjYXJlIG9mIHRoaXNcblx0XHRcdHRha2UoMSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN1cnJvdW5kcyB0aGUgcHJvdmlkZWQgaXRlbSB3aXRoIGEgY3V0b3V0IGluIHRoZSBiYWNrZHJvcFxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gZXZlbnQuYmFja2Ryb3AgLSBUaGUgcHJvdmlkZWQgYmFja2Ryb3Bcblx0ICogQHBhcmFtIGV2ZW50Lml0ZW0gLSBUaGUgaXRlbSB3ZSB3aXNoIHRvIHN1cnJvdW5kXG5cdCAqIEBwYXJhbSBldmVudC5jdXRvdXRNYXJnaW4gLSBUaGUgYW1vdW50IG9mIG1hcmdpbiB3ZSB3YW50IGFyb3VuZCB0aGUgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBzZXRDbGlwUGF0aChldmVudDogTmd4VG91ckJhY2tkcm9wQ2xpcEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgeyBiYWNrZHJvcCwgaXRlbSwgY3V0b3V0TWFyZ2luIH0gPSBldmVudDtcblxuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSBubyBiYWNrZHJvcCBvciBpdGVtIGlzIHByZXNlbnRcblx0XHRpZiAoIWJhY2tkcm9wIHx8ICFpdGVtKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogR2V0IHRoZSBwb3NpdGlvbnMgb2YgdGhlIHBhdGggYXJvdW5kIHRoZSBpdGVtXG5cdFx0Y29uc3QgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgcG9zaXRpb25Ub3AgPSB0b3AgLSBjdXRvdXRNYXJnaW47XG5cdFx0Y29uc3QgcG9zaXRpb25MZWZ0ID0gbGVmdCAtIGN1dG91dE1hcmdpbjtcblx0XHRjb25zdCBwb3NpdGlvbkJvdHRvbSA9IGJvdHRvbSArIGN1dG91dE1hcmdpbjtcblx0XHRjb25zdCBwb3NpdGlvblJpZ2h0ID0gcmlnaHQgKyBjdXRvdXRNYXJnaW47XG5cblx0XHQvLyBJYmVuOiBDcmVhdGUgdGhlIGJveCBhcm91bmQgdGhlIGl0ZW1cblx0XHRjb25zdCBib3ggPSBgJHtwb3NpdGlvbkxlZnR9cHggJHtwb3NpdGlvblRvcH1weCwgJHtwb3NpdGlvblJpZ2h0fXB4ICR7cG9zaXRpb25Ub3B9cHgsICR7cG9zaXRpb25SaWdodH1weCAke3Bvc2l0aW9uQm90dG9tfXB4LCAke3Bvc2l0aW9uTGVmdH1weCAke3Bvc2l0aW9uQm90dG9tfXB4LCAke3Bvc2l0aW9uTGVmdH1weCAke3Bvc2l0aW9uVG9wfXB4YDtcblxuXHRcdC8vIEliZW46IENsaXAgdGhlIGJveCBvdXQgb2YgdGhlIGJhY2tkcm9wXG5cdFx0YmFja2Ryb3Auc3R5bGUuY2xpcFBhdGggPSBgcG9seWdvbihldmVub2RkLCAwJSAwJSwgMCUgMTAwJSwgMTAwJSAxMDAlLCAxMDAlIDAlLCAwJSAwJSwke2JveH0pYDtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSByZWdpc3RyYXRpb24gZXZlbnRcblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIHJlZ2lzdHJhdGlvbiBldmVudCB3ZSB3aXNoIHRvIGhhbmRsZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVSZWdpc3RyYXRpb25FdmVudChldmVudDogTmd4VG91clJlZ2lzdHJhdGlvbkV2ZW50KTogT2JzZXJ2YWJsZTxudWxsPiB7XG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpZiBubyBldmVudCB3YXMgZm91bmRcblx0XHRpZiAoIWV2ZW50KSB7XG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogVW5yZWdpc3RlciB0aGUgZWxlbWVudCBpZiBpdCdzIGFuIHVucmVnaXN0ZXIgZXZlbnRcblx0XHRpZiAoZXZlbnQudHlwZSA9PT0gJ3VucmVnaXN0ZXInKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRzW2V2ZW50LnRvdXJJdGVtXT8ubmV4dCh1bmRlZmluZWQpO1xuXHRcdFx0cmV0dXJuIG9mKG51bGwpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaWYgbm8gZWxlbWVudCB3YXMgZm91bmRcblx0XHRpZiAoIWV2ZW50LmVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBvZihudWxsKTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBDaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGl0ZW0gd2l0aCB0aGUgY3VycmVudCBpZC4gSWYgaXQgaXMsIHVwZGF0ZSBpdCwgaWYgbm90LCBtYWtlIGEgbmV3IEJlaGF2aW9yU3ViamVjdFxuXHRcdGNvbnN0IGVsZW1lbnRTdWJqZWN0ID0gdGhpcy5lbGVtZW50c1tldmVudC50b3VySXRlbV07XG5cblx0XHQvLyBJYmVuOiBJZiB3ZSBoYXZlIGFuIGVsZW1lbnQgc3ViamVjdCBhbHJlYWR5LCB3ZSBjaGVjayBpZiBpdCBhbHJlYWR5IGhhcyBhbiBlbGVtZW50XG5cdFx0aWYgKGVsZW1lbnRTdWJqZWN0KSB7XG5cdFx0XHQvLyBJYmVuOiBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyB1bmRlZmluZWQsIHdlIHJlZ2lzdGVyIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoZWxlbWVudFN1YmplY3QuZ2V0VmFsdWUoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVsZW1lbnRTdWJqZWN0Lm5leHQoZXZlbnQuZWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZihudWxsKTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiBubyBCZWhhdmlvclN1YmplY3QgZXhpc3RzLCB3ZSBjcmVhdGUgb25lXG5cdFx0dGhpcy5lbGVtZW50c1tldmVudC50b3VySXRlbV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5neFRvdXJJdGVtRGlyZWN0aXZlPihldmVudC5lbGVtZW50KTtcblxuXHRcdHJldHVybiBvZihudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm92aWRlZCBjdXRvdXRNYXJnaW4gb2YgYSBzdGVwLCBvciA1cHggaWYgbm9uZSBpcyBwcm92aWRlZFxuXHQgKlxuXHQgKiBAcGFyYW0gc3RlcCAtIFRoZSBjdXJyZW50IHN0ZXBcblx0ICovXG5cdHByaXZhdGUgZ2V0Q3V0b3V0TWFyZ2luKHN0ZXA6IE5neFRvdXJTdGVwKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gc3RlcD8uY3V0b3V0TWFyZ2luID09PSB1bmRlZmluZWQgPyA1IDogc3RlcC5jdXRvdXRNYXJnaW47XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBib2R5IGNsYXNzIHRvIGluZGljYXRlIHRoZSB0b3VyIGlzIGFjdGl2ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVCb2R5Q2xhc3MoYWN0aW9uOiAnc2V0JyB8ICdyZW1vdmUnKTogdm9pZCB7XG5cdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyRG9jdW1lbnQgfSkgPT4ge1xuXHRcdFx0aWYgKGFjdGlvbiA9PT0gJ3NldCcpIHtcblx0XHRcdFx0YnJvd3NlckRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbmd4LXRvdXItYWN0aXZlJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicm93c2VyRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduZ3gtdG91ci1hY3RpdmUnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19","import { computed, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { uniqBy } from 'lodash';\nimport { BehaviorSubject, combineLatest, concatMap, distinctUntilChanged, filter, map, of, Subject, tap, withLatestFrom, } from 'rxjs';\nimport { v7 as uuid } from 'uuid';\nimport { NgxToastConfigurationToken } from '../../tokens';\nimport * as i0 from \"@angular/core\";\n/**\n * A service that acts as the single source of truth in the application\n */\nexport class NgxToastService {\n    /**\n     * The default configuration required for the toast\n     */\n    configuration = inject(NgxToastConfigurationToken);\n    /**\n     * The queue with all the toasts in it\n     */\n    queue$ = new BehaviorSubject([]);\n    /**\n     * The toast event handler that will handle updates to the queue\n     */\n    toastEvents$ = new Subject();\n    /**\n     * Whether we want to show the bundled toasts\n     */\n    showBundledToasts$ = new BehaviorSubject(false);\n    /**\n     * Whether the list of all toasts is focussed upon, either by focus or by hover\n     */\n    isFocussed = false;\n    /**\n     * A list of all the currently visible toasts\n     */\n    toasts = toSignal(combineLatest([this.queue$, this.showBundledToasts$]).pipe(map(([toasts, showBundled]) => {\n        // Iben: Prevent duplicates\n        const result = uniqBy(toasts, (item) => item.id) || [];\n        // Iben: If there is no max amount, we return the toasts as is\n        if (!this.configuration.maxAmount || showBundled) {\n            return result;\n        }\n        // Iben: If the there is a max amount, we return the limited list\n        return result.slice(0, this.configuration.maxAmount.amount);\n    })));\n    /**\n     * The amount of bundled toasts there are\n     */\n    hasBundledToasts = computed(() => {\n        if (!this.configuration.maxAmount || this.configuration.maxAmount.strategy !== 'bundle') {\n            return 0;\n        }\n        return this.queue$.getValue().length - this.toasts().length;\n    }, ...(ngDevMode ? [{ debugName: \"hasBundledToasts\" }] : []));\n    /**\n     * The component used to represent the bundled toasts\n     */\n    bundledComponent = this.configuration?.maxAmount?.['component'];\n    /**\n     * Creates an instance of NgxToastService.\n     */\n    constructor() {\n        // Iben: Subscribe to the toast events\n        this.toastEvents$\n            .pipe(\n        // Iben: Concatmap all the events so we will handle them one by one\n        concatMap((event) => {\n            // Iben: Get the latest version of the queue\n            return of(event).pipe(withLatestFrom(this.queue$), tap(([{ toast, type }, queue]) => {\n                // Iben: If we need to add the item to the queue, we add it based on its priority\n                if (type === 'add') {\n                    this.queue$.next(toast.configuration?.hasPriority\n                        ? [toast, ...queue]\n                        : [...queue, toast]);\n                    return;\n                }\n                // Iben: Get the index of the toast we need to update or remove\n                const index = queue.findIndex(({ id }) => id === toast.id);\n                // Iben: Remove the toast when needed\n                this.queue$.next([...queue.slice(0, index), ...queue.slice(index + 1)]);\n            }));\n        }), takeUntilDestroyed())\n            .subscribe();\n        /**\n         * Listens to the amount of items in the queue and resets the showBundledToasts accordingly\n         */\n        this.queue$\n            .pipe(map((toasts) => toasts.length), distinctUntilChanged(), filter((length) => !length), tap(() => {\n            this.showBundledToasts$.next(false);\n        }), takeUntilDestroyed())\n            .subscribe();\n    }\n    /**\n     * Displays a provided toast and returns the generated id\n     *\n     * @param data - The data needed for the toast\n     */\n    showToast(data) {\n        // Iben: Early exit if we reached\n        if (this.configuration.maxAmount &&\n            this.queue$.getValue().length === this.configuration.maxAmount.amount &&\n            this.configuration.maxAmount.strategy === 'ignore') {\n            return undefined;\n        }\n        // Iben: Generate an id for the toast\n        const id = uuid();\n        const toast = { ...(typeof data === 'string' ? { text: data } : data), id };\n        // Iben: Add the toast to the toast list\n        this.toastEvents$.next({\n            type: 'add',\n            toast: toast,\n        });\n        // Iben: Return the toast\n        return toast;\n    }\n    /**\n     * Removes a toast based on the provided id\n     *\n     * @param toast - The toast we wish to remove\n     */\n    removeToast(toast) {\n        // Iben: If the toast is no longer in the queue, because it was removed by the end user, we early exit\n        if (!this.queue$.getValue().find(({ id }) => toast.id === id)) {\n            return;\n        }\n        // Iben: If the toast list is currently being focussed on, we try again within 5 seconds\n        if (this.isFocussed && (this.configuration.autoClose || toast.configuration?.autoClose)) {\n            setTimeout(() => {\n                this.removeToast(toast);\n            }, 5000);\n            return;\n        }\n        // Iben: If the toast list isn't focussed on, we remove it from the dom\n        this.toastEvents$.next({\n            toast,\n            type: 'remove',\n        });\n    }\n    /**\n     * Sets whether the list of toasts is currently being focussed on by the user\n     *\n     * @param hasFocus - Whether or not it is being focussed\n     */\n    setFocus(hasFocus) {\n        this.isFocussed = hasFocus;\n    }\n    /**\n     * Mark the toast as rendered, so that we can automatically remove it if needed\n     *\n     * @param toast - The toast we wish to remove if needed\n     */\n    markAsRendered(toast) {\n        // Iben: If the toast isn't currently visible, we early exit\n        if (!this.toasts().find(({ id }) => toast.id === id)) {\n            return;\n        }\n        // Iben: Check if we need to autoclose the toast and close it if it is set to true\n        const autoClose = toast.configuration?.autoClose || this.configuration.autoClose;\n        if (autoClose === true || autoClose === undefined) {\n            const maxTime = this.configuration.maxTime || 5000;\n            setTimeout(() => {\n                this.removeToast(toast);\n            }, maxTime);\n        }\n    }\n    /**\n     * Shows the bundled toasts in case there are\n     */\n    showBundled() {\n        // Iben: If the maxAmount strategy isn't bundle, we early exit as this method is then irrelevant\n        if (this.configuration.maxAmount?.strategy !== 'bundle') {\n            return;\n        }\n        this.showBundledToasts$.next(true);\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9zZXJ2aWNlcy90b2FzdC90b2FzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUNOLGVBQWUsRUFDZixhQUFhLEVBQ2IsU0FBUyxFQUNULG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILEVBQUUsRUFDRixPQUFPLEVBQ1AsR0FBRyxFQUNILGNBQWMsR0FDZCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2xDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFRMUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZUFBZTtJQUMzQjs7T0FFRztJQUNjLGFBQWEsR0FBaUMsTUFBTSxDQUNwRSwwQkFBMEIsQ0FDMUIsQ0FBQztJQUVGOztPQUVHO0lBQ0ssTUFBTSxHQUFnQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV0RTs7T0FFRztJQUNLLFlBQVksR0FBMkIsSUFBSSxPQUFPLEVBQWlCLENBQUM7SUFFNUU7O09BRUc7SUFDSyxrQkFBa0IsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEY7O09BRUc7SUFDSyxVQUFVLEdBQVksS0FBSyxDQUFDO0lBRXBDOztPQUVHO0lBQ0ksTUFBTSxHQUF1QixRQUFRLENBQzNDLGFBQWEsQ0FB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LFNBQVMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztZQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQztJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDakIsZ0dBQWdHO1FBQ2hHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pELE9BQU87UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO3VHQXpOVyxlQUFlOzJHQUFmLGVBQWUsY0FGZixNQUFNOzsyRkFFTixlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBpbmplY3QsIEluamVjdGFibGUsIFNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHVuaXFCeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuXHRCZWhhdmlvclN1YmplY3QsXG5cdGNvbWJpbmVMYXRlc3QsXG5cdGNvbmNhdE1hcCxcblx0ZGlzdGluY3RVbnRpbENoYW5nZWQsXG5cdGZpbHRlcixcblx0bWFwLFxuXHRvZixcblx0U3ViamVjdCxcblx0dGFwLFxuXHR3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB2NyBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IE5neFRvYXN0QnVuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Fic3RyYWN0cyc7XG5pbXBvcnQgeyBOZ3hUb2FzdENvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQge1xuXHROZ3hUb2FzdCxcblx0Tmd4VG9hc3RDcmVhdG9yLFxuXHROZ3hUb2FzdERlZmF1bHRDb25maWd1cmF0aW9uLFxuXHROZ3hUb2FzdEV2ZW50LFxufSBmcm9tICcuLi8uLi90eXBlcy90b2FzdC50eXBlcyc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgYWN0cyBhcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBpbiB0aGUgYXBwbGljYXRpb25cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5neFRvYXN0U2VydmljZSB7XG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGZvciB0aGUgdG9hc3Rcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogTmd4VG9hc3REZWZhdWx0Q29uZmlndXJhdGlvbiA9IGluamVjdChcblx0XHROZ3hUb2FzdENvbmZpZ3VyYXRpb25Ub2tlblxuXHQpO1xuXG5cdC8qKlxuXHQgKiBUaGUgcXVldWUgd2l0aCBhbGwgdGhlIHRvYXN0cyBpbiBpdFxuXHQgKi9cblx0cHJpdmF0ZSBxdWV1ZSQ6IEJlaGF2aW9yU3ViamVjdDxOZ3hUb2FzdFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG5cdC8qKlxuXHQgKiBUaGUgdG9hc3QgZXZlbnQgaGFuZGxlciB0aGF0IHdpbGwgaGFuZGxlIHVwZGF0ZXMgdG8gdGhlIHF1ZXVlXG5cdCAqL1xuXHRwcml2YXRlIHRvYXN0RXZlbnRzJDogU3ViamVjdDxOZ3hUb2FzdEV2ZW50PiA9IG5ldyBTdWJqZWN0PE5neFRvYXN0RXZlbnQ+KCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgd2Ugd2FudCB0byBzaG93IHRoZSBidW5kbGVkIHRvYXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzaG93QnVuZGxlZFRvYXN0cyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBsaXN0IG9mIGFsbCB0b2FzdHMgaXMgZm9jdXNzZWQgdXBvbiwgZWl0aGVyIGJ5IGZvY3VzIG9yIGJ5IGhvdmVyXG5cdCAqL1xuXHRwcml2YXRlIGlzRm9jdXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogQSBsaXN0IG9mIGFsbCB0aGUgY3VycmVudGx5IHZpc2libGUgdG9hc3RzXG5cdCAqL1xuXHRwdWJsaWMgdG9hc3RzOiBTaWduYWw8Tmd4VG9hc3RbXT4gPSB0b1NpZ25hbChcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLnF1ZXVlJCwgdGhpcy5zaG93QnVuZGxlZFRvYXN0cyRdKS5waXBlKFxuXHRcdFx0bWFwKChbdG9hc3RzLCBzaG93QnVuZGxlZF0pID0+IHtcblx0XHRcdFx0Ly8gSWJlbjogUHJldmVudCBkdXBsaWNhdGVzXG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHVuaXFCeSh0b2FzdHMsIChpdGVtKSA9PiBpdGVtLmlkKSB8fCBbXTtcblxuXHRcdFx0XHQvLyBJYmVuOiBJZiB0aGVyZSBpcyBubyBtYXggYW1vdW50LCB3ZSByZXR1cm4gdGhlIHRvYXN0cyBhcyBpc1xuXHRcdFx0XHRpZiAoIXRoaXMuY29uZmlndXJhdGlvbi5tYXhBbW91bnQgfHwgc2hvd0J1bmRsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIHRoZXJlIGlzIGEgbWF4IGFtb3VudCwgd2UgcmV0dXJuIHRoZSBsaW1pdGVkIGxpc3Rcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5zbGljZSgwLCB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4QW1vdW50LmFtb3VudCk7XG5cdFx0XHR9KVxuXHRcdClcblx0KTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBidW5kbGVkIHRvYXN0cyB0aGVyZSBhcmVcblx0ICovXG5cdHB1YmxpYyBoYXNCdW5kbGVkVG9hc3RzOiBTaWduYWw8bnVtYmVyPiA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRpZiAoIXRoaXMuY29uZmlndXJhdGlvbi5tYXhBbW91bnQgfHwgdGhpcy5jb25maWd1cmF0aW9uLm1heEFtb3VudC5zdHJhdGVneSAhPT0gJ2J1bmRsZScpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnF1ZXVlJC5nZXRWYWx1ZSgpLmxlbmd0aCAtIHRoaXMudG9hc3RzKCkubGVuZ3RoO1xuXHR9KTtcblxuXHQvKipcblx0ICogVGhlIGNvbXBvbmVudCB1c2VkIHRvIHJlcHJlc2VudCB0aGUgYnVuZGxlZCB0b2FzdHNcblx0ICovXG5cdHB1YmxpYyBidW5kbGVkQ29tcG9uZW50OiBUeXBlPE5neFRvYXN0QnVuZGxlckNvbXBvbmVudD4gPVxuXHRcdHRoaXMuY29uZmlndXJhdGlvbj8ubWF4QW1vdW50Py5bJ2NvbXBvbmVudCddO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE5neFRvYXN0U2VydmljZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdC8vIEliZW46IFN1YnNjcmliZSB0byB0aGUgdG9hc3QgZXZlbnRzXG5cdFx0dGhpcy50b2FzdEV2ZW50cyRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHQvLyBJYmVuOiBDb25jYXRtYXAgYWxsIHRoZSBldmVudHMgc28gd2Ugd2lsbCBoYW5kbGUgdGhlbSBvbmUgYnkgb25lXG5cdFx0XHRcdGNvbmNhdE1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBHZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBxdWV1ZVxuXHRcdFx0XHRcdHJldHVybiBvZihldmVudCkucGlwZShcblx0XHRcdFx0XHRcdHdpdGhMYXRlc3RGcm9tKHRoaXMucXVldWUkKSxcblx0XHRcdFx0XHRcdHRhcCgoW3sgdG9hc3QsIHR5cGUgfSwgcXVldWVdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIEliZW46IElmIHdlIG5lZWQgdG8gYWRkIHRoZSBpdGVtIHRvIHRoZSBxdWV1ZSwgd2UgYWRkIGl0IGJhc2VkIG9uIGl0cyBwcmlvcml0eVxuXHRcdFx0XHRcdFx0XHRpZiAodHlwZSA9PT0gJ2FkZCcpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnF1ZXVlJC5uZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0dG9hc3QuY29uZmlndXJhdGlvbj8uaGFzUHJpb3JpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBbdG9hc3QsIC4uLnF1ZXVlXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFsuLi5xdWV1ZSwgdG9hc3RdXG5cdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIEliZW46IEdldCB0aGUgaW5kZXggb2YgdGhlIHRvYXN0IHdlIG5lZWQgdG8gdXBkYXRlIG9yIHJlbW92ZVxuXHRcdFx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHF1ZXVlLmZpbmRJbmRleCgoeyBpZCB9KSA9PiBpZCA9PT0gdG9hc3QuaWQpO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEliZW46IFJlbW92ZSB0aGUgdG9hc3Qgd2hlbiBuZWVkZWRcblx0XHRcdFx0XHRcdFx0dGhpcy5xdWV1ZSQubmV4dChbLi4ucXVldWUuc2xpY2UoMCwgaW5kZXgpLCAuLi5xdWV1ZS5zbGljZShpbmRleCArIDEpXSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0YWtlVW50aWxEZXN0cm95ZWQoKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0LyoqXG5cdFx0ICogTGlzdGVucyB0byB0aGUgYW1vdW50IG9mIGl0ZW1zIGluIHRoZSBxdWV1ZSBhbmQgcmVzZXRzIHRoZSBzaG93QnVuZGxlZFRvYXN0cyBhY2NvcmRpbmdseVxuXHRcdCAqL1xuXHRcdHRoaXMucXVldWUkXG5cdFx0XHQucGlwZShcblx0XHRcdFx0bWFwKCh0b2FzdHMpID0+IHRvYXN0cy5sZW5ndGgpLFxuXHRcdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXHRcdFx0XHRmaWx0ZXIoKGxlbmd0aCkgPT4gIWxlbmd0aCksXG5cdFx0XHRcdHRhcCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zaG93QnVuZGxlZFRvYXN0cyQubmV4dChmYWxzZSk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0YWtlVW50aWxEZXN0cm95ZWQoKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIGEgcHJvdmlkZWQgdG9hc3QgYW5kIHJldHVybnMgdGhlIGdlbmVyYXRlZCBpZFxuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIG5lZWRlZCBmb3IgdGhlIHRvYXN0XG5cdCAqL1xuXHRwdWJsaWMgc2hvd1RvYXN0PERhdGFUeXBlID0gdW5rbm93bj4oXG5cdFx0ZGF0YTogTmd4VG9hc3RDcmVhdG9yPERhdGFUeXBlPiB8IHN0cmluZ1xuXHQpOiBOZ3hUb2FzdDxEYXRhVHlwZT4ge1xuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaWYgd2UgcmVhY2hlZFxuXHRcdGlmIChcblx0XHRcdHRoaXMuY29uZmlndXJhdGlvbi5tYXhBbW91bnQgJiZcblx0XHRcdHRoaXMucXVldWUkLmdldFZhbHVlKCkubGVuZ3RoID09PSB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4QW1vdW50LmFtb3VudCAmJlxuXHRcdFx0dGhpcy5jb25maWd1cmF0aW9uLm1heEFtb3VudC5zdHJhdGVneSA9PT0gJ2lnbm9yZSdcblx0XHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogR2VuZXJhdGUgYW4gaWQgZm9yIHRoZSB0b2FzdFxuXHRcdGNvbnN0IGlkID0gdXVpZCgpO1xuXHRcdGNvbnN0IHRvYXN0ID0geyAuLi4odHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8geyB0ZXh0OiBkYXRhIH0gOiBkYXRhKSwgaWQgfTtcblxuXHRcdC8vIEliZW46IEFkZCB0aGUgdG9hc3QgdG8gdGhlIHRvYXN0IGxpc3Rcblx0XHR0aGlzLnRvYXN0RXZlbnRzJC5uZXh0KHtcblx0XHRcdHR5cGU6ICdhZGQnLFxuXHRcdFx0dG9hc3Q6IHRvYXN0LFxuXHRcdH0pO1xuXG5cdFx0Ly8gSWJlbjogUmV0dXJuIHRoZSB0b2FzdFxuXHRcdHJldHVybiB0b2FzdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgdG9hc3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlkXG5cdCAqXG5cdCAqIEBwYXJhbSB0b2FzdCAtIFRoZSB0b2FzdCB3ZSB3aXNoIHRvIHJlbW92ZVxuXHQgKi9cblx0cHVibGljIHJlbW92ZVRvYXN0KHRvYXN0OiBOZ3hUb2FzdCk6IHZvaWQge1xuXHRcdC8vIEliZW46IElmIHRoZSB0b2FzdCBpcyBubyBsb25nZXIgaW4gdGhlIHF1ZXVlLCBiZWNhdXNlIGl0IHdhcyByZW1vdmVkIGJ5IHRoZSBlbmQgdXNlciwgd2UgZWFybHkgZXhpdFxuXHRcdGlmICghdGhpcy5xdWV1ZSQuZ2V0VmFsdWUoKS5maW5kKCh7IGlkIH0pID0+IHRvYXN0LmlkID09PSBpZCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgdG9hc3QgbGlzdCBpcyBjdXJyZW50bHkgYmVpbmcgZm9jdXNzZWQgb24sIHdlIHRyeSBhZ2FpbiB3aXRoaW4gNSBzZWNvbmRzXG5cdFx0aWYgKHRoaXMuaXNGb2N1c3NlZCAmJiAodGhpcy5jb25maWd1cmF0aW9uLmF1dG9DbG9zZSB8fCB0b2FzdC5jb25maWd1cmF0aW9uPy5hdXRvQ2xvc2UpKSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVUb2FzdCh0b2FzdCk7XG5cdFx0XHR9LCA1MDAwKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZSB0b2FzdCBsaXN0IGlzbid0IGZvY3Vzc2VkIG9uLCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgZG9tXG5cdFx0dGhpcy50b2FzdEV2ZW50cyQubmV4dCh7XG5cdFx0XHR0b2FzdCxcblx0XHRcdHR5cGU6ICdyZW1vdmUnLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgd2hldGhlciB0aGUgbGlzdCBvZiB0b2FzdHMgaXMgY3VycmVudGx5IGJlaW5nIGZvY3Vzc2VkIG9uIGJ5IHRoZSB1c2VyXG5cdCAqXG5cdCAqIEBwYXJhbSBoYXNGb2N1cyAtIFdoZXRoZXIgb3Igbm90IGl0IGlzIGJlaW5nIGZvY3Vzc2VkXG5cdCAqL1xuXHRwdWJsaWMgc2V0Rm9jdXMoaGFzRm9jdXM6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlzRm9jdXNzZWQgPSBoYXNGb2N1cztcblx0fVxuXG5cdC8qKlxuXHQgKiBNYXJrIHRoZSB0b2FzdCBhcyByZW5kZXJlZCwgc28gdGhhdCB3ZSBjYW4gYXV0b21hdGljYWxseSByZW1vdmUgaXQgaWYgbmVlZGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB0b2FzdCAtIFRoZSB0b2FzdCB3ZSB3aXNoIHRvIHJlbW92ZSBpZiBuZWVkZWRcblx0ICovXG5cdHB1YmxpYyBtYXJrQXNSZW5kZXJlZCh0b2FzdDogTmd4VG9hc3QpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgdG9hc3QgaXNuJ3QgY3VycmVudGx5IHZpc2libGUsIHdlIGVhcmx5IGV4aXRcblx0XHRpZiAoIXRoaXMudG9hc3RzKCkuZmluZCgoeyBpZCB9KSA9PiB0b2FzdC5pZCA9PT0gaWQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogQ2hlY2sgaWYgd2UgbmVlZCB0byBhdXRvY2xvc2UgdGhlIHRvYXN0IGFuZCBjbG9zZSBpdCBpZiBpdCBpcyBzZXQgdG8gdHJ1ZVxuXHRcdGNvbnN0IGF1dG9DbG9zZSA9IHRvYXN0LmNvbmZpZ3VyYXRpb24/LmF1dG9DbG9zZSB8fCB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0b0Nsb3NlO1xuXG5cdFx0aWYgKGF1dG9DbG9zZSA9PT0gdHJ1ZSB8fCBhdXRvQ2xvc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgbWF4VGltZSA9IHRoaXMuY29uZmlndXJhdGlvbi5tYXhUaW1lIHx8IDUwMDA7XG5cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVRvYXN0KHRvYXN0KTtcblx0XHRcdH0sIG1heFRpbWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyB0aGUgYnVuZGxlZCB0b2FzdHMgaW4gY2FzZSB0aGVyZSBhcmVcblx0ICovXG5cdHB1YmxpYyBzaG93QnVuZGxlZCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgbWF4QW1vdW50IHN0cmF0ZWd5IGlzbid0IGJ1bmRsZSwgd2UgZWFybHkgZXhpdCBhcyB0aGlzIG1ldGhvZCBpcyB0aGVuIGlycmVsZXZhbnRcblx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uLm1heEFtb3VudD8uc3RyYXRlZ3kgIT09ICdidW5kbGUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5zaG93QnVuZGxlZFRvYXN0cyQubmV4dCh0cnVlKTtcblx0fVxufVxuIl19","import { Directive, ElementRef, HostListener, inject, input } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NgxTooltipService } from '../../services';\nimport * as i0 from \"@angular/core\";\n/**\n * A directive that adds a ARIA compliant tooltip to a component\n *\n * @export\n * @class NgxTooltipDirective\n */\nexport class NgxTooltipDirective {\n    tooltipService = inject(NgxTooltipService);\n    elementRef = inject(ElementRef);\n    /**\n     * Show the tooltip on hover\n     */\n    showOnMouseEnter() {\n        this.showTooltip();\n    }\n    /**\n     * Show the tooltip on focus\n     */\n    showOnFocus() {\n        this.showTooltip();\n    }\n    /**\n     * Remove the tooltip on leaving hover\n     */\n    removeOnMouseOut() {\n        this.removeTooltip();\n    }\n    /**\n     * Remove the tooltip on blur\n     */\n    removeOnBlur() {\n        this.removeTooltip();\n    }\n    /**\n     * Remove the tooltip on escape pressed\n     */\n    onEscape() {\n        this.tooltipService.removeToolTip();\n    }\n    /**\n     * The id of the tooltip, unique in the DOM, required for accessibility. By default, this is an autogenerated UUID.\n     */\n    /**\n     * The id of the tooltip, unique in the DOM, required for accessibility. By default, this is an autogenerated UUID.\n     */\n    ngxTooltipId = input(uuid(), ...(ngDevMode ? [{ debugName: \"ngxTooltipId\" }] : []));\n    /**\n     * The text of the tooltip\n     */\n    ngxTooltip = input.required(...(ngDevMode ? [{ debugName: \"ngxTooltip\" }] : []));\n    /**\n     * An optional component we can pass to replace the default configured component\n     */\n    ngxTooltipComponent = input(...(ngDevMode ? [undefined, { debugName: \"ngxTooltipComponent\" }] : []));\n    /**\n     * An optional position we can pass to tooltip, by default this is 'above'.\n     */\n    // Iben: The default is set in the NgxTooltipService\n    ngxTooltipPosition = input(...(ngDevMode ? [undefined, { debugName: \"ngxTooltipPosition\" }] : []));\n    /**\n     * Prevent the tooltip from being shown, by default this is false.\n     */\n    ngxTooltipDisabled = input(false, ...(ngDevMode ? [{ debugName: \"ngxTooltipDisabled\" }] : []));\n    /**\n     * Show the tooltip if it is not visible yet\n     */\n    showTooltip() {\n        // Iben: Early exit when the tooltip is disabled\n        if (this.ngxTooltipDisabled()) {\n            return;\n        }\n        // Iben: Show the tooltip\n        this.tooltipService.setToolTipEvent({\n            text: this.ngxTooltip(),\n            position: this.ngxTooltipPosition(),\n            component: this.ngxTooltipComponent(),\n            elementRef: this.elementRef,\n            id: this.ngxTooltipId(),\n            source: 'element',\n            active: true,\n        });\n    }\n    /**\n     * Remove the tooltip\n     */\n    removeTooltip() {\n        // Iben: Early exit when the tooltip is disabled\n        if (this.ngxTooltipDisabled()) {\n            return;\n        }\n        // Iben: Emit a remove event\n        this.tooltipService.setToolTipEvent({\n            id: this.ngxTooltipId(),\n            source: 'element',\n            active: false,\n        });\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxTooltipDirective, isStandalone: true, selector: \"[ngxTooltip]\", inputs: { ngxTooltipId: { classPropertyName: \"ngxTooltipId\", publicName: \"ngxTooltipId\", isSignal: true, isRequired: false, transformFunction: null }, ngxTooltip: { classPropertyName: \"ngxTooltip\", publicName: \"ngxTooltip\", isSignal: true, isRequired: true, transformFunction: null }, ngxTooltipComponent: { classPropertyName: \"ngxTooltipComponent\", publicName: \"ngxTooltipComponent\", isSignal: true, isRequired: false, transformFunction: null }, ngxTooltipPosition: { classPropertyName: \"ngxTooltipPosition\", publicName: \"ngxTooltipPosition\", isSignal: true, isRequired: false, transformFunction: null }, ngxTooltipDisabled: { classPropertyName: \"ngxTooltipDisabled\", publicName: \"ngxTooltipDisabled\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"tabIndex\": \"0\" }, listeners: { \"mouseenter\": \"showOnMouseEnter()\", \"focus\": \"showOnFocus()\", \"mouseleave\": \"removeOnMouseOut()\", \"blur\": \"removeOnBlur()\", \"document:keydown.escape\": \"onEscape()\" }, properties: { \"attr.aria-describedby\": \"ngxTooltipId()\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[ngxTooltip]',\n                    standalone: true,\n                    host: {\n                        '[attr.aria-describedby]': 'ngxTooltipId()',\n                        tabIndex: '0',\n                    },\n                }]\n        }], propDecorators: { showOnMouseEnter: [{\n                type: HostListener,\n                args: ['mouseenter']\n            }], showOnFocus: [{\n                type: HostListener,\n                args: ['focus']\n            }], removeOnMouseOut: [{\n                type: HostListener,\n                args: ['mouseleave']\n            }], removeOnBlur: [{\n                type: HostListener,\n                args: ['blur']\n            }], onEscape: [{\n                type: HostListener,\n                args: ['document:keydown.escape']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvZGlyZWN0aXZlcy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2xDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUduRDs7Ozs7R0FLRztBQVNILE1BQU0sT0FBTyxtQkFBbUI7SUFDZCxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0MsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRDs7T0FFRztJQUN5QixnQkFBZ0I7UUFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNvQixXQUFXO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDeUIsZ0JBQWdCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDbUIsWUFBWTtRQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ3NDLFFBQVE7UUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSDs7T0FFRztJQUNhLFlBQVksR0FBRyxLQUFLLENBQVMsSUFBSSxFQUFFLHdEQUFDLENBQUM7SUFFckQ7O09BRUc7SUFDYSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEscURBQVUsQ0FBQztJQUV0RDs7T0FFRztJQUNhLG1CQUFtQixHQUFHLEtBQUsseUVBQXFDLENBQUM7SUFFakY7O09BRUc7SUFDSCxvREFBb0Q7SUFDcEMsa0JBQWtCLEdBQUcsS0FBSyx3RUFBc0IsQ0FBQztJQUVqRTs7T0FFRztJQUNhLGtCQUFrQixHQUFHLEtBQUssQ0FBVSxLQUFLLDhEQUFDLENBQUM7SUFFM0Q7O09BRUc7SUFDSyxXQUFXO1FBQ2xCLGdEQUFnRDtRQUNoRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDL0IsT0FBTztRQUNSLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWE7UUFDcEIsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1IsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztZQUNuQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNKLENBQUM7dUdBeEdXLG1CQUFtQjsyRkFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQVIvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNMLHlCQUF5QixFQUFFLGdCQUFnQjt3QkFDM0MsUUFBUSxFQUFFLEdBQUc7cUJBQ2I7aUJBQ0Q7OEJBUTRCLGdCQUFnQjtzQkFBM0MsWUFBWTt1QkFBQyxZQUFZO2dCQU9ILFdBQVc7c0JBQWpDLFlBQVk7dUJBQUMsT0FBTztnQkFPTyxnQkFBZ0I7c0JBQTNDLFlBQVk7dUJBQUMsWUFBWTtnQkFPSixZQUFZO3NCQUFqQyxZQUFZO3VCQUFDLE1BQU07Z0JBT3FCLFFBQVE7c0JBQWhELFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFR5cGUsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgTmd4VG9vbHRpcEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcbmltcG9ydCB7IE5neFRvb2x0aXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTmd4VG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgYWRkcyBhIEFSSUEgY29tcGxpYW50IHRvb2x0aXAgdG8gYSBjb21wb25lbnRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTmd4VG9vbHRpcERpcmVjdGl2ZVxuICovXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbbmd4VG9vbHRpcF0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRob3N0OiB7XG5cdFx0J1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ25neFRvb2x0aXBJZCgpJyxcblx0XHR0YWJJbmRleDogJzAnLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUb29sdGlwRGlyZWN0aXZlIHtcblx0cHJpdmF0ZSByZWFkb25seSB0b29sdGlwU2VydmljZSA9IGluamVjdChOZ3hUb29sdGlwU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuXHQvKipcblx0ICogU2hvdyB0aGUgdG9vbHRpcCBvbiBob3ZlclxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpIHNob3dPbk1vdXNlRW50ZXIoKSB7XG5cdFx0dGhpcy5zaG93VG9vbHRpcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgdGhlIHRvb2x0aXAgb24gZm9jdXNcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJykgc2hvd09uRm9jdXMoKSB7XG5cdFx0dGhpcy5zaG93VG9vbHRpcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgdG9vbHRpcCBvbiBsZWF2aW5nIGhvdmVyXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJykgcmVtb3ZlT25Nb3VzZU91dCgpIHtcblx0XHR0aGlzLnJlbW92ZVRvb2x0aXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIHRvb2x0aXAgb24gYmx1clxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcignYmx1cicpIHJlbW92ZU9uQmx1cigpIHtcblx0XHR0aGlzLnJlbW92ZVRvb2x0aXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIHRvb2x0aXAgb24gZXNjYXBlIHByZXNzZWRcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJykgb25Fc2NhcGUoKSB7XG5cdFx0dGhpcy50b29sdGlwU2VydmljZS5yZW1vdmVUb29sVGlwKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkIG9mIHRoZSB0b29sdGlwLCB1bmlxdWUgaW4gdGhlIERPTSwgcmVxdWlyZWQgZm9yIGFjY2Vzc2liaWxpdHkuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYW4gYXV0b2dlbmVyYXRlZCBVVUlELlxuXHQgKi9cblx0LyoqXG5cdCAqIFRoZSBpZCBvZiB0aGUgdG9vbHRpcCwgdW5pcXVlIGluIHRoZSBET00sIHJlcXVpcmVkIGZvciBhY2Nlc3NpYmlsaXR5LiBCeSBkZWZhdWx0LCB0aGlzIGlzIGFuIGF1dG9nZW5lcmF0ZWQgVVVJRC5cblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBuZ3hUb29sdGlwSWQgPSBpbnB1dDxzdHJpbmc+KHV1aWQoKSk7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IG9mIHRoZSB0b29sdGlwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgbmd4VG9vbHRpcCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuXHQvKipcblx0ICogQW4gb3B0aW9uYWwgY29tcG9uZW50IHdlIGNhbiBwYXNzIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgY29uZmlndXJlZCBjb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBuZ3hUb29sdGlwQ29tcG9uZW50ID0gaW5wdXQ8VHlwZTxOZ3hUb29sdGlwQWJzdHJhY3RDb21wb25lbnQ+PigpO1xuXG5cdC8qKlxuXHQgKiBBbiBvcHRpb25hbCBwb3NpdGlvbiB3ZSBjYW4gcGFzcyB0byB0b29sdGlwLCBieSBkZWZhdWx0IHRoaXMgaXMgJ2Fib3ZlJy5cblx0ICovXG5cdC8vIEliZW46IFRoZSBkZWZhdWx0IGlzIHNldCBpbiB0aGUgTmd4VG9vbHRpcFNlcnZpY2Vcblx0cHVibGljIHJlYWRvbmx5IG5neFRvb2x0aXBQb3NpdGlvbiA9IGlucHV0PE5neFRvb2x0aXBQb3NpdGlvbj4oKTtcblxuXHQvKipcblx0ICogUHJldmVudCB0aGUgdG9vbHRpcCBmcm9tIGJlaW5nIHNob3duLCBieSBkZWZhdWx0IHRoaXMgaXMgZmFsc2UuXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgbmd4VG9vbHRpcERpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG5cdC8qKlxuXHQgKiBTaG93IHRoZSB0b29sdGlwIGlmIGl0IGlzIG5vdCB2aXNpYmxlIHlldFxuXHQgKi9cblx0cHJpdmF0ZSBzaG93VG9vbHRpcCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IHdoZW4gdGhlIHRvb2x0aXAgaXMgZGlzYWJsZWRcblx0XHRpZiAodGhpcy5uZ3hUb29sdGlwRGlzYWJsZWQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFNob3cgdGhlIHRvb2x0aXBcblx0XHR0aGlzLnRvb2x0aXBTZXJ2aWNlLnNldFRvb2xUaXBFdmVudCh7XG5cdFx0XHR0ZXh0OiB0aGlzLm5neFRvb2x0aXAoKSxcblx0XHRcdHBvc2l0aW9uOiB0aGlzLm5neFRvb2x0aXBQb3NpdGlvbigpLFxuXHRcdFx0Y29tcG9uZW50OiB0aGlzLm5neFRvb2x0aXBDb21wb25lbnQoKSxcblx0XHRcdGVsZW1lbnRSZWY6IHRoaXMuZWxlbWVudFJlZixcblx0XHRcdGlkOiB0aGlzLm5neFRvb2x0aXBJZCgpLFxuXHRcdFx0c291cmNlOiAnZWxlbWVudCcsXG5cdFx0XHRhY3RpdmU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSB0b29sdGlwXG5cdCAqL1xuXHRwcml2YXRlIHJlbW92ZVRvb2x0aXAoKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCB3aGVuIHRoZSB0b29sdGlwIGlzIGRpc2FibGVkXG5cdFx0aWYgKHRoaXMubmd4VG9vbHRpcERpc2FibGVkKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBFbWl0IGEgcmVtb3ZlIGV2ZW50XG5cdFx0dGhpcy50b29sdGlwU2VydmljZS5zZXRUb29sVGlwRXZlbnQoe1xuXHRcdFx0aWQ6IHRoaXMubmd4VG9vbHRpcElkKCksXG5cdFx0XHRzb3VyY2U6ICdlbGVtZW50Jyxcblx0XHRcdGFjdGl2ZTogZmFsc2UsXG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==","import { ChangeDetectorRef, Directive, ElementRef, HostBinding, inject, input } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NgxTourService } from '../../services';\nimport * as i0 from \"@angular/core\";\n/**\n * A directive to mark elements in the DOM to be highlighted during a tour\n */\nexport class NgxTourItemDirective {\n    elementRef = inject(ElementRef);\n    tourService = inject(NgxTourService);\n    cdRef = inject(ChangeDetectorRef);\n    /**\n     * A class added to the currently active item\n     */\n    isActive = false;\n    /**\n     * The id of the item that corresponds with the step\n     */\n    tourItem = input(...(ngDevMode ? [undefined, { debugName: \"tourItem\" }] : []));\n    /**\n     * Mark an element as active or inactive\n     *\n     * @param isActive - Whether or not the element should be active\n     */\n    setActive(isActive) {\n        // Iben: Mark the current item as active or inactive\n        this.isActive = isActive;\n        // Iben: Detect the changes on the component\n        this.cdRef.detectChanges();\n    }\n    /**\n     * Returns the id of the element. Uses for the `aria-details` on the tour-item component\n     */\n    get elementId() {\n        return this.elementRef.nativeElement.getAttribute('id');\n    }\n    ngAfterViewInit() {\n        // Iben: Register the element when rendered\n        this.tourService.registerElement(this);\n        // Iben: Check if the element has an id, if not, give it a new id for accessibility\n        if (!this.elementRef.nativeElement.getAttribute('id')) {\n            this.elementRef.nativeElement.setAttribute('id', uuid());\n        }\n    }\n    ngOnDestroy() {\n        // Iben: Unregister the element when the element gets destroyed\n        this.tourService.unregisterElement(this.tourItem());\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxTourItemDirective, isStandalone: true, selector: \"[tourItem]\", inputs: { tourItem: { classPropertyName: \"tourItem\", publicName: \"tourItem\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class.ngx-tour-item-active\": \"this.isActive\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourItemDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[tourItem]',\n                    standalone: true,\n                }]\n        }], propDecorators: { isActive: [{\n                type: HostBinding,\n                args: ['class.ngx-tour-item-active']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9kaXJlY3RpdmVzL3RvdXItaXRlbS90b3VyLWl0ZW0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWEsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWhEOztHQUVHO0FBS0gsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixVQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztJQUNqRCxXQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLEtBQUssR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVuRDs7T0FFRztJQUMrQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBRTVFOztPQUVHO0lBQ2EsUUFBUSxHQUFHLEtBQUssOERBQVUsQ0FBQztJQUUzQzs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLFFBQWlCO1FBQ2pDLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLGVBQWU7UUFDckIsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDRixDQUFDO0lBRU0sV0FBVztRQUNqQiwrREFBK0Q7UUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO3VHQWhEVyxvQkFBb0I7MkZBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsWUFBWTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQVNrRCxRQUFRO3NCQUF6RCxXQUFXO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBPbkRlc3Ryb3ksIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgTmd4VG91clNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gbWFyayBlbGVtZW50cyBpbiB0aGUgRE9NIHRvIGJlIGhpZ2hsaWdodGVkIGR1cmluZyBhIHRvdXJcbiAqL1xuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW3RvdXJJdGVtXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5neFRvdXJJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblx0cmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cdHByaXZhdGUgcmVhZG9ubHkgdG91clNlcnZpY2UgPSBpbmplY3QoTmd4VG91clNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXHQvKipcblx0ICogQSBjbGFzcyBhZGRlZCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLm5neC10b3VyLWl0ZW0tYWN0aXZlJykgcHVibGljIGlzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRoZSBpZCBvZiB0aGUgaXRlbSB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIHN0ZXBcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSB0b3VySXRlbSA9IGlucHV0PHN0cmluZz4oKTtcblxuXHQvKipcblx0ICogTWFyayBhbiBlbGVtZW50IGFzIGFjdGl2ZSBvciBpbmFjdGl2ZVxuXHQgKlxuXHQgKiBAcGFyYW0gaXNBY3RpdmUgLSBXaGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYWN0aXZlXG5cdCAqL1xuXHRwdWJsaWMgc2V0QWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogTWFyayB0aGUgY3VycmVudCBpdGVtIGFzIGFjdGl2ZSBvciBpbmFjdGl2ZVxuXHRcdHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcblxuXHRcdC8vIEliZW46IERldGVjdCB0aGUgY2hhbmdlcyBvbiB0aGUgY29tcG9uZW50XG5cdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGVsZW1lbnQuIFVzZXMgZm9yIHRoZSBgYXJpYS1kZXRhaWxzYCBvbiB0aGUgdG91ci1pdGVtIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBlbGVtZW50SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXHR9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBSZWdpc3RlciB0aGUgZWxlbWVudCB3aGVuIHJlbmRlcmVkXG5cdFx0dGhpcy50b3VyU2VydmljZS5yZWdpc3RlckVsZW1lbnQodGhpcyk7XG5cblx0XHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYW4gaWQsIGlmIG5vdCwgZ2l2ZSBpdCBhIG5ldyBpZCBmb3IgYWNjZXNzaWJpbGl0eVxuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdXVpZCgpKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogVW5yZWdpc3RlciB0aGUgZWxlbWVudCB3aGVuIHRoZSBlbGVtZW50IGdldHMgZGVzdHJveWVkXG5cdFx0dGhpcy50b3VyU2VydmljZS51bnJlZ2lzdGVyRWxlbWVudCh0aGlzLnRvdXJJdGVtKCkpO1xuXHR9XG59XG4iXX0=","import { Directive, TemplateRef, ViewContainerRef, effect, inject, input, } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil, tap, withLatestFrom } from 'rxjs/operators';\nimport { NgxTourService } from '../../services';\nimport * as i0 from \"@angular/core\";\n/**\n *  * A directive that will render a part of the template based on the condition and the currently active tour\n *\n * Based upon `*ngIf`. See https://github.com/angular/angular/blob/master/packages/common/src/directives/ng_if.ts\n */\nexport class NgxTourShowWhenDirective {\n    tourService = inject(NgxTourService);\n    viewContainer = inject(ViewContainerRef);\n    /**\n     * The destroyed state of the directive\n     */\n    destroyed$;\n    /**\n     * The needed templateRefs\n     */\n    thenTemplateRef = null;\n    thenViewRef = null;\n    elseTemplateRef = null;\n    elseViewRef = null;\n    constructor() {\n        const templateRef = inject(TemplateRef);\n        this.thenTemplateRef = templateRef;\n        effect(() => {\n            if (this.ngxTourShowWhen()) {\n                this.updateView();\n            }\n        });\n        effect(() => {\n            this.elseTemplateRef = this.ngxTourShowWhenElse();\n            this.elseViewRef = null;\n            this.updateView();\n        });\n    }\n    /**\n     * Under which condition the item should be shown whilst the tour is active\n     */\n    ngxTourShowWhen = input(...(ngDevMode ? [undefined, { debugName: \"ngxTourShowWhen\" }] : []));\n    /**\n     * The else template in case the condition is not matched\n     */\n    ngxTourShowWhenElse = input(...(ngDevMode ? [undefined, { debugName: \"ngxTourShowWhenElse\" }] : []));\n    ngOnDestroy() {\n        this.dispose();\n    }\n    updateView() {\n        // Iben: Dispose the current subscription\n        this.dispose();\n        // Iben: Create a new onDestroyed handler\n        this.destroyed$ = new Subject();\n        // Iben: Render the views based on the correct state\n        this.tourService.currentIndex$\n            .pipe(distinctUntilChanged(), withLatestFrom(this.tourService.currentTour$), tap(([index, tour]) => {\n            // Iben: Check if we should render the view\n            if ((this.ngxTourShowWhen() === 'whenInactive' && index === undefined) ||\n                (this.ngxTourShowWhen() === 'whenActive' && index !== undefined) ||\n                (this.ngxTourShowWhen() === 'hasPrevious' && Boolean(tour?.[index - 1])) ||\n                (this.ngxTourShowWhen() === 'hasNext' && Boolean(tour?.[index + 1]))) {\n                if (!this.thenViewRef) {\n                    this.viewContainer.clear();\n                    this.elseViewRef = null;\n                    if (this.thenTemplateRef) {\n                        this.thenViewRef = this.viewContainer.createEmbeddedView(this.thenTemplateRef);\n                    }\n                }\n            }\n            else {\n                if (!this.elseViewRef) {\n                    this.viewContainer.clear();\n                    this.thenViewRef = null;\n                    if (this.elseTemplateRef) {\n                        this.elseViewRef = this.viewContainer.createEmbeddedView(this.elseTemplateRef);\n                    }\n                }\n            }\n        }), takeUntil(this.destroyed$))\n            .subscribe();\n    }\n    /**\n     * Dispose the current subscription\n     */\n    dispose() {\n        if (this.destroyed$) {\n            this.destroyed$.next();\n            this.destroyed$.complete();\n        }\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourShowWhenDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxTourShowWhenDirective, isStandalone: true, selector: \"[ngxTourShowWhen]\", inputs: { ngxTourShowWhen: { classPropertyName: \"ngxTourShowWhen\", publicName: \"ngxTourShowWhen\", isSignal: true, isRequired: false, transformFunction: null }, ngxTourShowWhenElse: { classPropertyName: \"ngxTourShowWhenElse\", publicName: \"ngxTourShowWhenElse\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourShowWhenDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[ngxTourShowWhen]',\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zaG93LXdoZW4uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL2RpcmVjdGl2ZXMvdG91ci1zaG93LXdoZW4vdG91ci1zaG93LXdoZW4uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBSVQsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWhEOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25CLFdBQVcsR0FBRyxNQUFNLENBQWlCLGNBQWMsQ0FBQyxDQUFDO0lBQzlELGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVqRDs7T0FFRztJQUNLLFVBQVUsQ0FBZ0I7SUFFbEM7O09BRUc7SUFDSyxlQUFlLEdBQTRCLElBQUksQ0FBQztJQUNoRCxXQUFXLEdBQWdDLElBQUksQ0FBQztJQUNoRCxlQUFlLEdBQTRCLElBQUksQ0FBQztJQUNoRCxXQUFXLEdBQWdDLElBQUksQ0FBQztJQUV4RDtRQUNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBbUIsV0FBVyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7UUFFbkMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FB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O1FBQzVCLENBQUM7SUFDRixDQUFDO3VHQXZHVyx3QkFBd0I7MkZBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsbUJBQW1CO2lCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSxcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRJbnB1dFNpZ25hbCxcblx0T25EZXN0cm95LFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE5neFRvdXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG4vKipcbiAqICAqIEEgZGlyZWN0aXZlIHRoYXQgd2lsbCByZW5kZXIgYSBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZSBiYXNlZCBvbiB0aGUgY29uZGl0aW9uIGFuZCB0aGUgY3VycmVudGx5IGFjdGl2ZSB0b3VyXG4gKlxuICogQmFzZWQgdXBvbiBgKm5nSWZgLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci9wYWNrYWdlcy9jb21tb24vc3JjL2RpcmVjdGl2ZXMvbmdfaWYudHNcbiAqL1xuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW25neFRvdXJTaG93V2hlbl0nLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUb3VyU2hvd1doZW5EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0PE5neFRvdXJTZXJ2aWNlPihOZ3hUb3VyU2VydmljZSk7XG5cdHByaXZhdGUgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuXHQvKipcblx0ICogVGhlIGRlc3Ryb3llZCBzdGF0ZSBvZiB0aGUgZGlyZWN0aXZlXG5cdCAqL1xuXHRwcml2YXRlIGRlc3Ryb3llZCQ6IFN1YmplY3Q8dm9pZD47XG5cblx0LyoqXG5cdCAqIFRoZSBuZWVkZWQgdGVtcGxhdGVSZWZzXG5cdCAqL1xuXHRwcml2YXRlIHRoZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIHRoZW5WaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGVsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGVsc2VWaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IHRlbXBsYXRlUmVmID0gaW5qZWN0PFRlbXBsYXRlUmVmPGFueT4+KFRlbXBsYXRlUmVmKTtcblxuXHRcdHRoaXMudGhlblRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMubmd4VG91clNob3dXaGVuKCkpIHtcblx0XHRcdFx0dGhpcy51cGRhdGVWaWV3KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5lbHNlVGVtcGxhdGVSZWYgPSB0aGlzLm5neFRvdXJTaG93V2hlbkVsc2UoKTtcblx0XHRcdHRoaXMuZWxzZVZpZXdSZWYgPSBudWxsO1xuXHRcdFx0dGhpcy51cGRhdGVWaWV3KCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVW5kZXIgd2hpY2ggY29uZGl0aW9uIHRoZSBpdGVtIHNob3VsZCBiZSBzaG93biB3aGlsc3QgdGhlIHRvdXIgaXMgYWN0aXZlXG5cdCAqL1xuXHRwdWJsaWMgbmd4VG91clNob3dXaGVuOiBJbnB1dFNpZ25hbDwnaGFzTmV4dCcgfCAnaGFzUHJldmlvdXMnIHwgJ3doZW5BY3RpdmUnIHwgJ3doZW5JbmFjdGl2ZSc+ID1cblx0XHRpbnB1dCgpO1xuXHQvKipcblx0ICogVGhlIGVsc2UgdGVtcGxhdGUgaW4gY2FzZSB0aGUgY29uZGl0aW9uIGlzIG5vdCBtYXRjaGVkXG5cdCAqL1xuXHRwdWJsaWMgbmd4VG91clNob3dXaGVuRWxzZTogSW5wdXRTaWduYWw8VGVtcGxhdGVSZWY8YW55Pj4gPSBpbnB1dCgpO1xuXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVmlldygpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBEaXNwb3NlIHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvblxuXHRcdHRoaXMuZGlzcG9zZSgpO1xuXG5cdFx0Ly8gSWJlbjogQ3JlYXRlIGEgbmV3IG9uRGVzdHJveWVkIGhhbmRsZXJcblx0XHR0aGlzLmRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xuXG5cdFx0Ly8gSWJlbjogUmVuZGVyIHRoZSB2aWV3cyBiYXNlZCBvbiB0aGUgY29ycmVjdCBzdGF0ZVxuXHRcdHRoaXMudG91clNlcnZpY2UuY3VycmVudEluZGV4JFxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKCB0aGlzLnRvdXJTZXJ2aWNlLmN1cnJlbnRUb3VyJCApLFxuXHRcdFx0XHR0YXAoKFtpbmRleCwgdG91cl0pID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBDaGVjayBpZiB3ZSBzaG91bGQgcmVuZGVyIHRoZSB2aWV3XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHRoaXMubmd4VG91clNob3dXaGVuKCkgPT09ICd3aGVuSW5hY3RpdmUnICYmIGluZGV4ID09PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0XHQodGhpcy5uZ3hUb3VyU2hvd1doZW4oKSA9PT0gJ3doZW5BY3RpdmUnICYmIGluZGV4ICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0XHQodGhpcy5uZ3hUb3VyU2hvd1doZW4oKSA9PT0gJ2hhc1ByZXZpb3VzJyAmJiBCb29sZWFuKHRvdXI/LltpbmRleCAtIDFdKSkgfHxcblx0XHRcdFx0XHRcdCh0aGlzLm5neFRvdXJTaG93V2hlbigpID09PSAnaGFzTmV4dCcgJiYgQm9vbGVhbih0b3VyPy5baW5kZXggKyAxXSkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMudGhlblZpZXdSZWYpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWxzZVZpZXdSZWYgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy50aGVuVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnRoZW5WaWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudGhlblRlbXBsYXRlUmVmXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMuZWxzZVZpZXdSZWYpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGhlblZpZXdSZWYgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5lbHNlVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVsc2VWaWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZWxzZVRlbXBsYXRlUmVmXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcG9zZSB0aGUgY3VycmVudCBzdWJzY3JpcHRpb25cblx0ICovXG5cdHByaXZhdGUgZGlzcG9zZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kZXN0cm95ZWQkKSB7XG5cdFx0XHR0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuXHRcdFx0dGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG5cdFx0fVxuXHR9XG59XG4iXX0=","import { NgxTooltipConfigurationToken } from '../../tokens';\n/**\n * Provides the configuration for the NgxTooltipDirective\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxTooltipConfiguration = (configuration) => {\n    return {\n        provide: NgxTooltipConfigurationToken,\n        useValue: configuration,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1jb25maWd1cmF0aW9uLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL3Byb3ZpZGVycy90b29sdGlwL3Rvb2x0aXAtY29uZmlndXJhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHNUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQzdDLGFBQXNDLEVBQzNCLEVBQUU7SUFDYixPQUFPO1FBQ04sT0FBTyxFQUFFLDRCQUE0QjtRQUNyQyxRQUFRLEVBQUUsYUFBYTtLQUN2QixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd4VG9vbHRpcENvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBOZ3hUb29sdGlwQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIE5neFRvb2x0aXBEaXJlY3RpdmVcbiAqXG4gKiBAcGFyYW0gY29uZmlndXJhdGlvbiAtIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlTmd4VG9vbHRpcENvbmZpZ3VyYXRpb24gPSAoXG5cdGNvbmZpZ3VyYXRpb246IE5neFRvb2x0aXBDb25maWd1cmF0aW9uXG4pOiBQcm92aWRlciA9PiB7XG5cdHJldHVybiB7XG5cdFx0cHJvdmlkZTogTmd4VG9vbHRpcENvbmZpZ3VyYXRpb25Ub2tlbixcblx0XHR1c2VWYWx1ZTogY29uZmlndXJhdGlvbixcblx0fTtcbn07XG4iXX0=","import { NgxModalConfigurationToken } from '../../tokens';\n/**\n * Provides the configuration for the NgxModalService\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxModalConfiguration = (configuration) => {\n    return {\n        provide: NgxModalConfigurationToken,\n        useValue: configuration,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlndXJhdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9wcm92aWRlcnMvbW9kYWwvbW9kYWwtY29uZmlndXJhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHMUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsYUFBb0MsRUFBWSxFQUFFO0lBQzlGLE9BQU87UUFDTixPQUFPLEVBQUUsMEJBQTBCO1FBQ25DLFFBQVEsRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hNb2RhbENvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBOZ3hNb2RhbENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBOZ3hNb2RhbFNlcnZpY2VcbiAqXG4gKiBAcGFyYW0gY29uZmlndXJhdGlvbiAtIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlTmd4TW9kYWxDb25maWd1cmF0aW9uID0gKGNvbmZpZ3VyYXRpb246IE5neE1vZGFsQ29uZmlndXJhdGlvbik6IFByb3ZpZGVyID0+IHtcblx0cmV0dXJuIHtcblx0XHRwcm92aWRlOiBOZ3hNb2RhbENvbmZpZ3VyYXRpb25Ub2tlbixcblx0XHR1c2VWYWx1ZTogY29uZmlndXJhdGlvbixcblx0fTtcbn07XG4iXX0=","import { NgxTourStepToken } from '../../tokens';\n/**\n * Provides the configuration for the NgxDisplayContent directive. This can be either just\n * the component or the component and the offset. More information can be found in the\n * documentation of the `NgxTourStep`.\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxTourConfiguration = (configuration) => {\n    return {\n        provide: NgxTourStepToken,\n        useValue: \n        // Wouter: If the configuration is an object, return it as is. If it is a component, return it as an object with the component as the `component` property and a default offset.\n        typeof configuration === 'object'\n            ? configuration\n            : {\n                component: configuration,\n                offset: { top: 0, bottom: 0 },\n            },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1jb25maWd1cmF0aW9uLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL3Byb3ZpZGVycy90b3VyL3RvdXItY29uZmlndXJhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxhQUErQixFQUFZLEVBQUU7SUFDeEYsT0FBTztRQUNOLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsUUFBUTtRQUNQLGdMQUFnTDtRQUNoTCxPQUFPLGFBQWEsS0FBSyxRQUFRO1lBQ2hDLENBQUMsQ0FBRSxhQUEyQztZQUM5QyxDQUFDLENBQUU7Z0JBQ0QsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTthQUNDO0tBQ2xDLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hUb3VyU3RlcFRva2VuIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IE5neFRvdXJUb2tlbkNvbmZpZ3VyYXRpb24sIE5neFRvdXJUb2tlblR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBOZ3hEaXNwbGF5Q29udGVudCBkaXJlY3RpdmUuIFRoaXMgY2FuIGJlIGVpdGhlciBqdXN0XG4gKiB0aGUgY29tcG9uZW50IG9yIHRoZSBjb21wb25lbnQgYW5kIHRoZSBvZmZzZXQuIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICogZG9jdW1lbnRhdGlvbiBvZiB0aGUgYE5neFRvdXJTdGVwYC5cbiAqXG4gKiBAcGFyYW0gY29uZmlndXJhdGlvbiAtIFRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlTmd4VG91ckNvbmZpZ3VyYXRpb24gPSAoY29uZmlndXJhdGlvbjogTmd4VG91clRva2VuVHlwZSk6IFByb3ZpZGVyID0+IHtcblx0cmV0dXJuIHtcblx0XHRwcm92aWRlOiBOZ3hUb3VyU3RlcFRva2VuLFxuXHRcdHVzZVZhbHVlOlxuXHRcdFx0Ly8gV291dGVyOiBJZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhbiBvYmplY3QsIHJldHVybiBpdCBhcyBpcy4gSWYgaXQgaXMgYSBjb21wb25lbnQsIHJldHVybiBpdCBhcyBhbiBvYmplY3Qgd2l0aCB0aGUgY29tcG9uZW50IGFzIHRoZSBgY29tcG9uZW50YCBwcm9wZXJ0eSBhbmQgYSBkZWZhdWx0IG9mZnNldC5cblx0XHRcdHR5cGVvZiBjb25maWd1cmF0aW9uID09PSAnb2JqZWN0J1xuXHRcdFx0XHQ/IChjb25maWd1cmF0aW9uIGFzIE5neFRvdXJUb2tlbkNvbmZpZ3VyYXRpb24pXG5cdFx0XHRcdDogKHtcblx0XHRcdFx0XHRcdGNvbXBvbmVudDogY29uZmlndXJhdGlvbixcblx0XHRcdFx0XHRcdG9mZnNldDogeyB0b3A6IDAsIGJvdHRvbTogMCB9LFxuXHRcdFx0XHRcdH0gYXMgTmd4VG91clRva2VuQ29uZmlndXJhdGlvbiksXG5cdH07XG59O1xuIl19","import { NgxToastConfigurationToken } from '../../tokens';\n/**\n * Provides the configuration for the NgxModalService\n *\n * @param configuration - The required configuration\n */\nexport const provideNgxToastConfiguration = (configuration) => {\n    if (!configuration.autoClose &&\n        configuration.maxTime !== undefined &&\n        configuration.maxTime < 5000) {\n        console.error('@ibenvandeveire/ngx-inform/NgxToast: The provided maxTime for the toasts is less than 5 seconds. From an accessibility perspective, any alert should be visible for at least 5 seconds.');\n    }\n    return {\n        provide: NgxToastConfigurationToken,\n        useValue: configuration,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29uZmlndXJhdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9wcm92aWRlcnMvdG9hc3QvdG9hc3QtY29uZmlndXJhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHMUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQzNDLGFBQTJDLEVBQ2hDLEVBQUU7SUFDYixJQUNDLENBQUMsYUFBYSxDQUFDLFNBQVM7UUFDeEIsYUFBYSxDQUFDLE9BQU8sS0FBSyxTQUFTO1FBQ25DLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUMzQixDQUFDO1FBQ0YsT0FBTyxDQUFDLEtBQUssQ0FDWix5TEFBeUwsQ0FDekwsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPO1FBQ04sT0FBTyxFQUFFLDBCQUEwQjtRQUNuQyxRQUFRLEVBQUUsYUFBYTtLQUN2QixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd4VG9hc3RDb25maWd1cmF0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgTmd4VG9hc3REZWZhdWx0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIE5neE1vZGFsU2VydmljZVxuICpcbiAqIEBwYXJhbSBjb25maWd1cmF0aW9uIC0gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVOZ3hUb2FzdENvbmZpZ3VyYXRpb24gPSAoXG5cdGNvbmZpZ3VyYXRpb246IE5neFRvYXN0RGVmYXVsdENvbmZpZ3VyYXRpb25cbik6IFByb3ZpZGVyID0+IHtcblx0aWYgKFxuXHRcdCFjb25maWd1cmF0aW9uLmF1dG9DbG9zZSAmJlxuXHRcdGNvbmZpZ3VyYXRpb24ubWF4VGltZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0Y29uZmlndXJhdGlvbi5tYXhUaW1lIDwgNTAwMFxuXHQpIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0J0BpYmVudmFuZGV2ZWlyZS9uZ3gtaW5mb3JtL05neFRvYXN0OiBUaGUgcHJvdmlkZWQgbWF4VGltZSBmb3IgdGhlIHRvYXN0cyBpcyBsZXNzIHRoYW4gNSBzZWNvbmRzLiBGcm9tIGFuIGFjY2Vzc2liaWxpdHkgcGVyc3BlY3RpdmUsIGFueSBhbGVydCBzaG91bGQgYmUgdmlzaWJsZSBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzLidcblx0XHQpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0cHJvdmlkZTogTmd4VG9hc3RDb25maWd1cmF0aW9uVG9rZW4sXG5cdFx0dXNlVmFsdWU6IGNvbmZpZ3VyYXRpb24sXG5cdH07XG59O1xuIl19","import { Directive, HostListener, inject, input } from '@angular/core';\nimport { NgxTooltipService } from '../../services';\nimport * as i0 from \"@angular/core\";\n/**\n * An abstract for the NgxTooltipDirective\n */\nexport class NgxTooltipAbstractComponent {\n    ngxTooltipService = inject(NgxTooltipService);\n    /**\n     * Set tooltip as active\n     */\n    showOnMouseEnter() {\n        this.ngxTooltipService.setToolTipEvent({\n            id: this.id(),\n            source: 'tooltip',\n            active: true,\n        });\n    }\n    /**\n     * Set the tooltip as inactive\n     */\n    removeOnMouseOut() {\n        this.ngxTooltipService.setToolTipEvent({\n            id: this.id(),\n            source: 'tooltip',\n            active: false,\n        });\n    }\n    /**\n     * The position class of the tooltip\n     */\n    /**\n     * The position class of the tooltip\n     */\n    positionClass = input(...(ngDevMode ? [undefined, { debugName: \"positionClass\" }] : []));\n    /**\n     * The id of the tooltip\n     */\n    /**\n     * The id of the tooltip\n     */\n    id = input.required(...(ngDevMode ? [{ debugName: \"id\" }] : []));\n    /**\n     * The current position of the tooltip\n     */\n    position = input.required(...(ngDevMode ? [{ debugName: \"position\" }] : []));\n    /**\n     * The text of the tooltip\n     */\n    text = input.required(...(ngDevMode ? [{ debugName: \"text\" }] : []));\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxTooltipAbstractComponent, isStandalone: true, inputs: { positionClass: { classPropertyName: \"positionClass\", publicName: \"positionClass\", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: \"id\", publicName: \"id\", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: \"position\", publicName: \"position\", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: \"text\", publicName: \"text\", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { \"id\": \"id()\", \"attr.role\": \"tooltip\" }, listeners: { \"mouseenter\": \"showOnMouseEnter()\", \"mouseleave\": \"removeOnMouseOut()\" }, classAttribute: \"positionClass()\" }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTooltipAbstractComponent, decorators: [{\n            type: Directive,\n            args: [{\n                    host: {\n                        id: 'id()',\n                        class: 'positionClass()',\n                        'attr.role': 'tooltip'\n                    },\n                }]\n        }], propDecorators: { showOnMouseEnter: [{\n                type: HostListener,\n                args: ['mouseenter']\n            }], removeOnMouseOut: [{\n                type: HostListener,\n                args: ['mouseleave']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5hYnN0cmFjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvYWJzdHJhY3RzL3Rvb2x0aXAvdG9vbHRpcC5hYnN0cmFjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHbkQ7O0dBRUc7QUFRSCxNQUFNLE9BQWdCLDJCQUEyQjtJQUMvQixpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUvRDs7T0FFRztJQUN5QixnQkFBZ0I7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztZQUN0QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNiLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ3lCLGdCQUFnQjtRQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1lBQ3RDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2IsTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSDs7T0FFRztJQUNhLGFBQWEsR0FBRyxLQUFLLG1FQUEyQixDQUFDO0lBRWpFOztPQUVHO0lBQ0g7O09BRUc7SUFDYSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsNkNBQVUsQ0FBQztJQUU5Qzs7T0FFRztJQUNhLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxtREFBc0IsQ0FBQztJQUVoRTs7T0FFRztJQUNhLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSwrQ0FBVSxDQUFDO3VHQWpEM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBUGhELFNBQVM7bUJBQUM7b0JBQ1YsSUFBSSxFQUFFO3dCQUNMLEVBQUUsRUFBRSxNQUFNO3dCQUNSLEtBQUssRUFBRSxpQkFBaUI7d0JBQ3hCLFdBQVcsRUFBRSxTQUFTO3FCQUN4QjtpQkFDRDs4QkFPNEIsZ0JBQWdCO3NCQUEzQyxZQUFZO3VCQUFDLFlBQVk7Z0JBV0UsZ0JBQWdCO3NCQUEzQyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hUb29sdGlwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5neFRvb2x0aXBQb3NpdGlvbiwgTmd4VG9vbHRpcFBvc2l0aW9uQ2xhc3MgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgZm9yIHRoZSBOZ3hUb29sdGlwRGlyZWN0aXZlXG4gKi9cbkBEaXJlY3RpdmUoe1xuXHRob3N0OiB7XG5cdFx0aWQ6ICdpZCgpJyxcbiAgICBjbGFzczogJ3Bvc2l0aW9uQ2xhc3MoKScsXG4gICAgJ2F0dHIucm9sZSc6ICd0b29sdGlwJ1xuXHR9LFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3hUb29sdGlwQWJzdHJhY3RDb21wb25lbnQge1xuXHRwcml2YXRlIHJlYWRvbmx5IG5neFRvb2x0aXBTZXJ2aWNlID0gaW5qZWN0KE5neFRvb2x0aXBTZXJ2aWNlKTtcblxuXHQvKipcblx0ICogU2V0IHRvb2x0aXAgYXMgYWN0aXZlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJykgc2hvd09uTW91c2VFbnRlcigpIHtcblx0XHR0aGlzLm5neFRvb2x0aXBTZXJ2aWNlLnNldFRvb2xUaXBFdmVudCh7XG5cdFx0XHRpZDogdGhpcy5pZCgpLFxuXHRcdFx0c291cmNlOiAndG9vbHRpcCcsXG5cdFx0XHRhY3RpdmU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSB0b29sdGlwIGFzIGluYWN0aXZlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJykgcmVtb3ZlT25Nb3VzZU91dCgpIHtcblx0XHR0aGlzLm5neFRvb2x0aXBTZXJ2aWNlLnNldFRvb2xUaXBFdmVudCh7XG5cdFx0XHRpZDogdGhpcy5pZCgpLFxuXHRcdFx0c291cmNlOiAndG9vbHRpcCcsXG5cdFx0XHRhY3RpdmU6IGZhbHNlLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBwb3NpdGlvbiBjbGFzcyBvZiB0aGUgdG9vbHRpcFxuXHQgKi9cblx0LyoqXG5cdCAqIFRoZSBwb3NpdGlvbiBjbGFzcyBvZiB0aGUgdG9vbHRpcFxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IHBvc2l0aW9uQ2xhc3MgPSBpbnB1dDxOZ3hUb29sdGlwUG9zaXRpb25DbGFzcz4oKTtcblxuXHQvKipcblx0ICogVGhlIGlkIG9mIHRoZSB0b29sdGlwXG5cdCAqL1xuXHQvKipcblx0ICogVGhlIGlkIG9mIHRoZSB0b29sdGlwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgaWQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxOZ3hUb29sdGlwUG9zaXRpb24+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IG9mIHRoZSB0b29sdGlwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgdGV4dCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbn1cbiJdfQ==","import { Directive, ElementRef, HostListener, inject, input, output, } from '@angular/core';\nimport { NgxWindowService } from '@ibenvandeveire/ngx-core';\nimport * as i0 from \"@angular/core\";\n/**\n * An abstract for the NgxModalService\n */\nexport class NgxModalAbstractComponent {\n    windowService = inject(NgxWindowService);\n    elementRef = inject(ElementRef);\n    /**\n     * Remove the modal on escape pressed\n     */\n    onEscape() {\n        this.close.emit();\n    }\n    /**\n     * An optional aria-labelledby property\n     */\n    ariaLabelledBy = input(...(ngDevMode ? [undefined, { debugName: \"ariaLabelledBy\" }] : []));\n    /**\n     * An optional aria-describedBy property\n     */\n    ariaDescribedBy = input(...(ngDevMode ? [undefined, { debugName: \"ariaDescribedBy\" }] : []));\n    /**\n     * Optional data that can be passed to the modal\n     */\n    data = input(...(ngDevMode ? [undefined, { debugName: \"data\" }] : []));\n    /**\n     * An emitter that will emit an action we can later respond to\n     */\n    action = output();\n    /**\n     * An emitter that will emit if the modal is closed\n     */\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    close = output();\n    ngAfterViewInit() {\n        // Iben: If we are in the browser, check if either of the two accessibility labels are set\n        const ariaLabelledBy = this.ariaLabelledBy();\n        const ariaDescribedBy = this.ariaDescribedBy();\n        if (this.windowService.isBrowser() && (ariaLabelledBy || ariaDescribedBy)) {\n            // Iben: Find the element with the id and the parent\n            const element = document.getElementById(ariaLabelledBy || ariaDescribedBy);\n            const parent = this.elementRef.nativeElement;\n            // Iben: If no corresponding element was found or if it isn't part of the modal, throw an error\n            if (!element || !parent.contains(element)) {\n                console.error(`@ibenvandeveire/ngx-inform - NgxModalAbstractComponent: The ${ariaLabelledBy ? '\"aria-labelledBy\"' : 'aria-describedBy'} property was passed to the modal but no element with said id was found. Because of that, the necessary accessibility attributes could not be set. Please add an id with the value \"${ariaLabelledBy || ariaDescribedBy}\" to an element of the modal.`);\n            }\n        }\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxModalAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxModalAbstractComponent, isStandalone: true, inputs: { ariaLabelledBy: { classPropertyName: \"ariaLabelledBy\", publicName: \"ariaLabelledBy\", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: \"ariaDescribedBy\", publicName: \"ariaDescribedBy\", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: \"action\", close: \"close\" }, host: { listeners: { \"document:keydown.escape\": \"onEscape()\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxModalAbstractComponent, decorators: [{\n            type: Directive\n        }], propDecorators: { onEscape: [{\n                type: HostListener,\n                args: ['document:keydown.escape']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuYWJzdHJhY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL2Fic3RyYWN0cy9tb2RhbC9tb2RhbC5hYnN0cmFjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUk1RDs7R0FFRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFHcEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLFVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBRTFFOztPQUVHO0lBQzZDLFFBQVE7UUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDYSxjQUFjLEdBQUcsS0FBSyxvRUFBVSxDQUFDO0lBRWpEOztPQUVHO0lBQ2EsZUFBZSxHQUFHLEtBQUsscUVBQVUsQ0FBQztJQUVsRDs7T0FFRztJQUNhLElBQUksR0FBRyxLQUFLLDBEQUFZLENBQUM7SUFFekM7O09BRUc7SUFDSSxNQUFNLEdBQWlDLE1BQU0sRUFBYyxDQUFDO0lBRW5FOztPQUVHO0lBQ0gsNERBQTREO0lBQ3JELEtBQUssR0FBMkIsTUFBTSxFQUFRLENBQUM7SUFFL0MsZUFBZTtRQUNyQiwwRkFBMEY7UUFDMUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxvREFBb0Q7WUFDcEQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksZUFBZSxDQUFDLENBQUM7WUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7WUFFN0MsK0ZBQStGO1lBQy9GLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQ1osK0RBQ0MsY0FBYyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsa0JBQ3hDLHVMQUNDLGNBQWMsSUFBSSxlQUNuQiwrQkFBK0IsQ0FDL0IsQ0FBQztZQUNILENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQzt1R0EzRFcseUJBQXlCOzJGQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFNBQVM7OEJBVXVDLFFBQVE7c0JBQXZELFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRIb3N0TGlzdGVuZXIsXG5cdE91dHB1dEVtaXR0ZXJSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnQGliZW52YW5kZXZlaXJlL25neC1jb3JlJztcblxuaW1wb3J0IHsgTmd4TW9kYWxBY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIEFuIGFic3RyYWN0IGZvciB0aGUgTmd4TW9kYWxTZXJ2aWNlXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5neE1vZGFsQWJzdHJhY3RDb21wb25lbnQ8QWN0aW9uVHlwZSBleHRlbmRzIE5neE1vZGFsQWN0aW9uVHlwZSwgRGF0YVR5cGUgPSBhbnk+XG5cdGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdFxue1xuXHRwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2UgPSBpbmplY3QoTmd4V2luZG93U2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgbW9kYWwgb24gZXNjYXBlIHByZXNzZWRcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJykgcHVibGljIG9uRXNjYXBlKCkge1xuXHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIG9wdGlvbmFsIGFyaWEtbGFiZWxsZWRieSBwcm9wZXJ0eVxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGFyaWFMYWJlbGxlZEJ5ID0gaW5wdXQ8c3RyaW5nPigpO1xuXG5cdC8qKlxuXHQgKiBBbiBvcHRpb25hbCBhcmlhLWRlc2NyaWJlZEJ5IHByb3BlcnR5XG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgYXJpYURlc2NyaWJlZEJ5ID0gaW5wdXQ8c3RyaW5nPigpO1xuXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBkYXRhIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgbW9kYWxcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBkYXRhID0gaW5wdXQ8RGF0YVR5cGU+KCk7XG5cblx0LyoqXG5cdCAqIEFuIGVtaXR0ZXIgdGhhdCB3aWxsIGVtaXQgYW4gYWN0aW9uIHdlIGNhbiBsYXRlciByZXNwb25kIHRvXG5cdCAqL1xuXHRwdWJsaWMgYWN0aW9uOiBPdXRwdXRFbWl0dGVyUmVmPEFjdGlvblR5cGU+ID0gb3V0cHV0PEFjdGlvblR5cGU+KCk7XG5cblx0LyoqXG5cdCAqIEFuIGVtaXR0ZXIgdGhhdCB3aWxsIGVtaXQgaWYgdGhlIG1vZGFsIGlzIGNsb3NlZFxuXHQgKi9cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG5cdHB1YmxpYyBjbG9zZTogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dDx2b2lkPigpO1xuXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogSWYgd2UgYXJlIGluIHRoZSBicm93c2VyLCBjaGVjayBpZiBlaXRoZXIgb2YgdGhlIHR3byBhY2Nlc3NpYmlsaXR5IGxhYmVscyBhcmUgc2V0XG5cdFx0Y29uc3QgYXJpYUxhYmVsbGVkQnkgPSB0aGlzLmFyaWFMYWJlbGxlZEJ5KCk7XG5cdFx0Y29uc3QgYXJpYURlc2NyaWJlZEJ5ID0gdGhpcy5hcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRpZiAodGhpcy53aW5kb3dTZXJ2aWNlLmlzQnJvd3NlcigpICYmIChhcmlhTGFiZWxsZWRCeSB8fCBhcmlhRGVzY3JpYmVkQnkpKSB7XG5cdFx0XHQvLyBJYmVuOiBGaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIGlkIGFuZCB0aGUgcGFyZW50XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJpYUxhYmVsbGVkQnkgfHwgYXJpYURlc2NyaWJlZEJ5KTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHQvLyBJYmVuOiBJZiBubyBjb3JyZXNwb25kaW5nIGVsZW1lbnQgd2FzIGZvdW5kIG9yIGlmIGl0IGlzbid0IHBhcnQgb2YgdGhlIG1vZGFsLCB0aHJvdyBhbiBlcnJvclxuXHRcdFx0aWYgKCFlbGVtZW50IHx8ICFwYXJlbnQuY29udGFpbnMoZWxlbWVudCkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRgQGliZW52YW5kZXZlaXJlL25neC1pbmZvcm0gLSBOZ3hNb2RhbEFic3RyYWN0Q29tcG9uZW50OiBUaGUgJHtcblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5ID8gJ1wiYXJpYS1sYWJlbGxlZEJ5XCInIDogJ2FyaWEtZGVzY3JpYmVkQnknXG5cdFx0XHRcdFx0fSBwcm9wZXJ0eSB3YXMgcGFzc2VkIHRvIHRoZSBtb2RhbCBidXQgbm8gZWxlbWVudCB3aXRoIHNhaWQgaWQgd2FzIGZvdW5kLiBCZWNhdXNlIG9mIHRoYXQsIHRoZSBuZWNlc3NhcnkgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVzIGNvdWxkIG5vdCBiZSBzZXQuIFBsZWFzZSBhZGQgYW4gaWQgd2l0aCB0aGUgdmFsdWUgXCIke1xuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnkgfHwgYXJpYURlc2NyaWJlZEJ5XG5cdFx0XHRcdFx0fVwiIHRvIGFuIGVsZW1lbnQgb2YgdGhlIG1vZGFsLmBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdfQ==","import { Directive, HostBinding, HostListener, signal, inject, input, output, viewChild, } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NgxTourService } from '../../services';\nimport * as i0 from \"@angular/core\";\n/**\n * An abstract class that defines the minimum properties needed for the step component to be rendered\n */\nexport class NgxTourStepComponent {\n    tourService = inject(NgxTourService);\n    /**\n     * Close the tour on escape pressed\n     */\n    onEscape() {\n        this.tourService.closeTour().subscribe();\n    }\n    /**\n     * The ngx-tour-step class of the component\n     */\n    rootClass;\n    /**\n     * The id of the element that the tour-step describes\n     */\n    /**\n     * The id of the element that the tour-step describes\n     */\n    elementId = input.required(...(ngDevMode ? [{ debugName: \"elementId\" }] : []));\n    /**\n     * The element of the tour-step that is seen as the title\n     */\n    titleElement = viewChild('stepTitle', ...(ngDevMode ? [{ debugName: \"titleElement\" }] : []));\n    /**\n     * The position of the step\n     */\n    position = input.required(...(ngDevMode ? [{ debugName: \"position\" }] : []));\n    /**\n     * The title of the step\n     */\n    title = input.required(...(ngDevMode ? [{ debugName: \"title\" }] : []));\n    /**\n     * The content of the step\n     */\n    content = input.required(...(ngDevMode ? [{ debugName: \"content\" }] : []));\n    /**\n     * The index of the step\n     */\n    currentStep = input.required(...(ngDevMode ? [{ debugName: \"currentStep\" }] : []));\n    /**\n     * The total amount of steps\n     */\n    amountOfSteps = input.required(...(ngDevMode ? [{ debugName: \"amountOfSteps\" }] : []));\n    /**\n     * Optional data we wish to use in a step\n     */\n    data = input(...(ngDevMode ? [undefined, { debugName: \"data\" }] : []));\n    /**\n     * A custom step class we can set\n     */\n    stepClass = input(...(ngDevMode ? [undefined, { debugName: \"stepClass\" }] : []));\n    /**\n     * Emits the possible interactions with a step\n     */\n    handleInteraction = output();\n    /**\n     * The aria-labelledby id of the title element\n     */\n    titleId = signal('', ...(ngDevMode ? [{ debugName: \"titleId\" }] : []));\n    ngOnInit() {\n        // Iben: We set the correct host class. As this step is rendered and not changed afterwards, we do not have to adjust this in the onChanges\n        const position = this.position();\n        const positionClass = position ? `ngx-tour-step-position-${position}` : '';\n        this.rootClass = `ngx-tour-step ${positionClass} ${this.stepClass() || ''}`;\n    }\n    ngAfterViewInit() {\n        // Iben: If no title element was found, we throw an error\n        const titleElement = this.titleElement();\n        if (!titleElement) {\n            console.error('@ibenvandeveire/ngx-inform - NgxTourService: The tour step component does not have an element marked with `stepTitle`. Because of that, the necessary accessibility attributes could not be set. Please add the `stepTitle` tag to the element that represents the title of the step.');\n            return;\n        }\n        // Iben: Connect the aria-labbledby tag to the title element\n        let id = titleElement.nativeElement.getAttribute('id');\n        // Iben: If the title element does not have an id, we generate one\n        if (!id) {\n            id = uuid();\n            titleElement.nativeElement.setAttribute('id', id);\n        }\n        // Iben: To prevent issues with changeDetection, we use a signal here to update the id\n        this.titleId.set(id);\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.2.1\", type: NgxTourStepComponent, isStandalone: true, inputs: { elementId: { classPropertyName: \"elementId\", publicName: \"elementId\", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: \"position\", publicName: \"position\", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: true, transformFunction: null }, content: { classPropertyName: \"content\", publicName: \"content\", isSignal: true, isRequired: true, transformFunction: null }, currentStep: { classPropertyName: \"currentStep\", publicName: \"currentStep\", isSignal: true, isRequired: true, transformFunction: null }, amountOfSteps: { classPropertyName: \"amountOfSteps\", publicName: \"amountOfSteps\", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, stepClass: { classPropertyName: \"stepClass\", publicName: \"stepClass\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { handleInteraction: \"handleInteraction\" }, host: { attributes: { \"role\": \"dialog\" }, listeners: { \"document:keydown.escape\": \"onEscape()\" }, properties: { \"attr.aria-modal\": \"true\", \"attr.aria-labelledby\": \"titleId()\", \"attr.aria-details\": \"elementId()\", \"class\": \"this.rootClass\" } }, viewQueries: [{ propertyName: \"titleElement\", first: true, predicate: [\"stepTitle\"], descendants: true, isSignal: true }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxTourStepComponent, decorators: [{\n            type: Directive,\n            args: [{\n                    host: {\n                        role: 'dialog',\n                        '[attr.aria-modal]': 'true',\n                        '[attr.aria-labelledby]': 'titleId()',\n                        '[attr.aria-details]': 'elementId()',\n                    },\n                }]\n        }], propDecorators: { onEscape: [{\n                type: HostListener,\n                args: ['document:keydown.escape']\n            }], rootClass: [{\n                type: HostBinding,\n                args: ['class']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9hYnN0cmFjdHMvdG91ci1zdGVwL3RvdXItc3RlcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUVaLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUdoRDs7R0FFRztBQVNILE1BQU0sT0FBZ0Isb0JBQW9CO0lBQ3hCLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFdEQ7O09BRUc7SUFDNkMsUUFBUTtRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUM2QixTQUFTLENBQVM7SUFFbEQ7O09BRUc7SUFDSDs7T0FFRztJQUNhLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxvREFBVSxDQUFDO0lBRXJEOztPQUVHO0lBQ2EsWUFBWSxHQUFHLFNBQVMsQ0FBMEIsV0FBVyx3REFBQyxDQUFDO0lBRS9FOztPQUVHO0lBQ2EsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLG1EQUFtQyxDQUFDO0lBRTdFOztPQUVHO0lBQ2EsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLGdEQUFVLENBQUM7SUFFakQ7O09BRUc7SUFDYSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsa0RBQVUsQ0FBQztJQUVuRDs7T0FFRztJQUNhLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxzREFBVSxDQUFDO0lBRXZEOztPQUVHO0lBQ2EsYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLHdEQUFVLENBQUM7SUFFekQ7O09BRUc7SUFDYSxJQUFJLEdBQUcsS0FBSywwREFBWSxDQUFDO0lBRXpDOztPQUVHO0lBQ2EsU0FBUyxHQUFHLEtBQUssK0RBQVUsQ0FBQztJQUU1Qzs7T0FFRztJQUNJLGlCQUFpQixHQUF5QyxNQUFNLEVBQXNCLENBQUM7SUFFOUY7O09BRUc7SUFDSSxPQUFPLEdBQTJCLE1BQU0sQ0FBQyxFQUFFLG1EQUFDLENBQUM7SUFFN0MsUUFBUTtRQUNkLDJJQUEySTtRQUMzSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFTSxlQUFlO1FBQ3JCLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQ1osdVJBQXVSLENBQ3ZSLENBQUM7WUFFRixPQUFPO1FBQ1IsQ0FBQztRQUVELDREQUE0RDtRQUM1RCxJQUFJLEVBQUUsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1QsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ1osWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQzt1R0F0R29CLG9CQUFvQjsyRkFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQVJ6QyxTQUFTO21CQUFDO29CQUNWLElBQUksRUFBRTt3QkFDTCxJQUFJLEVBQUUsUUFBUTt3QkFDZCxtQkFBbUIsRUFBRSxNQUFNO3dCQUMzQix3QkFBd0IsRUFBRSxXQUFXO3dCQUNyQyxxQkFBcUIsRUFBRSxhQUFhO3FCQUNwQztpQkFDRDs4QkFPZ0QsUUFBUTtzQkFBdkQsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBT1AsU0FBUztzQkFBeEMsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRIb3N0QmluZGluZyxcblx0SG9zdExpc3RlbmVyLFxuXHRPbkluaXQsXG5cdHNpZ25hbCxcblx0V3JpdGFibGVTaWduYWwsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdE91dHB1dEVtaXR0ZXJSZWYsXG5cdG91dHB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgTmd4VG91clNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBOZ3hUb3VySW50ZXJhY3Rpb24sIE5neFRvdXJTdGVwUG9zaXRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBkZWZpbmVzIHRoZSBtaW5pbXVtIHByb3BlcnRpZXMgbmVlZGVkIGZvciB0aGUgc3RlcCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQERpcmVjdGl2ZSh7XG5cdGhvc3Q6IHtcblx0XHRyb2xlOiAnZGlhbG9nJyxcblx0XHQnW2F0dHIuYXJpYS1tb2RhbF0nOiAndHJ1ZScsXG5cdFx0J1thdHRyLmFyaWEtbGFiZWxsZWRieV0nOiAndGl0bGVJZCgpJyxcblx0XHQnW2F0dHIuYXJpYS1kZXRhaWxzXSc6ICdlbGVtZW50SWQoKScsXG5cdH0sXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5neFRvdXJTdGVwQ29tcG9uZW50PERhdGFUeXBlID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgdG91clNlcnZpY2UgPSBpbmplY3QoTmd4VG91clNlcnZpY2UpO1xuXG5cdC8qKlxuXHQgKiBDbG9zZSB0aGUgdG91ciBvbiBlc2NhcGUgcHJlc3NlZFxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKSBwdWJsaWMgb25Fc2NhcGUoKSB7XG5cdFx0dGhpcy50b3VyU2VydmljZS5jbG9zZVRvdXIoKS5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbmd4LXRvdXItc3RlcCBjbGFzcyBvZiB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzJykgcHJvdGVjdGVkIHJvb3RDbGFzczogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdGhhdCB0aGUgdG91ci1zdGVwIGRlc2NyaWJlc1xuXHQgKi9cblx0LyoqXG5cdCAqIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0aGF0IHRoZSB0b3VyLXN0ZXAgZGVzY3JpYmVzXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZWxlbWVudElkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgZWxlbWVudCBvZiB0aGUgdG91ci1zdGVwIHRoYXQgaXMgc2VlbiBhcyB0aGUgdGl0bGVcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSB0aXRsZUVsZW1lbnQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdzdGVwVGl0bGUnKTtcblxuXHQvKipcblx0ICogVGhlIHBvc2l0aW9uIG9mIHRoZSBzdGVwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxOZ3hUb3VyU3RlcFBvc2l0aW9uIHwgdW5kZWZpbmVkPigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhlIHN0ZXBcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSB0aXRsZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuXHQvKipcblx0ICogVGhlIGNvbnRlbnQgb2YgdGhlIHN0ZXBcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjb250ZW50ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggb2YgdGhlIHN0ZXBcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjdXJyZW50U3RlcCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcblxuXHQvKipcblx0ICogVGhlIHRvdGFsIGFtb3VudCBvZiBzdGVwc1xuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGFtb3VudE9mU3RlcHMgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG5cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGRhdGEgd2Ugd2lzaCB0byB1c2UgaW4gYSBzdGVwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZGF0YSA9IGlucHV0PERhdGFUeXBlPigpO1xuXG5cdC8qKlxuXHQgKiBBIGN1c3RvbSBzdGVwIGNsYXNzIHdlIGNhbiBzZXRcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBzdGVwQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG5cblx0LyoqXG5cdCAqIEVtaXRzIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBhIHN0ZXBcblx0ICovXG5cdHB1YmxpYyBoYW5kbGVJbnRlcmFjdGlvbjogT3V0cHV0RW1pdHRlclJlZjxOZ3hUb3VySW50ZXJhY3Rpb24+ID0gb3V0cHV0PE5neFRvdXJJbnRlcmFjdGlvbj4oKTtcblxuXHQvKipcblx0ICogVGhlIGFyaWEtbGFiZWxsZWRieSBpZCBvZiB0aGUgdGl0bGUgZWxlbWVudFxuXHQgKi9cblx0cHVibGljIHRpdGxlSWQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoJycpO1xuXG5cdHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBXZSBzZXQgdGhlIGNvcnJlY3QgaG9zdCBjbGFzcy4gQXMgdGhpcyBzdGVwIGlzIHJlbmRlcmVkIGFuZCBub3QgY2hhbmdlZCBhZnRlcndhcmRzLCB3ZSBkbyBub3QgaGF2ZSB0byBhZGp1c3QgdGhpcyBpbiB0aGUgb25DaGFuZ2VzXG5cdFx0Y29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uKCk7XG5cdFx0Y29uc3QgcG9zaXRpb25DbGFzcyA9IHBvc2l0aW9uID8gYG5neC10b3VyLXN0ZXAtcG9zaXRpb24tJHtwb3NpdGlvbn1gIDogJyc7XG5cdFx0dGhpcy5yb290Q2xhc3MgPSBgbmd4LXRvdXItc3RlcCAke3Bvc2l0aW9uQ2xhc3N9ICR7dGhpcy5zdGVwQ2xhc3MoKSB8fCAnJ31gO1xuXHR9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBJZiBubyB0aXRsZSBlbGVtZW50IHdhcyBmb3VuZCwgd2UgdGhyb3cgYW4gZXJyb3Jcblx0XHRjb25zdCB0aXRsZUVsZW1lbnQgPSB0aGlzLnRpdGxlRWxlbWVudCgpO1xuXHRcdGlmICghdGl0bGVFbGVtZW50KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHQnQGliZW52YW5kZXZlaXJlL25neC1pbmZvcm0gLSBOZ3hUb3VyU2VydmljZTogVGhlIHRvdXIgc3RlcCBjb21wb25lbnQgZG9lcyBub3QgaGF2ZSBhbiBlbGVtZW50IG1hcmtlZCB3aXRoIGBzdGVwVGl0bGVgLiBCZWNhdXNlIG9mIHRoYXQsIHRoZSBuZWNlc3NhcnkgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVzIGNvdWxkIG5vdCBiZSBzZXQuIFBsZWFzZSBhZGQgdGhlIGBzdGVwVGl0bGVgIHRhZyB0byB0aGUgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgdGhlIHRpdGxlIG9mIHRoZSBzdGVwLidcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBDb25uZWN0IHRoZSBhcmlhLWxhYmJsZWRieSB0YWcgdG8gdGhlIHRpdGxlIGVsZW1lbnRcblx0XHRsZXQgaWQgPSB0aXRsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgdGl0bGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFuIGlkLCB3ZSBnZW5lcmF0ZSBvbmVcblx0XHRpZiAoIWlkKSB7XG5cdFx0XHRpZCA9IHV1aWQoKTtcblx0XHRcdHRpdGxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogVG8gcHJldmVudCBpc3N1ZXMgd2l0aCBjaGFuZ2VEZXRlY3Rpb24sIHdlIHVzZSBhIHNpZ25hbCBoZXJlIHRvIHVwZGF0ZSB0aGUgaWRcblx0XHR0aGlzLnRpdGxlSWQuc2V0KGlkKTtcblx0fVxufVxuIl19","import { Directive, inject, input } from '@angular/core';\nimport { NgxToastService } from '../../services';\nimport * as i0 from \"@angular/core\";\nexport class NgxToastComponent {\n    /**\n     * Instance of the toast service\n     */\n    toastService = inject(NgxToastService);\n    /**\n     * The toast we wish to show\n     */\n    toast = input.required(...(ngDevMode ? [{ debugName: \"toast\" }] : []));\n    ngAfterViewInit() {\n        // Iben: Mark the toast as rendered so it can auto remove itself if need be\n        this.toastService.markAsRendered(this.toast());\n    }\n    /**\n     * Removes the toast from the DOM after the animation is played\n     */\n    close() {\n        this.toastService.removeToast(this.toast());\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxToastComponent, isStandalone: true, inputs: { toast: { classPropertyName: \"toast\", publicName: \"toast\", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { \"attr.role\": \"alert\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastComponent, decorators: [{\n            type: Directive,\n            args: [{\n                    host: {\n                        'attr.role': 'alert',\n                    },\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL2Fic3RyYWN0cy90b2FzdC90b2FzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUVyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBUWpELE1BQU0sT0FBZ0IsaUJBQWlCO0lBQ3RDOztPQUVHO0lBQ2MsWUFBWSxHQUFvQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFekU7O09BRUc7SUFDSSxLQUFLLEdBQW9DLEtBQUssQ0FBQyxRQUFRLGdEQUFFLENBQUM7SUFFMUQsZUFBZTtRQUNyQiwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7dUdBckJvQixpQkFBaUI7MkZBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFMdEMsU0FBUzttQkFBQztvQkFDVixJQUFJLEVBQUU7d0JBQ0wsV0FBVyxFQUFFLE9BQU87cUJBQ3BCO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0LCBJbnB1dFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBOZ3hUb2FzdCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQERpcmVjdGl2ZSh7XG5cdGhvc3Q6IHtcblx0XHQnYXR0ci5yb2xlJzogJ2FsZXJ0Jyxcblx0fSxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4VG9hc3RDb21wb25lbnQ8RGF0YVR5cGUgPSB1bmtub3duPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXHQvKipcblx0ICogSW5zdGFuY2Ugb2YgdGhlIHRvYXN0IHNlcnZpY2Vcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgdG9hc3RTZXJ2aWNlOiBOZ3hUb2FzdFNlcnZpY2UgPSBpbmplY3QoTmd4VG9hc3RTZXJ2aWNlKTtcblxuXHQvKipcblx0ICogVGhlIHRvYXN0IHdlIHdpc2ggdG8gc2hvd1xuXHQgKi9cblx0cHVibGljIHRvYXN0OiBJbnB1dFNpZ25hbDxOZ3hUb2FzdDxEYXRhVHlwZT4+ID0gaW5wdXQucmVxdWlyZWQoKTtcblxuXHRwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IE1hcmsgdGhlIHRvYXN0IGFzIHJlbmRlcmVkIHNvIGl0IGNhbiBhdXRvIHJlbW92ZSBpdHNlbGYgaWYgbmVlZCBiZVxuXHRcdHRoaXMudG9hc3RTZXJ2aWNlLm1hcmtBc1JlbmRlcmVkKHRoaXMudG9hc3QoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgdG9hc3QgZnJvbSB0aGUgRE9NIGFmdGVyIHRoZSBhbmltYXRpb24gaXMgcGxheWVkXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy50b2FzdFNlcnZpY2UucmVtb3ZlVG9hc3QodGhpcy50b2FzdCgpKTtcblx0fVxufVxuIl19","import { Directive, inject, input } from '@angular/core';\nimport { NgxToastService } from '../../services';\nimport * as i0 from \"@angular/core\";\nexport class NgxToastBundlerComponent {\n    toastService = inject(NgxToastService);\n    /**\n     * The amount of toasts that are left and currently not shown\n     */\n    amount = input.required(...(ngDevMode ? [{ debugName: \"amount\" }] : []));\n    /**\n     * Shows all the toasts that were bundled\n     */\n    showBundled() {\n        this.toastService.showBundled();\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastBundlerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxToastBundlerComponent, isStandalone: true, inputs: { amount: { classPropertyName: \"amount\", publicName: \"amount\", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { \"attr.role\": \"alert\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastBundlerComponent, decorators: [{\n            type: Directive,\n            args: [{\n                    host: {\n                        'attr.role': 'alert',\n                    },\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtYnVuZGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvYWJzdHJhY3RzL3RvYXN0L3RvYXN0LWJ1bmRsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBT2pELE1BQU0sT0FBZ0Isd0JBQXdCO0lBQzVCLFlBQVksR0FBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXpFOztPQUVHO0lBQ2EsTUFBTSxHQUF3QixLQUFLLENBQUMsUUFBUSxpREFBRSxDQUFDO0lBRS9EOztPQUVHO0lBQ0ksV0FBVztRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7dUdBYm9CLHdCQUF3QjsyRkFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUw3QyxTQUFTO21CQUFDO29CQUNWLElBQUksRUFBRTt3QkFDTCxXQUFXLEVBQUUsT0FBTztxQkFDcEI7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQsIElucHV0U2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQERpcmVjdGl2ZSh7XG5cdGhvc3Q6IHtcblx0XHQnYXR0ci5yb2xlJzogJ2FsZXJ0Jyxcblx0fSxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4VG9hc3RCdW5kbGVyQ29tcG9uZW50IHtcblx0cHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2U6IE5neFRvYXN0U2VydmljZSA9IGluamVjdChOZ3hUb2FzdFNlcnZpY2UpO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHRvYXN0cyB0aGF0IGFyZSBsZWZ0IGFuZCBjdXJyZW50bHkgbm90IHNob3duXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgYW1vdW50OiBJbnB1dFNpZ25hbDxudW1iZXI+ID0gaW5wdXQucmVxdWlyZWQoKTtcblxuXHQvKipcblx0ICogU2hvd3MgYWxsIHRoZSB0b2FzdHMgdGhhdCB3ZXJlIGJ1bmRsZWRcblx0ICovXG5cdHB1YmxpYyBzaG93QnVuZGxlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnRvYXN0U2VydmljZS5zaG93QnVuZGxlZCgpO1xuXHR9XG59XG4iXX0=","import { inject } from '@angular/core';\nimport { combineLatest, map, of, switchMap } from 'rxjs';\nimport { NgxTourService } from '../../../services';\n/**\n * An operator to map the data of an Observable to mock data when the NgxTourService has an active tour.\n *\n * *Important*: This operator only works within an injection context\n *\n * @param mockData - The mock data we wish to use when the tour is active\n */\nexport const useMockDataDuringTour = (mockData) => {\n    // Iben: Inject the tour service\n    const tourService = inject(NgxTourService);\n    // Iben: Listen to the active state of the tour\n    return switchMap((value) => {\n        return combineLatest([of(value), tourService.tourActive$]).pipe(map(([value, isActive]) => {\n            // Iben: If the tour is active, return the mockData, else, return the value\n            if (isActive) {\n                return mockData;\n            }\n            return value;\n        }));\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vY2stZGF0YS1kdXJpbmctdG91ci5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9vcGVyYXRvcnMvdG91ci91c2UtbW9jay1kYXRhLWR1cmluZy10b3VyL3VzZS1tb2NrLWRhdGEtZHVyaW5nLXRvdXIub3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQW9CLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDcEMsUUFBbUIsRUFDc0IsRUFBRTtJQUMzQyxnQ0FBZ0M7SUFDaEMsTUFBTSxXQUFXLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzRCwrQ0FBK0M7SUFDL0MsT0FBTyxTQUFTLENBQUMsQ0FBQyxLQUFnQixFQUFFLEVBQUU7UUFDckMsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3pCLDJFQUEyRTtZQUMzRSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE9BQU8sUUFBUSxDQUFDO1lBQ2pCLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neFRvdXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEFuIG9wZXJhdG9yIHRvIG1hcCB0aGUgZGF0YSBvZiBhbiBPYnNlcnZhYmxlIHRvIG1vY2sgZGF0YSB3aGVuIHRoZSBOZ3hUb3VyU2VydmljZSBoYXMgYW4gYWN0aXZlIHRvdXIuXG4gKlxuICogKkltcG9ydGFudCo6IFRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gbW9ja0RhdGEgLSBUaGUgbW9jayBkYXRhIHdlIHdpc2ggdG8gdXNlIHdoZW4gdGhlIHRvdXIgaXMgYWN0aXZlXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VNb2NrRGF0YUR1cmluZ1RvdXIgPSA8VmFsdWVUeXBlPihcblx0bW9ja0RhdGE6IFZhbHVlVHlwZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxWYWx1ZVR5cGUsIFZhbHVlVHlwZT4gPT4ge1xuXHQvLyBJYmVuOiBJbmplY3QgdGhlIHRvdXIgc2VydmljZVxuXHRjb25zdCB0b3VyU2VydmljZTogTmd4VG91clNlcnZpY2UgPSBpbmplY3QoTmd4VG91clNlcnZpY2UpO1xuXG5cdC8vIEliZW46IExpc3RlbiB0byB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSB0b3VyXG5cdHJldHVybiBzd2l0Y2hNYXAoKHZhbHVlOiBWYWx1ZVR5cGUpID0+IHtcblx0XHRyZXR1cm4gY29tYmluZUxhdGVzdChbb2YodmFsdWUpLCB0b3VyU2VydmljZS50b3VyQWN0aXZlJF0pLnBpcGUoXG5cdFx0XHRtYXAoKFt2YWx1ZSwgaXNBY3RpdmVdKSA9PiB7XG5cdFx0XHRcdC8vIEliZW46IElmIHRoZSB0b3VyIGlzIGFjdGl2ZSwgcmV0dXJuIHRoZSBtb2NrRGF0YSwgZWxzZSwgcmV0dXJuIHRoZSB2YWx1ZVxuXHRcdFx0XHRpZiAoaXNBY3RpdmUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9ja0RhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xufTtcbiJdfQ==","import { assertInInjectionContext, inject } from '@angular/core';\nimport { throwError, switchMap, map } from 'rxjs';\nimport { NgxTourService } from '../../../services';\n/**\n * An operator that will start a tour\n *\n * *Important*: If the operator is not used in the injection context, an instance of the NgxTourService has to be provided\n *\n * @param tour - The tour we wish to start\n * @param onClose - An optional on close function we wish to run\n * @param startIndex - An optional index we wish to start the tour from , default this is 0\n * @param service - An optional instance of the NgxTourService\n */\nexport const startNgxTour = (tour, onClose, startIndex = 0, service) => {\n    // Iben: Inject the modal service\n    if (!service) {\n        ngDevMode && assertInInjectionContext(startNgxTour);\n        service = inject(NgxTourService);\n    }\n    // Iben: If no modal service was provided, we throw an error\n    if (!service) {\n        switchMap(() => {\n            return throwError(() => Error('@ibenvandeveire/ngx-inform - NgxTour: No instance of NgxTourService was provided to the startNgxTour Operator.'));\n        });\n    }\n    // Iben: Start the tour\n    return switchMap((data) => {\n        return service.startTour(tour, onClose, startIndex).pipe(map(() => data));\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtdG91ci5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9vcGVyYXRvcnMvdG91ci9zdGFydC10b3VyL3N0YXJ0LXRvdXIub3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQW9CLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDM0IsSUFBbUIsRUFDbkIsT0FBdUIsRUFDdkIsVUFBVSxHQUFHLENBQUMsRUFDZCxPQUF3QixFQUNlLEVBQUU7SUFDekMsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLFNBQVMsSUFBSSx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRCxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUN0QixLQUFLLENBQ0osZ0hBQWdILENBQ2hILENBQ0QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QjtJQUN2QixPQUFPLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3pCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3hUb3VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5neFRvdXJBY3Rpb24sIE5neFRvdXJTdGVwIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG4vKipcbiAqIEFuIG9wZXJhdG9yIHRoYXQgd2lsbCBzdGFydCBhIHRvdXJcbiAqXG4gKiAqSW1wb3J0YW50KjogSWYgdGhlIG9wZXJhdG9yIGlzIG5vdCB1c2VkIGluIHRoZSBpbmplY3Rpb24gY29udGV4dCwgYW4gaW5zdGFuY2Ugb2YgdGhlIE5neFRvdXJTZXJ2aWNlIGhhcyB0byBiZSBwcm92aWRlZFxuICpcbiAqIEBwYXJhbSB0b3VyIC0gVGhlIHRvdXIgd2Ugd2lzaCB0byBzdGFydFxuICogQHBhcmFtIG9uQ2xvc2UgLSBBbiBvcHRpb25hbCBvbiBjbG9zZSBmdW5jdGlvbiB3ZSB3aXNoIHRvIHJ1blxuICogQHBhcmFtIHN0YXJ0SW5kZXggLSBBbiBvcHRpb25hbCBpbmRleCB3ZSB3aXNoIHRvIHN0YXJ0IHRoZSB0b3VyIGZyb20gLCBkZWZhdWx0IHRoaXMgaXMgMFxuICogQHBhcmFtIHNlcnZpY2UgLSBBbiBvcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgTmd4VG91clNlcnZpY2VcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXJ0Tmd4VG91ciA9IDxEYXRhVHlwZSA9IHVua25vd24+KFxuXHR0b3VyOiBOZ3hUb3VyU3RlcFtdLFxuXHRvbkNsb3NlPzogTmd4VG91ckFjdGlvbixcblx0c3RhcnRJbmRleCA9IDAsXG5cdHNlcnZpY2U/OiBOZ3hUb3VyU2VydmljZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxEYXRhVHlwZSwgRGF0YVR5cGU+ID0+IHtcblx0Ly8gSWJlbjogSW5qZWN0IHRoZSBtb2RhbCBzZXJ2aWNlXG5cdGlmICghc2VydmljZSkge1xuXHRcdG5nRGV2TW9kZSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoc3RhcnROZ3hUb3VyKTtcblx0XHRzZXJ2aWNlID0gaW5qZWN0KE5neFRvdXJTZXJ2aWNlKTtcblx0fVxuXG5cdC8vIEliZW46IElmIG5vIG1vZGFsIHNlcnZpY2Ugd2FzIHByb3ZpZGVkLCB3ZSB0aHJvdyBhbiBlcnJvclxuXHRpZiAoIXNlcnZpY2UpIHtcblx0XHRzd2l0Y2hNYXAoKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoKCkgPT5cblx0XHRcdFx0RXJyb3IoXG5cdFx0XHRcdFx0J0BpYmVudmFuZGV2ZWlyZS9uZ3gtaW5mb3JtIC0gTmd4VG91cjogTm8gaW5zdGFuY2Ugb2YgTmd4VG91clNlcnZpY2Ugd2FzIHByb3ZpZGVkIHRvIHRoZSBzdGFydE5neFRvdXIgT3BlcmF0b3IuJ1xuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gSWJlbjogU3RhcnQgdGhlIHRvdXJcblx0cmV0dXJuIHN3aXRjaE1hcCgoZGF0YSkgPT4ge1xuXHRcdHJldHVybiBzZXJ2aWNlLnN0YXJ0VG91cih0b3VyLCBvbkNsb3NlLCBzdGFydEluZGV4KS5waXBlKG1hcCgoKSA9PiBkYXRhKSk7XG5cdH0pO1xufTtcbiJdfQ==","import { assertInInjectionContext, inject } from '@angular/core';\nimport { throwError, switchMap, catchError } from 'rxjs';\nimport { NgxToastService } from '../../../services';\n/**\n * An operator that will display a toast on error\n *\n * *Important*: If the operator is not used in the injection context, an instance of the NgxToastService has to be provided\n *\n * @param toast - The toast we wish to display on success\n * @param toastService - An optional instance of the NgxToastService\n */\nexport const ngxToastOnError = (toast, service) => {\n    // Iben: Inject the toast service\n    if (!service) {\n        ngDevMode && assertInInjectionContext(ngxToastOnError);\n        service = inject(NgxToastService);\n    }\n    // Iben: If no toast service was provided, we throw an error\n    if (!service) {\n        switchMap(() => {\n            return throwError(() => Error('@ibenvandeveire/ngx-inform - NgxToast: No instance of NgxToastService was provided to the ngxToastOnError Operator.'));\n        });\n    }\n    // Iben: Show a toast\n    return catchError((error) => {\n        service.showToast(toast);\n        return throwError(() => error);\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Qtb24tZXJyb3Iub3BlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvb3BlcmF0b3JzL3RvYXN0L29uLWVycm9yL3RvYXN0LW9uLWVycm9yLm9wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFvQixVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUM5QixLQUE4QyxFQUM5QyxPQUF5QixFQUNjLEVBQUU7SUFDekMsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLFNBQVMsSUFBSSx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RCxPQUFPLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUN0QixLQUFLLENBQ0oscUhBQXFILENBQ3JILENBQ0QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQjtJQUNyQixPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3BlcmF0b3JGdW5jdGlvbiwgdGhyb3dFcnJvciwgc3dpdGNoTWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5neFRvYXN0Q3JlYXRvciB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBBbiBvcGVyYXRvciB0aGF0IHdpbGwgZGlzcGxheSBhIHRvYXN0IG9uIGVycm9yXG4gKlxuICogKkltcG9ydGFudCo6IElmIHRoZSBvcGVyYXRvciBpcyBub3QgdXNlZCBpbiB0aGUgaW5qZWN0aW9uIGNvbnRleHQsIGFuIGluc3RhbmNlIG9mIHRoZSBOZ3hUb2FzdFNlcnZpY2UgaGFzIHRvIGJlIHByb3ZpZGVkXG4gKlxuICogQHBhcmFtIHRvYXN0IC0gVGhlIHRvYXN0IHdlIHdpc2ggdG8gZGlzcGxheSBvbiBzdWNjZXNzXG4gKiBAcGFyYW0gdG9hc3RTZXJ2aWNlIC0gQW4gb3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIE5neFRvYXN0U2VydmljZVxuICovXG5leHBvcnQgY29uc3Qgbmd4VG9hc3RPbkVycm9yID0gPERhdGFUeXBlID0gdW5rbm93biwgVG9hc3REYXRhVHlwZSA9IHVua25vd24+KFxuXHR0b2FzdDogTmd4VG9hc3RDcmVhdG9yPFRvYXN0RGF0YVR5cGU+IHwgc3RyaW5nLFxuXHRzZXJ2aWNlPzogTmd4VG9hc3RTZXJ2aWNlXG4pOiBPcGVyYXRvckZ1bmN0aW9uPERhdGFUeXBlLCBEYXRhVHlwZT4gPT4ge1xuXHQvLyBJYmVuOiBJbmplY3QgdGhlIHRvYXN0IHNlcnZpY2Vcblx0aWYgKCFzZXJ2aWNlKSB7XG5cdFx0bmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChuZ3hUb2FzdE9uRXJyb3IpO1xuXHRcdHNlcnZpY2UgPSBpbmplY3QoTmd4VG9hc3RTZXJ2aWNlKTtcblx0fVxuXG5cdC8vIEliZW46IElmIG5vIHRvYXN0IHNlcnZpY2Ugd2FzIHByb3ZpZGVkLCB3ZSB0aHJvdyBhbiBlcnJvclxuXHRpZiAoIXNlcnZpY2UpIHtcblx0XHRzd2l0Y2hNYXAoKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoKCkgPT5cblx0XHRcdFx0RXJyb3IoXG5cdFx0XHRcdFx0J0BpYmVudmFuZGV2ZWlyZS9uZ3gtaW5mb3JtIC0gTmd4VG9hc3Q6IE5vIGluc3RhbmNlIG9mIE5neFRvYXN0U2VydmljZSB3YXMgcHJvdmlkZWQgdG8gdGhlIG5neFRvYXN0T25FcnJvciBPcGVyYXRvci4nXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBJYmVuOiBTaG93IGEgdG9hc3Rcblx0cmV0dXJuIGNhdGNoRXJyb3IoKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdHNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcblxuXHRcdHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcblx0fSk7XG59O1xuIl19","import { assertInInjectionContext, inject } from '@angular/core';\nimport { throwError, tap, switchMap } from 'rxjs';\nimport { NgxToastService } from '../../../services';\n/**\n * An operator that will display a toast on success\n *\n * *Important*: If the operator is not used in the injection context, an instance of the NgxToastService has to be provided\n *\n * @param toast - The toast we wish to display on success\n * @param toastService - An optional instance of the NgxToastService\n */\nexport const ngxToastOnSuccess = (toast, service) => {\n    // Iben: Inject the toast service\n    // Iben: Inject the toast service\n    if (!service) {\n        ngDevMode && assertInInjectionContext(ngxToastOnSuccess);\n        service = inject(NgxToastService);\n    }\n    // Iben: If no toast service was provided, we throw an error\n    if (!service) {\n        switchMap(() => {\n            return throwError(() => Error('@ibenvandeveire/ngx-inform - NgxToast: No instance of NgxToastService was provided to the ngxToastOnSuccess Operator.'));\n        });\n    }\n    // Iben: Show a toast\n    return tap(() => {\n        service.showToast(toast);\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Qtb24tc3VjY2Vzcy5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9vcGVyYXRvcnMvdG9hc3Qvb24tc3VjY2Vzcy90b2FzdC1vbi1zdWNjZXNzLm9wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFvQixVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQ2hDLEtBQThDLEVBQzlDLE9BQXlCLEVBQ2MsRUFBRTtJQUN6QyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLFNBQVMsSUFBSSx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQ3RCLEtBQUssQ0FDSix1SEFBdUgsQ0FDdkgsQ0FDRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLE9BQU8sR0FBRyxDQUFXLEdBQUcsRUFBRTtRQUN6QixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24sIHRocm93RXJyb3IsIHRhcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5neFRvYXN0Q3JlYXRvciB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBBbiBvcGVyYXRvciB0aGF0IHdpbGwgZGlzcGxheSBhIHRvYXN0IG9uIHN1Y2Nlc3NcbiAqXG4gKiAqSW1wb3J0YW50KjogSWYgdGhlIG9wZXJhdG9yIGlzIG5vdCB1c2VkIGluIHRoZSBpbmplY3Rpb24gY29udGV4dCwgYW4gaW5zdGFuY2Ugb2YgdGhlIE5neFRvYXN0U2VydmljZSBoYXMgdG8gYmUgcHJvdmlkZWRcbiAqXG4gKiBAcGFyYW0gdG9hc3QgLSBUaGUgdG9hc3Qgd2Ugd2lzaCB0byBkaXNwbGF5IG9uIHN1Y2Nlc3NcbiAqIEBwYXJhbSB0b2FzdFNlcnZpY2UgLSBBbiBvcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgTmd4VG9hc3RTZXJ2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBuZ3hUb2FzdE9uU3VjY2VzcyA9IDxUb2FzdERhdGFUeXBlID0gdW5rbm93biwgRGF0YVR5cGUgPSB1bmtub3duPihcblx0dG9hc3Q6IE5neFRvYXN0Q3JlYXRvcjxUb2FzdERhdGFUeXBlPiB8IHN0cmluZyxcblx0c2VydmljZT86IE5neFRvYXN0U2VydmljZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxEYXRhVHlwZSwgRGF0YVR5cGU+ID0+IHtcblx0Ly8gSWJlbjogSW5qZWN0IHRoZSB0b2FzdCBzZXJ2aWNlXG5cdC8vIEliZW46IEluamVjdCB0aGUgdG9hc3Qgc2VydmljZVxuXHRpZiAoIXNlcnZpY2UpIHtcblx0XHRuZ0Rldk1vZGUgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KG5neFRvYXN0T25TdWNjZXNzKTtcblx0XHRzZXJ2aWNlID0gaW5qZWN0KE5neFRvYXN0U2VydmljZSk7XG5cdH1cblxuXHQvLyBJYmVuOiBJZiBubyB0b2FzdCBzZXJ2aWNlIHdhcyBwcm92aWRlZCwgd2UgdGhyb3cgYW4gZXJyb3Jcblx0aWYgKCFzZXJ2aWNlKSB7XG5cdFx0c3dpdGNoTWFwKCgpID0+IHtcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCgpID0+XG5cdFx0XHRcdEVycm9yKFxuXHRcdFx0XHRcdCdAaWJlbnZhbmRldmVpcmUvbmd4LWluZm9ybSAtIE5neFRvYXN0OiBObyBpbnN0YW5jZSBvZiBOZ3hUb2FzdFNlcnZpY2Ugd2FzIHByb3ZpZGVkIHRvIHRoZSBuZ3hUb2FzdE9uU3VjY2VzcyBPcGVyYXRvci4nXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBJYmVuOiBTaG93IGEgdG9hc3Rcblx0cmV0dXJuIHRhcDxEYXRhVHlwZT4oKCkgPT4ge1xuXHRcdHNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcblx0fSk7XG59O1xuIl19","import { assertInInjectionContext, inject } from '@angular/core';\nimport { throwError, switchMap } from 'rxjs';\nimport { NgxModalService } from '../../../services';\n/**\n * An operator that will display a modal\n *\n * *Important*: If the operator is not used in the injection context, an instance of the NgxModalService has to be provided\n *\n * @param options - The options of the modal we wish to show\n * @param service - An optional instance of the NgxModalService\n */\nexport const openNgxModal = (options, service) => {\n    // Iben: Inject the modal service\n    if (!service) {\n        ngDevMode && assertInInjectionContext(openNgxModal);\n        service = inject(NgxModalService);\n    }\n    // Iben: If no modal service was provided, we throw an error\n    if (!service) {\n        switchMap(() => {\n            return throwError(() => Error('@ibenvandeveire/ngx-inform - NgxModal: No instance of NgxModalService was provided to the openNgxModal Operator.'));\n        });\n    }\n    // Iben: Open a modal\n    return switchMap(() => {\n        return service.open(options);\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1tb2RhbC5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9vcGVyYXRvcnMvbW9kYWwvb3Blbi1tb2RhbC9vcGVuLW1vZGFsLm9wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFvQixVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBSzNCLE9BQW1ELEVBQ25ELE9BQXlCLEVBQ2dCLEVBQUU7SUFDM0MsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLFNBQVMsSUFBSSx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRCxPQUFPLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUN0QixLQUFLLENBQ0osa0hBQWtILENBQ2xILENBQ0QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQjtJQUNyQixPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDckIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUE0QixPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCB0aHJvd0Vycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4TW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTmd4TW9kYWxBY3Rpb25UeXBlLCBOZ3hNb2RhbE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5cbi8qKlxuICogQW4gb3BlcmF0b3IgdGhhdCB3aWxsIGRpc3BsYXkgYSBtb2RhbFxuICpcbiAqICpJbXBvcnRhbnQqOiBJZiB0aGUgb3BlcmF0b3IgaXMgbm90IHVzZWQgaW4gdGhlIGluamVjdGlvbiBjb250ZXh0LCBhbiBpbnN0YW5jZSBvZiB0aGUgTmd4TW9kYWxTZXJ2aWNlIGhhcyB0byBiZSBwcm92aWRlZFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2YgdGhlIG1vZGFsIHdlIHdpc2ggdG8gc2hvd1xuICogQHBhcmFtIHNlcnZpY2UgLSBBbiBvcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgTmd4TW9kYWxTZXJ2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuTmd4TW9kYWwgPSA8XG5cdEFjdGlvblR5cGUgZXh0ZW5kcyBOZ3hNb2RhbEFjdGlvblR5cGUgPSBzdHJpbmcsXG5cdE1vZGFsRGF0YVR5cGUgPSB1bmtub3duLFxuXHREYXRhVHlwZSA9IHVua25vd25cbj4oXG5cdG9wdGlvbnM6IE5neE1vZGFsT3B0aW9uczxBY3Rpb25UeXBlLCBNb2RhbERhdGFUeXBlPixcblx0c2VydmljZT86IE5neE1vZGFsU2VydmljZVxuKTogT3BlcmF0b3JGdW5jdGlvbjxEYXRhVHlwZSwgQWN0aW9uVHlwZT4gPT4ge1xuXHQvLyBJYmVuOiBJbmplY3QgdGhlIG1vZGFsIHNlcnZpY2Vcblx0aWYgKCFzZXJ2aWNlKSB7XG5cdFx0bmdEZXZNb2RlICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChvcGVuTmd4TW9kYWwpO1xuXHRcdHNlcnZpY2UgPSBpbmplY3QoTmd4TW9kYWxTZXJ2aWNlKTtcblx0fVxuXG5cdC8vIEliZW46IElmIG5vIG1vZGFsIHNlcnZpY2Ugd2FzIHByb3ZpZGVkLCB3ZSB0aHJvdyBhbiBlcnJvclxuXHRpZiAoIXNlcnZpY2UpIHtcblx0XHRzd2l0Y2hNYXAoKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoKCkgPT5cblx0XHRcdFx0RXJyb3IoXG5cdFx0XHRcdFx0J0BpYmVudmFuZGV2ZWlyZS9uZ3gtaW5mb3JtIC0gTmd4TW9kYWw6IE5vIGluc3RhbmNlIG9mIE5neE1vZGFsU2VydmljZSB3YXMgcHJvdmlkZWQgdG8gdGhlIG9wZW5OZ3hNb2RhbCBPcGVyYXRvci4nXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBJYmVuOiBPcGVuIGEgbW9kYWxcblx0cmV0dXJuIHN3aXRjaE1hcCgoKSA9PiB7XG5cdFx0cmV0dXJuIHNlcnZpY2Uub3BlbjxBY3Rpb25UeXBlLCBNb2RhbERhdGFUeXBlPihvcHRpb25zKTtcblx0fSk7XG59O1xuIl19","import { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { NgxToastService } from '../../services';\nimport { NgxToastConfigurationToken } from '../../tokens';\nimport * as i0 from \"@angular/core\";\nexport class NgxToastContainerComponent {\n    /**\n     * The default configuration required for the toast\n     */\n    toastService = inject(NgxToastService);\n    /**\n     * The default configuration provided for the toast\n     */\n    configuration = inject(NgxToastConfigurationToken);\n    /**\n     * A list of toasts to display\n     */\n    toasts = this.toastService.toasts;\n    /**\n     * Whether there are bundled toasts that aren't currently visible\n     */\n    hasBundledToasts = this.toastService.hasBundledToasts;\n    /**\n     * A component that will display the amount of bundled toasts\n     */\n    bundledComponent = this.toastService.bundledComponent;\n    /**\n     * Set whether the element has focus\n     *\n     * @param hasFocus\n     */\n    setFocus(hasFocus) {\n        this.toastService.setFocus(hasFocus);\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.2.1\", type: NgxToastContainerComponent, isStandalone: true, selector: \"ngx-toast-container\", host: { classAttribute: \"ngx-toast-container\" }, ngImport: i0, template: \"<ul\\n\\tclass=\\\"ngx-toast-list\\\"\\n\\t[class]=\\\"`ngx-toast-position-${this.configuration.position}`\\\"\\n\\t(mouseenter)=\\\"setFocus(true)\\\"\\n\\t(mouseleave)=\\\"setFocus(false)\\\"\\n>\\n\\t@for (toast of toasts(); track toast.id) {\\n\\t<li class=\\\"ngx-toast-item\\\" animate.enter=\\\"ngx-toast-item-in\\\" animate.leave=\\\"ngx-toast-item-out\\\">\\n\\t\\t<ng-template\\n\\t\\t\\t[ngComponentOutlet]=\\\"toast.configuration?.component || configuration.component\\\"\\n\\t\\t\\t[ngComponentOutletInputs]=\\\"{toast}\\\"\\n\\t\\t/>\\n\\t</li>\\n\\t} @if(hasBundledToasts()) {\\n\\t<li class=\\\"ngx-toast-item\\\">\\n\\t\\t<ng-template\\n\\t\\t\\t[ngComponentOutlet]=\\\"bundledComponent\\\"\\n\\t\\t\\t[ngComponentOutletInputs]=\\\"{ amount: hasBundledToasts() }\\\"\\n\\t\\t/>\\n\\t</li>\\n\\t}\\n</ul>\\n\", styles: [\":host{position:absolute;pointer-events:none;display:block;width:100vw;height:100vh}:host ul{position:absolute;pointer-events:all;width:fit-content}:host ul.ngx-toast-position-top-right{top:0;right:0}:host ul.ngx-toast-position-top-left{top:0;left:0}:host ul.ngx-toast-position-bottom-right{bottom:0;right:0}:host ul.ngx-toast-position-bottom-left{bottom:0;left:0}:host ul .ngx-toast-item{height:fit-content;width:fit-content}\\n\"], dependencies: [{ kind: \"directive\", type: NgComponentOutlet, selector: \"[ngComponentOutlet]\", inputs: [\"ngComponentOutlet\", \"ngComponentOutletInputs\", \"ngComponentOutletInjector\", \"ngComponentOutletEnvironmentInjector\", \"ngComponentOutletContent\", \"ngComponentOutletNgModule\", \"ngComponentOutletNgModuleFactory\"], exportAs: [\"ngComponentOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxToastContainerComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ngx-toast-container', imports: [NgComponentOutlet], changeDetection: ChangeDetectionStrategy.OnPush, host: {\n                        class: 'ngx-toast-container',\n                    }, template: \"<ul\\n\\tclass=\\\"ngx-toast-list\\\"\\n\\t[class]=\\\"`ngx-toast-position-${this.configuration.position}`\\\"\\n\\t(mouseenter)=\\\"setFocus(true)\\\"\\n\\t(mouseleave)=\\\"setFocus(false)\\\"\\n>\\n\\t@for (toast of toasts(); track toast.id) {\\n\\t<li class=\\\"ngx-toast-item\\\" animate.enter=\\\"ngx-toast-item-in\\\" animate.leave=\\\"ngx-toast-item-out\\\">\\n\\t\\t<ng-template\\n\\t\\t\\t[ngComponentOutlet]=\\\"toast.configuration?.component || configuration.component\\\"\\n\\t\\t\\t[ngComponentOutletInputs]=\\\"{toast}\\\"\\n\\t\\t/>\\n\\t</li>\\n\\t} @if(hasBundledToasts()) {\\n\\t<li class=\\\"ngx-toast-item\\\">\\n\\t\\t<ng-template\\n\\t\\t\\t[ngComponentOutlet]=\\\"bundledComponent\\\"\\n\\t\\t\\t[ngComponentOutletInputs]=\\\"{ amount: hasBundledToasts() }\\\"\\n\\t\\t/>\\n\\t</li>\\n\\t}\\n</ul>\\n\", styles: [\":host{position:absolute;pointer-events:none;display:block;width:100vw;height:100vh}:host ul{position:absolute;pointer-events:all;width:fit-content}:host ul.ngx-toast-position-top-right{top:0;right:0}:host ul.ngx-toast-position-top-left{top:0;left:0}:host ul.ngx-toast-position-bottom-right{bottom:0;right:0}:host ul.ngx-toast-position-bottom-left{bottom:0;left:0}:host ul .ngx-toast-item{height:fit-content;width:fit-content}\\n\"] }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2xpYi9jb21wb25lbnRzL3RvYXN0LWNvbnRhaW5lci90b2FzdC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvdG9hc3QtY29udGFpbmVyL3RvYXN0LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFHekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFhMUQsTUFBTSxPQUFPLDBCQUEwQjtJQUN0Qzs7T0FFRztJQUNjLFlBQVksR0FBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXpFOztPQUVHO0lBQ2EsYUFBYSxHQUFpQyxNQUFNLENBQ25FLDBCQUEwQixDQUMxQixDQUFDO0lBRUY7O09BRUc7SUFDSSxNQUFNLEdBQXVCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBRTdEOztPQUVHO0lBQ0ksZ0JBQWdCLEdBQW1CLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7SUFFN0U7O09BRUc7SUFDSSxnQkFBZ0IsR0FBbUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztJQUU3Rjs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7dUdBbkNXLDBCQUEwQjsyRkFBMUIsMEJBQTBCLGdJQ2xCdkMsb3RCQXNCQSxxZURWVyxpQkFBaUI7OzJGQU1mLDBCQUEwQjtrQkFWdEMsU0FBUzsrQkFDQyxxQkFBcUIsV0FHdEIsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFDWCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNMLEtBQUssRUFBRSxxQkFBcUI7cUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDb21wb25lbnRPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBTaWduYWwsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd4VG9hc3RCdW5kbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcbmltcG9ydCB7IE5neFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5neFRvYXN0Q29uZmlndXJhdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IE5neFRvYXN0LCBOZ3hUb2FzdERlZmF1bHRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3gtdG9hc3QtY29udGFpbmVyJyxcblx0dGVtcGxhdGVVcmw6ICcuL3RvYXN0LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi90b2FzdC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnLFxuXHRpbXBvcnRzOiBbTmdDb21wb25lbnRPdXRsZXRdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aG9zdDoge1xuXHRcdGNsYXNzOiAnbmd4LXRvYXN0LWNvbnRhaW5lcicsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIE5neFRvYXN0Q29udGFpbmVyQ29tcG9uZW50IHtcblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgZm9yIHRoZSB0b2FzdFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2U6IE5neFRvYXN0U2VydmljZSA9IGluamVjdChOZ3hUb2FzdFNlcnZpY2UpO1xuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGZvciB0aGUgdG9hc3Rcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjb25maWd1cmF0aW9uOiBOZ3hUb2FzdERlZmF1bHRDb25maWd1cmF0aW9uID0gaW5qZWN0KFxuXHRcdE5neFRvYXN0Q29uZmlndXJhdGlvblRva2VuXG5cdCk7XG5cblx0LyoqXG5cdCAqIEEgbGlzdCBvZiB0b2FzdHMgdG8gZGlzcGxheVxuXHQgKi9cblx0cHVibGljIHRvYXN0czogU2lnbmFsPE5neFRvYXN0W10+ID0gdGhpcy50b2FzdFNlcnZpY2UudG9hc3RzO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZXJlIGFyZSBidW5kbGVkIHRvYXN0cyB0aGF0IGFyZW4ndCBjdXJyZW50bHkgdmlzaWJsZVxuXHQgKi9cblx0cHVibGljIGhhc0J1bmRsZWRUb2FzdHM6IFNpZ25hbDxudW1iZXI+ID0gdGhpcy50b2FzdFNlcnZpY2UuaGFzQnVuZGxlZFRvYXN0cztcblxuXHQvKipcblx0ICogQSBjb21wb25lbnQgdGhhdCB3aWxsIGRpc3BsYXkgdGhlIGFtb3VudCBvZiBidW5kbGVkIHRvYXN0c1xuXHQgKi9cblx0cHVibGljIGJ1bmRsZWRDb21wb25lbnQ6IFR5cGU8Tmd4VG9hc3RCdW5kbGVyQ29tcG9uZW50PiA9IHRoaXMudG9hc3RTZXJ2aWNlLmJ1bmRsZWRDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFNldCB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBmb2N1c1xuXHQgKlxuXHQgKiBAcGFyYW0gaGFzRm9jdXNcblx0ICovXG5cdHB1YmxpYyBzZXRGb2N1cyhoYXNGb2N1czogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMudG9hc3RTZXJ2aWNlLnNldEZvY3VzKGhhc0ZvY3VzKTtcblx0fVxufVxuIiwiPHVsXG5cdGNsYXNzPVwibmd4LXRvYXN0LWxpc3RcIlxuXHRbY2xhc3NdPVwiYG5neC10b2FzdC1wb3NpdGlvbi0ke3RoaXMuY29uZmlndXJhdGlvbi5wb3NpdGlvbn1gXCJcblx0KG1vdXNlZW50ZXIpPVwic2V0Rm9jdXModHJ1ZSlcIlxuXHQobW91c2VsZWF2ZSk9XCJzZXRGb2N1cyhmYWxzZSlcIlxuPlxuXHRAZm9yICh0b2FzdCBvZiB0b2FzdHMoKTsgdHJhY2sgdG9hc3QuaWQpIHtcblx0PGxpIGNsYXNzPVwibmd4LXRvYXN0LWl0ZW1cIiBhbmltYXRlLmVudGVyPVwibmd4LXRvYXN0LWl0ZW0taW5cIiBhbmltYXRlLmxlYXZlPVwibmd4LXRvYXN0LWl0ZW0tb3V0XCI+XG5cdFx0PG5nLXRlbXBsYXRlXG5cdFx0XHRbbmdDb21wb25lbnRPdXRsZXRdPVwidG9hc3QuY29uZmlndXJhdGlvbj8uY29tcG9uZW50IHx8IGNvbmZpZ3VyYXRpb24uY29tcG9uZW50XCJcblx0XHRcdFtuZ0NvbXBvbmVudE91dGxldElucHV0c109XCJ7dG9hc3R9XCJcblx0XHQvPlxuXHQ8L2xpPlxuXHR9IEBpZihoYXNCdW5kbGVkVG9hc3RzKCkpIHtcblx0PGxpIGNsYXNzPVwibmd4LXRvYXN0LWl0ZW1cIj5cblx0XHQ8bmctdGVtcGxhdGVcblx0XHRcdFtuZ0NvbXBvbmVudE91dGxldF09XCJidW5kbGVkQ29tcG9uZW50XCJcblx0XHRcdFtuZ0NvbXBvbmVudE91dGxldElucHV0c109XCJ7IGFtb3VudDogaGFzQnVuZGxlZFRvYXN0cygpIH1cIlxuXHRcdC8+XG5cdDwvbGk+XG5cdH1cbjwvdWw+XG4iXX0=","import { Component } from '@angular/core';\nimport { NgxTourStepComponent } from '../abstracts';\nimport * as i0 from \"@angular/core\";\n// Iben: This mock tour step component can be used where needed\nexport class MockTourStepComponent extends NgxTourStepComponent {\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: MockTourStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.2.1\", type: MockTourStepComponent, isStandalone: true, selector: \"mock-tour-step-component\", usesInheritance: true, ngImport: i0, template: '', isInline: true });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: MockTourStepComponent, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'mock-tour-step-component',\n                    template: '',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zdGVwLmNvbXBvbmVudC5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL21vY2tzL3RvdXItc3RlcC5jb21wb25lbnQubW9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFcEQsK0RBQStEO0FBTS9ELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7dUdBQWxELHFCQUFxQjsyRkFBckIscUJBQXFCLDJHQUh2QixFQUFFOzsyRkFHQSxxQkFBcUI7a0JBTGpDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7aUJBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFRvdXJTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3RzJztcblxuLy8gSWJlbjogVGhpcyBtb2NrIHRvdXIgc3RlcCBjb21wb25lbnQgY2FuIGJlIHVzZWQgd2hlcmUgbmVlZGVkXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdtb2NrLXRvdXItc3RlcC1jb21wb25lbnQnLFxuXHR0ZW1wbGF0ZTogJycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE1vY2tUb3VyU3RlcENvbXBvbmVudCBleHRlbmRzIE5neFRvdXJTdGVwQ29tcG9uZW50IHt9XG4iXX0=","/** This mock provides an implementation to the CDK Overlay */\nexport const OverlayMock = (component, testFunction) => ({\n    position: () => ({\n        global: () => ({\n            centerHorizontally: testFunction,\n            centerVertically: testFunction,\n        }),\n    }),\n    scrollStrategies: {\n        block: testFunction,\n        noop: testFunction,\n    },\n    create: () => ({\n        attach: () => ({\n            instance: component,\n        }),\n        dispose: testFunction,\n    }),\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL21vY2tzL292ZXJsYXkubW9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBb0MsRUFBRSxZQUFzQixFQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2Qsa0JBQWtCLEVBQUUsWUFBWTtZQUNoQyxnQkFBZ0IsRUFBRSxZQUFZO1NBQzlCLENBQUM7S0FDRixDQUFDO0lBQ0YsZ0JBQWdCLEVBQUU7UUFDakIsS0FBSyxFQUFFLFlBQVk7UUFDbkIsSUFBSSxFQUFFLFlBQVk7S0FDbEI7SUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNkLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsUUFBUSxFQUFFLFNBQVM7U0FDbkIsQ0FBQztRQUNGLE9BQU8sRUFBRSxZQUFZO0tBQ3JCLENBQUM7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5neFRvdXJTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3RzJztcblxuLyoqIFRoaXMgbW9jayBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiB0byB0aGUgQ0RLIE92ZXJsYXkgKi9cbmV4cG9ydCBjb25zdCBPdmVybGF5TW9jayA9IChjb21wb25lbnQ6IE5neFRvdXJTdGVwQ29tcG9uZW50PGFueT4sIHRlc3RGdW5jdGlvbjogRnVuY3Rpb24pOiBhbnkgPT4gKHtcblx0cG9zaXRpb246ICgpID0+ICh7XG5cdFx0Z2xvYmFsOiAoKSA9PiAoe1xuXHRcdFx0Y2VudGVySG9yaXpvbnRhbGx5OiB0ZXN0RnVuY3Rpb24sXG5cdFx0XHRjZW50ZXJWZXJ0aWNhbGx5OiB0ZXN0RnVuY3Rpb24sXG5cdFx0fSksXG5cdH0pLFxuXHRzY3JvbGxTdHJhdGVnaWVzOiB7XG5cdFx0YmxvY2s6IHRlc3RGdW5jdGlvbixcblx0XHRub29wOiB0ZXN0RnVuY3Rpb24sXG5cdH0sXG5cdGNyZWF0ZTogKCkgPT4gKHtcblx0XHRhdHRhY2g6ICgpID0+ICh7XG5cdFx0XHRpbnN0YW5jZTogY29tcG9uZW50LFxuXHRcdH0pLFxuXHRcdGRpc3Bvc2U6IHRlc3RGdW5jdGlvbixcblx0fSksXG59KTtcbiJdfQ==","import { Component, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { useMockDataDuringTour } from '../operators';\nimport { NgxTourService } from '../services';\nimport * as i0 from \"@angular/core\";\n// Iben: This mock tour holder is used in the test to test the useMockDataDuringTour operator\nexport class MockTourHolderComponent {\n    tourService = inject(NgxTourService);\n    dataSourceSubject = new BehaviorSubject('Hello world!');\n    data$ = this.dataSourceSubject\n        .asObservable()\n        .pipe(useMockDataDuringTour('World hello!'));\n    startTour() {\n        this.tourService.startTour([{ title: 'Mock', content: 'Mock' }]).subscribe();\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: MockTourHolderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.2.1\", type: MockTourHolderComponent, isStandalone: true, selector: \"mock-tour-holder\", ngImport: i0, template: '', isInline: true });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: MockTourHolderComponent, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'mock-tour-holder',\n                    template: '',\n                    standalone: true,\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1ob2xkZXIuY29tcG9uZW50Lm1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvbW9ja3MvdG91ci1ob2xkZXIuY29tcG9uZW50Lm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFN0MsNkZBQTZGO0FBTTdGLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVyQyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV6RCxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtTQUM1QyxZQUFZLEVBQUU7U0FDZCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUV2QyxTQUFTO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5RSxDQUFDO3VHQVhXLHVCQUF1QjsyRkFBdkIsdUJBQXVCLDRFQUh6QixFQUFFOzsyRkFHQSx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7aUJBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyB1c2VNb2NrRGF0YUR1cmluZ1RvdXIgfSBmcm9tICcuLi9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmd4VG91clNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbi8vIEliZW46IFRoaXMgbW9jayB0b3VyIGhvbGRlciBpcyB1c2VkIGluIHRoZSB0ZXN0IHRvIHRlc3QgdGhlIHVzZU1vY2tEYXRhRHVyaW5nVG91ciBvcGVyYXRvclxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbW9jay10b3VyLWhvbGRlcicsXG5cdHRlbXBsYXRlOiAnJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTW9ja1RvdXJIb2xkZXJDb21wb25lbnQge1xuXHRwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0KE5neFRvdXJTZXJ2aWNlKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGRhdGFTb3VyY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnSGVsbG8gd29ybGQhJyk7XG5cblx0cHVibGljIHJlYWRvbmx5IGRhdGEkID0gdGhpcy5kYXRhU291cmNlU3ViamVjdFxuXHRcdC5hc09ic2VydmFibGUoKVxuXHRcdC5waXBlKHVzZU1vY2tEYXRhRHVyaW5nVG91cignV29ybGQgaGVsbG8hJykpO1xuXG5cdHB1YmxpYyBzdGFydFRvdXIoKSB7XG5cdFx0dGhpcy50b3VyU2VydmljZS5zdGFydFRvdXIoW3sgdGl0bGU6ICdNb2NrJywgY29udGVudDogJ01vY2snIH1dKS5zdWJzY3JpYmUoKTtcblx0fVxufVxuIl19","import { BehaviorSubject } from 'rxjs';\nimport { NgxModalService } from '../../services';\n/**\n * Provides a mock version of the NgxModalService for TestBed setups\n *\n * @param testFunction - The test function, for instance jest.fn()\n */\nexport const NgxModalServiceMock = (testFunction) => {\n    return {\n        provide: NgxModalService,\n        useValue: {\n            hasActiveModal$: new BehaviorSubject(false),\n            open: testFunction,\n            close: testFunction,\n        },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc2VydmljZS5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL21vY2tzL3B1YmxpYy9tb2RhbC1zZXJ2aWNlLm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsWUFBc0IsRUFBRSxFQUFFO0lBQzdELE9BQU87UUFDTixPQUFPLEVBQUUsZUFBZTtRQUN4QixRQUFRLEVBQUU7WUFDVCxlQUFlLEVBQUUsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDO1lBQ3BELElBQUksRUFBRSxZQUFZO1lBQ2xCLEtBQUssRUFBRSxZQUFZO1NBQ25CO0tBQ0QsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3hNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBtb2NrIHZlcnNpb24gb2YgdGhlIE5neE1vZGFsU2VydmljZSBmb3IgVGVzdEJlZCBzZXR1cHNcbiAqXG4gKiBAcGFyYW0gdGVzdEZ1bmN0aW9uIC0gVGhlIHRlc3QgZnVuY3Rpb24sIGZvciBpbnN0YW5jZSBqZXN0LmZuKClcbiAqL1xuZXhwb3J0IGNvbnN0IE5neE1vZGFsU2VydmljZU1vY2sgPSAodGVzdEZ1bmN0aW9uOiBGdW5jdGlvbikgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdHByb3ZpZGU6IE5neE1vZGFsU2VydmljZSxcblx0XHR1c2VWYWx1ZToge1xuXHRcdFx0aGFzQWN0aXZlTW9kYWwkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcblx0XHRcdG9wZW46IHRlc3RGdW5jdGlvbixcblx0XHRcdGNsb3NlOiB0ZXN0RnVuY3Rpb24sXG5cdFx0fSxcblx0fTtcbn07XG4iXX0=","import { signal } from '@angular/core';\nimport { NgxToastService } from '../../services';\n/**\n * Provides a mock version of the NgxToastService for TestBed setups\n *\n * @param testFunction - The test function, for instance jest.fn()\n */\nexport const NgxToastServiceMock = (testFunction, bundledComponent) => {\n    return {\n        provide: NgxToastService,\n        useValue: {\n            toasts: signal([]),\n            hasBundledToasts: signal(undefined),\n            bundledComponent: bundledComponent,\n            showToast: testFunction,\n            removeToast: testFunction,\n            setFocus: testFunction,\n            markAsRendered: testFunction,\n            showBundled: testFunction,\n        },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Qtc2VydmljZS5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2luZm9ybS9zcmMvbGliL21vY2tzL3B1YmxpYy90b2FzdC1zZXJ2aWNlLm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2xDLFlBQXNCLEVBQ3RCLGdCQUFpRCxFQUNoRCxFQUFFO0lBQ0gsT0FBTztRQUNOLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLFFBQVEsRUFBRTtZQUNULE1BQU0sRUFBRSxNQUFNLENBQWEsRUFBRSxDQUFDO1lBQzlCLGdCQUFnQixFQUFFLE1BQU0sQ0FBUyxTQUFTLENBQUM7WUFDM0MsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLGNBQWMsRUFBRSxZQUFZO1lBQzVCLFdBQVcsRUFBRSxZQUFZO1NBQ3pCO0tBQ0QsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hUb2FzdEJ1bmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuaW1wb3J0IHsgTmd4VG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTmd4VG9hc3QgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBtb2NrIHZlcnNpb24gb2YgdGhlIE5neFRvYXN0U2VydmljZSBmb3IgVGVzdEJlZCBzZXR1cHNcbiAqXG4gKiBAcGFyYW0gdGVzdEZ1bmN0aW9uIC0gVGhlIHRlc3QgZnVuY3Rpb24sIGZvciBpbnN0YW5jZSBqZXN0LmZuKClcbiAqL1xuZXhwb3J0IGNvbnN0IE5neFRvYXN0U2VydmljZU1vY2sgPSAoXG5cdHRlc3RGdW5jdGlvbjogRnVuY3Rpb24sXG5cdGJ1bmRsZWRDb21wb25lbnQ/OiBUeXBlPE5neFRvYXN0QnVuZGxlckNvbXBvbmVudD5cbikgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdHByb3ZpZGU6IE5neFRvYXN0U2VydmljZSxcblx0XHR1c2VWYWx1ZToge1xuXHRcdFx0dG9hc3RzOiBzaWduYWw8Tmd4VG9hc3RbXT4oW10pLFxuXHRcdFx0aGFzQnVuZGxlZFRvYXN0czogc2lnbmFsPG51bWJlcj4odW5kZWZpbmVkKSxcblx0XHRcdGJ1bmRsZWRDb21wb25lbnQ6IGJ1bmRsZWRDb21wb25lbnQsXG5cdFx0XHRzaG93VG9hc3Q6IHRlc3RGdW5jdGlvbixcblx0XHRcdHJlbW92ZVRvYXN0OiB0ZXN0RnVuY3Rpb24sXG5cdFx0XHRzZXRGb2N1czogdGVzdEZ1bmN0aW9uLFxuXHRcdFx0bWFya0FzUmVuZGVyZWQ6IHRlc3RGdW5jdGlvbixcblx0XHRcdHNob3dCdW5kbGVkOiB0ZXN0RnVuY3Rpb24sXG5cdFx0fSxcblx0fTtcbn07XG4iXX0=","import { NgxTooltipService } from '../../services';\n/**\n * Provides a mock version of the NgxTooltipService for TestBed setups\n *\n * @param testFunction - The test function, for instance jest.fn()\n */\nexport const NgxTooltipServiceMock = (testFunction) => {\n    return {\n        provide: NgxTooltipService,\n        useValue: {\n            showToolTip: testFunction,\n            removeTooltip: testFunction,\n            setToolTipEvent: testFunction,\n        },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC1zZXJ2aWNlLm1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvbW9ja3MvcHVibGljL3Rvb2x0aXAtc2VydmljZS5tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5EOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFlBQXNCLEVBQUUsRUFBRTtJQUMvRCxPQUFPO1FBQ04sT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixRQUFRLEVBQUU7WUFDVCxXQUFXLEVBQUUsWUFBWTtZQUN6QixhQUFhLEVBQUUsWUFBWTtZQUMzQixlQUFlLEVBQUUsWUFBWTtTQUM3QjtLQUNELENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hUb29sdGlwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuLyoqXG4gKiBQcm92aWRlcyBhIG1vY2sgdmVyc2lvbiBvZiB0aGUgTmd4VG9vbHRpcFNlcnZpY2UgZm9yIFRlc3RCZWQgc2V0dXBzXG4gKlxuICogQHBhcmFtIHRlc3RGdW5jdGlvbiAtIFRoZSB0ZXN0IGZ1bmN0aW9uLCBmb3IgaW5zdGFuY2UgamVzdC5mbigpXG4gKi9cbmV4cG9ydCBjb25zdCBOZ3hUb29sdGlwU2VydmljZU1vY2sgPSAodGVzdEZ1bmN0aW9uOiBGdW5jdGlvbikgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdHByb3ZpZGU6IE5neFRvb2x0aXBTZXJ2aWNlLFxuXHRcdHVzZVZhbHVlOiB7XG5cdFx0XHRzaG93VG9vbFRpcDogdGVzdEZ1bmN0aW9uLFxuXHRcdFx0cmVtb3ZlVG9vbHRpcDogdGVzdEZ1bmN0aW9uLFxuXHRcdFx0c2V0VG9vbFRpcEV2ZW50OiB0ZXN0RnVuY3Rpb24sXG5cdFx0fSxcblx0fTtcbn07XG4iXX0=","import { BehaviorSubject } from 'rxjs';\nimport { NgxTourService } from '../../services';\n/**\n * Provides a mock service of the NgxTourService in TestBed setups\n *\n * @param testFunction - The test function, for instance jest.fn()\n */\nexport const NgxTourServiceMock = (testFunction) => {\n    return {\n        provide: NgxTourService,\n        useValue: {\n            currentTour$: new BehaviorSubject([]),\n            currentStep$: new BehaviorSubject(undefined),\n            currentIndex$: new BehaviorSubject(undefined),\n            tourEnded$: new BehaviorSubject(undefined),\n            tourStarted$: new BehaviorSubject(undefined),\n            tourActive$: new BehaviorSubject(undefined),\n            startTour: testFunction,\n            registerElement: testFunction,\n            unregisterElement: testFunction,\n            closeTour: testFunction,\n        },\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zZXJ2aWNlLm1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvaW5mb3JtL3NyYy9saWIvbW9ja3MvcHVibGljL3RvdXItc2VydmljZS5tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2hEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFlBQXNCLEVBQUUsRUFBRTtJQUM1RCxPQUFPO1FBQ04sT0FBTyxFQUFFLGNBQWM7UUFDdkIsUUFBUSxFQUFFO1lBQ1QsWUFBWSxFQUFFLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUM7WUFDcEQsWUFBWSxFQUFFLElBQUksZUFBZSxDQUFjLFNBQVMsQ0FBQztZQUN6RCxhQUFhLEVBQUUsSUFBSSxlQUFlLENBQVMsU0FBUyxDQUFDO1lBQ3JELFVBQVUsRUFBRSxJQUFJLGVBQWUsQ0FBVSxTQUFTLENBQUM7WUFDbkQsWUFBWSxFQUFFLElBQUksZUFBZSxDQUFVLFNBQVMsQ0FBQztZQUNyRCxXQUFXLEVBQUUsSUFBSSxlQUFlLENBQVUsU0FBUyxDQUFDO1lBQ3BELFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLGVBQWUsRUFBRSxZQUFZO1lBQzdCLGlCQUFpQixFQUFFLFlBQVk7WUFDL0IsU0FBUyxFQUFFLFlBQVk7U0FDdkI7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neFRvdXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTmd4VG91clN0ZXAgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBtb2NrIHNlcnZpY2Ugb2YgdGhlIE5neFRvdXJTZXJ2aWNlIGluIFRlc3RCZWQgc2V0dXBzXG4gKlxuICogQHBhcmFtIHRlc3RGdW5jdGlvbiAtIFRoZSB0ZXN0IGZ1bmN0aW9uLCBmb3IgaW5zdGFuY2UgamVzdC5mbigpXG4gKi9cbmV4cG9ydCBjb25zdCBOZ3hUb3VyU2VydmljZU1vY2sgPSAodGVzdEZ1bmN0aW9uOiBGdW5jdGlvbikgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdHByb3ZpZGU6IE5neFRvdXJTZXJ2aWNlLFxuXHRcdHVzZVZhbHVlOiB7XG5cdFx0XHRjdXJyZW50VG91ciQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Tmd4VG91clN0ZXBbXT4oW10pLFxuXHRcdFx0Y3VycmVudFN0ZXAkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PE5neFRvdXJTdGVwPih1bmRlZmluZWQpLFxuXHRcdFx0Y3VycmVudEluZGV4JDogbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHVuZGVmaW5lZCksXG5cdFx0XHR0b3VyRW5kZWQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCksXG5cdFx0XHR0b3VyU3RhcnRlZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odW5kZWZpbmVkKSxcblx0XHRcdHRvdXJBY3RpdmUkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCksXG5cdFx0XHRzdGFydFRvdXI6IHRlc3RGdW5jdGlvbixcblx0XHRcdHJlZ2lzdGVyRWxlbWVudDogdGVzdEZ1bmN0aW9uLFxuXHRcdFx0dW5yZWdpc3RlckVsZW1lbnQ6IHRlc3RGdW5jdGlvbixcblx0XHRcdGNsb3NlVG91cjogdGVzdEZ1bmN0aW9uLFxuXHRcdH0sXG5cdH07XG59O1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWJlbnZhbmRldmVpcmUtbmd4LWluZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9pbmZvcm0vc3JjL2liZW52YW5kZXZlaXJlLW5neC1pbmZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["uuid","distinctUntilChanged","withLatestFrom","tap","takeUntil"],"mappings":"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"}