{"version":3,"file":"studiohyperdrive-ngx-tour.mjs","sources":["../tmp-esm2022/lib/tokens/tour-step.token.js","../tmp-esm2022/lib/utils/element-visible-in-viewport/element-visible-in-viewport.util.js","../tmp-esm2022/lib/services/tour-service/tour.service.js","../tmp-esm2022/lib/abstracts/tour-step/tour-step.component.js","../tmp-esm2022/lib/directives/tour-item/tour-item.directive.js","../tmp-esm2022/lib/providers/tour/provide-tour.util.js","../tmp-esm2022/lib/operators/use-mock-data-during-tour/use-mock-data-during-tour.operator.js","../tmp-esm2022/studiohyperdrive-ngx-tour.js"],"sourcesContent":["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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zdGVwLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3RvdXIvc3JjL2xpYi90b2tlbnMvdG91ci1zdGVwLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFJckQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFRvdXJTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3RzJztcblxuLyoqXG4gKiBBIHRva2VuIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIHRvIHRoZSB0b3VyIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNvbnN0IE5neFRvdXJTdGVwVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTxOZ3hUb3VyU3RlcENvbXBvbmVudD4+KCdOZ3hUb3VyU3RlcFRva2VuJyk7XG4iXX0=","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC12aXNpYmxlLWluLXZpZXdwb3J0LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdG91ci9zcmMvbGliL3V0aWxzL2VsZW1lbnQtdmlzaWJsZS1pbi12aWV3cG9ydC9lbGVtZW50LXZpc2libGUtaW4tdmlld3BvcnQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDekMsT0FBb0IsRUFDcEIsTUFBYyxFQUNkLE1BQTBCLEVBS3pCLEVBQUU7SUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZCw0RUFBNEU7UUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUV4QyxNQUFNLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUM7SUFFcEQsbUlBQW1JO0lBQ25JLE1BQU0sYUFBYSxHQUFHLEdBQUcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFFakUsaURBQWlEO0lBQ2pELElBQUksU0FBUyxFQUFFLENBQUM7UUFDZixnREFBZ0Q7UUFDaEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdEYsQ0FBQztRQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM1RixDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbkIsbUZBQW1GO1FBQ25GLE9BQU87WUFDTixTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzFDLFVBQVUsRUFBRSxLQUFLO1NBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsNkhBQTZIO0lBQzdILE9BQU87UUFDTixTQUFTLEVBQUUsS0FBSztRQUNoQixPQUFPLEVBQUUsTUFBTSxHQUFHLFdBQVcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUM5RCxVQUFVLEVBQUUsUUFBUTtLQUNwQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd4VG91clN0ZXBPZmZzZXQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuXG4gKiBJdCBjYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiB0aGF0IHNob3VsZCBiZSBzY3JvbGxlZCB0bywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgcHJvdmlkZWQgb2Zmc2V0IGFuZFxuICogdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IHRvIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXdwb3J0LnNcbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBwcm92aWRlZCBlbGVtZW50XG4gKiBAcGFyYW0gb2Zmc2V0IC0gVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYWJsZSBtYXJnaW4gYXJvdW5kIHRoZSBjdXRvdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0ID0gKFxuXHRlbGVtZW50OiBIVE1MRWxlbWVudCxcblx0bWFyZ2luOiBudW1iZXIsXG5cdG9mZnNldD86IE5neFRvdXJTdGVwT2Zmc2V0XG4pOiB7XG5cdGlzVmlzaWJsZTogYm9vbGVhbjtcblx0c2Nyb2xsWTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXHRyZWxhdGl2ZVRvOiAndG9wJyB8ICdib3R0b20nO1xufSA9PiB7XG5cdGlmICghZWxlbWVudCkge1xuXHRcdC8vIFdvdXRlcjogSWYgZWxlbWVudCBpcyBub3QgcHJvdmlkZWQsIHJldHVybiBcInRydWVcIiBhcyB0byBwcmV2ZW50IHNjcm9sbGluZ1xuXHRcdHJldHVybiB7IGlzVmlzaWJsZTogdHJ1ZSwgc2Nyb2xsWTogdW5kZWZpbmVkLCByZWxhdGl2ZVRvOiAndG9wJyB9O1xuXHR9XG5cblx0Y29uc3QgeyB0b3AsIGJvdHRvbSwgaGVpZ2h0OiBlbGVtZW50SGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRjb25zdCB7IGlubmVySGVpZ2h0LCBzY3JvbGxZIH0gPSB3aW5kb3c7XG5cblx0Y29uc3QgaXNWaXNpYmxlID0gdG9wID49IDAgJiYgYm90dG9tIDw9IGlubmVySGVpZ2h0O1xuXG5cdC8vIFdvdXRlcjogSWYgdGhlIHZlcnRpY2FsIGNlbnRlciBvZiB0aGUgZWxlbWVudCBpcyBvbiB0b3Agb2YgdGhlIHZlcnRpY2FsIGNlbnRlciBvZiB0aGUgdmlld3BvcnQsIHRoZSBlbGVtZW50IGlzIGNsb3NlciB0byB0aGUgdG9wXG5cdGNvbnN0IGlzQ2xvc2VyVG9Ub3AgPSB0b3AgKyBlbGVtZW50SGVpZ2h0IC8gMiA8PSBpbm5lckhlaWdodCAvIDI7XG5cblx0Ly8gV291dGVyOiBJZiBlbGVtZW50IGlzIGluIHZpZXdwb3J0LCByZXR1cm4gdHJ1ZVxuXHRpZiAoaXNWaXNpYmxlKSB7XG5cdFx0Ly8gV291dGVyOiBUYWtlIHRoZSByZXF1aXJlZCBvZmZzZXQgaW50byBhY2NvdW50XG5cdFx0aWYgKGlzQ2xvc2VyVG9Ub3ApIHtcblx0XHRcdHJldHVybiB7IGlzVmlzaWJsZTogdHJ1ZSwgc2Nyb2xsWTogc2Nyb2xsWSAtIChvZmZzZXQ/LnRvcCB8fCAwKSwgcmVsYXRpdmVUbzogJ3RvcCcgfTtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBpc1Zpc2libGU6IHRydWUsIHNjcm9sbFk6IHNjcm9sbFkgKyAob2Zmc2V0Py5ib3R0b20gfHwgMCksIHJlbGF0aXZlVG86ICdib3R0b20nIH07XG5cdH1cblxuXHQvLyBXb3V0ZXI6IElmIGVsZW1lbnQgaXMgbm90IGluIHZpZXdwb3J0LCBjYWxjdWxhdGUgd2hldGhlciBpdCBpcyBjbG9zZXIgdG8gdG9wIG9yIGJvdHRvbS5cblx0aWYgKGlzQ2xvc2VyVG9Ub3ApIHtcblx0XHQvLyBXb3V0ZXI6IElmIGNsb3NlciB0byB0b3AsIHNldCBzY3JvbGxZIHRvIHRvcCBvZiB2aWV3cG9ydCBhbmQgdGhlIHByb3ZpZGVkIG9mZnNldFxuXHRcdHJldHVybiB7XG5cdFx0XHRpc1Zpc2libGU6IGZhbHNlLFxuXHRcdFx0c2Nyb2xsWTogdG9wIC0gbWFyZ2luIC0gKG9mZnNldD8udG9wIHx8IDApLFxuXHRcdFx0cmVsYXRpdmVUbzogJ3RvcCcsXG5cdFx0fTtcblx0fVxuXG5cdC8vIFdvdXRlcjogSWYgY2xvc2VyIHRvIGJvdHRvbSwgc2V0IHNjcm9sbFkgdG8gYm90dG9tIG9mIHZpZXdwb3J0IHdpdGggYW4gb2Zmc2V0IG9mIHRoZSBjdXRvdXQgaGVpZ2h0IGFuZCB0aGUgcHJvdmlkZWQgb2Zmc2V0XG5cdHJldHVybiB7XG5cdFx0aXNWaXNpYmxlOiBmYWxzZSxcblx0XHRzY3JvbGxZOiBib3R0b20gLSBpbm5lckhlaWdodCArIG1hcmdpbiArIChvZmZzZXQ/LmJvdHRvbSB8fCAwKSxcblx0XHRyZWxhdGl2ZVRvOiAnYm90dG9tJyxcblx0fTtcbn07XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Subject, auditTime, combineLatest, concatMap, delay, distinctUntilChanged, filter, map, of, startWith, switchMap, take, takeUntil, tap, } from 'rxjs';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { NgxWindowService } from '@studiohyperdrive/ngx-core';\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    constructor() {\n        this.cdkOverlayService = inject(Overlay);\n        this.windowService = inject(NgxWindowService);\n        this.configuration = inject(NgxTourStepToken);\n        /**\n         * A subject to hold the destroyed event\n         */\n        this.destroyedSubject = new Subject();\n        /**\n         * A subject to hold the window resize event\n         */\n        this.windowResizeSubject = new Subject();\n        /**\n         * A subject to hold the backdrop clip event\n         */\n        this.backdropClipEventSubject = new Subject();\n        /**\n         * A record of registered step elements we wish to highlight\n         */\n        this.elements = {};\n        /**\n         * A record of positions to place the\n         */\n        this.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 amount of steps of the current tour\n         */\n        this.amountOfSteps = 0;\n        /**\n         * The currently active step in the tour as a subject\n         */\n        this.currentStepSubject = new BehaviorSubject(undefined);\n        /**\n         * The previously active step in the tour as a subject\n         */\n        this.previousStepSubject = new BehaviorSubject(undefined);\n        /**\n         * The index of the current step of the tour as a subject\n         */\n        this.currentIndexSubject = new BehaviorSubject(0);\n        /**\n         * Whether the tour has started as a subject\n         */\n        this.tourStartedSubject = new Subject();\n        /**\n         * Whether the tour has ended as a subject\n         */\n        this.tourEndedSubject = new Subject();\n        /**\n         * The currently active tour as a subject\n         */\n        this.currentTourSubject = new BehaviorSubject(undefined);\n        /**\n         * A subject to hold the registration events\n         */\n        this.registerElementSubject = new Subject();\n        /**\n         * The currently active tour\n         */\n        this.currentTour$ = this.currentTourSubject.asObservable();\n        /**\n         * The currently active step\n         */\n        this.currentStep$ = this.currentStepSubject\n            .asObservable()\n            .pipe(distinctUntilChanged(), filter(Boolean));\n        /**\n         * The currently active index\n         */\n        this.currentIndex$ = this.currentIndexSubject\n            .asObservable()\n            .pipe(distinctUntilChanged());\n        /**\n         * The previously active step\n         */\n        this.previousStep$ = this.previousStepSubject\n            .asObservable()\n            .pipe(distinctUntilChanged(), filter(Boolean));\n        /**\n         * Whether the tour has ended\n         */\n        this.tourEnded$ = this.tourEndedSubject.asObservable();\n        /**\n         * Whether the tour has started\n         */\n        this.tourStarted$ = this.tourStartedSubject.asObservable();\n        /**\n         * Whether the tour is active\n         */\n        this.tourActive$ = this.currentStepSubject\n            .asObservable()\n            .pipe(map(Boolean));\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        // 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            const component = componentRef.instance;\n            // Iben: Update the data of the component\n            component.content = currentStep.content;\n            component.title = currentStep.title;\n            component.data = currentStep.data;\n            component.currentStep = this.currentIndexSubject.getValue();\n            component.amountOfSteps = this.amountOfSteps;\n            component.position = item ? currentStep.position || 'below' : undefined;\n            component.stepClass = currentStep.stepClass;\n            component.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 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 { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxTourService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxTourService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxTourService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3RvdXIvc3JjL2xpYi9zZXJ2aWNlcy90b3VyLXNlcnZpY2UvdG91ci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQ04sZUFBZSxFQUVmLE9BQU8sRUFDUCxTQUFTLEVBQ1QsYUFBYSxFQUNiLFNBQVMsRUFDVCxLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQXFCLE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBV2hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFekQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQWlKMUI7UUFoSmlCLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLGtCQUFhLEdBQUcsTUFBTSxDQUE0QixnQkFBZ0IsQ0FBQyxDQUFDO1FBRXJGOztXQUVHO1FBQ2MscUJBQWdCLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkU7O1dBRUc7UUFDYyx3QkFBbUIsR0FBa0IsSUFBSSxP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QUNKLENBQUM7OEdBNXBCVyxjQUFjO2tIQUFkLGNBQWMsY0FGZCxNQUFNOzsyRkFFTixjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdEJlaGF2aW9yU3ViamVjdCxcblx0T2JzZXJ2YWJsZSxcblx0U3ViamVjdCxcblx0YXVkaXRUaW1lLFxuXHRjb21iaW5lTGF0ZXN0LFxuXHRjb25jYXRNYXAsXG5cdGRlbGF5LFxuXHRkaXN0aW5jdFVudGlsQ2hhbmdlZCxcblx0ZmlsdGVyLFxuXHRtYXAsXG5cdG9mLFxuXHRzdGFydFdpdGgsXG5cdHN3aXRjaE1hcCxcblx0dGFrZSxcblx0dGFrZVVudGlsLFxuXHR0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHsgTmd4V2luZG93U2VydmljZSB9IGZyb20gJ0BzdHVkaW9oeXBlcmRyaXZlL25neC1jb3JlJztcbmltcG9ydCB7IE5neFRvdXJTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcbmltcG9ydCB7IE5neFRvdXJJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBOZ3hUb3VyU3RlcFRva2VuIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7XG5cdE5neFRvdXJEaXJlY3Rpb24sXG5cdE5neFRvdXJBY3Rpb24sXG5cdE5neFRvdXJTdGVwLFxuXHROZ3hUb3VySW50ZXJhY3Rpb24sXG5cdE5neFRvdXJTdGVwUG9zaXRpb24sXG5cdE5neFRvdXJSZWdpc3RyYXRpb25FdmVudCxcblx0Tmd4VG91ckJhY2tkcm9wQ2xpcEV2ZW50LFxuXHROZ3hUb3VyVG9rZW5Db25maWd1cmF0aW9uLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBlbGVtZW50SXNWaXNpYmxlSW5WaWV3cG9ydCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBBIHNpbmdsZXRvbiBzZXJ2aWNlIHVzZWQgdG8gcnVuIGhlbHAgdG91cnMgdGhyb3VnaCBhbiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5neFRvdXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHJpdmF0ZSByZWFkb25seSBjZGtPdmVybGF5U2VydmljZSA9IGluamVjdChPdmVybGF5KTtcblx0cHJpdmF0ZSByZWFkb25seSB3aW5kb3dTZXJ2aWNlID0gaW5qZWN0KE5neFdpbmRvd1NlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb24gPSBpbmplY3Q8Tmd4VG91clRva2VuQ29uZmlndXJhdGlvbj4oTmd4VG91clN0ZXBUb2tlbik7XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0byBob2xkIHRoZSBkZXN0cm95ZWQgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveWVkU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0byBob2xkIHRoZSB3aW5kb3cgcmVzaXplIGV2ZW50XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1Jlc2l6ZVN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG5cdC8qKlxuXHQgKiBBIHN1YmplY3QgdG8gaG9sZCB0aGUgYmFja2Ryb3AgY2xpcCBldmVudFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBiYWNrZHJvcENsaXBFdmVudFN1YmplY3Q6IFN1YmplY3Q8Tmd4VG91ckJhY2tkcm9wQ2xpcEV2ZW50PiA9XG5cdFx0bmV3IFN1YmplY3Q8Tmd4VG91ckJhY2tkcm9wQ2xpcEV2ZW50PigpO1xuXG5cdC8qKlxuXHQgKiBBIHJlY29yZCBvZiByZWdpc3RlcmVkIHN0ZXAgZWxlbWVudHMgd2Ugd2lzaCB0byBoaWdobGlnaHRcblx0ICovXG5cdHByaXZhdGUgZWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VySXRlbURpcmVjdGl2ZT4+ID0ge307XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIGhvbGQgdGhlIGN1cnJlbnQgYm9keSBvdmVyZmxvdyBiZWhhdmlvclxuXHQgKi9cblx0cHJpdmF0ZSBib2R5T3ZlcmZsb3c6IHN0cmluZztcblxuXHQvKipcblx0ICogQSByZWNvcmQgb2YgcG9zaXRpb25zIHRvIHBsYWNlIHRoZVxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbk1hcDogUmVjb3JkPE5neFRvdXJTdGVwUG9zaXRpb24sIENvbm5lY3RlZFBvc2l0aW9uPiA9IHtcblx0XHRiZWxvdzogeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJyB9LFxuXHRcdGFib3ZlOiB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nIH0sXG5cdFx0bGVmdDogeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcblx0XHRyaWdodDogeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcblx0fTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnRseSBhY3RpdmUgb3ZlcmxheVxuXHQgKi9cblx0cHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIHN0ZXBzIG9mIHRoZSBjdXJyZW50IHRvdXJcblx0ICovXG5cdHByaXZhdGUgYW1vdW50T2ZTdGVwczogbnVtYmVyID0gMDtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyB0aGUgdG91ciBpblxuXHQgKi9cblx0cHJpdmF0ZSBjdXJyZW50RGlyZWN0aW9uOiBOZ3hUb3VyRGlyZWN0aW9uO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBzdGVwIGluIHRoZSB0b3VyIGFzIGEgc3ViamVjdFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBjdXJyZW50U3RlcFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VyU3RlcD4gPVxuXHRcdG5ldyBCZWhhdmlvclN1YmplY3Q8Tmd4VG91clN0ZXA+KHVuZGVmaW5lZCk7XG5cblx0LyoqXG5cdCAqIFRoZSBwcmV2aW91c2x5IGFjdGl2ZSBzdGVwIGluIHRoZSB0b3VyIGFzIGEgc3ViamVjdFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBwcmV2aW91c1N0ZXBTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Tmd4VG91clN0ZXA+ID1cblx0XHRuZXcgQmVoYXZpb3JTdWJqZWN0PE5neFRvdXJTdGVwPih1bmRlZmluZWQpO1xuXG5cdC8qKlxuXHQgKiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgdG91ciBhcyBhIHN1YmplY3Rcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgY3VycmVudEluZGV4U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIHRvdXIgaGFzIHN0YXJ0ZWQgYXMgYSBzdWJqZWN0XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHRvdXJTdGFydGVkU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIHRvdXIgaGFzIGVuZGVkIGFzIGEgc3ViamVjdFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSB0b3VyRW5kZWRTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnRseSBhY3RpdmUgdG91ciBhcyBhIHN1YmplY3Rcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFRvdXJTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Tmd4VG91clN0ZXBbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuXHRcdE5neFRvdXJTdGVwW11cblx0Pih1bmRlZmluZWQpO1xuXG5cdC8qKlxuXHQgKiBBIHN1YmplY3QgdG8gaG9sZCB0aGUgcmVnaXN0cmF0aW9uIGV2ZW50c1xuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSByZWdpc3RlckVsZW1lbnRTdWJqZWN0OiBTdWJqZWN0PE5neFRvdXJSZWdpc3RyYXRpb25FdmVudD4gPVxuXHRcdG5ldyBTdWJqZWN0PE5neFRvdXJSZWdpc3RyYXRpb25FdmVudD4oKTtcblxuXHQvKipcblx0ICogVGhlIHN0YXJ0IHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgcGFnZVxuXHQgKi9cblx0cHJpdmF0ZSBzdGFydGluZ1Njcm9sbFBvc2l0aW9uOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIHRvdXJcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjdXJyZW50VG91ciQ6IE9ic2VydmFibGU8Tmd4VG91clN0ZXBbXT4gPVxuXHRcdHRoaXMuY3VycmVudFRvdXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBzdGVwXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgY3VycmVudFN0ZXAkOiBPYnNlcnZhYmxlPE5neFRvdXJTdGVwPiA9IHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0XG5cdFx0LmFzT2JzZXJ2YWJsZSgpXG5cdFx0LnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZmlsdGVyKEJvb2xlYW4pKTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnRseSBhY3RpdmUgaW5kZXhcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjdXJyZW50SW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3Rcblx0XHQuYXNPYnNlcnZhYmxlKClcblx0XHQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuXHQvKipcblx0ICogVGhlIHByZXZpb3VzbHkgYWN0aXZlIHN0ZXBcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBwcmV2aW91c1N0ZXAkOiBPYnNlcnZhYmxlPE5neFRvdXJTdGVwPiA9IHRoaXMucHJldmlvdXNTdGVwU3ViamVjdFxuXHRcdC5hc09ic2VydmFibGUoKVxuXHRcdC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGZpbHRlcihCb29sZWFuKSk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIHRvdXIgaGFzIGVuZGVkXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgdG91ckVuZGVkJDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMudG91ckVuZGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuXHQvKipcblx0ICogV2hldGhlciB0aGUgdG91ciBoYXMgc3RhcnRlZFxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IHRvdXJTdGFydGVkJDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMudG91clN0YXJ0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSB0b3VyIGlzIGFjdGl2ZVxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IHRvdXJBY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5jdXJyZW50U3RlcFN1YmplY3Rcblx0XHQuYXNPYnNlcnZhYmxlKClcblx0XHQucGlwZShtYXAoQm9vbGVhbikpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdC8vIEliZW46IFdlIHVzZSBhIHN1YmplY3Qgd2l0aCBjb25jYXRNYXAgaGVyZSBiZWNhdXNlIHdlIHdhbnQgZWFjaCBldmVudCB0byBiZSBoYW5kbGVkIGNvcnJlY3RseSBhbmQgdGhlIGVsZW1lbnRzIHJlY29yZCBzaG91bGQgZmluaXNoIHVwZGF0aW5nIGJlZm9yZSB1cGRhdGluZyBpdCBhZ2Fpbi5cblx0XHR0aGlzLnJlZ2lzdGVyRWxlbWVudFN1YmplY3Rcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRmaWx0ZXIoQm9vbGVhbiksXG5cdFx0XHRcdGNvbmNhdE1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZWdpc3RyYXRpb25FdmVudChldmVudCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0YWtlVW50aWwodGhpcy5kZXN0cm95ZWRTdWJqZWN0KVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBvbnJlc2l6ZSBldmVudCBvZiB0aGUgd2luZG93XG5cdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyV2luZG93IH0pID0+IHtcblx0XHRcdGJyb3dzZXJXaW5kb3cub25yZXNpemUgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMud2luZG93UmVzaXplU3ViamVjdC5uZXh0KCk7XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IGEgcHJvdmlkZWQgdG91clxuXHQgKlxuXHQgKiBAcGFyYW0gdG91ciAtIFRoZSB0b3VyIHdlIHdpc2ggdG8gc3RhcnRcblx0ICogQHBhcmFtIG9uQ2xvc2UgLSBBbiBvcHRpb25hbCBvbiBjbG9zZSBmdW5jdGlvbiB3ZSB3aXNoIHRvIHJ1blxuXHQgKiBAcGFyYW0gc3RhcnRJbmRleCAtIEFuIG9wdGlvbmFsIGluZGV4IHdlIHdpc2ggdG8gc3RhcnQgdGhlIHRvdXIgZnJvbSAsIGRlZmF1bHQgdGhpcyBpcyAwXG5cdCAqL1xuXHRwdWJsaWMgc3RhcnRUb3VyKFxuXHRcdHRvdXI6IE5neFRvdXJTdGVwW10sXG5cdFx0b25DbG9zZT86IE5neFRvdXJBY3Rpb24sXG5cdFx0c3RhcnRJbmRleCA9IDBcblx0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG5cdFx0Ly8gV291dGVyOiBFYXJseSBleGl0IGlmIHRoZSB0b3VyIGlzIHJ1biBvbiB0aGUgc2VydmVyLCBmb3Igd2hpY2ggdGhpcyBzZXJ2aWNlIGlzIG5vdCBpbnRlbmRlZFxuXHRcdGlmICghdGhpcy53aW5kb3dTZXJ2aWNlLmlzQnJvd3NlcigpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdCdOZ3hUb3VyU2VydmljZTogVGhlIHRvdXIgc2VydmljZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgcnVuIG9uIHRoZSBzZXJ2ZXIuIFRoZSB0b3VyIHdpbGwgbm90IGJlIHN0YXJ0ZWQuJ1xuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIG9mKG51bGwpO1xuXHRcdH1cblxuXHRcdHRoaXMud2luZG93U2VydmljZS5ydW5JbkJyb3dzZXIoKHsgYnJvd3NlcldpbmRvdywgYnJvd3NlckRvY3VtZW50IH0pID0+IHtcblx0XHRcdC8vIEliZW46IFNhdmUgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHNvIHdlIGNhbiByZXR1cm4gdG8gaXQgd2hlbiB3ZSBjbG9zZSB0aGUgdG91clxuXHRcdFx0dGhpcy5zdGFydGluZ1Njcm9sbFBvc2l0aW9uID0gYnJvd3NlcldpbmRvdy5zY3JvbGxZO1xuXG5cdFx0XHQvLyBJYmVuOiBTYXZlIHRoZSBjdXJyZW50XG5cdFx0XHR0aGlzLmJvZHlPdmVyZmxvdyA9IGJyb3dzZXJEb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93O1xuXHRcdH0pO1xuXG5cdFx0Ly8gSWJlbjogTG9vcCBvdmVyIHRoZSB0b3VyIGFuZCBzZXQgc3ViamVjdHMgZm9yIGFsbCBlbGVtZW50cyB0aGF0IGhhdmVuJ3QgYmVlbiBmb3VuZCB5ZXRcblx0XHR0b3VyLmZvckVhY2goKHN0ZXApID0+IHtcblx0XHRcdGlmICghdGhpcy5lbGVtZW50c1tzdGVwLnRvdXJJdGVtXSkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRzW3N0ZXAudG91ckl0ZW1dID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VySXRlbURpcmVjdGl2ZT4odW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgbmV3IHRvdXJcblx0XHR0aGlzLmN1cnJlbnRUb3VyU3ViamVjdC5uZXh0KHRvdXIpO1xuXG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBhbW91bnQgb2Ygc3RlcHMgYmFzZWQgb24gdGhlIGxlbmd0aCBvZiB0aGUgdG91clxuXHRcdHRoaXMuYW1vdW50T2ZTdGVwcyA9IHRvdXIubGVuZ3RoO1xuXG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBmaXJzdCB0d28gc3RhcnRpbmcgc3ViamVjdHNcblx0XHR0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QubmV4dChzdGFydEluZGV4KTtcblx0XHR0aGlzLnRvdXJTdGFydGVkU3ViamVjdC5uZXh0KCk7XG5cblx0XHQvLyBXb3V0ZXI6IFNldCBhIGNsYXNzIG9udG8gdGhlIGJvZHkgdG8gaW5kaWNhdGUgb250byB3aGljaCBzdHlsaW5nIGNhbiBiZSBhZGRlZCBieSB0aGUgdXNlclxuXHRcdHRoaXMuaGFuZGxlQm9keUNsYXNzKCdzZXQnKTtcblxuXHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgd2luZG93IHJlc2l6ZSBhbmQgdGhlIGJhY2tkcm9wIGNsaXAgZXZlbnQsIHNvIHRoYXQgd2hlbiB0aGUgd2luZG93IHJlc2l6ZXMsIHRoZSBjbGlwIHBhdGggc3RpbGwgd29ya3MgY29ycmVjdGx5XG5cdFx0Y29tYmluZUxhdGVzdChbXG5cdFx0XHR0aGlzLndpbmRvd1Jlc2l6ZVN1YmplY3QucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSksXG5cdFx0XHR0aGlzLmJhY2tkcm9wQ2xpcEV2ZW50U3ViamVjdCxcblx0XHRdKVxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdHRhcCgoWywgZXZlbnRdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSWJlbjogU2V0IHRoZSBjbGlwIHBhdGggYmFzZWQgb24gdGhlIGV2ZW50XG5cdFx0XHRcdFx0dGhpcy5zZXRDbGlwUGF0aChldmVudCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0YWtlVW50aWwodGhpcy50b3VyRW5kZWQkKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0Ly8gSWJlbjogU3RhcnQgdGhlIGZpcnN0IHRvdXIsIGFuZCBydW4gaXQgdW50aWwgdGhlIHRvdXIgaXMgZW5kZWRcblx0XHR0aGlzLnNldFN0ZXAodG91cltzdGFydEluZGV4XSkucGlwZSh0YWtlVW50aWwodGhpcy50b3VyRW5kZWQkKSkuc3Vic2NyaWJlKCk7XG5cblx0XHQvLyBJYmVuOiBMaXN0ZW4gdG8gdGhlIGVuZCBvZiB0aGUgdG91ciBhbmQgcnVuIHRoZSBlbmQgZnVuY3Rpb24gd2hlbiBuZWVkZWRcblx0XHRyZXR1cm4gdGhpcy50b3VyRW5kZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG5cdFx0XHR0YWtlKDEpLFxuXHRcdFx0c3dpdGNoTWFwKCgpID0+IHRoaXMucnVuU3RlcEZ1bmN0aW9uKG9uQ2xvc2UpKSxcblx0XHRcdHRhcCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMud2luZG93U2VydmljZS5ydW5JbkJyb3dzZXIoKHsgYnJvd3NlcldpbmRvdywgYnJvd3NlckRvY3VtZW50IH0pID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBTY3JvbGwgYmFjayB0byB0aGUgc3RhcnRpbmcgcG9zaXRpb25cblx0XHRcdFx0XHRicm93c2VyV2luZG93LnNjcm9sbFRvKHsgdG9wOiB0aGlzLnN0YXJ0aW5nU2Nyb2xsUG9zaXRpb24gfSk7XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBSZXN0b3JlIHRoZSBib2R5IG92ZXJmbG93XG5cdFx0XHRcdFx0YnJvd3NlckRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSB0aGlzLmJvZHlPdmVyZmxvdztcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHRcdG1hcCgoKSA9PiB1bmRlZmluZWQpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYSB0ZW1wbGF0ZSBlbGVtZW50IHNvIGl0IGNhbiBiZSBoaWdobGlnaHRlZFxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBoaWdobGlnaHRlZCBlbGVtZW50XG5cdCAqL1xuXHRwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQ6IE5neFRvdXJJdGVtRGlyZWN0aXZlKTogdm9pZCB7XG5cdFx0dGhpcy5yZWdpc3RlckVsZW1lbnRTdWJqZWN0Lm5leHQoe1xuXHRcdFx0dG91ckl0ZW06IGVsZW1lbnQudG91ckl0ZW0sXG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0dHlwZTogJ3JlZ2lzdGVyJyxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSB0aGUgcmVjb3JkXG5cdCAqXG5cdCAqIEBwYXJhbSB0b3VySXRlbSAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudFxuXHQgKi9cblx0cHVibGljIHVucmVnaXN0ZXJFbGVtZW50KHRvdXJJdGVtOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnJlZ2lzdGVyRWxlbWVudFN1YmplY3QubmV4dCh7XG5cdFx0XHR0b3VySXRlbSxcblx0XHRcdHR5cGU6ICd1bnJlZ2lzdGVyJyxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRvdXJcblx0ICovXG5cdHB1YmxpYyBjbG9zZVRvdXIoKTogT2JzZXJ2YWJsZTxOZ3hUb3VySW50ZXJhY3Rpb24+IHtcblx0XHQvLyBJYmVuOiBSZW1vdmUgdGhlIGN1cnJlbnQgb3ZlcmxheVxuXHRcdGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcblx0XHRcdHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG5cdFx0XHR0aGlzLm92ZXJsYXlSZWYgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBjdXJyZW50IGFuZCBwcmV2aW91cyBpdGVtIHRvIGluYWN0aXZlXG5cdFx0dGhpcy5lbGVtZW50c1t0aGlzLmN1cnJlbnRTdGVwU3ViamVjdC5nZXRWYWx1ZSgpPy50b3VySXRlbV0/LmdldFZhbHVlKCk/LnNldEFjdGl2ZShmYWxzZSk7XG5cdFx0dGhpcy5lbGVtZW50c1t0aGlzLnByZXZpb3VzU3RlcFN1YmplY3QuZ2V0VmFsdWUoKT8udG91ckl0ZW1dPy5nZXRWYWx1ZSgpPy5zZXRBY3RpdmUoZmFsc2UpO1xuXG5cdFx0Ly8gSWJlbjogUmVzZXQgdGhlIHN1YmplY3RzXG5cdFx0dGhpcy5jdXJyZW50U3RlcFN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMucHJldmlvdXNTdGVwU3ViamVjdC5uZXh0KHVuZGVmaW5lZCk7XG5cblx0XHQvLyBJYmVuOiBSZXNldCB0aGUgdG91ciBhbmQgdGhlIHRvdXIgbGVuZ3RoXG5cdFx0dGhpcy5jdXJyZW50VG91clN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMuYW1vdW50T2ZTdGVwcyA9IDA7XG5cblx0XHQvLyBXb3V0ZXI6IFJlbW92ZSB0aGUgYm9keSBjbGFzc1xuXHRcdHRoaXMuaGFuZGxlQm9keUNsYXNzKCdyZW1vdmUnKTtcblxuXHRcdC8vIEliZW46IEVtaXQgdGhlIGVuZCBvZiB0aGUgdG91clxuXHRcdHRoaXMudG91ckVuZGVkU3ViamVjdC5uZXh0KCk7XG5cblx0XHQvLyBJYmVuOiBSZXR1cm4gYW4gZW1wdHkgT2JzZXJ2YWJsZVxuXHRcdHJldHVybiBvZihudWxsKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IENvbXBsZXRlIGFsbCBzdWJzY3JpcHRpb25zXG5cdFx0dGhpcy5kZXN0cm95ZWRTdWJqZWN0Lm5leHQoKTtcblx0XHR0aGlzLmRlc3Ryb3llZFN1YmplY3QuY29tcGxldGUoKTtcblx0XHR0aGlzLnRvdXJFbmRlZFN1YmplY3QubmV4dCgpO1xuXHRcdHRoaXMudG91ckVuZGVkU3ViamVjdC5jb21wbGV0ZSgpO1xuXHRcdHRoaXMud2luZG93UmVzaXplU3ViamVjdC5uZXh0KCk7XG5cdFx0dGhpcy53aW5kb3dSZXNpemVTdWJqZWN0LmNvbXBsZXRlKCk7XG5cblx0XHQvLyBXb3V0ZXI6IFJlbW92ZSB0aGUgYm9keSBjbGFzc1xuXHRcdHRoaXMuaGFuZGxlQm9keUNsYXNzKCdyZW1vdmUnKTtcblxuXHRcdC8vIEliZW46IEdldCByaWQgb2YgdGhlIG9ucmVzaXplIGV2ZW50XG5cdFx0dGhpcy53aW5kb3dTZXJ2aWNlLnJ1bkluQnJvd3NlcigoeyBicm93c2VyV2luZG93IH0pID0+IHtcblx0XHRcdGJyb3dzZXJXaW5kb3cub25yZXNpemUgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBwcm92aWRlZCBzdGVwIGluIHRoZSB0b3VyXG5cdCAqXG5cdCAqIEBwYXJhbSBjdXJyZW50U3RlcCAtIFRoZSBwcm92aWRlZCBzdGVwIHdlIHdhbnQgdG8gc2V0XG5cdCAqL1xuXHRwcml2YXRlIHNldFN0ZXAoY3VycmVudFN0ZXA6IE5neFRvdXJTdGVwKTogT2JzZXJ2YWJsZTxOZ3hUb3VySW50ZXJhY3Rpb24+IHtcblx0XHQvLyBJYmVuOiBHZXQgdGhlIHByZXZpb3VzIHN0ZXAsIGlmIGl0IGV4aXN0c1xuXHRcdGNvbnN0IHByZXZpb3VzU3RlcCA9IHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgcHJldmlvdXNJdGVtID0gdGhpcy5lbGVtZW50c1twcmV2aW91c1N0ZXA/LnRvdXJJdGVtXT8uZ2V0VmFsdWUoKTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgcHJldmlvdXMgaXRlbSBiYWNrIHRvIGluYWN0aXZlXG5cdFx0aWYgKHByZXZpb3VzSXRlbSkge1xuXHRcdFx0cHJldmlvdXNJdGVtLnNldEFjdGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBhbmQgY2xvc2UgdG91ciBpZiB0aGVyZSdzIG5vIGN1cnJlbnQgc3RlcFxuXHRcdGlmICghY3VycmVudFN0ZXApIHtcblx0XHRcdHJldHVybiB0aGlzLmNsb3NlVG91cigpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFJ1biB0aGUgYWZ0ZXJWaXNpYmxlIG9mIHRoZSBwcmV2aW91cyBzdGVwXG5cdFx0cmV0dXJuIHRoaXMucnVuU3RlcEZ1bmN0aW9uKHByZXZpb3VzU3RlcD8uYWZ0ZXJWaXNpYmxlKS5waXBlKFxuXHRcdFx0Ly8gSWJlbjogUnVuIHRoZSBiZWZvcmVWaXNpYmxlIG9mIHRoZSBjdXJyZW50IHN0ZXBcblx0XHRcdGNvbmNhdE1hcCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJ1blN0ZXBGdW5jdGlvbihjdXJyZW50U3RlcC5iZWZvcmVWaXNpYmxlKTtcblx0XHRcdH0pLFxuXHRcdFx0Ly8gV291dGVyOiBBZGQgYSBkZWxheSB0byBhbGxvdyB0aGUgY2hhbmdlIGRldGVjdGlvbiB0byBiZSByYW4gYmVmb3JlIHRoZSBzdGVwIGlzIHZpc3VhbGl6ZWQuXG5cdFx0XHQvLyBUaGlzIG1ha2VzIHN1cmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgaGlnaGxpZ2h0ZWQgZWxlbWVudCBpcyBjb3JyZWN0LlxuXHRcdFx0ZGVsYXkoMSksXG5cdFx0XHRjb25jYXRNYXAoKCkgPT4ge1xuXHRcdFx0XHQvLyBJYmVuOiBJZiBubyB0b3VySXRlbSB3YXMgcHJvdmlkZWQsIHdlIHJlbmRlciB0aGUgc3RlcCBpbiB0aGUgY2VudGVyIG9mIHRoZSBwYWdlXG5cdFx0XHRcdGlmICghY3VycmVudFN0ZXAudG91ckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVTdGVwSW50ZXJhY3Rpb25zKGN1cnJlbnRTdGVwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEliZW46IElmIGEgdG91ckl0ZW0gd2FzIHByb3ZpZGVkLCB3ZSBrbm93IHdlIGhhdmUgdG8gc2VhcmNoIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbGVtZW50c1tjdXJyZW50U3RlcC50b3VySXRlbV0ucGlwZShcblx0XHRcdFx0XHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgaXRlbSBhbHJlYWR5IGV4aXN0cy4gSWYgbm90LCB3ZSB3YWl0IGFuZCBncmFiIHRoZSBsYXRlc3QgZW1pdCB1c2luZyBhdWRpdFRpbWVcblx0XHRcdFx0XHQvLyBXZSBkbyB0aGlzIHRvIGF2b2lkIGEgZGVsYXkgd2hlbiBnb2luZyBiYWNrIGFuZCBmb3J0aCBpbiB0aGUgdG91clxuXHRcdFx0XHRcdGNvbmNhdE1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1cblx0XHRcdFx0XHRcdFx0PyBvZihpdGVtKVxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMuZWxlbWVudHNbY3VycmVudFN0ZXAudG91ckl0ZW1dLnBpcGUoXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJYmVuOiBJZiBubyBkZWxheSB3YXMgcHJvdmlkZWQsIHdlIHVzZSB0aGUgZGVmYXVsdCBvZiAxMDBtc1xuXHRcdFx0XHRcdFx0XHRcdFx0YXVkaXRUaW1lKGN1cnJlbnRTdGVwLmRlbGF5IHx8IDEwMClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdFx0c3dpdGNoTWFwKChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBJYmVuOiBJZiBhbiBpdGVtIHdhc24ndCBmb3VuZCwgd2UgbW92ZSBpbiB0aGUgY3VycmVudCBkaXJlY3Rpb24gdW50aWwgd2UgZmluZCBhbiBlbGVtZW50XG5cdFx0XHRcdFx0XHRpZiAoIWl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTmV4dCh0aGlzLmN1cnJlbnREaXJlY3Rpb24gfHwgJ25leHQnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEliZW46IElmIHRoZSBpdGVtIHdhcyBmb3VuZCwgd2UgdmlzdWFsaXplIHRoZSBzdGVwXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVTdGVwSW50ZXJhY3Rpb25zKGN1cnJlbnRTdGVwLCBpdGVtKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIG5leHQgYWN0aW9uIGluIHRoZSB0b3VyXG5cdCAqXG5cdCAqIEBwYXJhbSBkaXJlY3Rpb24gLSBUaGUgZGlyZWN0aW9uIHdlIHdpc2ggdG8gbW92ZSBpblxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVOZXh0KGRpcmVjdGlvbjogTmd4VG91ckRpcmVjdGlvbik6IE9ic2VydmFibGU8Tmd4VG91ckludGVyYWN0aW9uPiB7XG5cdFx0Ly8gSWJlbiBzZXQgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIHNvIHdlIGtub3cgaW4gd2hpY2ggd2F5IHdlJ3JlIG1vdmluZyB0aGUgdG91clxuXHRcdHRoaXMuY3VycmVudERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcblxuXHRcdC8vIEliZW46IEdldCB0aGUgbmV3IGluZGV4XG5cdFx0Y29uc3QgaW5kZXggPVxuXHRcdFx0ZGlyZWN0aW9uID09PSAnbmV4dCdcblx0XHRcdFx0PyB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QuZ2V0VmFsdWUoKSArIDFcblx0XHRcdFx0OiB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QuZ2V0VmFsdWUoKSAtIDE7XG5cblx0XHQvLyBJYmVuOiBVcGRhdGUgdGhlIG5ldyBpbmRleFxuXHRcdHRoaXMuY3VycmVudEluZGV4U3ViamVjdC5uZXh0KGluZGV4KTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgbmV4dCBzdGVwIGluIHRoZSB0b3VyXG5cdFx0cmV0dXJuIHRoaXMuc2V0U3RlcCh0aGlzLmN1cnJlbnRUb3VyU3ViamVjdC5nZXRWYWx1ZSgpW2luZGV4XSk7XG5cdH1cblxuXHQvKipcblx0ICogVmlzdWFsaXplcyB0aGUgY3VycmVudCBzdGVwXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBjdXJyZW50U3RlcCAtIFRoZSBzdGVwIHdlIHdpc2ggdG8gdmlzdWFsaXplXG5cdCAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gd2Ugd2lzaCB0byBoaWdobGlnaHRcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXplU3RlcChcblx0XHRjdXJyZW50U3RlcDogTmd4VG91clN0ZXAsXG5cdFx0aXRlbT86IE5neFRvdXJJdGVtRGlyZWN0aXZlXG5cdCk6IENvbXBvbmVudFJlZjxOZ3hUb3VyU3RlcENvbXBvbmVudD4ge1xuXHRcdHJldHVybiB0aGlzLndpbmRvd1NlcnZpY2UucnVuSW5Ccm93c2VyKCh7IGJyb3dzZXJEb2N1bWVudCwgYnJvd3NlcldpbmRvdyB9KSA9PiB7XG5cdFx0XHQvLyBJYmVuOiBVcGRhdGUgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHN0ZXAgc3ViamVjdFxuXHRcdFx0dGhpcy5wcmV2aW91c1N0ZXBTdWJqZWN0Lm5leHQodGhpcy5jdXJyZW50U3RlcFN1YmplY3QuZ2V0VmFsdWUoKSk7XG5cdFx0XHR0aGlzLmN1cnJlbnRTdGVwU3ViamVjdC5uZXh0KGN1cnJlbnRTdGVwKTtcblxuXHRcdFx0Ly8gSWJlbjogUmVzdG9yZSB0aGUgYm9keSBvdmVyZmxvdyBzbyB3ZSBjYW4gc2Nyb2xsIHRvIHRoZSByaWdodCBlbGVtZW50XG5cdFx0XHRicm93c2VyRG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHRoaXMuYm9keU92ZXJmbG93O1xuXG5cdFx0XHQvLyBJYmVuOiBDYWxjdWxhdGUgdGhlIGRlZmF1bHRPZmZzZXRzXG5cdFx0XHQvLyBXb3V0ZXI6IFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB3ZSBjYWxjdWxhdGUgdGhlIHNjcm9sbCBwb3NpdGlvblxuXHRcdFx0Y29uc3QgbWFyZ2luID0gdGhpcy5nZXRDdXRvdXRNYXJnaW4oY3VycmVudFN0ZXApO1xuXG5cdFx0XHQvLyBJYmVuOiBTY3JvbGwgdG8gdGhlIHRvcCBiZWZvcmUgZWFjaCBzdGVwIHRvIGdldCBjb25zaXN0ZW50IGJlaGF2aW9yIHdoZW4gZ29pbmcgYmFjayBhbmQgZm9ydGhcblx0XHRcdGJyb3dzZXJXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAgfSk7XG5cblx0XHRcdGNvbnN0IHsgaXNWaXNpYmxlLCBzY3JvbGxZLCByZWxhdGl2ZVRvIH0gPSBlbGVtZW50SXNWaXNpYmxlSW5WaWV3cG9ydChcblx0XHRcdFx0aXRlbT8uZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0bWFyZ2luLFxuXHRcdFx0XHR7IC4uLnRoaXMuY29uZmlndXJhdGlvbi5vZmZzZXQsIC4uLmN1cnJlbnRTdGVwPy5vZmZzZXQgfVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gSWJlbjogU2Nyb2xsIHRvIHRoZSBlbGVtZW50IGlmIGl0J3Mgbm90IGluIHZpZXdcblx0XHRcdGlmICghaXNWaXNpYmxlKSB7XG5cdFx0XHRcdGJyb3dzZXJXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHNjcm9sbFkgfSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEliZW46IERpc2FibGUgc2Nyb2xsaW5nXG5cdFx0XHRicm93c2VyRG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG5cdFx0XHQvLyBXb3V0ZXI6IENhbGN1bGF0ZSB0aGUgc3RlcCdzIHBvc2l0aW9uIHNvIHRoYXQgaXQgaXMgcmVuZGVyZWQgcmVsYXRpdmVseSB0byB0aGUgY3V0b3V0XG5cdFx0XHRjb25zdCByZWxhdGl2ZURpc3BsYXk6IE5neFRvdXJTdGVwUG9zaXRpb24gPSByZWxhdGl2ZVRvID09ICdib3R0b20nID8gJ2Fib3ZlJyA6ICdiZWxvdyc7XG5cdFx0XHRjb25zdCBwb3NpdGlvblkgPSBjdXJyZW50U3RlcC5wb3NpdGlvbiA/IGN1cnJlbnRTdGVwLnBvc2l0aW9uIDogcmVsYXRpdmVEaXNwbGF5O1xuXHRcdFx0Y29uc3Qgb2Zmc2V0WSA9IHBvc2l0aW9uWSA9PT0gJ2Fib3ZlJyA/IC1tYXJnaW4gOiBtYXJnaW47XG5cdFx0XHRjb25zdCBvZmZzZXRYID0gY3VycmVudFN0ZXAucG9zaXRpb24gPT09ICdyaWdodCcgPyBtYXJnaW4gOiAtbWFyZ2luO1xuXG5cdFx0XHQvLyBJYmVuOiBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBpdGVtIGJhc2VkIG9uIHdoZXRoZXIgYSB0b3VySXRlbSB3YXMgcHJvdmlkZWRcblx0XHRcdGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSBpdGVtXG5cdFx0XHRcdD8gdGhpcy5jZGtPdmVybGF5U2VydmljZVxuXHRcdFx0XHRcdFx0LnBvc2l0aW9uKClcblx0XHRcdFx0XHRcdC5mbGV4aWJsZUNvbm5lY3RlZFRvKGl0ZW0uZWxlbWVudFJlZilcblx0XHRcdFx0XHRcdC53aXRoRGVmYXVsdE9mZnNldFkob2Zmc2V0WSlcblx0XHRcdFx0XHRcdC53aXRoRGVmYXVsdE9mZnNldFgob2Zmc2V0WClcblx0XHRcdFx0XHRcdC53aXRoUG9zaXRpb25zKFt0aGlzLnBvc2l0aW9uTWFwW2N1cnJlbnRTdGVwLnBvc2l0aW9uIHx8IHJlbGF0aXZlRGlzcGxheV1dKVxuXHRcdFx0XHQ6IHRoaXMuY2RrT3ZlcmxheVNlcnZpY2Vcblx0XHRcdFx0XHRcdC5wb3NpdGlvbigpXG5cdFx0XHRcdFx0XHQuZ2xvYmFsKClcblx0XHRcdFx0XHRcdC5jZW50ZXJIb3Jpem9udGFsbHkoKVxuXHRcdFx0XHRcdFx0LmNlbnRlclZlcnRpY2FsbHkoKTtcblxuXHRcdFx0Ly8gSWJlbjogQ3JlYXRlIGFuIG92ZXJsYXkgaWYgaXQgZG9lcyBub3QgZXhpc3Rcblx0XHRcdGlmICghdGhpcy5vdmVybGF5UmVmKSB7XG5cdFx0XHRcdC8vIEliZW46IENyZWF0ZSBhbiBvdmVybGF5IGNvbmZpZ1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG5cdFx0XHRcdFx0aGFzQmFja2Ryb3A6ICFjdXJyZW50U3RlcC5kaXNhYmxlQmFja0Ryb3AsXG5cdFx0XHRcdFx0Ly8gSWJlbjogRHVlIHRvIGlzc3VlcyB3aXRoIGhvdyB0aGUgc2Nyb2xsaW5nU3RyYXRlZ3kuYmxvY2soKSB3b3JrcyB3aXRoIHNjcm9sbGluZyB0byBpdGVtcyB0aGF0IGFyZSBub3QgaW4gdmlldywgd2Ugc2V0IHRoaXMgdG8gbm9vcFxuXHRcdFx0XHRcdHNjcm9sbFN0cmF0ZWd5OiB0aGlzLmNka092ZXJsYXlTZXJ2aWNlLnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxuXHRcdFx0XHRcdHBvc2l0aW9uU3RyYXRlZ3ksXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgb3ZlcmxheVxuXHRcdFx0XHR0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLmNka092ZXJsYXlTZXJ2aWNlLmNyZWF0ZShjb25maWcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWJlbjogRGV0YWNoIHRoZSBwcmV2aW91cyBwb3J0YWxcblx0XHRcdFx0dGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xuXG5cdFx0XHRcdC8vIEliZW46IElmIHRoZSBvdmVybGF5IGV4aXN0cywgd2UgdXBkYXRlIHRoZSBwb3NpdGlvbiBzdHJhdGVneVxuXHRcdFx0XHR0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShwb3NpdGlvblN0cmF0ZWd5KTtcblxuXHRcdFx0XHQvLyBJYmVuOiBJZiB0aGUgY3VycmVudCBzdGVwIGhhcyBubyBiYWNrZHJvcCwgd2UgZGV0YWNoIHRoZSBiYWNrZHJvcFxuXHRcdFx0XHRpZiAoY3VycmVudFN0ZXAuZGlzYWJsZUJhY2tEcm9wKSB7XG5cdFx0XHRcdFx0dGhpcy5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSWJlbjogQ3JlYXRlIGEgcG9ydGFsIGFuZCBhdHRhY2ggdGhlIGNvbXBvbmVudFxuXHRcdFx0Y29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbDxOZ3hUb3VyU3RlcENvbXBvbmVudD4oXG5cdFx0XHRcdC8vIEliZW46IElmIHRoZSBjdXJyZW50U3RlcCBoYXMgaXRzIG93biBjb21wb25lbnQsIHdlIG92ZXJ3cml0ZSBpdFxuXHRcdFx0XHRjdXJyZW50U3RlcC5jb21wb25lbnQgfHwgdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xuXHRcdFx0Y29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG5cdFx0XHQvLyBJYmVuOiBVcGRhdGUgdGhlIGRhdGEgb2YgdGhlIGNvbXBvbmVudFxuXHRcdFx0Y29tcG9uZW50LmNvbnRlbnQgPSBjdXJyZW50U3RlcC5jb250ZW50O1xuXHRcdFx0Y29tcG9uZW50LnRpdGxlID0gY3VycmVudFN0ZXAudGl0bGU7XG5cdFx0XHRjb21wb25lbnQuZGF0YSA9IGN1cnJlbnRTdGVwLmRhdGE7XG5cdFx0XHRjb21wb25lbnQuY3VycmVudFN0ZXAgPSB0aGlzLmN1cnJlbnRJbmRleFN1YmplY3QuZ2V0VmFsdWUoKTtcblx0XHRcdGNvbXBvbmVudC5hbW91bnRPZlN0ZXBzID0gdGhpcy5hbW91bnRPZlN0ZXBzO1xuXHRcdFx0Y29tcG9uZW50LnBvc2l0aW9uID0gaXRlbSA/IGN1cnJlbnRTdGVwLnBvc2l0aW9uIHx8ICdiZWxvdycgOiB1bmRlZmluZWQ7XG5cdFx0XHRjb21wb25lbnQuc3RlcENsYXNzID0gY3VycmVudFN0ZXAuc3RlcENsYXNzO1xuXHRcdFx0Y29tcG9uZW50LmVsZW1lbnRJZCA9IGl0ZW0/LmVsZW1lbnRJZDtcblxuXHRcdFx0Ly8gSWJlbjogSGlnaGxpZ2h0IHRoZSBjdXJyZW50IGh0bWwgaXRlbSBhcyBhY3RpdmUgaWYgb25lIGlzIHByb3ZpZGVkXG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHQvLyBJYmVuOiBTZXQgdGhlIGFjdGl2ZSBjbGFzcyBvZiB0aGUgaXRlbVxuXHRcdFx0XHRpdGVtLnNldEFjdGl2ZSh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWJlbjogU2V0IHRoZSBjbGlwIHBhdGggb2YgdGhlIGJhY2tkcm9wXG5cdFx0XHR0aGlzLmJhY2tkcm9wQ2xpcEV2ZW50U3ViamVjdC5uZXh0KHtcblx0XHRcdFx0YmFja2Ryb3A6IHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcEVsZW1lbnQsXG5cdFx0XHRcdGl0ZW06IGl0ZW0/LmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdGN1dG91dE1hcmdpbjogdGhpcy5nZXRDdXRvdXRNYXJnaW4oY3VycmVudFN0ZXApLFxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEliZW46IFJldHVybiB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0cmV0dXJuIGNvbXBvbmVudFJlZjtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBhIHN0ZXBcblx0ICpcblx0ICogQHBhcmFtICBjdXJyZW50U3RlcCAtIFRoZSBwcm92aWRlZCBzdGVwXG5cdCAqIEBwYXJhbSAgaXRlbSAtIEFuIG9wdGlvbmFsIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlU3RlcEludGVyYWN0aW9ucyhcblx0XHRjdXJyZW50U3RlcDogTmd4VG91clN0ZXAsXG5cdFx0aXRlbT86IE5neFRvdXJJdGVtRGlyZWN0aXZlXG5cdCk6IE9ic2VydmFibGU8Tmd4VG91ckludGVyYWN0aW9uPiB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlIGl0ZW0gd2FzIGZvdW5kLCB3ZSB2aXN1YWxpemUgdGhlIHN0ZXBcblx0XHRjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZpc3VhbGl6ZVN0ZXAoY3VycmVudFN0ZXAsIGl0ZW0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucnVuU3RlcEZ1bmN0aW9uKGN1cnJlbnRTdGVwLm9uVmlzaWJsZSkucGlwZShcblx0XHRcdGNvbmNhdE1hcCgoKSA9PiB7XG5cdFx0XHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgY29tcG9uZW50IGludGVyYWN0aW9ucyBhbmQgcmVzcG9uZCBhY2NvcmRpbmdseVxuXHRcdFx0XHRyZXR1cm4gY29tcG9uZW50UmVmLmluc3RhbmNlLmhhbmRsZUludGVyYWN0aW9uLnBpcGUoXG5cdFx0XHRcdFx0dGFrZSgxKSxcblx0XHRcdFx0XHRjb25jYXRNYXAoKGludGVyYWN0aW9uOiBOZ3hUb3VySW50ZXJhY3Rpb24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBpbnRlcmFjdGlvbiA9PT0gJ2Nsb3NlJ1xuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuY2xvc2VUb3VyKClcblx0XHRcdFx0XHRcdFx0OiB0aGlzLmhhbmRsZU5leHQoaW50ZXJhY3Rpb24pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIGJhc2VkIG9uIHdoZXRoZXIgYSBzdGVwIGZ1bmN0aW9uIHdhcyBwcm92aWRlZFxuXHQgKlxuXHQgKiBAcGFyYW0gc3RlcEZ1bmN0aW9uIC0gVGhlIHByb3ZpZGVkIHN0ZXAgZnVuY3Rpb25cblx0ICovXG5cdHByaXZhdGUgcnVuU3RlcEZ1bmN0aW9uKHN0ZXBGdW5jdGlvbj86IE5neFRvdXJBY3Rpb24pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcblx0XHQvLyBJYmVuOiBJZiBubyBzdGVwIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgd2Ugc2ltcGx5IHJldHVybiBhIHNpbmdsZSB2b2lkIG9mXG5cdFx0aWYgKCFzdGVwRnVuY3Rpb24pIHtcblx0XHRcdHJldHVybiBvZihudWxsKTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBSdW4gdGhlIHN0ZXAgZnVuY3Rpb24gYW5kIGRlcGVuZGluZyBvbiB0aGUgcmVzdWx0LCB3ZSByZXR1cm4gdGhlIHJlc3VsdCBvciBhbiBvZi5cblx0XHRyZXR1cm4gKFxuXHRcdFx0c3RlcEZ1bmN0aW9uKHRoaXMuY3VycmVudFN0ZXBTdWJqZWN0LmdldFZhbHVlKCksIHRoaXMuY3VycmVudEluZGV4U3ViamVjdC5nZXRWYWx1ZSgpKSB8fFxuXHRcdFx0b2YobnVsbClcblx0XHQpLnBpcGUoXG5cdFx0XHQvLyBJYmVuOiBXZSBhZGQgYSB0YWtlKDEpIGFzIGFuIGV4dHJhIHNhZmV0eSBtZWFzdXJlIGluIGNhc2UgdXNlcnMgZW5kIHVwIG5vdCB0YWtpbmcgY2FyZSBvZiB0aGlzXG5cdFx0XHR0YWtlKDEpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdXJyb3VuZHMgdGhlIHByb3ZpZGVkIGl0ZW0gd2l0aCBhIGN1dG91dCBpbiB0aGUgYmFja2Ryb3Bcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIGV2ZW50LmJhY2tkcm9wIC0gVGhlIHByb3ZpZGVkIGJhY2tkcm9wXG5cdCAqIEBwYXJhbSBldmVudC5pdGVtIC0gVGhlIGl0ZW0gd2Ugd2lzaCB0byBzdXJyb3VuZFxuXHQgKiBAcGFyYW0gZXZlbnQuY3V0b3V0TWFyZ2luIC0gVGhlIGFtb3VudCBvZiBtYXJnaW4gd2Ugd2FudCBhcm91bmQgdGhlIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgc2V0Q2xpcFBhdGgoZXZlbnQ6IE5neFRvdXJCYWNrZHJvcENsaXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IHsgYmFja2Ryb3AsIGl0ZW0sIGN1dG91dE1hcmdpbiB9ID0gZXZlbnQ7XG5cblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2Ugbm8gYmFja2Ryb3Agb3IgaXRlbSBpcyBwcmVzZW50XG5cdFx0aWYgKCFiYWNrZHJvcCB8fCAhaXRlbSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEdldCB0aGUgcG9zaXRpb25zIG9mIHRoZSBwYXRoIGFyb3VuZCB0aGUgaXRlbVxuXHRcdGNvbnN0IHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHBvc2l0aW9uVG9wID0gdG9wIC0gY3V0b3V0TWFyZ2luO1xuXHRcdGNvbnN0IHBvc2l0aW9uTGVmdCA9IGxlZnQgLSBjdXRvdXRNYXJnaW47XG5cdFx0Y29uc3QgcG9zaXRpb25Cb3R0b20gPSBib3R0b20gKyBjdXRvdXRNYXJnaW47XG5cdFx0Y29uc3QgcG9zaXRpb25SaWdodCA9IHJpZ2h0ICsgY3V0b3V0TWFyZ2luO1xuXG5cdFx0Ly8gSWJlbjogQ3JlYXRlIHRoZSBib3ggYXJvdW5kIHRoZSBpdGVtXG5cdFx0Y29uc3QgYm94ID0gYCR7cG9zaXRpb25MZWZ0fXB4ICR7cG9zaXRpb25Ub3B9cHgsICR7cG9zaXRpb25SaWdodH1weCAke3Bvc2l0aW9uVG9wfXB4LCAke3Bvc2l0aW9uUmlnaHR9cHggJHtwb3NpdGlvbkJvdHRvbX1weCwgJHtwb3NpdGlvbkxlZnR9cHggJHtwb3NpdGlvbkJvdHRvbX1weCwgJHtwb3NpdGlvbkxlZnR9cHggJHtwb3NpdGlvblRvcH1weGA7XG5cblx0XHQvLyBJYmVuOiBDbGlwIHRoZSBib3ggb3V0IG9mIHRoZSBiYWNrZHJvcFxuXHRcdGJhY2tkcm9wLnN0eWxlLmNsaXBQYXRoID0gYHBvbHlnb24oZXZlbm9kZCwgMCUgMCUsIDAlIDEwMCUsIDEwMCUgMTAwJSwgMTAwJSAwJSwgMCUgMCUsJHtib3h9KWA7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIGV2ZW50XG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCAtIFRoZSByZWdpc3RyYXRpb24gZXZlbnQgd2Ugd2lzaCB0byBoYW5kbGVcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlUmVnaXN0cmF0aW9uRXZlbnQoZXZlbnQ6IE5neFRvdXJSZWdpc3RyYXRpb25FdmVudCk6IE9ic2VydmFibGU8bnVsbD4ge1xuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaWYgbm8gZXZlbnQgd2FzIGZvdW5kXG5cdFx0aWYgKCFldmVudCkge1xuXHRcdFx0cmV0dXJuIG9mKG51bGwpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFVucmVnaXN0ZXIgdGhlIGVsZW1lbnQgaWYgaXQncyBhbiB1bnJlZ2lzdGVyIGV2ZW50XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09ICd1bnJlZ2lzdGVyJykge1xuXHRcdFx0dGhpcy5lbGVtZW50c1tldmVudC50b3VySXRlbV0/Lm5leHQodW5kZWZpbmVkKTtcblx0XHRcdHJldHVybiBvZihudWxsKTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kXG5cdFx0aWYgKCFldmVudC5lbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogQ2hlY2sgaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBpdGVtIHdpdGggdGhlIGN1cnJlbnQgaWQuIElmIGl0IGlzLCB1cGRhdGUgaXQsIGlmIG5vdCwgbWFrZSBhIG5ldyBCZWhhdmlvclN1YmplY3Rcblx0XHRjb25zdCBlbGVtZW50U3ViamVjdCA9IHRoaXMuZWxlbWVudHNbZXZlbnQudG91ckl0ZW1dO1xuXG5cdFx0Ly8gSWJlbjogSWYgd2UgaGF2ZSBhbiBlbGVtZW50IHN1YmplY3QgYWxyZWFkeSwgd2UgY2hlY2sgaWYgaXQgYWxyZWFkeSBoYXMgYW4gZWxlbWVudFxuXHRcdGlmIChlbGVtZW50U3ViamVjdCkge1xuXHRcdFx0Ly8gSWJlbjogSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgdW5kZWZpbmVkLCB3ZSByZWdpc3RlciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKGVsZW1lbnRTdWJqZWN0LmdldFZhbHVlKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlbGVtZW50U3ViamVjdC5uZXh0KGV2ZW50LmVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgbm8gQmVoYXZpb3JTdWJqZWN0IGV4aXN0cywgd2UgY3JlYXRlIG9uZVxuXHRcdHRoaXMuZWxlbWVudHNbZXZlbnQudG91ckl0ZW1dID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3hUb3VySXRlbURpcmVjdGl2ZT4oZXZlbnQuZWxlbWVudCk7XG5cblx0XHRyZXR1cm4gb2YobnVsbCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcHJvdmlkZWQgY3V0b3V0TWFyZ2luIG9mIGEgc3RlcCwgb3IgNXB4IGlmIG5vbmUgaXMgcHJvdmlkZWRcblx0ICpcblx0ICogQHBhcmFtIHN0ZXAgLSBUaGUgY3VycmVudCBzdGVwXG5cdCAqL1xuXHRwcml2YXRlIGdldEN1dG91dE1hcmdpbihzdGVwOiBOZ3hUb3VyU3RlcCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHN0ZXA/LmN1dG91dE1hcmdpbiA9PT0gdW5kZWZpbmVkID8gNSA6IHN0ZXAuY3V0b3V0TWFyZ2luO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgb3IgcmVtb3ZlcyB0aGUgYm9keSBjbGFzcyB0byBpbmRpY2F0ZSB0aGUgdG91ciBpcyBhY3RpdmVcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlQm9keUNsYXNzKGFjdGlvbjogJ3NldCcgfCAncmVtb3ZlJyk6IHZvaWQge1xuXHRcdHRoaXMud2luZG93U2VydmljZS5ydW5JbkJyb3dzZXIoKHsgYnJvd3NlckRvY3VtZW50IH0pID0+IHtcblx0XHRcdGlmIChhY3Rpb24gPT09ICdzZXQnKSB7XG5cdFx0XHRcdGJyb3dzZXJEb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ25neC10b3VyLWFjdGl2ZScpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnJvd3NlckRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbmd4LXRvdXItYWN0aXZlJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==","import { Directive, EventEmitter, HostBinding, HostListener, Input, Output, signal, ViewChild, } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../services\";\n/**\n * An abstract class that defines the minimum properties needed for the step component to be rendered\n */\nexport class NgxTourStepComponent {\n    /**\n     * Close the tour on escape pressed\n     */\n    onEscape() {\n        this.tourService.closeTour().subscribe();\n    }\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 positionClass = this.position ? `ngx-tour-step-position-${this.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        if (!this.titleElement) {\n            console.error('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 = this.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            this.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    // eslint-disable-next-line @angular-eslint/prefer-inject\n    constructor(tourService) {\n        this.tourService = tourService;\n        /**\n         * Emits the possible interactions with a step\n         */\n        this.handleInteraction = new EventEmitter();\n        /**\n         * The aria-labelledby id of the title element\n         */\n        this.titleId = signal('', ...(ngDevMode ? [{ debugName: \"titleId\" }] : []));\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxTourStepComponent, deps: [{ token: i1.NgxTourService }], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: NgxTourStepComponent, isStandalone: false, inputs: { elementId: \"elementId\", position: \"position\", title: \"title\", content: \"content\", currentStep: \"currentStep\", amountOfSteps: \"amountOfSteps\", data: \"data\", stepClass: \"stepClass\" }, outputs: { handleInteraction: \"handleInteraction\" }, host: { attributes: { \"role\": \"dialog\" }, listeners: { \"document:keydown.escape\": \"onEscape()\" }, properties: { \"attr.aria-modal\": \"true\", \"attr.aria-labelledby\": \"titleId()\", \"class\": \"this.rootClass\", \"attr.aria-details\": \"this.elementId\" } }, viewQueries: [{ propertyName: \"titleElement\", first: true, predicate: [\"stepTitle\"], descendants: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", 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                    },\n                    standalone: false,\n                }]\n        }], ctorParameters: () => [{ type: i1.NgxTourService }], propDecorators: { onEscape: [{\n                type: HostListener,\n                args: ['document:keydown.escape']\n            }], rootClass: [{\n                type: HostBinding,\n                args: ['class']\n            }], elementId: [{\n                type: HostBinding,\n                args: ['attr.aria-details']\n            }, {\n                type: Input,\n                args: [{ required: true }]\n            }], titleElement: [{\n                type: ViewChild,\n                args: ['stepTitle']\n            }], position: [{\n                type: Input,\n                args: [{\n                        required: true,\n                    }]\n            }], title: [{\n                type: Input,\n                args: [{ required: true }]\n            }], content: [{\n                type: Input,\n                args: [{ required: true }]\n            }], currentStep: [{\n                type: Input,\n                args: [{ required: true }]\n            }], amountOfSteps: [{\n                type: Input,\n                args: [{ required: true }]\n            }], data: [{\n                type: Input\n            }], stepClass: [{\n                type: Input\n            }], handleInteraction: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90b3VyL3NyYy9saWIvYWJzdHJhY3RzL3RvdXItc3RlcC90b3VyLXN0ZXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFLbEM7O0dBRUc7QUFTSCxNQUFNLE9BQWdCLG9CQUFvQjtJQUN6Qzs7T0FFRztJQUM4QyxRQUFRO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQWtFTSxRQUFRO1FBQ2QsMklBQTJJO1FBQzNJLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRixJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRU0sZUFBZTtRQUNyQix5REFBeUQ7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsS0FBSyxDQUNaLDBQQUEwUCxDQUMxUCxDQUFDO1lBRUYsT0FBTztRQUNSLENBQUM7UUFFRCw0REFBNEQ7UUFDNUQsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVELGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDVCxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxZQUE2QixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUF6Q3hEOztXQUVHO1FBQ2Msc0JBQWlCLEdBQ2pDLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRXhDOztXQUVHO1FBQ0ssWUFBTyxHQUEyQixNQUFNLENBQUMsRUFBRSxtREFBQyxDQUFDO0lBZ0NNLENBQUM7OEdBdEd2QyxvQkFBb0I7a0dBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFSekMsU0FBUzttQkFBQztvQkFDVixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsbUJBQW1CLEVBQUUsTUFBTTt3QkFDM0Isd0JBQXdCLEVBQUUsV0FBVztxQkFDckM7b0JBQ0QsVUFBVSxFQUFFLEtBQUs7aUJBQ2pCO21GQUtpRCxRQUFRO3NCQUF4RCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFPUCxTQUFTO3NCQUF4QyxXQUFXO3VCQUFDLE9BQU87Z0JBS2dELFNBQVM7c0JBQTVFLFdBQVc7dUJBQUMsbUJBQW1COztzQkFBRyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLNUIsWUFBWTtzQkFBMUMsU0FBUzt1QkFBQyxXQUFXO2dCQVFmLFFBQVE7c0JBSGQsS0FBSzt1QkFBQzt3QkFDTixRQUFRLEVBQUUsSUFBSTtxQkFDZDtnQkFNaUMsS0FBSztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS1MsT0FBTztzQkFBeEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS1MsV0FBVztzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS1MsYUFBYTtzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS1QsSUFBSTtzQkFBbkIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUtXLGlCQUFpQjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0QmluZGluZyxcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25Jbml0LFxuXHRPdXRwdXQsXG5cdHNpZ25hbCxcblx0Vmlld0NoaWxkLFxuXHRXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IE5neFRvdXJJbnRlcmFjdGlvbiwgTmd4VG91clN0ZXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE5neFRvdXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEFuIGFic3RyYWN0IGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgbWluaW11bSBwcm9wZXJ0aWVzIG5lZWRlZCBmb3IgdGhlIHN0ZXAgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkBEaXJlY3RpdmUoe1xuXHRob3N0OiB7XG5cdFx0cm9sZTogJ2RpYWxvZycsXG5cdFx0J1thdHRyLmFyaWEtbW9kYWxdJzogJ3RydWUnLFxuXHRcdCdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ3RpdGxlSWQoKScsXG5cdH0sXG5cdHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3hUb3VyU3RlcENvbXBvbmVudDxEYXRhVHlwZSA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXHQvKipcblx0ICogQ2xvc2UgdGhlIHRvdXIgb24gZXNjYXBlIHByZXNzZWRcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJykgcHJpdmF0ZSBvbkVzY2FwZSgpIHtcblx0XHR0aGlzLnRvdXJTZXJ2aWNlLmNsb3NlVG91cigpLnN1YnNjcmliZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBuZ3gtdG91ci1zdGVwIGNsYXNzIG9mIHRoZSBjb21wb25lbnRcblx0ICovXG5cdEBIb3N0QmluZGluZygnY2xhc3MnKSBwcm90ZWN0ZWQgcm9vdENsYXNzOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0aGF0IHRoZSB0b3VyLXN0ZXAgZGVzY3JpYmVzXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXRhaWxzJykgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGVsZW1lbnRJZDogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgZWxlbWVudCBvZiB0aGUgdG91ci1zdGVwIHRoYXQgaXMgc2VlbiBhcyB0aGUgdGl0bGVcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ3N0ZXBUaXRsZScpIHB1YmxpYyB0aXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG5cdC8qKlxuXHQgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHN0ZXBcblx0ICovXG5cdEBJbnB1dCh7XG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBwb3NpdGlvbjogTmd4VG91clN0ZXBQb3NpdGlvbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHRpdGxlIG9mIHRoZSBzdGVwXG5cdCAqL1xuXHRASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIGNvbnRlbnQgb2YgdGhlIHN0ZXBcblx0ICovXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSBpbmRleCBvZiB0aGUgc3RlcFxuXHQgKi9cblx0QElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGN1cnJlbnRTdGVwOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygc3RlcHNcblx0ICovXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBhbW91bnRPZlN0ZXBzOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGRhdGEgd2Ugd2lzaCB0byB1c2UgaW4gYSBzdGVwXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgZGF0YTogRGF0YVR5cGU7XG5cblx0LyoqXG5cdCAqIEEgY3VzdG9tIHN0ZXAgY2xhc3Mgd2UgY2FuIHNldFxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIHN0ZXBDbGFzczogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBFbWl0cyB0aGUgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggYSBzdGVwXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGhhbmRsZUludGVyYWN0aW9uOiBFdmVudEVtaXR0ZXI8Tmd4VG91ckludGVyYWN0aW9uPiA9XG5cdFx0bmV3IEV2ZW50RW1pdHRlcjxOZ3hUb3VySW50ZXJhY3Rpb24+KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBhcmlhLWxhYmVsbGVkYnkgaWQgb2YgdGhlIHRpdGxlIGVsZW1lbnRcblx0ICovXG5cdHByaXZhdGUgdGl0bGVJZDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCgnJyk7XG5cblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IFdlIHNldCB0aGUgY29ycmVjdCBob3N0IGNsYXNzLiBBcyB0aGlzIHN0ZXAgaXMgcmVuZGVyZWQgYW5kIG5vdCBjaGFuZ2VkIGFmdGVyd2FyZHMsIHdlIGRvIG5vdCBoYXZlIHRvIGFkanVzdCB0aGlzIGluIHRoZSBvbkNoYW5nZXNcblx0XHRjb25zdCBwb3NpdGlvbkNsYXNzID0gdGhpcy5wb3NpdGlvbiA/IGBuZ3gtdG91ci1zdGVwLXBvc2l0aW9uLSR7dGhpcy5wb3NpdGlvbn1gIDogJyc7XG5cdFx0dGhpcy5yb290Q2xhc3MgPSBgbmd4LXRvdXItc3RlcCAke3Bvc2l0aW9uQ2xhc3N9ICR7dGhpcy5zdGVwQ2xhc3MgfHwgJyd9YDtcblx0fVxuXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogSWYgbm8gdGl0bGUgZWxlbWVudCB3YXMgZm91bmQsIHdlIHRocm93IGFuIGVycm9yXG5cdFx0aWYgKCF0aGlzLnRpdGxlRWxlbWVudCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0J05neFRvdXJTZXJ2aWNlOiBUaGUgdG91ciBzdGVwIGNvbXBvbmVudCBkb2VzIG5vdCBoYXZlIGFuIGVsZW1lbnQgbWFya2VkIHdpdGggYHN0ZXBUaXRsZWAuIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIG5lY2Vzc2FyeSBhY2Nlc3NpYmlsaXR5IGF0dHJpYnV0ZXMgY291bGQgbm90IGJlIHNldC4gUGxlYXNlIGFkZCB0aGUgYHN0ZXBUaXRsZWAgdGFnIHRvIHRoZSBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgdGl0bGUgb2YgdGhlIHN0ZXAuJ1xuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENvbm5lY3QgdGhlIGFyaWEtbGFiYmxlZGJ5IHRhZyB0byB0aGUgdGl0bGUgZWxlbWVudFxuXHRcdGxldCBpZCA9IHRoaXMudGl0bGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXG5cdFx0Ly8gSWJlbjogSWYgdGhlIHRpdGxlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBpZCwgd2UgZ2VuZXJhdGUgb25lXG5cdFx0aWYgKCFpZCkge1xuXHRcdFx0aWQgPSB1dWlkKCk7XG5cdFx0XHR0aGlzLnRpdGxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogVG8gcHJldmVudCBpc3N1ZXMgd2l0aCBjaGFuZ2VEZXRlY3Rpb24sIHdlIHVzZSBhIHNpZ25hbCBoZXJlIHRvIHVwZGF0ZSB0aGUgaWRcblx0XHR0aGlzLnRpdGxlSWQuc2V0KGlkKTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvcHJlZmVyLWluamVjdFxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlOiBOZ3hUb3VyU2VydmljZSkge31cbn1cbiJdfQ==","import { ChangeDetectorRef, Directive, ElementRef, HostBinding, Input, inject, } 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    constructor() {\n        this.elementRef = inject(ElementRef);\n        this.tourService = inject(NgxTourService);\n        this.cdRef = inject(ChangeDetectorRef);\n        /**\n         * A class added to the currently active item\n         */\n        this.isActive = false;\n    }\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 { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxTourItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: NgxTourItemDirective, isStandalone: true, selector: \"[tourItem]\", inputs: { tourItem: \"tourItem\" }, host: { properties: { \"class.ngx-tour-item-active\": \"this.isActive\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", 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            }], tourItem: [{\n                type: Input\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90b3VyL3NyYy9saWIvZGlyZWN0aXZlcy90b3VyLWl0ZW0vdG91ci1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRU4saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUVoRDs7R0FFRztBQUtILE1BQU0sT0FBTyxvQkFBb0I7SUFKakM7UUFLVSxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUNqRCxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFbkQ7O1dBRUc7UUFDK0MsYUFBUSxHQUFZLEtBQUssQ0FBQztLQXlDNUU7SUFsQ0E7Ozs7T0FJRztJQUNJLFNBQVMsQ0FBQyxRQUFpQjtRQUNqQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxlQUFlO1FBQ3JCLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0YsQ0FBQztJQUVNLFdBQVc7UUFDakIsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7OEdBaERXLG9CQUFvQjtrR0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtpQkFDaEI7OEJBU2tELFFBQVE7c0JBQXpELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUt6QixRQUFRO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0SG9zdEJpbmRpbmcsXG5cdElucHV0LFxuXHRPbkRlc3Ryb3ksXG5cdGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IE5neFRvdXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIG1hcmsgZWxlbWVudHMgaW4gdGhlIERPTSB0byBiZSBoaWdobGlnaHRlZCBkdXJpbmcgYSB0b3VyXG4gKi9cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1t0b3VySXRlbV0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUb3VySXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cdHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0KE5neFRvdXJTZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBjZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblx0LyoqXG5cdCAqIEEgY2xhc3MgYWRkZWQgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgaXRlbVxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5uZ3gtdG91ci1pdGVtLWFjdGl2ZScpIHB1YmxpYyBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgaWQgb2YgdGhlIGl0ZW0gdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBzdGVwXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgdG91ckl0ZW06IHN0cmluZztcblxuXHQvKipcblx0ICogTWFyayBhbiBlbGVtZW50IGFzIGFjdGl2ZSBvciBpbmFjdGl2ZVxuXHQgKlxuXHQgKiBAcGFyYW0gaXNBY3RpdmUgLSBXaGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYWN0aXZlXG5cdCAqL1xuXHRwdWJsaWMgc2V0QWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogTWFyayB0aGUgY3VycmVudCBpdGVtIGFzIGFjdGl2ZSBvciBpbmFjdGl2ZVxuXHRcdHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcblxuXHRcdC8vIEliZW46IERldGVjdCB0aGUgY2hhbmdlcyBvbiB0aGUgY29tcG9uZW50XG5cdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIGVsZW1lbnQuIFVzZXMgZm9yIHRoZSBgYXJpYS1kZXRhaWxzYCBvbiB0aGUgdG91ci1pdGVtIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBlbGVtZW50SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXHR9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBSZWdpc3RlciB0aGUgZWxlbWVudCB3aGVuIHJlbmRlcmVkXG5cdFx0dGhpcy50b3VyU2VydmljZS5yZWdpc3RlckVsZW1lbnQodGhpcyk7XG5cblx0XHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgZWxlbWVudCBoYXMgYW4gaWQsIGlmIG5vdCwgZ2l2ZSBpdCBhIG5ldyBpZCBmb3IgYWNjZXNzaWJpbGl0eVxuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdXVpZCgpKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogVW5yZWdpc3RlciB0aGUgZWxlbWVudCB3aGVuIHRoZSBlbGVtZW50IGdldHMgZGVzdHJveWVkXG5cdFx0dGhpcy50b3VyU2VydmljZS51bnJlZ2lzdGVyRWxlbWVudCh0aGlzLnRvdXJJdGVtKTtcblx0fVxufVxuIl19","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS10b3VyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdG91ci9zcmMvbGliL3Byb3ZpZGVycy90b3VyL3Byb3ZpZGUtdG91ci51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUdoRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLGFBQStCLEVBQVksRUFBRTtJQUN4RixPQUFPO1FBQ04sT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixRQUFRO1FBQ1AsZ0xBQWdMO1FBQ2hMLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDaEMsQ0FBQyxDQUFFLGFBQTJDO1lBQzlDLENBQUMsQ0FBRTtnQkFDRCxTQUFTLEVBQUUsYUFBYTtnQkFDeEIsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO2FBQ0M7S0FDbEMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5neFRvdXJTdGVwVG9rZW4gfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgTmd4VG91clRva2VuQ29uZmlndXJhdGlvbiwgTmd4VG91clRva2VuVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIE5neERpc3BsYXlDb250ZW50IGRpcmVjdGl2ZS4gVGhpcyBjYW4gYmUgZWl0aGVyIGp1c3RcbiAqIHRoZSBjb21wb25lbnQgb3IgdGhlIGNvbXBvbmVudCBhbmQgdGhlIG9mZnNldC4gTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gKiBkb2N1bWVudGF0aW9uIG9mIHRoZSBgTmd4VG91clN0ZXBgLlxuICpcbiAqIEBwYXJhbSBjb25maWd1cmF0aW9uIC0gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVOZ3hUb3VyQ29uZmlndXJhdGlvbiA9IChjb25maWd1cmF0aW9uOiBOZ3hUb3VyVG9rZW5UeXBlKTogUHJvdmlkZXIgPT4ge1xuXHRyZXR1cm4ge1xuXHRcdHByb3ZpZGU6IE5neFRvdXJTdGVwVG9rZW4sXG5cdFx0dXNlVmFsdWU6XG5cdFx0XHQvLyBXb3V0ZXI6IElmIHRoZSBjb25maWd1cmF0aW9uIGlzIGFuIG9iamVjdCwgcmV0dXJuIGl0IGFzIGlzLiBJZiBpdCBpcyBhIGNvbXBvbmVudCwgcmV0dXJuIGl0IGFzIGFuIG9iamVjdCB3aXRoIHRoZSBjb21wb25lbnQgYXMgdGhlIGBjb21wb25lbnRgIHByb3BlcnR5IGFuZCBhIGRlZmF1bHQgb2Zmc2V0LlxuXHRcdFx0dHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09ICdvYmplY3QnXG5cdFx0XHRcdD8gKGNvbmZpZ3VyYXRpb24gYXMgTmd4VG91clRva2VuQ29uZmlndXJhdGlvbilcblx0XHRcdFx0OiAoe1xuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBjb25maWd1cmF0aW9uLFxuXHRcdFx0XHRcdFx0b2Zmc2V0OiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXG5cdFx0XHRcdFx0fSBhcyBOZ3hUb3VyVG9rZW5Db25maWd1cmF0aW9uKSxcblx0fTtcbn07XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vY2stZGF0YS1kdXJpbmctdG91ci5vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90b3VyL3NyYy9saWIvb3BlcmF0b3JzL3VzZS1tb2NrLWRhdGEtZHVyaW5nLXRvdXIvdXNlLW1vY2stZGF0YS1kdXJpbmctdG91ci5vcGVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBb0IsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNwQyxRQUFtQixFQUNzQixFQUFFO0lBQzNDLGdDQUFnQztJQUNoQyxNQUFNLFdBQVcsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTNELCtDQUErQztJQUMvQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLEtBQWdCLEVBQUUsRUFBRTtRQUNyQyxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDekIsMkVBQTJFO1lBQzNFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxRQUFRLENBQUM7WUFDakIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0YsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uLCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4VG91clNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogQW4gb3BlcmF0b3IgdG8gbWFwIHRoZSBkYXRhIG9mIGFuIE9ic2VydmFibGUgdG8gbW9jayBkYXRhIHdoZW4gdGhlIE5neFRvdXJTZXJ2aWNlIGhhcyBhbiBhY3RpdmUgdG91ci5cbiAqXG4gKiAqSW1wb3J0YW50KjogVGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dFxuICpcbiAqIEBwYXJhbSBtb2NrRGF0YSAtIFRoZSBtb2NrIGRhdGEgd2Ugd2lzaCB0byB1c2Ugd2hlbiB0aGUgdG91ciBpcyBhY3RpdmVcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1vY2tEYXRhRHVyaW5nVG91ciA9IDxWYWx1ZVR5cGU+KFxuXHRtb2NrRGF0YTogVmFsdWVUeXBlXG4pOiBPcGVyYXRvckZ1bmN0aW9uPFZhbHVlVHlwZSwgVmFsdWVUeXBlPiA9PiB7XG5cdC8vIEliZW46IEluamVjdCB0aGUgdG91ciBzZXJ2aWNlXG5cdGNvbnN0IHRvdXJTZXJ2aWNlOiBOZ3hUb3VyU2VydmljZSA9IGluamVjdChOZ3hUb3VyU2VydmljZSk7XG5cblx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIHRvdXJcblx0cmV0dXJuIHN3aXRjaE1hcCgodmFsdWU6IFZhbHVlVHlwZSkgPT4ge1xuXHRcdHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZih2YWx1ZSksIHRvdXJTZXJ2aWNlLnRvdXJBY3RpdmUkXSkucGlwZShcblx0XHRcdG1hcCgoW3ZhbHVlLCBpc0FjdGl2ZV0pID0+IHtcblx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIHRvdXIgaXMgYWN0aXZlLCByZXR1cm4gdGhlIG1vY2tEYXRhLCBlbHNlLCByZXR1cm4gdGhlIHZhbHVlXG5cdFx0XHRcdGlmIChpc0FjdGl2ZSkge1xuXHRcdFx0XHRcdHJldHVybiBtb2NrRGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSk7XG59O1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R1ZGlvaHlwZXJkcml2ZS1uZ3gtdG91ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90b3VyL3NyYy9zdHVkaW9oeXBlcmRyaXZlLW5neC10b3VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["uuid","i1.NgxTourService"],"mappings":"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"}