{"version":3,"file":"angular-walkthrough.mjs","sources":["../../../projects/angular-walkthrough/src/lib/walkthrough-text.ts","../../../projects/angular-walkthrough/src/lib/walkthrough-tools.ts","../../../projects/angular-walkthrough/src/lib/walkthrough.service.ts","../../../projects/angular-walkthrough/src/lib/walkthrough.component.ts","../../../projects/angular-walkthrough/src/lib/walkthrough-container.component.ts","../../../projects/angular-walkthrough/src/lib/walkthrough-container.component.html","../../../projects/angular-walkthrough/src/lib/walkthrough-flow.component.ts","../../../projects/angular-walkthrough/src/lib/angular-walkthrough.module.ts","../../../projects/angular-walkthrough/src/public_api.ts","../../../projects/angular-walkthrough/src/angular-walkthrough.ts"],"sourcesContent":["export interface WalkthroughTextI {\n    previous?: string;\n    next?: string;\n    close?: string;\n}\n\nexport class WalkthroughText implements WalkthroughTextI {\n    previous = 'Previous';\n    next = 'Next';\n    close = 'Close';\n}\n","import { WalkthroughComponent } from './walkthrough.component';\n\nexport interface WalkthroughElementCoordinate {\n    top: number;\n    left: number;\n    height: number;\n    width: number;\n    margin: Margin;\n}\nexport interface Margin {\n    top: number;\n    left: number;\n    right: number;\n    bottom: number;\n}\n\nexport const booleanValue = (value: string | boolean) => {\n    return value === '' || value === 'true' || value === true;\n};\n\nexport class WalkthroughEvent {\n    constructor(\n        public component: WalkthroughComponent,\n        public focusElement: HTMLElement,\n    ) {}\n}\n\nexport class WalkthroughMargin {\n    static parsePoints(points: string | null): WalkthroughMargin {\n        let pointsPx: WalkthroughMargin | null = null;\n        if (points?.match(/^\\d+(?:\\s+\\d+)*$/)) {\n            const split = points.split(/\\s+/).map(i => parseFloat(i));\n            pointsPx = new WalkthroughMargin(split[0], split[1], split[2], split[3]);\n        }\n        return pointsPx || new WalkthroughMargin();\n    }\n\n    constructor(\n        public top = 0,\n        public right?: number,\n        public bottom?: number,\n        public left?: number,\n    ) {\n        if (right === undefined) {\n            this.right = top;\n        }\n        if (bottom === undefined) {\n            this.bottom = top;\n        }\n        if (left === undefined && right === undefined) {\n            this.left = top;\n        } else if (left === undefined) {\n            this.left = right;\n        }\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { WalkthroughElementCoordinate, WalkthroughMargin } from './walkthrough-tools';\n\n@Injectable()\nexport class WalkthroughService {\n    private _overflowRegex = /(auto|scroll)/;\n\n    retrieveCoordinates(element: HTMLElement, margin?: WalkthroughMargin): WalkthroughElementCoordinate {\n        const clientRect = element.getBoundingClientRect();\n        const style = window.getComputedStyle(element);\n\n        const coordinates = {\n            top: clientRect.top - (margin?.top ?? 0),\n            height: clientRect.height,\n            width: clientRect.width,\n            left: clientRect.left - (margin?.left ?? 0),\n            margin: {\n                top: parseFloat(style.marginTop),\n                right: parseFloat(style.marginRight),\n                bottom: parseFloat(style.marginBottom),\n                left: parseFloat(style.marginLeft),\n            },\n        };\n        coordinates.top += this.getTop();\n        return coordinates;\n    }\n\n    getTop(): number {\n        return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\n    }\n\n    getLeft(): number {\n        return window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;\n    }\n\n    getDocumentHeight() {\n        // Height of entire body : https://stackoverflow.com/a/1147768\n        const body_height = Math.max(\n            document.body.scrollHeight,\n            document.body.offsetHeight,\n            document.documentElement.clientHeight,\n            document.documentElement.scrollHeight,\n            document.documentElement.offsetHeight,\n        );\n\n        return Math.max(this.getHeightOfPage() + this.getTop(), body_height);\n    }\n\n    scrollIntoViewIfOutOfView(element: HTMLElement) {\n        const topOfPage = this.getTop();\n        const heightOfPage = this.getHeightOfPage();\n        let elementY = 0;\n        let elementH = 0;\n\n        let parent = element;\n        while (parent && parent !== document.body) {\n            elementY += parent.offsetTop;\n            parent = parent.offsetParent as HTMLElement;\n        }\n        elementH = element.offsetHeight;\n\n        if (topOfPage + heightOfPage < elementY + elementH) {\n            element.scrollIntoView(false);\n        } else if (elementY < topOfPage) {\n            element.scrollIntoView(true);\n            window.scrollBy(0, -30);\n        } else {\n            // test of overflow element\n            let current = element;\n            while (current && current !== document.body) {\n                parent = this.getScrollParent(current);\n                if (\n                    current.offsetTop + current.offsetHeight - parent.scrollTop > parent.offsetHeight ||\n                    current.offsetLeft + current.offsetWidth - parent.scrollLeft > parent.offsetWidth\n                ) {\n                    element.scrollIntoView();\n                    window.scrollBy(0, -30);\n                    break;\n                }\n                current = parent;\n            }\n        }\n    }\n\n    getScrollParent(element: HTMLElement): HTMLElement {\n        let scrollParent;\n        let style = getComputedStyle(element);\n        const excludeStaticParent = style.position === 'absolute';\n\n        if (style.position !== 'fixed') {\n            let parent = element.parentElement;\n            while (parent && parent !== document.body) {\n                style = getComputedStyle(parent);\n                if (\n                    !(excludeStaticParent && style.position === 'static') &&\n                    this._overflowRegex.test(style.overflow + style.overflowY + style.overflowX)\n                ) {\n                    scrollParent = parent;\n                    break;\n                }\n                parent = parent.parentElement;\n            }\n        }\n        return scrollParent || document.body;\n    }\n\n    getHeightOfPage() {\n        return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n    }\n}\n","import { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\nimport {\n    AfterViewInit,\n    ApplicationRef,\n    Component,\n    ComponentFactoryResolver,\n    ComponentRef,\n    EmbeddedViewRef,\n    EventEmitter,\n    HostListener,\n    Injector,\n    Input,\n    OnDestroy,\n    Output,\n    Renderer2,\n    TemplateRef,\n    Type,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { debounceTime, first } from 'rxjs/operators';\n\nimport { HostBinding } from '@angular/core';\nimport { WalkthroughContainerComponent } from './walkthrough-container.component';\nimport { WalkthroughText, WalkthroughTextI } from './walkthrough-text';\nimport { WalkthroughElementCoordinate, WalkthroughEvent, WalkthroughMargin, booleanValue } from './walkthrough-tools';\nimport { WalkthroughService } from './walkthrough.service';\n\nlet nextUniqueId = 0;\n\nconst noInstanceWarn = 'No instance of walkthroughContainer.';\nconst anotherWktOnGoing = 'Another walkthrough is ongoing. Please close it before opening a new one.';\n\nexport interface WalkthroughNavigate {\n    previous: WalkthroughComponent;\n    next: WalkthroughComponent;\n}\n\n@Component({\n    selector: 'ng-walkthrough',\n    template: '',\n    standalone: false,\n})\nexport class WalkthroughComponent implements AfterViewInit, OnDestroy {\n    private static _walkthroughContainer: ComponentRef<WalkthroughContainerComponent> | null = null;\n    private static _walkthroughContainerCreating = false;\n    public static minimalMargin = 60;\n\n    public static onOpen = new Subject<WalkthroughComponent>();\n    public static onRefresh = new Subject<WalkthroughComponent>();\n    public static onClose = new Subject<WalkthroughComponent>();\n    public static onNavigate = new Subject<WalkthroughNavigate>();\n    public static onNavigatePrevious = new Subject<WalkthroughNavigate>();\n    public static onNavigateNext = new Subject<WalkthroughNavigate>();\n    public static onFinish = new Subject<WalkthroughComponent>();\n\n    @Output() closed: EventEmitter<boolean> = new EventEmitter();\n    @Output() finished: EventEmitter<WalkthroughEvent> = new EventEmitter();\n    @Output() ready: EventEmitter<WalkthroughEvent> = new EventEmitter();\n\n    @Input() focusElementCSSClass = '';\n    @Input() rootElement = '';\n\n    @Input() focusElementSelector = '';\n    @Input() typeSelector: 'element' | 'zone' = 'element';\n    @Input() focusClick!: (event: Event, content: WalkthroughContainerComponent) => void;\n    @Input() radius = '';\n\n    @Input() previousStep!: WalkthroughComponent;\n    @Input() nextStep!: WalkthroughComponent;\n    @Input() texts!: WalkthroughTextI;\n\n    @Input() contentTemplate!: TemplateRef<any>;\n    @Input() contentText = '';\n    @Input() contentStyle: 'none' | 'darken' = 'darken';\n\n    @Input() observerOptions: MutationObserverInit = { attributes: false, childList: true, subtree: true };\n\n    @Input()\n    get marginZone() {\n        return this._marginZone;\n    }\n    set marginZone(points: string | null) {\n        if (this._marginZone !== points) {\n            if (points === null) {\n                this._marginZone = '';\n            } else {\n                this._marginZonePx = WalkthroughMargin.parsePoints(points);\n                this._marginZone = points;\n            }\n        }\n    }\n\n    @Input()\n    get arrowColor() {\n        return this._arrowColor;\n    }\n    set arrowColor(color: string) {\n        if (this._arrowColor !== color) {\n            this._arrowColor = color;\n            if (this._getInstance()) {\n                this._getInstance().arrowColor = this._arrowColor;\n            }\n        }\n    }\n\n    @Input() animation: 'none' | 'linear' = 'none';\n    @Input() animationDelays = 0;\n\n    @Input()\n    get notScrollOnResize() {\n        return this._notScrollOnResize;\n    }\n    set notScrollOnResize(value: string | boolean) {\n        this._notScrollOnResize = booleanValue(value);\n    }\n\n    @HostBinding('attr.id')\n    @Input()\n    get id() {\n        return this._id;\n    }\n    set id(value: string) {\n        this._id = value || this._uid;\n    }\n\n    @Input()\n    get alignContent() {\n        return this._alignContent;\n    }\n    set alignContent(value: 'left' | 'center' | 'content' | 'right') {\n        if (this._alignContent !== value) {\n            this._alignContent = value;\n            this._updateElementPositions(this._getInstance());\n        } else {\n            this._alignContent = value;\n        }\n    }\n\n    @Input()\n    get verticalAlignContent() {\n        return this._verticalAlignContent;\n    }\n    set verticalAlignContent(value: 'above' | 'top' | 'center' | 'bottom' | 'below') {\n        if (this._verticalAlignContent !== value) {\n            this._verticalAlignContent = value;\n            this._updateElementPositions(this._getInstance());\n        } else {\n            this._verticalAlignContent = value;\n        }\n    }\n\n    @Input()\n    get contentSpacing() {\n        return this._contentSpacing;\n    }\n    set contentSpacing(value: number) {\n        value = Math.max(WalkthroughComponent.minimalMargin, value);\n        if (this._contentSpacing !== value) {\n            this._contentSpacing = value * 1;\n            this._updateElementPositions(this._getInstance());\n        } else {\n            this._contentSpacing = value * 1;\n        }\n    }\n\n    @Input()\n    get verticalContentSpacing() {\n        return this._verticalContentSpacing;\n    }\n    set verticalContentSpacing(value: number) {\n        value = Math.max(WalkthroughComponent.minimalMargin, value);\n        if (this._verticalContentSpacing !== value) {\n            this._verticalContentSpacing = value * 1;\n            this._updateElementPositions(this._getInstance());\n        } else {\n            this._verticalContentSpacing = value * 1;\n        }\n    }\n\n    @Input()\n    get closeButton() {\n        return this._hasCloseButton;\n    }\n    set closeButton(value: string | boolean) {\n        this._hasCloseButton = booleanValue(value);\n    }\n\n    @Input()\n    get closeAnywhere() {\n        return this._hasCloseAnywhere;\n    }\n    set closeAnywhere(value: string | boolean) {\n        this._hasCloseAnywhere = booleanValue(value);\n    }\n\n    @Input()\n    get showArrow() {\n        return this._hasArrow;\n    }\n    set showArrow(value: string | boolean) {\n        this._hasArrow = booleanValue(value);\n    }\n\n    @Input()\n    get finishButton() {\n        return this._hasFinish;\n    }\n    set finishButton(value: string | boolean) {\n        this._hasFinish = booleanValue(value);\n    }\n\n    @Input()\n    get focusHighlightAnimation() {\n        return this._hasHighlightAnimation;\n    }\n    set focusHighlightAnimation(value: string | boolean) {\n        this._hasHighlightAnimation = booleanValue(value);\n    }\n\n    @Input()\n    get focusBackdrop() {\n        return this._hasBackdrop;\n    }\n    set focusBackdrop(value: string | boolean) {\n        this._hasBackdrop = booleanValue(value);\n    }\n\n    @Input()\n    get focusGlow() {\n        return this._hasGlow;\n    }\n    set focusGlow(value: string | boolean) {\n        this._hasGlow = booleanValue(value);\n    }\n\n    @Input()\n    get disabled() {\n        return this._disabled;\n    }\n    set disabled(value: boolean) {\n        this._disabled = value;\n\n        const instance = this._getInstance();\n        if (instance) {\n            setTimeout(() => {\n                instance.hasPrevious = this._hasPreviousStep(instance);\n                instance.hasNext = this._hasNextStep(instance);\n                if (!instance.hasNext) {\n                    instance.hasFinish = true;\n                } else {\n                    instance.hasFinish = <boolean>instance.parent.finishButton;\n                }\n            }, 50);\n        }\n    }\n\n    @Input()\n    get hidePrevious() {\n        return this._hidePrevious;\n    }\n    set hidePrevious(value: string | boolean) {\n        this._hidePrevious = booleanValue(value);\n    }\n\n    @Input()\n    get hideNext() {\n        return this._hideNext;\n    }\n    set hideNext(value: string | boolean) {\n        this._hideNext = booleanValue(value);\n    }\n\n    @Input()\n    get hideNav() {\n        return this._hideNav;\n    }\n    set hideNav(value: string | boolean) {\n        this._hideNav = booleanValue(value);\n    }\n\n    @Input() scrollOnTarget = true;\n    @Input() visibilityCallback!: () => boolean;\n\n    private _id = '';\n    private _uid = `walkthrough-${nextUniqueId++}`;\n    private _readyHasBeenEmitted = false;\n    private _display = false;\n    private _hasHighlightAnimation = false;\n    private _hasBackdrop = false;\n    private _hasGlow = false;\n    private _hasFinish = false;\n    private _hasArrow = false;\n    private _hasCloseButton = false;\n    private _hasCloseAnywhere = true;\n    private _disabled = false;\n    private _hidePrevious = false;\n    private _hideNext = false;\n    private _hideNav = false;\n    private _arrowColor = '';\n    private _marginZone = '';\n    private _marginZonePx = new WalkthroughMargin();\n    private _alignContent: 'left' | 'center' | 'content' | 'right' = 'left';\n    private _verticalAlignContent: 'above' | 'top' | 'center' | 'bottom' | 'below' = 'top';\n    private _contentSpacing = 0;\n    private _verticalContentSpacing = 50;\n    private _focusElement: HTMLElement | null = null;\n    private _focusElementEnd: HTMLElement | null = null;\n    /** target coordinates */\n    private _offsetCoordinates: WalkthroughElementCoordinate | null = null;\n    private _onContainerInit = new Subject<void>();\n    private _onResize = new Subject<void>();\n    private _notScrollOnResize = true;\n    private _resizeDelays = 200;\n    private _domChangedObserver = new MutationObserver(() => {\n        if (this._display && this.focusElementSelector && !this._hasElements(this._getFocusElements())) {\n            // focus element does not exist anymore we close the walkthrough\n            this._close();\n        }\n    });\n\n    static walkthroughStop() {\n        if (WalkthroughComponent._walkthroughContainer) {\n            WalkthroughComponent._walkthroughContainer.instance.stop();\n        }\n    }\n\n    static walkthroughHasShow(): boolean {\n        return WalkthroughComponent._walkthroughContainer\n            ? WalkthroughComponent._walkthroughContainer.instance.show\n            : false;\n    }\n\n    static walkthroughHasPause(): boolean {\n        return WalkthroughComponent._walkthroughContainer\n            ? WalkthroughComponent._walkthroughContainer.instance.pause\n            : false;\n    }\n\n    static walkthroughContinue() {\n        if (WalkthroughComponent._walkthroughContainer && WalkthroughComponent._walkthroughContainer.instance.parent) {\n            const visible = WalkthroughComponent._walkthroughContainer.instance.parent._checkVisibility();\n            if (visible) {\n                WalkthroughComponent._walkthroughContainer.instance.continue();\n            } else {\n                // we can't open the walkthrough anymore, the focusElementSelector is no more visible\n                // so we update the flag \"ongoing\"\n                WalkthroughComponent._walkthroughContainer.instance.ongoing = false;\n            }\n        }\n    }\n\n    static walkthroughNext() {\n        if (WalkthroughComponent._walkthroughContainer) {\n            WalkthroughComponent._walkthroughContainer.instance.next();\n        }\n    }\n\n    static walkthroughPrevious() {\n        if (WalkthroughComponent._walkthroughContainer) {\n            WalkthroughComponent._walkthroughContainer.instance.previous();\n        }\n    }\n\n    constructor(\n        private _componentFactoryResolver: ComponentFactoryResolver,\n        private _applicationRef: ApplicationRef,\n        private _injector: Injector,\n        private _renderer: Renderer2,\n        private _walkthroughService: WalkthroughService,\n    ) {\n        this._onResize.pipe(debounceTime(this._resizeDelays)).subscribe(() => {\n            const instance = this._getInstance();\n            if (instance?.ongoing && this._display && !WalkthroughComponent._walkthroughContainer?.instance?.pause) {\n                this._elementLocations(!this._notScrollOnResize);\n                setTimeout(() => {\n                    this._elementLocations(!this._notScrollOnResize);\n                }, 200);\n            }\n        });\n    }\n\n    @HostListener('window:resize')\n    resize() {\n        this._onResize.next();\n    }\n\n    ngAfterViewInit() {\n        // init the Walkthrough element container\n        if (!WalkthroughComponent._walkthroughContainer && !WalkthroughComponent._walkthroughContainerCreating) {\n            WalkthroughComponent._walkthroughContainerCreating = true;\n            setTimeout(() => {\n                WalkthroughComponent._walkthroughContainer =\n                    this._appendComponentToBody<WalkthroughContainerComponent>(WalkthroughContainerComponent);\n                // Wait for the container's view to be initialized before notifying\n                WalkthroughComponent._walkthroughContainer.instance.viewReady.pipe(first()).subscribe(() => {\n                    this._onContainerInit.next();\n                });\n            });\n        }\n    }\n\n    ngOnDestroy() {\n        this._domChangedObserver.disconnect();\n    }\n\n    next(closedEvent?: EventEmitter<boolean>, finishedEvent?: EventEmitter<WalkthroughEvent>) {\n        if (closedEvent) {\n            this.closed = closedEvent;\n        }\n        if (finishedEvent) {\n            this.finished = finishedEvent;\n        }\n        this.open();\n    }\n\n    refresh() {\n        if (this._getInstance()) {\n            if (!this._getInstance().ongoing) {\n                WalkthroughComponent.onRefresh.next(this);\n                this._elementLocations();\n            } else {\n                console.warn(anotherWktOnGoing);\n            }\n        } else {\n            console.warn(noInstanceWarn);\n        }\n    }\n\n    open(): Promise<boolean> {\n        return new Promise<boolean>(resolve => {\n            if (this._checkVisibility()) {\n                if (this._getInstance()) {\n                    resolve(this._open());\n                } else {\n                    this._onContainerInit.pipe(first()).subscribe(() => {\n                        if (this._getInstance()) {\n                            resolve(this._open());\n                        } else {\n                            console.warn(noInstanceWarn);\n                            resolve(false);\n                        }\n                    });\n                }\n            } else {\n                resolve(false);\n            }\n        });\n    }\n\n    /**\n     * Do not use this method outside of the library\n     */\n    _loadPreviousStep() {\n        setTimeout(() => {\n            WalkthroughComponent.onNavigate.next({ previous: this, next: this.previousStep });\n            WalkthroughComponent.onNavigatePrevious.next({ previous: this, next: this.previousStep });\n            this.previousStep._next(this.closed, this.finished);\n        });\n    }\n\n    /**\n     * Do not use this method outside of the library\n     */\n    loadNextStep() {\n        setTimeout(() => {\n            WalkthroughComponent.onNavigate.next({ previous: this, next: this.nextStep });\n            WalkthroughComponent.onNavigateNext.next({ previous: this, next: this.nextStep });\n            this.nextStep._next(this.closed, this.finished);\n        });\n    }\n\n    /**\n     * Do not use this method outside of the library\n     */\n    _hide(finishLink = false, closeWalkthrough = true, triggerFinishIfEnd = true) {\n        this._display = false;\n\n        // add CSS to focusElement\n        if (this.focusElementCSSClass && this._focusElement) {\n            this._renderer.removeClass(this._focusElement, this.focusElementCSSClass);\n        }\n\n        if (closeWalkthrough) {\n            setTimeout(() => {\n                this._getInstance().ongoing = false;\n                WalkthroughComponent.onClose.next(this);\n\n                // emit closed event\n                this.closed.emit(finishLink);\n                if (!this.nextStep && triggerFinishIfEnd) {\n                    // emit finished event\n                    WalkthroughComponent.onFinish.next(this);\n                    this.finished.emit(new WalkthroughEvent(this, this._focusElement));\n                }\n            }, 20);\n        }\n    }\n\n    private _checkVisibility(): boolean {\n        if (this.focusElementSelector) {\n            const elements = document.querySelectorAll(this.focusElementSelector);\n            if (elements.length === 0) {\n                return false;\n            }\n            if (this.visibilityCallback) {\n                return this.visibilityCallback();\n            }\n            for (const el of <any>elements) {\n                if (el.offsetParent === null) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    private _open(): boolean {\n        if (!this._getInstance().ongoing) {\n            this._getInstance().ongoing = true;\n            WalkthroughComponent.onOpen.next(this);\n            this._elementLocations();\n            if (this.observerOptions) {\n                this._domChangedObserver.observe(document.body, this.observerOptions);\n            }\n            return true;\n        } else {\n            console.warn(anotherWktOnGoing);\n            return false;\n        }\n    }\n\n    private _show() {\n        this._display = true;\n    }\n\n    private _next(closedEvent?: EventEmitter<boolean>, finishedEvent?: EventEmitter<WalkthroughEvent>) {\n        if (closedEvent) {\n            this.closed = closedEvent;\n        }\n        if (finishedEvent) {\n            this.finished = finishedEvent;\n        }\n        const instance = this._getInstance();\n        if (instance && instance.ongoing) {\n            instance.ongoing = false;\n        }\n        this.open();\n    }\n\n    private _getInstance(): WalkthroughContainerComponent | null {\n        return WalkthroughComponent._walkthroughContainer ? WalkthroughComponent._walkthroughContainer.instance : null;\n    }\n\n    private _appendComponentToBody<T>(component: Type<T>): ComponentRef<T> {\n        // create a component reference\n        const componentRef = this._componentFactoryResolver.resolveComponentFactory(component).create(this._injector);\n\n        // attach component to the appRef so that so that it will be dirty checked.\n        this._applicationRef.attachView(componentRef.hostView);\n\n        // get DOM element from component\n        const domElem = (componentRef.hostView as EmbeddedViewRef<T>).rootNodes[0] as HTMLElement;\n\n        document.body.appendChild(domElem);\n\n        return componentRef;\n    }\n\n    private _attachWalkthroughContent<T>(\n        componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n        walkthroughContainer: WalkthroughContainerComponent,\n    ) {\n        if (componentOrTemplateRef instanceof TemplateRef) {\n            walkthroughContainer.attachTemplatePortal(new TemplatePortal<T>(componentOrTemplateRef, null!));\n        } else {\n            walkthroughContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef));\n        }\n    }\n\n    private _elementLocations(scroll = true): void {\n        this._getFocusElement();\n\n        const element = this._focusElement;\n        if (element) {\n            if (scroll) {\n                if (this.scrollOnTarget) {\n                    this._walkthroughService.scrollIntoViewIfOutOfView(element);\n                }\n\n                // if there is a root element defined (in some cases when position fixed is used, we need to scroll on it)\n                if (this.rootElement) {\n                    document.querySelector(this.rootElement)?.scrollIntoView(true);\n                }\n            }\n            this._offsetCoordinates = this._walkthroughService.retrieveCoordinates(element);\n\n            if (this.typeSelector === 'zone') {\n                const offsetEndCoordinatesEnd = this._walkthroughService.retrieveCoordinates(this._focusElementEnd);\n\n                this._offsetCoordinates.height =\n                    offsetEndCoordinatesEnd.top - this._offsetCoordinates.top + offsetEndCoordinatesEnd.height;\n                this._offsetCoordinates.width =\n                    offsetEndCoordinatesEnd.left - this._offsetCoordinates.left + offsetEndCoordinatesEnd.width;\n            }\n        } else {\n            this._offsetCoordinates = null;\n        }\n        this._setFocus(scroll);\n    }\n\n    private _close() {\n        setTimeout(() => this._getInstance().close(false, true, false), 50);\n    }\n\n    private _hasElements(elements: NodeListOf<HTMLElement> | null): boolean {\n        return elements !== null && elements.length > 0;\n    }\n\n    private _getFocusElements(): NodeListOf<HTMLElement> | null {\n        let focusElements: NodeListOf<HTMLElement> | null = null;\n        if (this.focusElementSelector) {\n            try {\n                focusElements = document.querySelectorAll(this.focusElementSelector) as NodeListOf<HTMLElement>;\n            } catch (error) {\n                console.error(\n                    `#${this.id}@focusElementSelector: '${this.focusElementSelector}' is not a valid selector.\\n`,\n                    error,\n                );\n            }\n        }\n        return focusElements;\n    }\n\n    private _getFocusElement() {\n        const focusElements: NodeListOf<HTMLElement> = this._getFocusElements();\n\n        // getting focus element\n        if (this._hasElements(focusElements)) {\n            if (focusElements.length > 1) {\n                // Multiple items fit selector, displaying first visible as focus item in 'element' mode\n\n                const l = focusElements.length;\n                for (let i = 0; i < l; i++) {\n                    // offsetHeight not of 0 means visible\n                    if (focusElements[i].offsetHeight) {\n                        this._focusElement = focusElements[i];\n                        i = focusElements.length;\n                        break;\n                    }\n                }\n\n                // if typeSelector is by zone, get also the last element\n                if (this.typeSelector === 'zone') {\n                    for (let i = l - 1; i >= 0; i--) {\n                        // offsetHeight not of 0 means visible\n                        if (focusElements[i].offsetHeight) {\n                            this._focusElementEnd = focusElements[i];\n                            i = focusElements.length;\n                            break;\n                        }\n                    }\n\n                    // this the zone this just a unique element, change mode for 'element'\n                    if (this._focusElement === this._focusElementEnd) {\n                        this.typeSelector = 'element';\n                    }\n                }\n            } else {\n                this._focusElement = focusElements[0];\n                this.typeSelector = 'element';\n            }\n        } else {\n            this._focusElement = null;\n        }\n    }\n\n    /**\n     * get instance, highlight the focused element et show the template\n     */\n    private _setFocus(scroll = true) {\n        const instance = this._getInstance();\n        if (instance) {\n            const scrollY = this._walkthroughService.getLeft();\n            this._initStylingTemplate(instance);\n            setTimeout(() => {\n                if (this._focusElement && instance.zone) {\n                    instance.marginZonePx = this._marginZonePx;\n                    instance.highlightZone(\n                        this._offsetCoordinates,\n                        scrollY - this._walkthroughService.getLeft(),\n                        this.animation,\n                        this.animationDelays,\n                        this._setFocusContinue.bind(this),\n                        scroll,\n                    );\n                } else {\n                    this._setFocusContinue(scroll);\n                }\n            }, 20);\n        }\n    }\n\n    private _setFocusContinue(scroll: boolean) {\n        const instance = this._getInstance();\n        if (!this._display) {\n            this._attachContentTemplate();\n            this._initContentTemplate(instance);\n        }\n        setTimeout(() => {\n            instance.highlightZoneStyling(this._focusElement);\n            this._updateElementPositions(instance, scroll);\n        });\n    }\n\n    private _updateElementPositions(instance: WalkthroughContainerComponent, scroll = true) {\n        if (WalkthroughComponent._walkthroughContainer && this._getInstance()) {\n            setTimeout(() => {\n                instance.contentBlockPosition(\n                    this._offsetCoordinates,\n                    this._alignContent,\n                    this._verticalAlignContent,\n                    this._contentSpacing,\n                    this._verticalContentSpacing,\n                );\n\n                if (this._offsetCoordinates && this._focusElement !== null && this._hasArrow) {\n                    instance.arrowPosition(this._offsetCoordinates);\n                }\n\n                // add CSS to focusElement\n                if (this.focusElementCSSClass && this._focusElement) {\n                    this._renderer.addClass(this._focusElement, this.focusElementCSSClass);\n                }\n\n                setTimeout(() => {\n                    this._getInstance().setHeight();\n\n                    if (!this._readyHasBeenEmitted) {\n                        this._readyHasBeenEmitted = true;\n                        this.ready.emit(new WalkthroughEvent(this, this._focusElement));\n                    }\n\n                    const contentBlockNative = instance.contentBlock.nativeElement as HTMLElement;\n                    let scrollPos;\n\n                    if (this._focusElement != null) {\n                        const coordinatesContent = this._walkthroughService.retrieveCoordinates(contentBlockNative);\n                        const coordinatesFocus = this._walkthroughService.retrieveCoordinates(this._focusElement);\n                        // is content + focus higher than window ?\n                        if (coordinatesContent.height + coordinatesFocus.height > window.innerHeight) {\n                            // we scroll on content\n                            if (scroll) {\n                                contentBlockNative.scrollIntoView(true);\n                            }\n                            // we offset the window half of the content height\n                            if (coordinatesContent.top > coordinatesFocus.top) {\n                                // content below focusZone\n                                scrollPos = -(coordinatesContent.height / 2);\n                            } else {\n                                // content above focusZone\n                                scrollPos = +(coordinatesContent.height / 2);\n                            }\n                        } else {\n                            // scroll on element higher minus minimal margin\n                            if (coordinatesContent.top > coordinatesFocus.top) {\n                                if (scroll) {\n                                    window.scrollTo(coordinatesFocus.left, coordinatesFocus.top);\n                                }\n                                scrollPos = -WalkthroughComponent.minimalMargin;\n                            } else {\n                                if (scroll) {\n                                    contentBlockNative.scrollIntoView(true);\n                                }\n                                scrollPos = -WalkthroughComponent.minimalMargin;\n                            }\n                        }\n                    } else {\n                        // no focus zone, scroll on content minus margin\n                        if (scroll) {\n                            contentBlockNative.scrollIntoView(true);\n                        }\n                        scrollPos = -WalkthroughComponent.minimalMargin;\n                    }\n\n                    if (\n                        !this._offsetCoordinates &&\n                        ['top', 'above', 'top-screen-center'].includes(this.verticalAlignContent)\n                    ) {\n                        window.scrollTo({ top: 0 });\n                    } else if (scroll) {\n                        window.scrollBy(0, scrollPos);\n                    }\n                }, 50);\n            }, 0);\n        }\n    }\n\n    /**\n     * Attache the template in the container, if a template is linked.\n     */\n    private _attachContentTemplate() {\n        if (this.contentTemplate) {\n            this._attachWalkthroughContent(this.contentTemplate, this._getInstance());\n        }\n    }\n\n    /**\n     * init a part of styles of the container\n     */\n    private _initStylingTemplate(instance: WalkthroughContainerComponent) {\n        const hasHighlightZone = this._focusElement !== null;\n\n        instance.parent = this;\n        instance.open();\n        instance.hasHighlightZone = hasHighlightZone;\n        instance.hasClickable = hasHighlightZone && typeof this.focusClick === 'function';\n        instance.hasHighlight = hasHighlightZone && this._hasHighlightAnimation;\n        instance.hasBackdrop = this._hasBackdrop;\n        instance.hasGlow = hasHighlightZone && this._hasGlow;\n    }\n\n    /**\n     * init all datas of the container\n     */\n    private _initContentTemplate(instance: WalkthroughContainerComponent) {\n        const hasHighlightZone = this._focusElement !== null;\n\n        instance.hasPrevious = this._hasPreviousStep(instance);\n        instance.hasNext = this._hasNextStep(instance);\n        instance.hasCloseButton = this._hasCloseButton;\n        instance.hasCloseAnywhere = this._hasCloseAnywhere;\n        instance.hasFinish = this._hasFinish || !instance.hasNext;\n        instance.hasArrow = hasHighlightZone && this._hasArrow;\n        instance.arrowColor = this.arrowColor;\n        instance.radius = this.radius;\n        instance.marginZone = this._marginZone ? this._marginZone.replace(/(\\d+)/g, '$1px') : null;\n        instance.marginZonePx = this._marginZonePx;\n        instance.contentText = this.contentText;\n        instance.contentStyle = this.contentStyle;\n        instance.text = this.texts ? { ...new WalkthroughText(), ...this.texts } : new WalkthroughText();\n        instance.hidePrevious = this._hidePrevious;\n        instance.hideNext = this._hideNext;\n        instance.hideNav = this._hideNav;\n\n        this._show();\n    }\n\n    /**\n     * check if there is a previous step enabled\n     */\n    private _hasPreviousStep(instance: WalkthroughContainerComponent): boolean {\n        if (instance.parent) {\n            let current = instance.parent.previousStep;\n            while (current) {\n                if (!current.disabled) {\n                    return true;\n                }\n                current = current.previousStep;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * check if there is a next step enabled\n     */\n    private _hasNextStep(instance: WalkthroughContainerComponent): boolean {\n        if (instance.parent) {\n            let current = instance.parent.nextStep;\n            while (current) {\n                if (!current.disabled) {\n                    return true;\n                }\n                current = current.nextStep;\n            }\n        }\n\n        return false;\n    }\n}\n","import { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ComponentRef,\n    ElementRef,\n    EmbeddedViewRef,\n    HostListener,\n    Renderer2,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { WalkthroughText } from './walkthrough-text';\nimport { WalkthroughElementCoordinate, WalkthroughMargin } from './walkthrough-tools';\nimport { WalkthroughComponent } from './walkthrough.component';\nimport { WalkthroughService } from './walkthrough.service';\n\nexport function throwWalkthroughContentAlreadyAttachedError() {\n    throw Error('Attempting to attach walkthrough content after content is already attached');\n}\n\nconst is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n@Component({\n    selector: 'walkthrough-container',\n    styleUrls: ['./walkthrough-container.component.scss'],\n    templateUrl: './walkthrough-container.component.html',\n    standalone: false,\n})\nexport class WalkthroughContainerComponent extends BasePortalOutlet implements AfterViewInit {\n    markerUrl = 'url(#wkt-arrow)';\n\n    /* if a walkthrough is ongoing (paused or not) */\n    ongoing = false;\n\n    private _show = false;\n    get show(): boolean {\n        return this._show;\n    }\n    set show(value: boolean) {\n        this._show = value;\n        this._updateHostClasses();\n    }\n\n    pause = false;\n\n    private _parent!: WalkthroughComponent;\n\n    get parent(): WalkthroughComponent {\n        return this._parent;\n    }\n\n    set parent(value: WalkthroughComponent) {\n        this._parent = value;\n        // Set id attribute imperatively to avoid NG0100\n        const newId = value ? value.id + '-container' : null;\n        if (newId) {\n            this._renderer.setAttribute(this._el.nativeElement, 'id', newId);\n        } else {\n            this._renderer.removeAttribute(this._el.nativeElement, 'id');\n        }\n    }\n\n    // Signal when view is ready\n    viewReady = new Subject<void>();\n    private _viewInitialized = false;\n\n    // highlight zone\n\n    private _hasHighlightZone = false;\n    get hasHighlightZone(): boolean {\n        return this._hasHighlightZone;\n    }\n    set hasHighlightZone(value: boolean) {\n        this._hasHighlightZone = value;\n        this._updateHostClasses();\n    }\n\n    hasHighlight = false;\n\n    private _hasBackdrop = false;\n    get hasBackdrop(): boolean {\n        return this._hasBackdrop;\n    }\n    set hasBackdrop(value: boolean) {\n        this._hasBackdrop = value;\n        this._updateHostClasses();\n    }\n\n    hasGlow = false;\n    hasClickable = false;\n    hideOther = false;\n\n    // navigate\n\n    hidePrevious = false;\n    hideNext = false;\n    hideNav = false;\n    hasPrevious = false;\n    hasNext = false;\n    hasFinish = false;\n    hasCloseButton = false;\n\n    private _hasCloseAnywhere = true;\n    get hasCloseAnywhere(): boolean {\n        return this._hasCloseAnywhere;\n    }\n    set hasCloseAnywhere(value: boolean) {\n        this._hasCloseAnywhere = value;\n        this._updateHostClasses();\n    }\n\n    // arrow\n\n    hasArrow = false;\n    arrowPath = '';\n    arrowMarkerDist = 7;\n\n    // styling\n\n    contentStyle = '';\n    radius = '';\n    arrowColor = '';\n    marginZone: string | null = null;\n    marginZonePx = new WalkthroughMargin();\n\n    // content\n\n    contentText = '';\n\n    // texts change / i18n\n\n    text = new WalkthroughText();\n\n    // elements\n\n    @ViewChild(CdkPortalOutlet) _portalHost!: CdkPortalOutlet;\n    @ViewChild('content') content!: TemplateRef<any>;\n    @ViewChild('contentBlock') contentBlock!: ElementRef;\n    @ViewChild('zone') zone!: ElementRef;\n\n    private _contentPosition: 'above' | 'top' | 'center' | 'bottom' | 'below' | 'top-screen-center' = 'above';\n    private _arrowPosition: 'topBottom' | 'leftRight' = 'topBottom';\n\n    constructor(\n        public viewContainerRef: ViewContainerRef,\n        private _walkthroughService: WalkthroughService,\n        private _renderer: Renderer2,\n        private _el: ElementRef,\n        private _cd: ChangeDetectorRef\n    ) {\n        super();\n        // Set initial host classes\n        this._renderer.addClass(this._el.nativeElement, 'hide');\n    }\n\n    ngAfterViewInit() {\n        this._viewInitialized = true;\n        this.viewReady.next();\n    }\n\n    /**\n     * Update host element classes imperatively to avoid NG0100 errors.\n     * These classes were previously managed via @HostBinding but that causes\n     * ExpressionChangedAfterItHasBeenCheckedError when values change mid-cycle.\n     */\n    private _updateHostClasses(): void {\n        const el = this._el.nativeElement;\n        // hide class: applied when not showing\n        if (!this._show) {\n            this._renderer.addClass(el, 'hide');\n        } else {\n            this._renderer.removeClass(el, 'hide');\n        }\n        // cursor class: applied when closeAnywhere is enabled\n        if (this._hasCloseAnywhere) {\n            this._renderer.addClass(el, 'cursor');\n        } else {\n            this._renderer.removeClass(el, 'cursor');\n        }\n        // backdrop class: applied when no highlight zone but backdrop is enabled\n        if (!this._hasHighlightZone && this._hasBackdrop) {\n            this._renderer.addClass(el, 'backdrop');\n        } else {\n            this._renderer.removeClass(el, 'backdrop');\n        }\n        this._cd.markForCheck();\n    }\n\n    @HostListener('click')\n    click() {\n        if (this.hasCloseAnywhere && this.show) {\n            this.close();\n        }\n    }\n\n    clickZone(event: Event) {\n        if (this.parent && this.hasClickable) {\n            this.parent.focusClick(event, this);\n        }\n    }\n\n    /**\n     * Attach a ComponentPortal as content to this walkthrough container.\n     * @param portal Portal to be attached as the walkthrough content.\n     */\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n        if (!this._portalHost) {\n            throw Error('Portal host not initialized');\n        }\n        if (this._portalHost.hasAttached()) {\n            throwWalkthroughContentAlreadyAttachedError();\n        }\n\n        // this._savePreviouslyFocusedElement();\n        return this._portalHost.attachComponentPortal(portal);\n    }\n\n    /**\n     * Attach a TemplatePortal as content to this walkthrough container.\n     * @param portal Portal to be attached as the walkthrough content.\n     */\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n        if (!this._portalHost) {\n            throw Error('Portal host not initialized');\n        }\n        if (this._portalHost.hasAttached()) {\n            throwWalkthroughContentAlreadyAttachedError();\n        }\n\n        // this._savePreviouslyFocusedElement();\n        return this._portalHost.attachTemplatePortal(portal);\n    }\n\n    setHeight(): void {\n        this._renderer.setStyle(this._el.nativeElement, 'height', this._walkthroughService.getDocumentHeight() + 'px');\n    }\n\n    highlightZone(\n        coordinate: WalkthroughElementCoordinate,\n        scrollDiff: number,\n        animation: 'none' | 'linear',\n        animationDelays: number,\n        continueFunction: (scroll: boolean) => void,\n        scroll: boolean,\n    ) {\n        const element = this.zone.nativeElement as HTMLElement;\n        const zoneStyle = element.style;\n        const style = window.getComputedStyle(element, null);\n\n        if (animation === 'linear' && animationDelays > 0 && style.left !== 'auto') {\n            this.hideOther = true;\n            const fragment = 20;\n            const intervale = animationDelays / fragment;\n            const left = parseInt(style.left, 10);\n            const top = scrollDiff + parseInt(style.top, 10);\n            const width = parseInt(style.width, 10);\n            const height = parseInt(style.height, 10);\n            const partLeft = (coordinate.left - left) / fragment;\n            const partTop = (coordinate.top - top) / fragment;\n            const partWidth = (coordinate.width - width) / fragment;\n            const partHeight = (coordinate.height - height) / fragment;\n            let count = 0;\n\n            this.show = true;\n            zoneStyle.borderRadius = '50%';\n            const timer = setInterval(() => {\n                zoneStyle.left = left + partLeft * count + 'px';\n                zoneStyle.top = top + partTop * count + 'px';\n                zoneStyle.width = width + partWidth * count + 'px';\n                zoneStyle.height = height + partHeight * count + 'px';\n                if (count++ >= fragment) {\n                    clearInterval(timer);\n                    this.hideOther = false;\n                    continueFunction(scroll);\n                }\n            }, intervale);\n        } else {\n            zoneStyle.left = coordinate.left - (this.marginZonePx?.left ?? 0) + 'px';\n            zoneStyle.top = coordinate.top - (this.marginZonePx?.top ?? 0) + 'px';\n            zoneStyle.width = coordinate.width + 'px';\n            zoneStyle.height = coordinate.height + 'px';\n\n            continueFunction(scroll);\n        }\n    }\n\n    highlightZoneStyling(element: HTMLElement) {\n        if (element) {\n            const zoneStyle = (this.zone.nativeElement as HTMLElement).style;\n            if (this.radius) {\n                if (Number(this.radius) === parseFloat(this.radius)) {\n                    // if is numeric, change in %\n                    zoneStyle.borderRadius = this.radius + '%';\n                } else if (this.radius === 'auto') {\n                    // if mode auto\n                    const elementStyle = window.getComputedStyle(element, null);\n                    // borderRadius work only on Chrome, use TopLeft, TopRight... for Firefox/Egde/IE\n                    zoneStyle.borderTopLeftRadius = elementStyle.borderTopLeftRadius;\n                    zoneStyle.borderTopRightRadius = elementStyle.borderTopRightRadius;\n                    zoneStyle.borderBottomLeftRadius = elementStyle.borderBottomLeftRadius;\n                    zoneStyle.borderBottomRightRadius = elementStyle.borderBottomRightRadius;\n                } else {\n                    // if is numeric, change in %\n                    zoneStyle.borderRadius = this.radius;\n                }\n            } else {\n                zoneStyle.borderRadius = '';\n            }\n        }\n    }\n\n    contentBlockPosition(\n        paramCoordinate: WalkthroughElementCoordinate,\n        alignContent: 'left' | 'center' | 'right' | 'content',\n        verticalAlignContent: 'above' | 'top' | 'center' | 'bottom' | 'below' | 'top-screen-center',\n        contentSpacing: number,\n        verticalContentSpacing: number,\n    ) {\n        const element = this.contentBlock.nativeElement as HTMLElement;\n\n        const elementSize = this._walkthroughService.retrieveCoordinates(element);\n        const width = elementSize.width + elementSize.margin.left + elementSize.margin.right;\n        const height = elementSize.height + elementSize.margin.top + elementSize.margin.bottom;\n\n        const coordinate = paramCoordinate ? JSON.parse(JSON.stringify(paramCoordinate)) : {};\n        coordinate.top -= this.marginZonePx?.top ?? 0;\n        coordinate.left -= this.marginZonePx?.left ?? 0;\n        coordinate.width += (this.marginZonePx?.left ?? 0) + (this.marginZonePx?.right ?? 0);\n        coordinate.height += (this.marginZonePx?.top ?? 0) + (this.marginZonePx?.bottom ?? 0);\n\n        // check if we've got the space to respect the alignContent attribute\n        let notEnoughSpace = false;\n        if (this.hasHighlightZone) {\n            const spaceLeft = coordinate.left;\n            const spaceRight = window.innerWidth - coordinate.left - coordinate.width;\n            if (spaceLeft < width && spaceRight < width) {\n                notEnoughSpace = true;\n            }\n            // if not enough space to respect the alignContent, content goes above/below\n            if (\n                (verticalAlignContent === 'top' ||\n                    verticalAlignContent === 'center' ||\n                    verticalAlignContent === 'bottom') &&\n                !notEnoughSpace\n            ) {\n                // change align center to left or right if not enough space to align center\n                if (alignContent === 'center' || alignContent === 'content') {\n                    const maxSpace = Math.max(spaceRight, spaceLeft);\n                    if (maxSpace < width + (window.innerWidth - width) / 2) {\n                        alignContent = spaceRight > spaceLeft ? 'right' : 'left';\n                    }\n                } else if (\n                    (alignContent === 'left' && spaceLeft < width) ||\n                    (alignContent === 'right' && spaceRight < width)\n                ) {\n                    verticalAlignContent =\n                        verticalAlignContent === 'bottom' || coordinate.top < height ? 'below' : 'above';\n                }\n            }\n        }\n\n        // if not enough space on screen width, we center the content\n        if (notEnoughSpace) {\n            alignContent = 'center';\n        }\n\n        // position of content left/center/right\n        element.style.right = '';\n        element.style.left = '';\n        if (alignContent === 'left') {\n            element.style.left = '0';\n            if (this.hasHighlightZone) {\n                const space = coordinate.left - width;\n                // handle contentSpacing\n                if (contentSpacing && space > contentSpacing) {\n                    element.style.left = coordinate.left - width - contentSpacing + 'px';\n                }\n            }\n        } else if (alignContent === 'center') {\n            element.style.left = window.innerWidth / 2 - width / 2 + 'px';\n            console.log(element.style.left);\n        } else if (alignContent === 'content') {\n            element.style.left = coordinate.left + coordinate.width / 2 - width / 2 + 'px';\n        } else if (alignContent === 'right') {\n            element.style.right = '0';\n            if (this.hasHighlightZone) {\n                const space = window.innerWidth - coordinate.left - coordinate.width - width;\n                // handle contentSpacing\n                if (contentSpacing && space > contentSpacing) {\n                    element.style.right = '';\n                    element.style.left = coordinate.left + coordinate.width + contentSpacing + 'px';\n                }\n            }\n        }\n\n        if (this.hasHighlightZone) {\n            // for arrow position\n            const startLeft = this._walkthroughService.retrieveCoordinates(element).left + width / 2;\n\n            this._arrowPosition =\n                startLeft > coordinate.left - WalkthroughComponent.minimalMargin &&\n                startLeft < coordinate.left + coordinate.width + WalkthroughComponent.minimalMargin\n                    ? 'topBottom'\n                    : 'leftRight';\n\n            // if there is enough place on the left or on the right, we consider verticalAlignContent, otherwise, we ignore it\n            if (verticalAlignContent && !notEnoughSpace) {\n                let space = 0;\n                this._contentPosition = verticalAlignContent;\n                switch (verticalAlignContent) {\n                    case 'above':\n                        space = coordinate.top;\n                        if (space > verticalContentSpacing) {\n                            element.style.top = coordinate.top - height - verticalContentSpacing + 'px';\n                        } else {\n                            element.style.top = '0';\n                        }\n                        this._arrowPosition = 'topBottom';\n                        break;\n                    case 'top':\n                        element.style.top = coordinate.top + 'px';\n                        break;\n                    case 'center':\n                        element.style.top = coordinate.top + coordinate.height / 2 - height / 2 + 'px';\n                        break;\n                    case 'bottom':\n                        element.style.top = coordinate.top + coordinate.height - height + 'px';\n                        break;\n                    case 'below':\n                        element.style.top =\n                            this._walkthroughService.getDocumentHeight() -\n                                coordinate.top +\n                                coordinate.height +\n                                verticalContentSpacing >\n                            height\n                                ? coordinate.top + coordinate.height + verticalContentSpacing + 'px'\n                                : this._walkthroughService.getDocumentHeight() - height + 'px';\n                        this._arrowPosition = 'topBottom';\n                        break;\n                }\n            } else {\n                // position of content top/bottom\n                if (verticalAlignContent === 'below' || coordinate.top < height) {\n                    element.style.top = coordinate.top + coordinate.height + WalkthroughComponent.minimalMargin + 'px';\n                    this._contentPosition = 'below';\n                } else {\n                    element.style.top = coordinate.top - height - WalkthroughComponent.minimalMargin + 'px';\n                    this._contentPosition = 'above';\n                }\n            }\n        } else {\n            switch (verticalAlignContent) {\n                case 'above':\n                case 'top':\n                    element.style.top = contentSpacing + 'px';\n                    break;\n                case 'top-screen-center':\n                    element.style.top = this._walkthroughService.getHeightOfPage() / 2 - height / 2 + 'px';\n                    break;\n                case 'center':\n                    element.style.top = this._walkthroughService.getDocumentHeight() / 2 - height / 2 + 'px';\n                    break;\n                case 'below':\n                case 'bottom':\n                    element.style.top = this._walkthroughService.getDocumentHeight() - height - contentSpacing + 'px';\n                    break;\n            }\n        }\n    }\n\n    arrowPosition(coordinate: WalkthroughElementCoordinate) {\n        const contentBlockElement = this.contentBlock.nativeElement as HTMLElement;\n        const contentBlockCoordinates = this._walkthroughService.retrieveCoordinates(contentBlockElement);\n\n        const realWidth = coordinate.width + (this.marginZonePx?.left ?? 0) + (this.marginZonePx?.right ?? 0);\n        const realHeight = coordinate.height + (this.marginZonePx?.top ?? 0) + (this.marginZonePx?.bottom ?? 0);\n\n        // start point of the arrow (tail)\n        let startLeft = contentBlockCoordinates.left + contentBlockCoordinates.width / 2;\n        let startTop = contentBlockCoordinates.top + contentBlockCoordinates.height;\n\n        // start point of the curve of the arrow\n        let centerTop: number;\n        let centerLeft: number;\n\n        // end point of the arrow (head)\n        let endLeft = coordinate.left - (this.marginZonePx?.left ?? 0);\n        let endTop = coordinate.top - this.marginZonePx.top;\n\n        switch (this._contentPosition) {\n            case 'top':\n            case 'center':\n            case 'bottom':\n                if (contentBlockCoordinates.left > coordinate.left) {\n                    startLeft = contentBlockCoordinates.left;\n                } else {\n                    startLeft = contentBlockCoordinates.left + contentBlockCoordinates.width;\n                }\n                startTop -= contentBlockCoordinates.height / 2;\n                break;\n            case 'below':\n                startTop -= contentBlockCoordinates.height;\n                break;\n        }\n\n        if (this._arrowPosition === 'topBottom') {\n            endLeft += realWidth / 2;\n\n            if (this._contentPosition === 'below') {\n                endTop += realHeight + 6;\n            } else {\n                endTop -= 6;\n            }\n\n            centerLeft = (startLeft + endLeft) / 2;\n            centerTop = (startTop + endTop) / 2;\n\n            // we make the curve start nearer the tail of the arrow\n            if (startTop < centerTop) {\n                centerTop = centerTop - Math.abs(startTop - centerTop) / 2;\n            } else {\n                centerTop = centerTop + Math.abs(startTop - centerTop) / 2;\n            }\n\n            this.arrowPath =\n                `M${startLeft},${startTop} Q${startLeft},${centerTop} ${centerLeft},${centerTop} ` +\n                `Q${endLeft},${centerTop} ${endLeft},${endTop}`;\n        } else {\n            if (startLeft > coordinate.left) {\n                endLeft += realWidth + this.arrowMarkerDist;\n            } else {\n                endLeft -= this.arrowMarkerDist;\n            }\n\n            endTop += realHeight / 2;\n\n            centerLeft = (startLeft + endLeft) / 2;\n            centerTop = (startTop + endTop) / 2;\n\n            // we make the curve start nearer the tail of the arrow\n            if (startLeft < centerLeft) {\n                centerLeft = centerLeft - Math.abs(startLeft - centerLeft) / 2;\n            } else {\n                centerLeft = centerLeft + Math.abs(startLeft - centerLeft) / 2;\n            }\n\n            let directStartLeft: number = startLeft;\n            let directStartTop: number = startTop;\n            if (this._contentPosition === 'top' || this._contentPosition === 'bottom') {\n                directStartLeft = contentBlockCoordinates.left + contentBlockCoordinates.width / 2;\n                directStartTop =\n                    this._contentPosition === 'top'\n                        ? contentBlockCoordinates.top + contentBlockCoordinates.height\n                        : contentBlockCoordinates.top;\n\n                // we use direct curve only if the arrow don't cross the content, otherwise, we use double curved\n                if (\n                    (this._contentPosition === 'top' && directStartTop < endTop - WalkthroughComponent.minimalMargin) ||\n                    (this._contentPosition === 'bottom' && directStartTop > endTop + WalkthroughComponent.minimalMargin)\n                ) {\n                    this.arrowPath = `M${directStartLeft},${directStartTop} Q${directStartLeft},${endTop} ${endLeft},${endTop}`;\n                } else {\n                    this.arrowPath =\n                        `M${startLeft},${startTop} Q${centerLeft},${startTop} ${centerLeft},${centerTop} ` +\n                        `Q${centerLeft},${endTop} ${endLeft},${endTop}`;\n                }\n            } else {\n                this.arrowPath = `M${directStartLeft},${directStartTop} Q${directStartLeft},${endTop} ${endLeft},${endTop}`;\n            }\n        }\n    }\n\n    /**\n     * stop the walkthrough : hide the container and change to pause at true\n     */\n    stop() {\n        if (this.parent && !this.pause && this.show) {\n            this.show = false;\n            this.pause = true;\n        }\n    }\n\n    /**\n     * continue the walkthrough if is stopped : show the container and change to pause at false\n     */\n    continue() {\n        if (this.parent && this.pause) {\n            this.show = true;\n            this.pause = false;\n            this.parent.refresh();\n        }\n    }\n\n    open() {\n        // change markerUrl on Safari\n        // related to\n        // https://gist.github.com/leonderijke/c5cf7c5b2e424c0061d2\n        // http://stackoverflow.com/a/18265336/796152\n        // http://www.w3.org/TR/SVG/linking.html\n        if (is_safari) {\n            this.markerUrl = 'url(' + window.location.href + '#wkt-arrow)';\n        }\n        this.show = true;\n    }\n\n    previous() {\n        this.close(false, false);\n\n        // we check if previous walkthrough is not disabled\n        let current = this.parent;\n        while (current) {\n            if (current.previousStep && !current.previousStep.disabled) {\n                current._loadPreviousStep();\n                return;\n            } else {\n                if (!current.previousStep) {\n                    break;\n                }\n                current = current.previousStep;\n            }\n        }\n        // no more previous walkthrough enabled, we quit the walkthrough\n        this.parent = current;\n        this.close(true, true);\n    }\n\n    next() {\n        this.close(false, false);\n\n        // we check if next walkthrough is not disabled\n        let current = this.parent;\n        while (current) {\n            if (current.nextStep && !current.nextStep.disabled) {\n                current.loadNextStep();\n                return;\n            } else {\n                if (!current.nextStep) {\n                    break;\n                }\n                current = current.nextStep;\n            }\n        }\n        // no more next walkthrough enabled, we quit the walkthrough\n        this.parent = current;\n        this.close(true, true);\n    }\n\n    close(finishLink = false, closeWalkthrough = true, triggerFinishIfEnd = true) {\n        // remove content\n        if (this._portalHost) {\n            this._portalHost.dispose();\n        }\n        // hide\n        this.show = false;\n        if (this.parent) {\n            this.parent._hide(finishLink, closeWalkthrough, triggerFinishIfEnd);\n        }\n    }\n}\n","<div class=\"wkt-container\">\n    <div\n        class=\"wkt-zone\"\n        #zone\n        (click)=\"clickZone($event)\"\n        [class.hide]=\"!hasHighlightZone\"\n        [class.backdrop]=\"hasBackdrop\"\n        [class.glow]=\"hasGlow\"\n        [class.clickable]=\"hasClickable\"\n        [class.highlight]=\"hasHighlight\"\n        [style.padding]=\"marginZone\"\n    ></div>\n    <div class=\"wkt-content-block\" [class.hide]=\"hideOther\" [class.darken]=\"contentStyle === 'darken'\" #contentBlock>\n        @if (hasCloseButton) {\n            <button type=\"button\" class=\"wkt-close\" (click)=\"close()\">✖</button>\n        }\n        <div class=\"wkt-content\">\n            @if (contentText) {\n                <p>{{ contentText }}</p>\n            }\n            <ng-template cdkPortalOutlet></ng-template>\n        </div>\n        @if (!hideNav && ((hasPrevious && !hidePrevious) || (hasNext && !hideNext) || hasFinish)) {\n            <div class=\"wkt-navigate\">\n                @if (hasPrevious && !hidePrevious) {\n                    <button type=\"button\" class=\"wkt-previous-link\" (click)=\"previous()\">\n                        {{ text.previous }}\n                    </button>\n                }\n                @if (hasNext && !hideNext) {\n                    <button type=\"button\" class=\"wkt-next-link\" (click)=\"next()\">\n                        {{ text.next }}\n                    </button>\n                }\n                @if (hasFinish) {\n                    <button type=\"button\" class=\"wkt-finish-link\" (click)=\"close(true)\">\n                        {{ text.close }}\n                    </button>\n                }\n            </div>\n        }\n    </div>\n    @if (hasArrow) {\n        <div [class.hide]=\"hideOther\">\n            <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\">\n                <defs>\n                    <marker\n                        id=\"wkt-arrow\"\n                        viewBox=\"0 0 10 10\"\n                        refX=\"8\"\n                        refY=\"5\"\n                        markerUnits=\"strokeWidth\"\n                        orient=\"auto\"\n                        markerWidth=\"10\"\n                        markerHeight=\"10\"\n                    >\n                        <polyline points=\"0,0 10,5 0,10 5,5\" stroke-width=\"0\" [attr.fill]=\"arrowColor || '#FFF'\" />\n                    </marker>\n                </defs>\n                <path\n                    class=\"wkt-arrow-path\"\n                    [attr.d]=\"arrowPath\"\n                    [attr.stroke]=\"arrowColor || '#FFF'\"\n                    [attr.marker-end]=\"markerUrl\"\n                />\n            </svg>\n        </div>\n    }\n</div>\n","import {\n    AfterViewInit,\n    Component,\n    ContentChildren,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnChanges,\n    Output,\n    QueryList,\n    SimpleChanges,\n} from '@angular/core';\n\nimport { WalkthroughTextI } from './walkthrough-text';\nimport { booleanValue, WalkthroughEvent } from './walkthrough-tools';\nimport { WalkthroughComponent } from './walkthrough.component';\n\nlet nextUniqueId = 0;\n\n@Component({\n    selector: 'ng-walkthrough-flow',\n    template: '',\n    standalone: false,\n})\nexport class WalkthroughFlowComponent implements AfterViewInit, OnChanges {\n    @ContentChildren(WalkthroughComponent) walkthroughComponents!: QueryList<WalkthroughComponent>;\n\n    @HostBinding('attr.id')\n    @Input()\n    get id() {\n        return this._id;\n    }\n    set id(value: string) {\n        this._id = value || this._uid;\n    }\n\n    @Output() closed: EventEmitter<boolean> = new EventEmitter<boolean>();\n    @Output() finished: EventEmitter<WalkthroughEvent> = new EventEmitter();\n    @Input() contentStyle: 'none' | 'darken' = 'darken';\n\n    @Input() arrowColor = '';\n    @Input() marginZone: string | null = null;\n    @Input() showArrow: string | boolean = false;\n\n    @Input() rootElement = '';\n\n    @Input() closeButton: string | boolean = false;\n    @Input() closeAnywhere: string | boolean = true;\n    @Input() finishButton: string | boolean = false;\n    @Input() hidePrevious: string | boolean = false;\n\n    @Input() focusBackdrop: string | boolean = false;\n    @Input() focusGlow: string | boolean = false;\n    @Input() radius = '';\n\n    @Input() notScrollOnResize: string | boolean = false;\n\n    @Input() texts!: WalkthroughTextI;\n\n    @Input() observerOptions: MutationObserverInit = { attributes: false, childList: true, subtree: true };\n\n    private _id = '';\n    private _uid = `walkthrough-flow-${nextUniqueId++}`;\n\n    ngAfterViewInit() {\n        setTimeout(() => {\n            this.init();\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (this.walkthroughComponents && changes) {\n            for (const option in changes) {\n                if (changes[option] && option !== 'id') {\n                    this.walkthroughComponents.forEach((walkthrough: WalkthroughComponent) => {\n                        (walkthrough as any)[option] = changes[option].currentValue;\n                    });\n                }\n            }\n        }\n    }\n\n    init() {\n        let prevComp: WalkthroughComponent | null = null;\n        this.walkthroughComponents.forEach((walkthrough: WalkthroughComponent) => {\n            // navigation auto (ignore previousStep/nextStep on the WalkthroughComponent)\n\n            if (prevComp) {\n                walkthrough.previousStep = prevComp;\n                prevComp.nextStep = walkthrough;\n            }\n            prevComp = walkthrough;\n\n            // transmission (only if different from default)\n\n            if (this.closed) {\n                walkthrough.closed = this.closed;\n            }\n            if (this.finished) {\n                walkthrough.finished = this.finished;\n            }\n            if (!walkthrough.contentStyle && this.contentStyle) {\n                walkthrough.contentStyle = this.contentStyle;\n            }\n            if (!walkthrough.arrowColor && this.arrowColor) {\n                walkthrough.arrowColor = this.arrowColor;\n            }\n            if (!walkthrough.marginZone && this.marginZone) {\n                walkthrough.marginZone = this.marginZone;\n            }\n            if (!walkthrough.showArrow && booleanValue(this.showArrow)) {\n                walkthrough.showArrow = this.showArrow;\n            }\n            if (!walkthrough.rootElement && this.rootElement) {\n                walkthrough.rootElement = this.rootElement;\n            }\n            if (!walkthrough.closeButton && booleanValue(this.closeButton)) {\n                walkthrough.closeButton = this.closeButton;\n            }\n            if (walkthrough.closeAnywhere && !booleanValue(this.closeAnywhere)) {\n                walkthrough.closeAnywhere = this.closeAnywhere;\n            }\n            if (!walkthrough.finishButton && booleanValue(this.finishButton)) {\n                walkthrough.finishButton = this.finishButton;\n            }\n            if (!walkthrough.hidePrevious && booleanValue(this.hidePrevious)) {\n                walkthrough.hidePrevious = this.hidePrevious;\n            }\n            if (!walkthrough.focusBackdrop && booleanValue(this.focusBackdrop)) {\n                walkthrough.focusBackdrop = this.focusBackdrop;\n            }\n            if (!walkthrough.focusGlow && booleanValue(this.focusGlow)) {\n                walkthrough.focusGlow = this.focusGlow;\n            }\n            if (!walkthrough.notScrollOnResize && booleanValue(this.notScrollOnResize)) {\n                walkthrough.notScrollOnResize = this.notScrollOnResize;\n            }\n            if (!walkthrough.radius && this.radius) {\n                walkthrough.radius = this.radius;\n            }\n            if (!walkthrough.texts && this.texts) {\n                walkthrough.texts = this.texts;\n            }\n            if (!walkthrough.observerOptions && this.observerOptions) {\n                walkthrough.observerOptions = this.observerOptions;\n            }\n        });\n        // navigation auto (close on last step)\n        if (prevComp) {\n            prevComp.finishButton = true;\n        }\n    }\n\n    start() {\n        this.walkthroughComponents.first.open();\n    }\n}\n","import { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { WalkthroughContainerComponent } from './walkthrough-container.component';\nimport { WalkthroughFlowComponent } from './walkthrough-flow.component';\nimport { WalkthroughComponent } from './walkthrough.component';\nimport { WalkthroughService } from './walkthrough.service';\n\n@NgModule({\n    imports: [CommonModule, PortalModule],\n    declarations: [WalkthroughFlowComponent, WalkthroughComponent, WalkthroughContainerComponent],\n    exports: [WalkthroughFlowComponent, WalkthroughComponent, WalkthroughContainerComponent],\n    providers: [WalkthroughService],\n})\nexport class WalkthroughModule {}\n","/*\n * Public API Surface of angular-walkthrough\n */\n\nexport * from './lib/walkthrough-container.component';\nexport * from './lib/walkthrough-flow.component';\nexport * from './lib/walkthrough-text';\nexport * from './lib/walkthrough-tools';\nexport * from './lib/walkthrough.component';\nexport * from './lib/walkthrough.service';\nexport * from './lib/angular-walkthrough.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["nextUniqueId","i1.WalkthroughService"],"mappings":"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"}