{"version":3,"file":"ngx-joyride.mjs","sources":["../../../projects/ngx-joyride/src/lib/models/joyride-step.class.ts","../../../projects/ngx-joyride/src/lib/models/joyride-error.class.ts","../../../projects/ngx-joyride/src/lib/services/joyride-options.service.ts","../../../projects/ngx-joyride/src/lib/services/logger.service.ts","../../../projects/ngx-joyride/src/lib/services/joyride-steps-container.service.ts","../../../projects/ngx-joyride/src/lib/services/dom.service.ts","../../../projects/ngx-joyride/src/lib/services/templates.service.ts","../../../projects/ngx-joyride/src/lib/directives/joyride.directive.ts","../../../projects/ngx-joyride/src/lib/models/joyride-step-info.class.ts","../../../projects/ngx-joyride/src/lib/services/document.service.ts","../../../projects/ngx-joyride/src/lib/services/joyride-backdrop.service.ts","../../../projects/ngx-joyride/src/lib/services/event-listener.service.ts","../../../projects/ngx-joyride/src/lib/components/arrow/arrow.component.ts","../../../projects/ngx-joyride/src/lib/components/arrow/arrow.component.html","../../../projects/ngx-joyride/src/lib/components/close-button/close-button.component.ts","../../../projects/ngx-joyride/src/lib/components/button/button.component.ts","../../../projects/ngx-joyride/src/lib/components/button/button.component.html","../../../projects/ngx-joyride/src/lib/components/step/joyride-step.component.ts","../../../projects/ngx-joyride/src/lib/components/step/joyride-step.component.html","../../../projects/ngx-joyride/src/lib/services/step-drawer.service.ts","../../../projects/ngx-joyride/src/lib/services/joyride-step.service.ts","../../../projects/ngx-joyride/src/lib/services/joyride.service.ts","../../../projects/ngx-joyride/src/lib/joyride.module.ts","../../../projects/ngx-joyride/src/public-api.ts","../../../projects/ngx-joyride/src/ngx-joyride.ts"],"sourcesContent":["import { ViewContainerRef, TemplateRef, EventEmitter } from '@angular/core';\nimport { JoyrideStepComponent } from '../components/step/joyride-step.component';\nimport { ReplaySubject } from 'rxjs';\n\nexport class JoyrideStep {\n    constructor() {\n        this.title = new ReplaySubject<string>();\n        this.text = new ReplaySubject<string>();\n    }\n    name: string;\n    route: string;\n    position: string;\n    title: ReplaySubject<string>;\n    text: ReplaySubject<string>;\n    stepContent: TemplateRef<any>;\n    stepContentParams: Object;\n    nextClicked: EventEmitter<any>;\n    prevCliked: EventEmitter<any>;\n    tourDone: EventEmitter<any>;\n    transformCssStyle: string;\n    isElementOrAncestorFixed: boolean;\n    targetViewContainer: ViewContainerRef;\n    stepInstance: JoyrideStepComponent;\n}\n","export class JoyrideError extends Error {\n    constructor(message: string) {\n        super(message);\n        Object.setPrototypeOf(this, JoyrideError.prototype);\n    }\n}\n\nexport class JoyrideStepDoesNotExist extends Error {\n    constructor(message: string) {\n        super(message);\n        Object.setPrototypeOf(this, JoyrideStepDoesNotExist.prototype);\n    }\n}\n\nexport class JoyrideStepOutOfRange extends Error {\n    constructor(message: string) {\n        super(message);\n        Object.setPrototypeOf(this, JoyrideStepOutOfRange.prototype);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    JoyrideOptions,\n    CustomTexts,\n    ICustomTexts\n} from '../models/joyride-options.class';\nimport { of, Observable } from 'rxjs';\n\nexport const DEFAULT_THEME_COLOR = '#3b5560';\nexport const STEP_DEFAULT_POSITION = 'bottom';\nexport const DEFAULT_TIMEOUT_BETWEEN_STEPS = 1;\n\nexport class ObservableCustomTexts implements ICustomTexts {\n    prev: Observable<string>;\n    next: Observable<string>;\n    done: Observable<string>;\n    close: Observable<string>;\n}\nexport const DEFAULT_TEXTS: ObservableCustomTexts = {\n    prev: of('prev'),\n    next: of('next'),\n    done: of('done'),\n    close: of(null)\n};\n\nexport interface IJoyrideOptionsService {\n    setOptions(options: JoyrideOptions): void;\n    getBackdropColor(): string;\n    getThemeColor(): string;\n    getStepDefaultPosition();\n    getStepsOrder(): string[];\n    getFirstStep(): string;\n    getWaitingTime(): number;\n    areLogsEnabled(): boolean;\n    isCounterVisible(): boolean;\n    isPrevButtonVisible(): boolean;\n    getCustomTexts(): ObservableCustomTexts;\n}\n\n@Injectable()\nexport class JoyrideOptionsService implements IJoyrideOptionsService {\n    private themeColor: string = DEFAULT_THEME_COLOR;\n    private stepDefaultPosition: string = STEP_DEFAULT_POSITION;\n    private logsEnabled = false;\n    private showCounter = true;\n    private showPrevButton = true;\n    private stepsOrder: string[] = [];\n    private firstStep: string;\n    private waitingTime: number;\n    private customTexts: ObservableCustomTexts;\n\n    setOptions(options: JoyrideOptions) {\n        this.stepsOrder = options.steps;\n        this.stepDefaultPosition = options.stepDefaultPosition\n            ? options.stepDefaultPosition\n            : this.stepDefaultPosition;\n        this.logsEnabled =\n            typeof options.logsEnabled !== 'undefined'\n                ? options.logsEnabled\n                : this.logsEnabled;\n        this.showCounter =\n            typeof options.showCounter !== 'undefined'\n                ? options.showCounter\n                : this.showCounter;\n        this.showPrevButton =\n            typeof options.showPrevButton !== 'undefined'\n                ? options.showPrevButton\n                : this.showPrevButton;\n        this.themeColor = options.themeColor\n            ? options.themeColor\n            : this.themeColor;\n        this.firstStep = options.startWith;\n        this.waitingTime =\n            typeof options.waitingTime !== 'undefined'\n                ? options.waitingTime\n                : DEFAULT_TIMEOUT_BETWEEN_STEPS;\n        typeof options.customTexts !== 'undefined'\n            ? this.setCustomText(options.customTexts)\n            : this.setCustomText(DEFAULT_TEXTS);\n    }\n\n    getBackdropColor() {\n        return this.hexToRgb(this.themeColor);\n    }\n\n    getThemeColor() {\n        return this.themeColor;\n    }\n\n    getStepDefaultPosition() {\n        return this.stepDefaultPosition;\n    }\n\n    getStepsOrder() {\n        return this.stepsOrder;\n    }\n\n    getFirstStep() {\n        return this.firstStep;\n    }\n\n    getWaitingTime() {\n        return this.waitingTime;\n    }\n\n    areLogsEnabled() {\n        return this.logsEnabled;\n    }\n\n    isCounterVisible() {\n        return this.showCounter;\n    }\n\n    isPrevButtonVisible() {\n        return this.showPrevButton;\n    }\n\n    getCustomTexts(): ObservableCustomTexts {\n        return this.customTexts;\n    }\n\n    private setCustomText(texts: CustomTexts) {\n        let prev: string | Observable<string>;\n        let next: string | Observable<string>;\n        let done;\n        let close;\n        prev = texts.prev ? texts.prev : DEFAULT_TEXTS.prev;\n        next = texts.next ? texts.next : DEFAULT_TEXTS.next;\n        done = texts.done ? texts.done : DEFAULT_TEXTS.done;\n        close = texts.close ? texts.close : DEFAULT_TEXTS.close;\n        this.customTexts = {\n            prev: this.toObservable(prev),\n            next: this.toObservable(next),\n            done: this.toObservable(done),\n            close: this.toObservable(close)\n        } as ObservableCustomTexts;\n    }\n\n    private toObservable(value: string | Observable<string>) {\n        return value instanceof Observable ? value : of(value);\n    }\n\n    private hexToRgb(hex: any): string {\n        const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n        hex = hex.replace(shorthandRegex, (m: any, r: any, g: any, b: any) => {\n            return r + r + g + g + b + b;\n        });\n\n        const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n        return result\n            ? `${parseInt(result[1], 16)}, ${parseInt(\n                  result[2],\n                  16\n              )}, ${parseInt(result[3], 16)}`\n            : null;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { JoyrideOptionsService } from './joyride-options.service';\n\nconst JOYRIDE = 'ngx-joyride:::';\n\n@Injectable()\nexport class LoggerService {\n\n    constructor(private readonly optionService: JoyrideOptionsService) { }\n\n    debug(message?: string, data: any = \"\") {\n        if (this.optionService.areLogsEnabled()) {\n            console.debug(JOYRIDE + message, data);\n        }\n    }\n\n    info(message?: string, data: any = \"\") {\n        if (this.optionService.areLogsEnabled()) {\n            console.info(JOYRIDE + message, data);\n        }\n    }\n\n    warn(message?: string, data: any = \"\") {\n        if (this.optionService.areLogsEnabled()) {\n            console.warn(JOYRIDE + message, data);\n        }\n    }\n\n    error(message?: string, data: any = \"\") {\n        if (this.optionService.areLogsEnabled()) {\n            console.error(JOYRIDE + message, data);\n        }\n    }\n\n}","import { Injectable } from '@angular/core';\nimport { JoyrideStep } from '../models/joyride-step.class';\nimport { Subject } from 'rxjs';\nimport { JoyrideOptionsService } from './joyride-options.service';\nimport { LoggerService } from './logger.service';\nimport { JoyrideError, JoyrideStepOutOfRange } from '../models/joyride-error.class';\n\nconst ROUTE_SEPARATOR = '@';\n\nclass Step {\n    id: string;\n    step: JoyrideStep;\n}\n\nexport enum StepActionType {\n    NEXT = 'NEXT',\n    PREV = 'PREV'\n}\n\n@Injectable()\nexport class JoyrideStepsContainerService {\n    private steps: Step[];\n    private tempSteps: JoyrideStep[] = [];\n    private currentStepIndex = -2;\n    stepHasBeenModified: Subject<JoyrideStep> = new Subject<JoyrideStep>();\n\n    constructor(private readonly stepOptions: JoyrideOptionsService, private readonly logger: LoggerService) {}\n\n    private getFirstStepIndex(): number {\n        const firstStep = this.stepOptions.getFirstStep();\n        const stepIds = this.stepOptions.getStepsOrder();\n\n        let index = stepIds.indexOf(firstStep);\n        if (index < 0) {\n            index = 0;\n            if (firstStep !== undefined) this.logger.warn(`The step ${firstStep} does not exist. Check in your step list if it's present.`);\n        }\n\n        return index;\n    }\n\n    init() {\n        this.logger.info('Initializing the steps array.');\n        this.steps = [];\n        this.currentStepIndex = this.getFirstStepIndex() - 1;\n        let stepIds = this.stepOptions.getStepsOrder();\n        stepIds.forEach(stepId => this.steps.push({ id: stepId, step: null }));\n    }\n\n    addStep(stepToAdd: JoyrideStep) {\n        let stepExist = this.tempSteps.filter(step => step.name === stepToAdd.name).length > 0;\n        if (!stepExist) {\n            this.logger.info(`Adding step ${stepToAdd.name} to the steps list.`);\n            this.tempSteps.push(stepToAdd);\n        } else {\n            let stepIndexToReplace = this.tempSteps.findIndex(step => step.name === stepToAdd.name);\n            this.tempSteps[stepIndexToReplace] = stepToAdd;\n        }\n    }\n    get(action: StepActionType): JoyrideStep {\n        if (action === StepActionType.NEXT) this.currentStepIndex++;\n        else this.currentStepIndex--;\n\n        if (this.currentStepIndex < 0 || this.currentStepIndex >= this.steps.length)\n            throw new JoyrideStepOutOfRange('The first or last step of the tour cannot be found!');\n\n        const stepName = this.getStepName(this.steps[this.currentStepIndex].id);\n        const index = this.tempSteps.findIndex(step => step.name === stepName);\n        let stepFound = this.tempSteps[index];\n        this.steps[this.currentStepIndex].step = stepFound;\n\n        if (stepFound == null) {\n            this.logger.warn(`Step ${this.steps[this.currentStepIndex].id} not found in the DOM. Check if it's hidden by *ngIf directive.`);\n        }\n\n        return stepFound;\n    }\n\n    getStepRoute(action: StepActionType) {\n        let stepID: string;\n        if (action === StepActionType.NEXT) {\n            stepID = this.steps[this.currentStepIndex + 1] ? this.steps[this.currentStepIndex + 1].id : null;\n        } else {\n            stepID = this.steps[this.currentStepIndex - 1] ? this.steps[this.currentStepIndex - 1].id : null;\n        }\n        let stepRoute = stepID && stepID.includes(ROUTE_SEPARATOR) ? stepID.split(ROUTE_SEPARATOR)[1] : '';\n\n        return stepRoute;\n    }\n\n    updatePosition(stepName: string, position: string) {\n        let index = this.getStepIndex(stepName);\n        if (this.steps[index].step) {\n            this.steps[index].step.position = position;\n            this.stepHasBeenModified.next(this.steps[index].step);\n        } else {\n            this.logger.warn(\n                `Trying to modify the position of ${stepName} to ${position}. Step not found!Is this step located in a different route?`\n            );\n        }\n    }\n    getStepNumber(stepName: string): number {\n        return this.getStepIndex(stepName) + 1;\n    }\n\n    getStepsCount() {\n        let stepsOrder = this.stepOptions.getStepsOrder();\n        return stepsOrder.length;\n    }\n\n    private getStepIndex(stepName: string): number {\n        const index = this.steps\n            .map(step => (step.id.includes(ROUTE_SEPARATOR) ? step.id.split(ROUTE_SEPARATOR)[0] : step.id))\n            .findIndex(name => stepName === name);\n        if (index === -1) throw new JoyrideError(`The step with name: ${stepName} does not exist in the step list.`);\n        return index;\n    }\n\n    private getStepName(stepID: string): string {\n        let stepName = stepID && stepID.includes(ROUTE_SEPARATOR) ? stepID.split(ROUTE_SEPARATOR)[0] : stepID;\n        return stepName;\n    }\n}\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable()\nexport class DomRefService {\n    private fakeDocument: Document = <Document>{ body: {}, documentElement: {} };\n    private fakeWindow: Window = <Window>{ document: this.fakeDocument, navigator: {} };\n    constructor(@Inject(PLATFORM_ID) private platformId: Object) {}\n    getNativeWindow(): Window {\n        if (isPlatformBrowser(this.platformId)) return window;\n        else return this.fakeWindow;\n    }\n\n    getNativeDocument() {\n        if (isPlatformBrowser(this.platformId)) return document;\n        else return this.fakeDocument;\n    }\n}","import { Injectable, TemplateRef } from '@angular/core';\n\n@Injectable()\nexport class TemplatesService {\n    private _prevButton: TemplateRef<any>;\n    private _nextButton: TemplateRef<any>;\n    private _doneButton: TemplateRef<any>;\n    private _counter: TemplateRef<any>;\n\n    setPrevButton(template: TemplateRef<any>) {\n        this._prevButton = template;\n    }\n\n    getPrevButton() {\n        return this._prevButton;\n    }\n\n    setNextButton(template: TemplateRef<any>) {\n        this._nextButton = template;\n    }\n\n    getNextButton() {\n        return this._nextButton;\n    }\n\n    setDoneButton(template: TemplateRef<any>) {\n        this._doneButton = template;\n    }\n\n    getDoneButton() {\n        return this._doneButton;\n    }\n    setCounter(template: TemplateRef<any>) {\n        this._counter = template;\n    }\n\n    getCounter() {\n        return this._counter;\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    AfterViewInit,\n    Input,\n    ViewContainerRef,\n    TemplateRef,\n    Output,\n    EventEmitter,\n    Inject,\n    PLATFORM_ID,\n    OnChanges,\n    SimpleChanges,\n    OnDestroy\n} from '@angular/core';\nimport { JoyrideStep } from '../models/joyride-step.class';\nimport { JoyrideStepsContainerService } from '../services/joyride-steps-container.service';\nimport { JoyrideError } from '../models/joyride-error.class';\nimport { Router } from '@angular/router';\nimport { DomRefService } from '../services/dom.service';\nimport { isPlatformBrowser } from '@angular/common';\nimport { TemplatesService } from '../services/templates.service';\nimport { Observable, Subscription } from 'rxjs';\n\nexport const NO_POSITION = 'NO_POSITION';\n\n@Directive({\n    selector: 'joyrideStep, [joyrideStep]'\n})\nexport class JoyrideDirective implements AfterViewInit, OnChanges, OnDestroy {\n    @Input('joyrideStep')\n    name: string;\n\n    @Input()\n    nextStep?: string;\n\n    @Input()\n    title?: string | Observable<string>;\n\n    @Input()\n    text?: string | Observable<string>;\n\n    @Input()\n    stepPosition?: string = NO_POSITION;\n\n    @Input()\n    stepContent?: TemplateRef<any>;\n\n    @Input()\n    stepContentParams?: Object;\n\n    @Input()\n    prevTemplate?: TemplateRef<any>;\n\n    @Input()\n    nextTemplate?: TemplateRef<any>;\n\n    @Input()\n    doneTemplate?: TemplateRef<any>;\n\n    @Input()\n    counterTemplate?: TemplateRef<any>;\n\n    @Output()\n    prev?: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output()\n    next?: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output()\n    done?: EventEmitter<any> = new EventEmitter<any>();\n\n    private windowRef: Window;\n    private step: JoyrideStep;\n    private subscriptions: Subscription[] = [];\n\n    constructor(\n        private readonly joyrideStepsContainer: JoyrideStepsContainerService,\n        private viewContainerRef: ViewContainerRef,\n        private readonly domService: DomRefService,\n        private readonly router: Router,\n        private readonly templateService: TemplatesService,\n        @Inject(PLATFORM_ID) private platformId: Object\n    ) {\n        this.windowRef = this.domService.getNativeWindow();\n        this.step = new JoyrideStep();\n    }\n\n    ngAfterViewInit() {\n        if (!isPlatformBrowser(this.platformId)) return;\n        if (this.prevTemplate) this.templateService.setPrevButton(this.prevTemplate);\n        if (this.nextTemplate) this.templateService.setNextButton(this.nextTemplate);\n        if (this.doneTemplate) this.templateService.setDoneButton(this.doneTemplate);\n        if (this.counterTemplate) this.templateService.setCounter(this.counterTemplate);\n        this.step.position = this.stepPosition;\n        this.step.targetViewContainer = this.viewContainerRef;\n        this.setAsyncFields(this.step);\n        this.step.stepContent = this.stepContent;\n        this.step.stepContentParams = this.stepContentParams;\n        this.step.nextClicked = this.next;\n        this.step.prevCliked = this.prev;\n        this.step.tourDone = this.done;\n        if (!this.name) throw new JoyrideError(\"All the steps should have the 'joyrideStep' property set with a custom name.\");\n        this.step.name = this.name;\n        this.step.route = this.router.url.substr(0, 1) === '/' ? this.router.url.substr(1) : this.router.url;\n        this.step.transformCssStyle = this.windowRef.getComputedStyle(this.viewContainerRef.element.nativeElement).transform;\n        this.step.isElementOrAncestorFixed =\n            this.isElementFixed(this.viewContainerRef.element) ||\n            this.isAncestorsFixed(this.viewContainerRef.element.nativeElement.parentElement);\n\n        this.joyrideStepsContainer.addStep(this.step);\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes['title'] || changes['text']) {\n            this.setAsyncFields(this.step);\n        }\n    }\n\n    private isElementFixed(element: ElementRef) {\n        return this.windowRef.getComputedStyle(element.nativeElement).position === 'fixed';\n    }\n\n    private setAsyncFields(step: JoyrideStep) {\n        if (this.title instanceof Observable) {\n            this.subscriptions.push(\n                this.title.subscribe(title => {\n                    step.title.next(title);\n                })\n            );\n        } else {\n            step.title.next(this.title);\n        }\n        if (this.text instanceof Observable) {\n            this.subscriptions.push(\n                this.text.subscribe(text => {\n                    step.text.next(text);\n                })\n            );\n        } else {\n            step.text.next(this.text);\n        }\n    }\n\n    private isAncestorsFixed(nativeElement: any): boolean {\n        if (!nativeElement || !nativeElement.parentElement) return false;\n        let isElementFixed = this.windowRef.getComputedStyle(nativeElement.parentElement).position === 'fixed';\n        if (nativeElement.nodeName === 'BODY') {\n            return isElementFixed;\n        }\n        if (isElementFixed) return true;\n        else return this.isAncestorsFixed(nativeElement.parentElement);\n    }\n\n    ngOnDestroy(): void {\n        this.subscriptions.forEach(sub => {\n            sub.unsubscribe();\n        });\n    }\n}\n","import { StepActionType } from \"../services/joyride-steps-container.service\";\n\nexport class JoyrideStepInfo {\n    number: number;\n    name: string;\n    route: string;\n    actionType: StepActionType;\n}","import { Injectable, ElementRef, Inject, PLATFORM_ID } from '@angular/core';\nimport { DomRefService } from './dom.service';\nimport { isPlatformBrowser } from \"@angular/common\";\n\nexport interface IDocumentService {\n    getElementFixedTop(elementRef: ElementRef): number;\n\n    getElementFixedLeft(elementRef: ElementRef);\n\n    getElementAbsoluteTop(elementRef: ElementRef);\n\n    getElementAbsoluteLeft(elementRef: ElementRef);\n\n    setDocumentHeight();\n\n    getDocumentHeight(): number;\n    isParentScrollable(elementRef: ElementRef): boolean;\n    isElementBeyondOthers(\n        elementRef: ElementRef,\n        isElementFixed: boolean,\n        keywordToDiscard: string\n    ): number;\n    scrollToTheTop(elementRef: ElementRef): void;\n    scrollToTheBottom(elementRef: ElementRef): void;\n}\n\n@Injectable()\nexport class DocumentService implements IDocumentService {\n    private documentHeight: number;\n\n    constructor(private readonly DOMService: DomRefService, @Inject(PLATFORM_ID) platformId: Object) {\n        if (!isPlatformBrowser(platformId)) {\n            return;\n        }\n        this.setDocumentHeight();\n        var doc = DOMService.getNativeDocument();\n        if (doc && !doc.elementsFromPoint) {\n            // IE 11 - Edge browsers\n            doc.elementsFromPoint = this.elementsFromPoint.bind(this);\n        }\n    }\n\n    getElementFixedTop(elementRef: ElementRef) {\n        return elementRef.nativeElement.getBoundingClientRect().top;\n    }\n\n    getElementFixedLeft(elementRef: ElementRef) {\n        return elementRef.nativeElement.getBoundingClientRect().left;\n    }\n\n    getElementAbsoluteTop(elementRef: ElementRef) {\n        const scrollOffsets = this.getScrollOffsets();\n        return (\n            elementRef.nativeElement.getBoundingClientRect().top +\n            scrollOffsets.y\n        );\n    }\n\n    getElementAbsoluteLeft(elementRef: ElementRef) {\n        const scrollOffsets = this.getScrollOffsets();\n        return (\n            elementRef.nativeElement.getBoundingClientRect().left +\n            scrollOffsets.x\n        );\n    }\n\n    setDocumentHeight() {\n        this.documentHeight = this.calculateDocumentHeight();\n    }\n\n    getDocumentHeight() {\n        return this.documentHeight;\n    }\n\n    isParentScrollable(elementRef: ElementRef): boolean {\n        return (\n            this.getFirstScrollableParent(elementRef.nativeElement) !==\n            this.DOMService.getNativeDocument().body\n        );\n    }\n\n    isElementBeyondOthers(\n        elementRef: ElementRef,\n        isElementFixed: boolean,\n        keywordToDiscard: string\n    ) {\n        const x1 = isElementFixed\n            ? this.getElementFixedLeft(elementRef)\n            : this.getElementAbsoluteLeft(elementRef);\n        const y1 = isElementFixed\n            ? this.getElementFixedTop(elementRef)\n            : this.getElementAbsoluteTop(elementRef);\n        const x2 =\n            x1 + elementRef.nativeElement.getBoundingClientRect().width - 1;\n        const y2 =\n            y1 + elementRef.nativeElement.getBoundingClientRect().height - 1;\n\n        const elements1 = this.DOMService.getNativeDocument().elementsFromPoint(\n            x1,\n            y1\n        );\n        const elements2 = this.DOMService.getNativeDocument().elementsFromPoint(\n            x2,\n            y2\n        );\n\n        if (elements1.length === 0 && elements2.length === 0) return 1;\n        if (\n            this.getFirstElementWithoutKeyword(elements1, keywordToDiscard) !==\n                elementRef.nativeElement ||\n            this.getFirstElementWithoutKeyword(elements2, keywordToDiscard) !==\n                elementRef.nativeElement\n        ) {\n            return 2;\n        }\n        return 3;\n    }\n\n    scrollIntoView(elementRef: ElementRef, isElementFixed: boolean): void {\n        const firstScrollableParent = this.getFirstScrollableParent(\n            elementRef.nativeElement\n        );\n        const top = isElementFixed\n            ? this.getElementFixedTop(elementRef)\n            : this.getElementAbsoluteTop(elementRef);\n        if (\n            firstScrollableParent !== this.DOMService.getNativeDocument().body\n        ) {\n            if (firstScrollableParent.scrollTo) {\n                firstScrollableParent.scrollTo(0, top - 150);\n            } else {\n                // IE 11 - Edge browsers\n                firstScrollableParent.scrollTop = top - 150;\n            }\n        } else {\n            this.DOMService.getNativeWindow().scrollTo(0, top - 150);\n        }\n    }\n\n    scrollToTheTop(elementRef: ElementRef): void {\n        const firstScrollableParent = this.getFirstScrollableParent(\n            elementRef.nativeElement\n        );\n        if (\n            firstScrollableParent !== this.DOMService.getNativeDocument().body\n        ) {\n            if (firstScrollableParent.scrollTo) {\n                firstScrollableParent.scrollTo(0, 0);\n            } else {\n                // IE 11 - Edge browsers\n                firstScrollableParent.scrollTop = 0;\n            }\n        } else {\n            this.DOMService.getNativeWindow().scrollTo(0, 0);\n        }\n    }\n\n    scrollToTheBottom(elementRef: ElementRef): void {\n        const firstScrollableParent = this.getFirstScrollableParent(\n            elementRef.nativeElement\n        );\n        if (\n            firstScrollableParent !== this.DOMService.getNativeDocument().body\n        ) {\n            if (firstScrollableParent.scrollTo) {\n                firstScrollableParent.scrollTo(\n                    0,\n                    this.DOMService.getNativeDocument().body.scrollHeight\n                );\n            } else {\n                // IE 11 - Edge browsers\n                firstScrollableParent.scrollTop =\n                    firstScrollableParent.scrollHeight -\n                    firstScrollableParent.clientHeight;\n            }\n        } else {\n            this.DOMService.getNativeWindow().scrollTo(\n                0,\n                this.DOMService.getNativeDocument().body.scrollHeight\n            );\n        }\n    }\n\n    private getFirstScrollableParent(node: any) {\n        const regex = /(auto|scroll|overlay)/;\n\n        const style = (node: any, prop: any) =>\n            this.DOMService.getNativeWindow()\n                .getComputedStyle(node, null)\n                .getPropertyValue(prop);\n\n        const scroll = (node: any) =>\n            regex.test(\n                style(node, 'overflow') +\n                    style(node, 'overflow-y') +\n                    style(node, 'overflow-x')\n            );\n\n        const scrollparent = (node: any): any => {\n            return !node || node === this.DOMService.getNativeDocument().body\n                ? this.DOMService.getNativeDocument().body\n                : scroll(node)\n                ? node\n                : scrollparent(node.parentNode);\n        };\n\n        return scrollparent(node);\n    }\n\n    private calculateDocumentHeight() {\n        const documentRef = this.DOMService.getNativeDocument();\n        return Math.max(\n            documentRef.body.scrollHeight,\n            documentRef.documentElement.scrollHeight,\n            documentRef.body.offsetHeight,\n            documentRef.documentElement.offsetHeight,\n            documentRef.body.clientHeight,\n            documentRef.documentElement.clientHeight\n        );\n    }\n\n    private getScrollOffsets() {\n        const winReference = this.DOMService.getNativeWindow();\n        const docReference = this.DOMService.getNativeDocument();\n\n        // This works for all browsers except IE versions 8 and before\n        if (winReference.pageXOffset != null)\n            return { x: winReference.pageXOffset, y: winReference.pageYOffset };\n\n        // For IE (or any browser) in Standards mode\n        if (docReference.compatMode == 'CSS1Compat')\n            return {\n                x: docReference.documentElement.scrollLeft,\n                y: docReference.documentElement.scrollTop\n            };\n\n        // For browsers in Quirks mode\n        return {\n            x: docReference.body.scrollLeft,\n            y: docReference.body.scrollTop\n        };\n    }\n\n    private elementsFromPoint(x, y) {\n        var parents = [];\n        var parent = void 0;\n        do {\n            const elem = this.DOMService.getNativeDocument().elementFromPoint(\n                x,\n                y\n            );\n            if (elem && parent !== elem) {\n                parent = elem;\n                parents.push(parent);\n                parent.style.pointerEvents = 'none';\n            } else {\n                parent = false;\n            }\n        } while (parent);\n        parents.forEach(function(parent) {\n            return (parent.style.pointerEvents = 'all');\n        });\n        return parents;\n    }\n\n    private getFirstElementWithoutKeyword(\n        elements: Element[],\n        keyword: string\n    ): Element {\n        while (\n            elements[0] &&\n            elements[0].classList.toString().includes(keyword)\n        ) {\n            elements.shift();\n        }\n        return elements[0];\n    }\n}\n","import { Injectable, Renderer2, RendererFactory2, ViewContainerRef } from '@angular/core';\nimport { DocumentService } from './document.service';\nimport { Scroll } from './event-listener.service';\nimport { JoyrideOptionsService } from './joyride-options.service';\nimport { JoyrideStep } from '../models/joyride-step.class';\n\n@Injectable()\nexport class JoyrideBackdropService {\n    private renderer: Renderer2;\n    private currentBackdropContainer: any;\n    private lastBackdropContainer: any;\n    private backdropContent: any;\n    private backdropTop: any;\n    private backdropBottom: any;\n    private backdropMiddleContainer: any;\n    private backdropMiddleContent: any;\n    private leftBackdrop: any;\n    private targetBackdrop: any;\n    private rightBackdrop: any;\n    private elementRef: ViewContainerRef;\n    private targetAbsoluteTop: number;\n    private targetAbsoluteLeft: number;\n    private lastXScroll: number = 0;\n    private lastYScroll: number = 0;\n\n    constructor(\n        private readonly documentService: DocumentService,\n        private readonly optionsService: JoyrideOptionsService,\n        private readonly rendererFactory: RendererFactory2\n    ) {\n        this.setRenderer();\n    }\n\n    private setRenderer() {\n        this.renderer = this.rendererFactory.createRenderer(null, null);\n    }\n\n    draw(step: JoyrideStep) {\n        this.elementRef = step.targetViewContainer;\n        this.targetAbsoluteTop = this.getTargetTotalTop(step);\n        this.targetAbsoluteLeft = this.getTargetTotalLeft(step);\n\n        this.currentBackdropContainer = this.renderer.createElement('div');\n        this.renderer.addClass(this.currentBackdropContainer, 'backdrop-container');\n        this.renderer.setStyle(this.currentBackdropContainer, 'position', 'fixed');\n        this.renderer.setStyle(this.currentBackdropContainer, 'top', '0px');\n        this.renderer.setStyle(this.currentBackdropContainer, 'left', '0px');\n        this.renderer.setStyle(this.currentBackdropContainer, 'width', '100%');\n        this.renderer.setStyle(this.currentBackdropContainer, 'height', '100%');\n        this.renderer.setStyle(this.currentBackdropContainer, 'z-index', '1000');\n        this.renderer.setAttribute(this.currentBackdropContainer, 'id', 'backdrop-' + step.name);\n\n        this.backdropContent = this.renderer.createElement('div');\n        this.renderer.addClass(this.backdropContent, 'backdrop-content');\n        this.renderer.setStyle(this.backdropContent, 'position', 'relative');\n        this.renderer.setStyle(this.backdropContent, 'height', '100%');\n        this.renderer.setStyle(this.backdropContent, 'display', 'flex');\n        this.renderer.setStyle(this.backdropContent, 'flex-direction', 'column');\n        this.renderer.appendChild(this.currentBackdropContainer, this.backdropContent);\n\n        this.backdropTop = this.renderer.createElement('div');\n        this.renderer.addClass(this.backdropTop, 'joyride-backdrop');\n        this.renderer.addClass(this.backdropTop, 'backdrop-top');\n        this.renderer.setStyle(this.backdropTop, 'width', '100%');\n        this.renderer.setStyle(this.backdropTop, 'height', this.targetAbsoluteTop - this.lastYScroll + 'px');\n        this.renderer.setStyle(this.backdropTop, 'flex-shrink', '0');\n        this.renderer.setStyle(this.backdropTop, 'background-color', `rgba(${this.optionsService.getBackdropColor()}, 0.7)`);\n        this.renderer.appendChild(this.backdropContent, this.backdropTop);\n\n        this.backdropMiddleContainer = this.renderer.createElement('div');\n        this.renderer.addClass(this.backdropMiddleContainer, 'backdrop-middle-container');\n        this.renderer.setStyle(this.backdropMiddleContainer, 'height', this.elementRef.element.nativeElement.offsetHeight + 'px');\n        this.renderer.setStyle(this.backdropMiddleContainer, 'width', '100%');\n        this.renderer.setStyle(this.backdropMiddleContainer, 'flex-shrink', '0');\n        this.renderer.appendChild(this.backdropContent, this.backdropMiddleContainer);\n\n        this.backdropMiddleContent = this.renderer.createElement('div');\n        this.renderer.addClass(this.backdropMiddleContent, 'backdrop-middle-content');\n        this.renderer.setStyle(this.backdropMiddleContent, 'display', 'flex');\n        this.renderer.setStyle(this.backdropMiddleContent, 'width', '100%');\n        this.renderer.setStyle(this.backdropMiddleContent, 'height', '100%');\n        this.renderer.appendChild(this.backdropMiddleContainer, this.backdropMiddleContent);\n\n        this.leftBackdrop = this.renderer.createElement('div');\n        this.renderer.addClass(this.leftBackdrop, 'joyride-backdrop');\n        this.renderer.addClass(this.leftBackdrop, 'backdrop-left');\n        this.renderer.setStyle(this.leftBackdrop, 'flex-shrink', '0');\n        this.renderer.setStyle(this.leftBackdrop, 'width', this.targetAbsoluteLeft - this.lastXScroll + 'px');\n        this.renderer.setStyle(this.leftBackdrop, 'background-color', `rgba(${this.optionsService.getBackdropColor()}, 0.7)`);\n        this.renderer.appendChild(this.backdropMiddleContent, this.leftBackdrop);\n\n        this.targetBackdrop = this.renderer.createElement('div');\n        this.renderer.addClass(this.targetBackdrop, 'backdrop-target');\n        this.renderer.setStyle(this.targetBackdrop, 'flex-shrink', '0');\n        this.renderer.setStyle(this.targetBackdrop, 'width', this.elementRef.element.nativeElement.offsetWidth + 'px');\n        this.renderer.appendChild(this.backdropMiddleContent, this.targetBackdrop);\n\n        this.rightBackdrop = this.renderer.createElement('div');\n        this.renderer.addClass(this.rightBackdrop, 'joyride-backdrop');\n        this.renderer.addClass(this.rightBackdrop, 'backdrop-right');\n        this.renderer.setStyle(this.rightBackdrop, 'width', '100%');\n        this.renderer.setStyle(this.rightBackdrop, 'background-color', `rgba(${this.optionsService.getBackdropColor()}, 0.7)`);\n        this.renderer.appendChild(this.backdropMiddleContent, this.rightBackdrop);\n\n        this.backdropBottom = this.renderer.createElement('div');\n        this.renderer.addClass(this.backdropBottom, 'joyride-backdrop');\n        this.renderer.addClass(this.backdropBottom, 'backdrop-bottom');\n        this.renderer.setStyle(this.backdropBottom, 'width', '100%');\n        this.renderer.setStyle(this.backdropBottom, 'height', '100%');\n        this.renderer.setStyle(this.backdropBottom, 'background-color', `rgba(${this.optionsService.getBackdropColor()}, 0.7)`);\n        this.renderer.appendChild(this.backdropContent, this.backdropBottom);\n\n        this.removeLastBackdrop();\n        this.drawCurrentBackdrop();\n        this.lastBackdropContainer = this.currentBackdropContainer;\n    }\n\n    remove() {\n        this.removeLastBackdrop();\n    }\n\n    redrawTarget(step: JoyrideStep) {\n        this.targetAbsoluteLeft = this.getTargetTotalLeft(step);\n        this.targetAbsoluteTop = this.getTargetTotalTop(step);\n        this.handleVerticalScroll(step);\n        this.handleHorizontalScroll(step);\n    }\n\n    private getTargetTotalTop(step: JoyrideStep) {\n        let targetVC = step.targetViewContainer;\n        return step.isElementOrAncestorFixed\n            ? this.documentService.getElementFixedTop(targetVC.element)\n            : this.documentService.getElementAbsoluteTop(targetVC.element);\n    }\n\n    private getTargetTotalLeft(step: JoyrideStep) {\n        let targetVC = step.targetViewContainer;\n\n        return step.isElementOrAncestorFixed\n            ? this.documentService.getElementFixedLeft(targetVC.element)\n            : this.documentService.getElementAbsoluteLeft(targetVC.element);\n    }\n    redraw(step: JoyrideStep, scroll: Scroll) {\n        if (this.lastYScroll !== scroll.scrollY) {\n            this.lastYScroll = scroll.scrollY;\n            if (this.elementRef) {\n                this.handleVerticalScroll(step);\n            }\n        }\n        if (this.lastXScroll !== scroll.scrollX) {\n            this.lastXScroll = scroll.scrollX;\n            if (this.elementRef) {\n                this.handleHorizontalScroll(step);\n            }\n        }\n    }\n\n    private handleHorizontalScroll(step: JoyrideStep) {\n        let newBackdropLeftWidth = step.isElementOrAncestorFixed ? this.targetAbsoluteLeft : this.targetAbsoluteLeft - this.lastXScroll;\n\n        if (newBackdropLeftWidth >= 0) {\n            this.renderer.setStyle(this.leftBackdrop, 'width', newBackdropLeftWidth + 'px');\n            this.renderer.setStyle(this.targetBackdrop, 'width', this.elementRef.element.nativeElement.offsetWidth + 'px');\n        } else {\n            this.handleTargetPartialWidth(newBackdropLeftWidth);\n        }\n    }\n\n    private handleTargetPartialWidth(newBackdropLeftWidth: number) {\n        this.renderer.setStyle(this.leftBackdrop, 'width', 0 + 'px');\n        let visibleTargetWidth = this.elementRef.element.nativeElement.offsetWidth + newBackdropLeftWidth;\n        if (visibleTargetWidth >= 0) {\n            this.renderer.setStyle(this.targetBackdrop, 'width', visibleTargetWidth + 'px');\n        } else {\n            this.renderer.setStyle(this.targetBackdrop, 'width', 0 + 'px');\n        }\n    }\n\n    private handleVerticalScroll(step: JoyrideStep) {\n        let newBackdropTopHeight = step.isElementOrAncestorFixed ? this.targetAbsoluteTop : this.targetAbsoluteTop - this.lastYScroll;\n\n        if (newBackdropTopHeight >= 0) {\n            this.renderer.setStyle(this.backdropTop, 'height', newBackdropTopHeight + 'px');\n            this.renderer.setStyle(this.backdropMiddleContainer, 'height', this.elementRef.element.nativeElement.offsetHeight + 'px');\n        } else {\n            this.handleTargetPartialHeight(newBackdropTopHeight);\n        }\n    }\n\n    private handleTargetPartialHeight(newBackdropTopHeight: number) {\n        this.renderer.setStyle(this.backdropTop, 'height', 0 + 'px');\n        let visibleTargetHeight = this.elementRef.element.nativeElement.offsetHeight + newBackdropTopHeight;\n        if (visibleTargetHeight >= 0) {\n            this.renderer.setStyle(this.backdropMiddleContainer, 'height', visibleTargetHeight + 'px');\n        } else {\n            this.renderer.setStyle(this.backdropMiddleContainer, 'height', 0 + 'px');\n        }\n    }\n\n    private removeLastBackdrop() {\n        if (this.lastBackdropContainer) {\n            this.renderer.removeChild(document.body, this.lastBackdropContainer);\n            this.lastBackdropContainer = undefined;\n        }\n    }\n\n    private drawCurrentBackdrop() {\n        this.renderer.appendChild(document.body, this.currentBackdropContainer);\n    }\n}\n","import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { DomRefService } from './dom.service';\n\nexport class Scroll {\n    scrollX: number;\n    scrollY: number;\n}\n\n@Injectable()\nexport class EventListenerService {\n    private renderer: Renderer2;\n    private scrollUnlisten: any;\n    private resizeUnlisten: any;\n\n    scrollEvent: Subject<Scroll> = new Subject<Scroll>();\n    resizeEvent: Subject<number> = new Subject<number>();\n\n    constructor(private readonly rendererFactory: RendererFactory2, private readonly DOMService: DomRefService) {\n        this.renderer = rendererFactory.createRenderer(null, null);\n    }\n\n    startListeningScrollEvents() {\n        this.scrollUnlisten = this.renderer.listen('document', 'scroll', evt => {\n            this.scrollEvent.next({\n                scrollX: this.DOMService.getNativeWindow().pageXOffset,\n                scrollY: this.DOMService.getNativeWindow().pageYOffset\n            });\n        });\n    }\n\n    startListeningResizeEvents() {\n        this.resizeUnlisten = this.renderer.listen('window', 'resize', evt => {\n            this.resizeEvent.next(evt);\n        });\n    }\n\n    stopListeningScrollEvents() {\n        this.scrollUnlisten();\n    }\n\n    stopListeningResizeEvents() {\n        this.resizeUnlisten();\n    }\n}\n","\nimport { Component, Input, ViewEncapsulation } from \"@angular/core\";\n\n@Component({\n    selector: 'joyride-arrow',\n    templateUrl: './arrow.component.html',\n    styleUrls: ['./arrow.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class JoyrideArrowComponent {\n    @Input()\n    position: string = 'top';\n}","<div [class.joyride-arrow__top]=\"position == 'top'\"\n     [class.joyride-arrow__bottom]=\"position == 'bottom'\"\n     [class.joyride-arrow__left]=\"position == 'left'\"\n     [class.joyride-arrow__right]=\"position == 'right'\">\n</div>","import { Component } from '@angular/core';\n\n@Component({\n    selector: 'joy-close-button',\n    template: `<svg viewBox=\"0 0 25 25\" xmlns=\"http://www.w3.org/2000/svg\">\n                <line x1=\"1\" y1=\"24\" \n                    x2=\"24\" y2=\"1\" \n                    stroke=\"black\" \n                    stroke-width=\"3\"/>\n                <line x1=\"1\" y1=\"1\" \n                    x2=\"24\" y2=\"24\" \n                    stroke=\"black\" \n                    stroke-width=\"3\"/>\n            </svg>`\n})\n\nexport class JoyrideCloseButtonComponent { }","import { Component, Input, EventEmitter, Output } from \"@angular/core\";\n\n@Component({\n    selector: 'joyride-button',\n    templateUrl: './button.component.html',\n    styleUrls: ['./button.component.scss']\n})\nexport class JoyrideButtonComponent {\n    hover: boolean;\n    \n    @Input() \n    color: string;\n    \n    @Output()\n    clicked: EventEmitter<any> = new EventEmitter();\n\n    onClick() {\n        this.clicked.emit();\n    }\n}","<button (mouseleave)=\"hover=false\" (mouseover)=\"hover=true\"\n    [ngStyle]=\"{'background-color': hover ? '#fff' : color, \n                'color': hover ? color : '#fff',\n                'border-color' : hover ? color : 'transparent'}\"\n    class=\"joyride-button\" (click)=\"onClick()\">\n    <ng-content></ng-content>\n</button>","import {\n    Component,\n    Input,\n    AfterViewInit,\n    ViewEncapsulation,\n    OnInit,\n    OnDestroy,\n    ElementRef,\n    ViewChild,\n    Renderer2,\n    Injector,\n    TemplateRef,\n    HostListener\n} from '@angular/core';\nimport { JoyrideStep } from '../../models/joyride-step.class';\nimport {\n    JoyrideStepService,\n    ARROW_SIZE,\n    DISTANCE_FROM_TARGET,\n    IJoyrideStepService\n} from '../../services';\nimport { JoyrideStepsContainerService } from '../../services/joyride-steps-container.service';\nimport { EventListenerService } from '../../services/event-listener.service';\nimport { Subscription, Observable } from 'rxjs';\nimport { DocumentService } from '../../services/document.service';\nimport { JoyrideOptionsService } from '../../services/joyride-options.service';\nimport { LoggerService } from '../../services/logger.service';\nimport { TemplatesService } from '../../services/templates.service';\n\nconst STEP_MIN_WIDTH = 200;\nconst STEP_MAX_WIDTH = 400;\nconst CUSTOM_STEP_MAX_WIDTH_VW = 90;\nconst STEP_HEIGHT = 200;\nconst ASPECT_RATIO = 1.212;\nexport const DEFAULT_DISTANCE_FROM_MARGIN_TOP = 2;\nexport const DEFAULT_DISTANCE_FROM_MARGIN_LEFT = 2;\nconst DEFAULT_DISTANCE_FROM_MARGIN_BOTTOM = 5;\nconst DEFAULT_DISTANCE_FROM_MARGIN_RIGHT = 5;\nexport enum KEY_CODE {\n  RIGHT_ARROW = 39,\n  LEFT_ARROW = 37,\n  ESCAPE_KEY= 27\n}\n\n@Component({\n    selector: 'joyride-step',\n    templateUrl: './joyride-step.component.html',\n    styleUrls: ['./joyride-step.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class JoyrideStepComponent implements OnInit, OnDestroy, AfterViewInit {\n    stepWidth: number = STEP_MIN_WIDTH;\n    stepHeight: number = STEP_HEIGHT;\n    leftPosition: number;\n    topPosition: number;\n    showArrow = true;\n    arrowPosition: string;\n    arrowLeftPosition: number;\n    arrowTopPosition: number;\n    title: Observable<string>;\n    text: Observable<string>;\n    counter: string;\n    isCounterVisible: boolean;\n    isPrevButtonVisible: boolean;\n    themeColor: string;\n    customContent: TemplateRef<any>;\n    customPrevButton: TemplateRef<any>;\n    customNextButton: TemplateRef<any>;\n    customDoneButton: TemplateRef<any>;\n    customCounter: TemplateRef<any>;\n    counterData: any;\n    ctx: Object;\n\n    private arrowSize: number = ARROW_SIZE;\n    private stepAbsoluteLeft: number;\n    private stepAbsoluteTop: number;\n    private targetWidth: number;\n    targetHeight: number;\n    private targetAbsoluteLeft: number;\n    private targetAbsoluteTop: number;\n\n    private subscriptions: Subscription[] = [];\n    joyrideStepService: IJoyrideStepService;\n\n    private positionAlreadyFixed: boolean;\n    private documentHeight: number;\n\n    prevText: Observable<string>;\n    nextText: Observable<string>;\n    doneText: Observable<string>;\n\n    @Input() step?: JoyrideStep;\n    @ViewChild('stepHolder', { static: true }) stepHolder: ElementRef;\n    @ViewChild('stepContainer', { static: true }) stepContainer: ElementRef;\n\n    constructor(\n        private injector: Injector,\n        private readonly stepsContainerService: JoyrideStepsContainerService,\n        private readonly eventListenerService: EventListenerService,\n        private readonly documentService: DocumentService,\n        private readonly renderer: Renderer2,\n        private readonly logger: LoggerService,\n        private readonly optionsService: JoyrideOptionsService,\n        private readonly templateService: TemplatesService\n    ) {}\n\n    ngOnInit(): void {\n        // Need to Inject here otherwise you will obtain a circular dependency\n        this.joyrideStepService = this.injector.get(JoyrideStepService);\n\n        this.documentHeight = this.documentService.getDocumentHeight();\n        this.subscriptions.push(this.subscribeToResizeEvents());\n        this.title = this.step.title.asObservable();\n        this.text = this.step.text.asObservable();\n\n        this.setCustomTemplates();\n        this.setCustomTexts();\n\n        this.counter = this.getCounter();\n        this.isCounterVisible = this.optionsService.isCounterVisible();\n        this.isPrevButtonVisible = this.optionsService.isPrevButtonVisible();\n        this.themeColor = this.optionsService.getThemeColor();\n\n        if (this.text) this.text.subscribe(val => this.checkRedraw(val));\n        if (this.title) this.title.subscribe(val => this.checkRedraw(val));\n    }\n\n    ngAfterViewInit() {\n        if (this.isCustomized()) {\n            this.renderer.setStyle(\n                this.stepContainer.nativeElement,\n                'max-width',\n                CUSTOM_STEP_MAX_WIDTH_VW + 'vw'\n            );\n            this.updateStepDimensions();\n        } else {\n            this.renderer.setStyle(\n                this.stepContainer.nativeElement,\n                'max-width',\n                STEP_MAX_WIDTH + 'px'\n            );\n            let dimensions = this.getDimensionsByAspectRatio(\n                this.stepContainer.nativeElement.clientWidth,\n                this.stepContainer.nativeElement.clientHeight,\n                ASPECT_RATIO\n            );\n            dimensions = this.adjustDimensions(\n                dimensions.width,\n                dimensions.height\n            );\n            this.stepWidth = dimensions.width;\n            this.stepHeight = dimensions.height;\n            this.renderer.setStyle(\n                this.stepContainer.nativeElement,\n                'width',\n                this.stepWidth + 'px'\n            );\n            this.renderer.setStyle(\n                this.stepContainer.nativeElement,\n                'height',\n                this.stepHeight + 'px'\n            );\n        }\n        this.drawStep();\n    }\n\n    private checkRedraw(val) {\n        if (val != null) {\n            // Need to wait that the change is rendered before redrawing\n            setTimeout(() => {\n                this.redrawStep();\n            }, 2);\n        }\n    }\n\n    private isCustomized() {\n        return (\n            this.step.stepContent ||\n            this.templateService.getCounter() ||\n            this.templateService.getPrevButton() ||\n            this.templateService.getNextButton() ||\n            this.templateService.getDoneButton()\n        );\n    }\n\n    private setCustomTexts() {\n        const customeTexts = this.optionsService.getCustomTexts();\n        this.prevText = customeTexts.prev;\n        this.nextText = customeTexts.next;\n        this.doneText = customeTexts.done;\n    }\n\n    private drawStep() {\n        let position = this.step.isElementOrAncestorFixed\n            ? 'fixed'\n            : 'absolute';\n        this.renderer.setStyle(\n            this.stepHolder.nativeElement,\n            'position',\n            position\n        );\n        this.renderer.setStyle(\n            this.stepHolder.nativeElement,\n            'transform',\n            this.step.transformCssStyle\n        );\n        this.targetWidth = this.step.targetViewContainer.element.nativeElement.getBoundingClientRect().width;\n        this.targetHeight = this.step.targetViewContainer.element.nativeElement.getBoundingClientRect().height;\n        this.targetAbsoluteLeft =\n            position === 'fixed'\n                ? this.documentService.getElementFixedLeft(\n                      this.step.targetViewContainer.element\n                  )\n                : this.documentService.getElementAbsoluteLeft(\n                      this.step.targetViewContainer.element\n                  );\n        this.targetAbsoluteTop =\n            position === 'fixed'\n                ? this.documentService.getElementFixedTop(\n                      this.step.targetViewContainer.element\n                  )\n                : this.documentService.getElementAbsoluteTop(\n                      this.step.targetViewContainer.element\n                  );\n        this.setStepStyle();\n    }\n\n    private getCounter(): string {\n        let stepPosition = this.stepsContainerService.getStepNumber(\n            this.step.name\n        );\n        let numberOfSteps = this.stepsContainerService.getStepsCount();\n        this.counterData = { step: stepPosition, total: numberOfSteps };\n        return stepPosition + '/' + numberOfSteps;\n    }\n\n    private setCustomTemplates() {\n        this.customContent = this.step.stepContent;\n        this.ctx = this.step.stepContentParams;\n        this.customPrevButton = this.templateService.getPrevButton();\n        this.customNextButton = this.templateService.getNextButton();\n        this.customDoneButton = this.templateService.getDoneButton();\n        this.customCounter = this.templateService.getCounter();\n    }\n\n\n    @HostListener('window:keyup', ['$event'])\n    keyEvent(event: KeyboardEvent) {\n    console.log(event);\n\n    if (event.keyCode === KEY_CODE.RIGHT_ARROW) {\n      if (this.isLastStep()) {\n        this.close();\n      } else {\n        this.next();\n      }\n    } else if (event.keyCode === KEY_CODE.LEFT_ARROW) {\n      this.prev();\n    } else if (event.keyCode === KEY_CODE.ESCAPE_KEY) {\n      this.close();\n    }\n  }\n\n    prev() {\n        this.joyrideStepService.prev();\n    }\n\n    next() {\n        this.joyrideStepService.next();\n    }\n\n    close() {\n        this.joyrideStepService.close();\n    }\n\n    isFirstStep() {\n        return this.stepsContainerService.getStepNumber(this.step.name) === 1;\n    }\n\n    isLastStep() {\n        return (\n            this.stepsContainerService.getStepNumber(this.step.name) ===\n            this.stepsContainerService.getStepsCount()\n        );\n    }\n\n    private setStepStyle() {\n        switch (this.step.position) {\n            case 'top': {\n                this.setStyleTop();\n                break;\n            }\n            case 'bottom': {\n                this.setStyleBottom();\n                break;\n            }\n            case 'right': {\n                this.setStyleRight();\n                break;\n            }\n            case 'left': {\n                this.setStyleLeft();\n                break;\n            }\n            case 'center': {\n                this.setStyleCenter();\n                break;\n            }\n            default: {\n                this.setStyleBottom();\n            }\n        }\n    }\n\n    private setStyleTop() {\n        this.stepsContainerService.updatePosition(this.step.name, 'top');\n        this.topPosition =\n            this.targetAbsoluteTop - DISTANCE_FROM_TARGET - this.stepHeight;\n        this.stepAbsoluteTop =\n            this.targetAbsoluteTop - DISTANCE_FROM_TARGET - this.stepHeight;\n        this.arrowTopPosition = this.stepHeight;\n\n        this.leftPosition =\n            this.targetWidth / 2 - this.stepWidth / 2 + this.targetAbsoluteLeft;\n        this.stepAbsoluteLeft =\n            this.targetWidth / 2 - this.stepWidth / 2 + this.targetAbsoluteLeft;\n        this.arrowLeftPosition = this.stepWidth / 2 - this.arrowSize;\n        this.adjustLeftPosition();\n        this.adjustRightPosition();\n        this.arrowPosition = 'bottom';\n        this.autofixTopPosition();\n    }\n\n    private setStyleRight() {\n        this.stepsContainerService.updatePosition(this.step.name, 'right');\n        this.topPosition =\n            this.targetAbsoluteTop +\n            this.targetHeight / 2 -\n            this.stepHeight / 2;\n        this.stepAbsoluteTop =\n            this.targetAbsoluteTop +\n            this.targetHeight / 2 -\n            this.stepHeight / 2;\n        this.arrowTopPosition = this.stepHeight / 2 - this.arrowSize;\n\n        this.leftPosition =\n            this.targetAbsoluteLeft + this.targetWidth + DISTANCE_FROM_TARGET;\n        this.stepAbsoluteLeft =\n            this.targetAbsoluteLeft + this.targetWidth + DISTANCE_FROM_TARGET;\n        this.arrowLeftPosition = -this.arrowSize;\n        this.adjustTopPosition();\n        this.adjustBottomPosition();\n        this.arrowPosition = 'left';\n        this.autofixRightPosition();\n    }\n\n    private setStyleBottom() {\n        this.stepsContainerService.updatePosition(this.step.name, 'bottom');\n        this.topPosition =\n            this.targetAbsoluteTop + this.targetHeight + DISTANCE_FROM_TARGET;\n        this.stepAbsoluteTop =\n            this.targetAbsoluteTop + this.targetHeight + DISTANCE_FROM_TARGET;\n        this.arrowTopPosition = -this.arrowSize;\n\n        this.arrowLeftPosition = this.stepWidth / 2 - this.arrowSize;\n        this.leftPosition =\n            this.targetWidth / 2 - this.stepWidth / 2 + this.targetAbsoluteLeft;\n        this.stepAbsoluteLeft =\n            this.targetWidth / 2 - this.stepWidth / 2 + this.targetAbsoluteLeft;\n        this.adjustLeftPosition();\n        this.adjustRightPosition();\n        this.arrowPosition = 'top';\n        this.autofixBottomPosition();\n    }\n\n    private setStyleLeft() {\n        this.stepsContainerService.updatePosition(this.step.name, 'left');\n        this.topPosition =\n            this.targetAbsoluteTop +\n            this.targetHeight / 2 -\n            this.stepHeight / 2;\n        this.stepAbsoluteTop =\n            this.targetAbsoluteTop +\n            this.targetHeight / 2 -\n            this.stepHeight / 2;\n        this.arrowTopPosition = this.stepHeight / 2 - this.arrowSize;\n\n        this.leftPosition =\n            this.targetAbsoluteLeft - this.stepWidth - DISTANCE_FROM_TARGET;\n        this.stepAbsoluteLeft =\n            this.targetAbsoluteLeft - this.stepWidth - DISTANCE_FROM_TARGET;\n        this.arrowLeftPosition = this.stepWidth;\n        this.adjustTopPosition();\n        this.adjustBottomPosition();\n        this.arrowPosition = 'right';\n        this.autofixLeftPosition();\n    }\n\n    private setStyleCenter() {\n        this.renderer.setStyle(\n            this.stepHolder.nativeElement,\n            'position',\n            'fixed'\n        );\n        this.renderer.setStyle(this.stepHolder.nativeElement, 'top', '50%');\n        this.renderer.setStyle(this.stepHolder.nativeElement, 'left', '50%');\n\n        this.updateStepDimensions();\n\n        this.renderer.setStyle(\n            this.stepHolder.nativeElement,\n            'transform',\n            `translate(-${this.stepWidth / 2}px, -${this.stepHeight / 2}px)`\n        );\n        this.showArrow = false;\n    }\n\n    private adjustLeftPosition() {\n        if (this.leftPosition < 0) {\n            this.arrowLeftPosition =\n                this.arrowLeftPosition +\n                this.leftPosition -\n                DEFAULT_DISTANCE_FROM_MARGIN_LEFT;\n            this.leftPosition = DEFAULT_DISTANCE_FROM_MARGIN_LEFT;\n        }\n    }\n\n    private adjustRightPosition() {\n        let currentWindowWidth = document.body.clientWidth;\n        if (this.stepAbsoluteLeft + this.stepWidth > currentWindowWidth) {\n            let newLeftPos =\n                this.leftPosition -\n                (this.stepAbsoluteLeft +\n                    this.stepWidth +\n                    DEFAULT_DISTANCE_FROM_MARGIN_RIGHT -\n                    currentWindowWidth);\n            let deltaLeftPosition = newLeftPos - this.leftPosition;\n\n            this.leftPosition = newLeftPos;\n            this.arrowLeftPosition = this.arrowLeftPosition - deltaLeftPosition;\n        }\n    }\n\n    private adjustTopPosition() {\n        if (this.stepAbsoluteTop < 0) {\n            this.arrowTopPosition =\n                this.arrowTopPosition +\n                this.topPosition -\n                DEFAULT_DISTANCE_FROM_MARGIN_TOP;\n            this.topPosition = DEFAULT_DISTANCE_FROM_MARGIN_TOP;\n        }\n    }\n\n    private adjustBottomPosition() {\n        if (this.stepAbsoluteTop + this.stepHeight > this.documentHeight) {\n            let newTopPos =\n                this.topPosition -\n                (this.stepAbsoluteTop +\n                    this.stepHeight +\n                    DEFAULT_DISTANCE_FROM_MARGIN_BOTTOM -\n                    this.documentHeight);\n            let deltaTopPosition = newTopPos - this.topPosition;\n\n            this.topPosition = newTopPos;\n            this.arrowTopPosition = this.arrowTopPosition - deltaTopPosition;\n        }\n    }\n\n    private autofixTopPosition() {\n        if (this.positionAlreadyFixed) {\n            this.logger.warn(\n                'No step positions found for this step. The step will be centered.'\n            );\n        } else if (\n            this.targetAbsoluteTop - this.stepHeight - this.arrowSize <\n            0\n        ) {\n            this.positionAlreadyFixed = true;\n            this.setStyleRight();\n        }\n    }\n\n    private autofixRightPosition() {\n        if (\n            this.targetAbsoluteLeft +\n                this.targetWidth +\n                this.stepWidth +\n                this.arrowSize >\n            document.body.clientWidth\n        ) {\n            this.setStyleBottom();\n        }\n    }\n\n    private autofixBottomPosition() {\n        if (\n            this.targetAbsoluteTop +\n                this.stepHeight +\n                this.arrowSize +\n                this.targetHeight >\n            this.documentHeight\n        ) {\n            this.setStyleLeft();\n        }\n    }\n\n    private autofixLeftPosition() {\n        if (this.targetAbsoluteLeft - this.stepWidth - this.arrowSize < 0) {\n            this.setStyleTop();\n        }\n    }\n\n    private subscribeToResizeEvents(): Subscription {\n        return this.eventListenerService.resizeEvent.subscribe(() => {\n            this.redrawStep();\n        });\n    }\n\n    private redrawStep() {\n        this.updateStepDimensions();\n        this.drawStep();\n    }\n\n    private getDimensionsByAspectRatio(\n        width: number,\n        height: number,\n        aspectRatio: number\n    ) {\n        let calcHeight = (width + height) / (1 + aspectRatio);\n        let calcWidth = calcHeight * aspectRatio;\n        return {\n            width: calcWidth,\n            height: calcHeight\n        };\n    }\n    private adjustDimensions(width: number, height: number) {\n        let area = width * height;\n        let newWidth = width;\n        let newHeight = height;\n        if (width > STEP_MAX_WIDTH) {\n            newWidth = STEP_MAX_WIDTH;\n            newHeight = area / newWidth;\n        } else if (width < STEP_MIN_WIDTH) {\n            newWidth = STEP_MIN_WIDTH;\n            newHeight = STEP_MIN_WIDTH / ASPECT_RATIO;\n        }\n        return {\n            width: newWidth,\n            height: newHeight\n        };\n    }\n\n    private updateStepDimensions() {\n        this.stepWidth = this.stepContainer.nativeElement.clientWidth;\n        this.stepHeight = this.stepContainer.nativeElement.clientHeight;\n    }\n\n    ngOnDestroy() {\n        this.subscriptions.forEach(subscription => {\n            subscription.unsubscribe();\n        });\n    }\n}\n","<div #stepHolder class=\"joyride-step__holder\" [id]=\"'joyride-step-' + step.name\" [style.top.px]=\"topPosition\" [style.left.px]=\"leftPosition\">\n    <joyride-arrow *ngIf=\"showArrow\" class=\"joyride-step__arrow\" [position]=\"arrowPosition\" [style.top.px]=\"arrowTopPosition\"\n        [style.left.px]=\"arrowLeftPosition\"></joyride-arrow>\n    <div #stepContainer class=\"joyride-step__container\">\n        <joy-close-button class=\"joyride-step__close\" (click)=\"close()\"></joy-close-button>\n        <div class=\"joyride-step__header\">\n            <div class=\"joyride-step__title\" [style.color]=\"themeColor\">{{ title | async }}</div>\n        </div>\n        <div class=\"joyride-step__body\">\n            <ng-container *ngTemplateOutlet=\"customContent ? customContent : defaultContent; context: ctx\"></ng-container>\n            <ng-template #defaultContent>\n                {{ text | async }}\n            </ng-template>\n        </div>\n        <div class=\"joyride-step__footer\">\n            <div *ngIf=\"isCounterVisible\" class=\"joyride-step__counter-container\">\n                <ng-container *ngTemplateOutlet=\"customCounter ? customCounter : defaultCounter; context: counterData\"></ng-container>\n                <ng-template #defaultCounter>\n                    <div class=\"joyride-step__counter\">{{ counter }}</div>\n                </ng-template>\n            </div>\n            <div class=\"joyride-step__buttons-container\">\n                <div class=\"joyride-step__prev-container joyride-step__button\" *ngIf=\"isPrevButtonVisible && !isFirstStep()\" (click)=\"prev()\">\n                    <ng-container *ngTemplateOutlet=\"customPrevButton ? customPrevButton : defaultPrevButton\"></ng-container>\n                    <ng-template #defaultPrevButton>\n                        <joyride-button class=\"joyride-step__prev-button\" [color]=\"themeColor\">{{ prevText | async }}</joyride-button>\n                    </ng-template>\n                </div>\n                <div class=\"joyride-step__next-container joyride-step__button\" *ngIf=\"!isLastStep(); else doneButton\" (click)=\"next()\">\n                    <ng-container *ngTemplateOutlet=\"customNextButton ? customNextButton : defaulNextButton\"></ng-container>\n                    <ng-template #defaulNextButton>\n                        <joyride-button [color]=\"themeColor\">{{ nextText | async }}</joyride-button>\n                    </ng-template>\n                </div>\n                <ng-template #doneButton>\n                    <div class=\"joyride-step__done-container joyride-step__button\" (click)=\"close()\">\n                        <ng-container *ngTemplateOutlet=\"customDoneButton ? customDoneButton : defaultDoneButton\"></ng-container>\n                        <ng-template #defaultDoneButton>\n                            <joyride-button class=\"joyride-step__done-button\" [color]=\"themeColor\">{{ doneText | async }}</joyride-button>\n                        </ng-template>\n                    </div>\n                </ng-template>\n            </div>\n        </div>\n    </div>\n</div>","import {\n    Injectable,\n    ComponentRef,\n    ComponentFactoryResolver,\n    ApplicationRef,\n    Injector,\n    EmbeddedViewRef\n} from '@angular/core';\nimport { JoyrideStepComponent } from '../components';\nimport { JoyrideStep } from '../models';\n\n@Injectable()\nexport class StepDrawerService {\n    private refMap: { [key: string]: ComponentRef<JoyrideStepComponent> } = {};\n\n    constructor(\n        private readonly componentFactoryResolver: ComponentFactoryResolver,\n        private appRef: ApplicationRef,\n        private injector: Injector\n    ) {}\n\n    draw(step: JoyrideStep) {\n        // 1. Create a component reference from the component\n        const ref: ComponentRef<JoyrideStepComponent> = this.componentFactoryResolver\n            .resolveComponentFactory(JoyrideStepComponent)\n            .create(this.injector);\n\n        // 2. Attach component to the appRef so that it's inside the ng component tree\n        this.appRef.attachView(ref.hostView);\n\n        // 3. Get DOM element from component\n        const domElem = (ref.hostView as EmbeddedViewRef<any>)\n            .rootNodes[0] as HTMLElement;\n\n        // 4. Append DOM element to the body\n        document.body.appendChild(domElem);\n\n        const instance: JoyrideStepComponent = ref.instance;\n        instance.step = step;\n        ref.changeDetectorRef.detectChanges();\n        step.stepInstance = instance;\n\n        this.refMap[step.name] = ref;\n    }\n\n    remove(step: JoyrideStep) {\n        this.appRef.detachView(this.refMap[step.name].hostView);\n        this.refMap[step.name].destroy();\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { JoyrideStep } from '../models/joyride-step.class';\nimport { JoyrideBackdropService } from './joyride-backdrop.service';\nimport { EventListenerService } from './event-listener.service';\nimport { JoyrideStepsContainerService, StepActionType } from './joyride-steps-container.service';\nimport { DocumentService } from './document.service';\nimport { StepDrawerService } from './step-drawer.service';\nimport { DomRefService } from './dom.service';\nimport { NO_POSITION } from '../directives/joyride.directive';\nimport { JoyrideOptionsService } from './joyride-options.service';\nimport { Router } from '@angular/router';\nimport { ReplaySubject, Observable } from 'rxjs';\nimport { JoyrideStepInfo } from '../models/joyride-step-info.class';\nimport { JoyrideStepDoesNotExist, JoyrideStepOutOfRange } from '../models/joyride-error.class';\nimport { LoggerService } from './logger.service';\n\nconst SCROLLBAR_SIZE = 20;\n\nexport const DISTANCE_FROM_TARGET = 15;\nexport const ARROW_SIZE = 10;\n\nexport interface IJoyrideStepService {\n    startTour(): Observable<JoyrideStepInfo>;\n    close(): any;\n    prev(): any;\n    next(): any;\n}\n\n@Injectable()\nexport class JoyrideStepService implements IJoyrideStepService {\n    private currentStep: JoyrideStep;\n    private winTopPosition: number = 0;\n    private winBottomPosition: number = 0;\n    private stepsObserver: ReplaySubject<JoyrideStepInfo> = new ReplaySubject<JoyrideStepInfo>();\n\n    constructor(\n        private readonly backDropService: JoyrideBackdropService,\n        private readonly eventListener: EventListenerService,\n        private readonly stepsContainerService: JoyrideStepsContainerService,\n        private readonly documentService: DocumentService,\n        private readonly DOMService: DomRefService,\n        private readonly stepDrawerService: StepDrawerService,\n        private readonly optionsService: JoyrideOptionsService,\n        private readonly router: Router,\n        private readonly logger: LoggerService\n    ) {\n        this.initViewportPositions();\n        this.subscribeToScrollEvents();\n        this.subscribeToResizeEvents();\n    }\n\n    private initViewportPositions() {\n        this.winTopPosition = 0;\n        this.winBottomPosition = this.DOMService.getNativeWindow().innerHeight - SCROLLBAR_SIZE;\n    }\n\n    private subscribeToScrollEvents() {\n        this.eventListener.startListeningScrollEvents();\n        this.eventListener.scrollEvent.subscribe(scroll => {\n            this.winTopPosition = scroll.scrollY;\n            this.winBottomPosition = this.winTopPosition + this.DOMService.getNativeWindow().innerHeight - SCROLLBAR_SIZE;\n            if (this.currentStep) this.backDropService.redraw(this.currentStep, scroll);\n        });\n    }\n\n    private subscribeToResizeEvents() {\n        this.eventListener.resizeEvent.subscribe(() => {\n            if (this.currentStep) this.backDropService.redrawTarget(this.currentStep);\n        });\n    }\n\n    private drawStep(step: JoyrideStep) {\n        step.position = step.position === NO_POSITION ? this.optionsService.getStepDefaultPosition() : step.position;\n        this.stepDrawerService.draw(step);\n    }\n\n    startTour(): Observable<JoyrideStepInfo> {\n        this.stepsObserver = new ReplaySubject<JoyrideStepInfo>();\n        this.stepsContainerService.init();\n        this.documentService.setDocumentHeight();\n\n        this.tryShowStep(StepActionType.NEXT);\n        this.eventListener.startListeningResizeEvents();\n        this.subscribeToStepsUpdates();\n        return this.stepsObserver.asObservable();\n    }\n\n    close() {\n        this.removeCurrentStep();\n        this.notifyTourIsFinished();\n        this.DOMService.getNativeWindow().scrollTo(0, 0);\n        this.eventListener.stopListeningResizeEvents();\n        this.backDropService.remove();\n    }\n\n    prev() {\n        this.removeCurrentStep();\n        this.currentStep.prevCliked.emit();\n        this.tryShowStep(StepActionType.PREV);\n    }\n\n    next() {\n        this.removeCurrentStep();\n        this.currentStep.nextClicked.emit();\n        this.tryShowStep(StepActionType.NEXT);\n    }\n\n    private async navigateToStepPage(action: StepActionType) {\n        let stepRoute = this.stepsContainerService.getStepRoute(action);\n        if (stepRoute) {\n            return await this.router.navigate([stepRoute]);\n        }\n    }\n\n    private subscribeToStepsUpdates() {\n        this.stepsContainerService.stepHasBeenModified.subscribe(updatedStep => {\n            if (this.currentStep && this.currentStep.name === updatedStep.name) {\n                this.currentStep = updatedStep;\n            }\n        });\n    }\n\n    private async tryShowStep(actionType: StepActionType) {\n        await this.navigateToStepPage(actionType);\n        const timeout = this.optionsService.getWaitingTime();\n        if (timeout > 100) this.backDropService.remove();\n        setTimeout(() => {\n            try {\n                this.showStep(actionType);\n            } catch (error) {\n                if (error instanceof JoyrideStepDoesNotExist) {\n                    this.tryShowStep(actionType);\n                } else if (error instanceof JoyrideStepOutOfRange) {\n                    this.logger.error('Forcing the tour closure: First or Last step not found in the DOM.');\n                    this.close();\n                } else {\n                    throw new Error(error);\n                }\n            }\n        }, timeout);\n    }\n\n    private showStep(actionType: StepActionType) {\n        this.currentStep = this.stepsContainerService.get(actionType);\n\n        if (this.currentStep == null) throw new JoyrideStepDoesNotExist('');\n        this.notifyStepClicked(actionType);\n        // Scroll the element to get it visible if it's in a scrollable element\n        this.scrollIfElementBeyondOtherElements();\n        this.backDropService.draw(this.currentStep);\n        this.drawStep(this.currentStep);\n        this.scrollIfStepAndTargetAreNotVisible();\n    }\n\n    private notifyStepClicked(actionType: StepActionType) {\n        let stepInfo: JoyrideStepInfo = {\n            number: this.stepsContainerService.getStepNumber(this.currentStep.name),\n            name: this.currentStep.name,\n            route: this.currentStep.route,\n            actionType\n        };\n        this.stepsObserver.next(stepInfo);\n    }\n\n    private notifyTourIsFinished() {\n        if (this.currentStep) this.currentStep.tourDone.emit();\n        this.stepsObserver.complete();\n    }\n    private removeCurrentStep() {\n        if (this.currentStep) this.stepDrawerService.remove(this.currentStep);\n    }\n\n    private scrollIfStepAndTargetAreNotVisible() {\n        this.scrollWhenTargetOrStepAreHiddenBottom();\n        this.scrollWhenTargetOrStepAreHiddenTop();\n    }\n\n    private scrollWhenTargetOrStepAreHiddenBottom() {\n        let totalTargetBottom = this.getMaxTargetAndStepBottomPosition();\n        if (totalTargetBottom > this.winBottomPosition) {\n            this.DOMService.getNativeWindow().scrollBy(0, totalTargetBottom - this.winBottomPosition);\n        }\n    }\n\n    private scrollWhenTargetOrStepAreHiddenTop() {\n        let totalTargetTop = this.getMaxTargetAndStepTopPosition();\n        if (totalTargetTop < this.winTopPosition) {\n            this.DOMService.getNativeWindow().scrollBy(0, totalTargetTop - this.winTopPosition);\n        }\n    }\n\n    private getMaxTargetAndStepBottomPosition(): number {\n        let targetAbsoluteTop = this.documentService.getElementAbsoluteTop(this.currentStep.targetViewContainer.element);\n        if (this.currentStep.position === 'top') {\n            return targetAbsoluteTop + this.currentStep.stepInstance.targetHeight;\n        } else if (this.currentStep.position === 'bottom') {\n            return (\n                targetAbsoluteTop +\n                this.currentStep.stepInstance.targetHeight +\n                this.currentStep.stepInstance.stepHeight +\n                ARROW_SIZE +\n                DISTANCE_FROM_TARGET\n            );\n        } else if (this.currentStep.position === 'right' || this.currentStep.position === 'left') {\n            return Math.max(\n                targetAbsoluteTop + this.currentStep.stepInstance.targetHeight,\n                targetAbsoluteTop + this.currentStep.stepInstance.targetHeight / 2 + this.currentStep.stepInstance.stepHeight / 2\n            );\n        }\n    }\n\n    private getMaxTargetAndStepTopPosition() {\n        let targetAbsoluteTop = this.documentService.getElementAbsoluteTop(this.currentStep.targetViewContainer.element);\n        if (this.currentStep.position === 'top') {\n            return targetAbsoluteTop - (this.currentStep.stepInstance.stepHeight + ARROW_SIZE + DISTANCE_FROM_TARGET);\n        } else if (this.currentStep.position === 'bottom') {\n            return targetAbsoluteTop;\n        } else if (this.currentStep.position === 'right' || this.currentStep.position === 'left') {\n            return Math.min(\n                targetAbsoluteTop,\n                targetAbsoluteTop + this.currentStep.stepInstance.targetHeight / 2 - this.currentStep.stepInstance.stepHeight / 2\n            );\n        }\n    }\n\n    private scrollIfElementBeyondOtherElements() {\n        if (this.isElementBeyondOthers() === 2) {\n            this.documentService.scrollToTheTop(this.currentStep.targetViewContainer.element);\n        }\n        if (this.isElementBeyondOthers() === 2) {\n            this.documentService.scrollToTheBottom(this.currentStep.targetViewContainer.element);\n        }\n        if (this.isElementBeyondOthers() === 1 && this.documentService.isParentScrollable(this.currentStep.targetViewContainer.element)) {\n            this.documentService.scrollIntoView(this.currentStep.targetViewContainer.element, this.currentStep.isElementOrAncestorFixed);\n        }\n        if (this.isElementBeyondOthers() === 1 && this.documentService.isParentScrollable(this.currentStep.targetViewContainer.element)) {\n            this.currentStep.targetViewContainer.element.nativeElement.scrollIntoView();\n        }\n    }\n\n    private isElementBeyondOthers() {\n        return this.documentService.isElementBeyondOthers(\n            this.currentStep.targetViewContainer.element,\n            this.currentStep.isElementOrAncestorFixed,\n            'backdrop'\n        );\n    }\n}\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { JoyrideStepService } from './joyride-step.service';\nimport { JoyrideOptionsService } from './joyride-options.service';\nimport { JoyrideOptions } from '../models/joyride-options.class';\nimport { Observable, of } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { JoyrideStepInfo } from '../models/joyride-step-info.class';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable()\nexport class JoyrideService {\n    private tourInProgress: boolean = false;\n    private tour$: Observable<JoyrideStepInfo>;\n\n    constructor(\n        @Inject(PLATFORM_ID) private platformId: Object,\n        private readonly stepService: JoyrideStepService,\n        private readonly optionsService: JoyrideOptionsService\n    ) {}\n\n    startTour(options?: JoyrideOptions): Observable<JoyrideStepInfo> {\n        if (!isPlatformBrowser(this.platformId)) {\n            return of(new JoyrideStepInfo());\n        }\n        if (!this.tourInProgress) {\n            this.tourInProgress = true;\n            if (options) {\n                this.optionsService.setOptions(options);\n            }\n            this.tour$ = this.stepService.startTour().pipe(finalize(() => (this.tourInProgress = false)));\n            this.tour$.subscribe();\n        }\n        return this.tour$;\n    }\n\n    closeTour(): void {\n        if (this.isTourInProgress()) this.stepService.close();\n    }\n\n    isTourInProgress(): boolean {\n        return this.tourInProgress;\n    }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { JoyrideDirective } from './directives/joyride.directive';\nimport { JoyrideService } from './services/joyride.service';\nimport { JoyrideStepComponent } from './components/step/joyride-step.component';\nimport { JoyrideButtonComponent } from './components/button/button.component';\nimport { JoyrideCloseButtonComponent } from './components/close-button/close-button.component';\nimport { JoyrideStepService } from './services/joyride-step.service';\nimport { JoyrideBackdropService } from './services/joyride-backdrop.service';\nimport { JoyrideArrowComponent } from './components/arrow/arrow.component';\nimport { EventListenerService } from './services/event-listener.service';\nimport { JoyrideStepsContainerService } from './services/joyride-steps-container.service';\nimport { DocumentService } from './services/document.service';\nimport { JoyrideOptionsService } from './services/joyride-options.service';\nimport { StepDrawerService } from './services/step-drawer.service';\nimport { DomRefService } from './services/dom.service';\nimport { LoggerService } from './services/logger.service';\nimport { RouterModule } from '@angular/router';\nimport { TemplatesService } from './services/templates.service';\n\nexport const routerModuleForChild: ModuleWithProviders<any> = RouterModule.forChild(\n    []\n);\n\n@NgModule({\n    imports: [CommonModule, routerModuleForChild],\n    declarations: [\n        JoyrideDirective,\n        JoyrideStepComponent,\n        JoyrideArrowComponent,\n        JoyrideButtonComponent,\n        JoyrideCloseButtonComponent,\n    ],\n    exports: [JoyrideDirective],\n})\nexport class JoyrideModule {\n    static forRoot(): ModuleWithProviders<JoyrideModule> {\n        return {\n            ngModule: JoyrideModule,\n            providers: [\n                JoyrideService,\n                JoyrideStepService,\n                JoyrideStepsContainerService,\n                JoyrideBackdropService,\n                EventListenerService,\n                DocumentService,\n                JoyrideOptionsService,\n                StepDrawerService,\n                DomRefService,\n                LoggerService,\n                TemplatesService,\n            ],\n        };\n    }\n    static forChild(): ModuleWithProviders<JoyrideModule> {\n        return {\n            ngModule: JoyrideModule,\n            providers: [],\n        };\n    }\n}\n","/*\n * Public API Surface of ngx-joyride\n */\n\nexport * from './lib/joyride';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}