{"version":3,"file":"covalent-guided-tour.mjs","sources":["../../../../libs/angular-guided-tour/src/lib/guided.tour.ts","../../../../libs/angular-guided-tour/src/lib/guided-tour.service.ts","../../../../libs/angular-guided-tour/src/lib/guided-tour.module.ts","../../../../libs/angular-guided-tour/src/covalent-guided-tour.ts"],"sourcesContent":["import Shepherd from 'shepherd.js';\nimport {\n  timer,\n  Subject,\n  BehaviorSubject,\n  merge,\n  Subscription,\n  fromEvent,\n  forkJoin,\n} from 'rxjs';\nimport { takeUntil, skipWhile, filter, skip, first } from 'rxjs/operators';\n\nexport type TourStep = Shepherd.Step.StepOptions;\nexport type TourStepButton = Shepherd.Step.StepOptionsButton;\n\nexport enum ITourEvent {\n  'click' = 'click',\n  'pointerover' = 'pointerover',\n  'keyup' = 'keyup',\n  'added' = 'added', // added to DOM\n  'removed' = 'removed', // removed from DOM\n}\n\nexport interface ITourEventOn {\n  selector?: string; // css selector\n  event?: keyof typeof ITourEvent; // click, pointerover, keyup, added, removed\n}\n\nexport interface ITourEventOnOptions {\n  timeBeforeShow?: number; // delay before step is displayed\n  interval?: number; // time between searches for element, defaults to 500ms\n}\n\nexport interface ITourOptions extends Shepherd.Tour.TourOptions {\n  abortOn?: ITourEventOn[]; // events to abort on\n}\n\nexport interface ITourStepAttachToOptions extends ITourEventOnOptions {\n  highlight?: boolean;\n  retries?: number; // # num of attempts to find element\n  skipIfNotFound?: boolean; // if element is not found after n retries, move on to next step\n  else?: string; // if element is not found, go to step with this id\n  goBackTo?: string; // back button goes back to step with this id\n  skipFromStepCount?: boolean; // show/hide progress on step\n}\n\nexport interface ITourStepAdvanceOnOptions extends ITourEventOnOptions {\n  jumpTo?: string; // next button will jump to step with this id\n  allowGoBack?: boolean; // allow back within this step\n}\n\nexport interface ITourStep extends TourStep {\n  attachToOptions?: ITourStepAttachToOptions;\n  advanceOnOptions?: ITourStepAdvanceOnOptions;\n  advanceOn?: ITourEventOn[] | ITourEventOn | any;\n  abortOn?: ITourEventOn[];\n  count?: number;\n}\n\nabstract class TourButtonsActions {\n  abstract next(): void;\n\n  abstract back(): void;\n\n  abstract cancel(): void;\n\n  abstract finish(): void;\n}\n\nconst SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW = 100;\nconst SHEPHERD_DEFAULT_FIND_INTERVAL = 500;\nconst SHEPHERD_DEFAULT_FIND_ATTEMPTS = 20;\n\nconst overriddenEvents: string[] = [\n  ITourEvent.click,\n  ITourEvent.pointerover,\n  ITourEvent.removed,\n  ITourEvent.added,\n  ITourEvent.keyup,\n];\n\nconst keyEvents: Map<number, string> = new Map<number, string>([\n  [13, 'enter'],\n  [27, 'esc'],\n]);\n\nconst defaultStepOptions: TourStep = {\n  scrollTo: { behavior: 'smooth', block: 'center' },\n  cancelIcon: {\n    enabled: true,\n  },\n};\n\nconst MAT_ICON_BUTTON =\n  'mdc-icon-button material-icons mat-mdc-icon-button mat-mdc-button-base';\nconst MAT_BUTTON = 'mdc-button mat-mdc-button mat-mdc-button-base';\nconst MAT_BUTTON_INVISIBLE = 'shepherd-void-button';\n\nexport class CovalentGuidedTour extends TourButtonsActions {\n  private _destroyedEvent$!: Subject<void>;\n\n  shepherdTour!: Shepherd.Tour;\n  stepOptions: ITourStep;\n\n  constructor(stepOptions: ITourStep = defaultStepOptions) {\n    super();\n\n    this.stepOptions = stepOptions;\n    this.newTour();\n  }\n\n  newTour(opts?: ITourOptions): void {\n    this.shepherdTour = new Shepherd.Tour(\n      Object.assign(\n        {\n          defaultStepOptions: this.stepOptions,\n        },\n        opts\n      )\n    );\n\n    this._destroyedEvent$ = new Subject<void>();\n    // listen to cancel and complete to clean up abortOn events\n    merge(\n      fromEvent(this.shepherdTour, 'cancel'),\n      fromEvent(this.shepherdTour, 'complete')\n    )\n      .pipe(first())\n      .subscribe(() => {\n        this._destroyedEvent$.next();\n        this._destroyedEvent$.complete();\n      });\n\n    // if abortOn was passed, we bind the event and execute complete\n    if (opts && opts.abortOn) {\n      const abortArr$: Subject<void>[] = [];\n      opts.abortOn.forEach((abortOn: ITourEventOn) => {\n        const abortEvent$: Subject<void> = new Subject<void>();\n        abortArr$.push(abortEvent$);\n        this._bindEvent(abortOn, undefined, abortEvent$, this._destroyedEvent$);\n      });\n\n      const abortSubs: Subscription = merge(...abortArr$)\n        .pipe(takeUntil(this._destroyedEvent$))\n        .subscribe(() => {\n          this.shepherdTour.complete();\n          abortSubs.unsubscribe();\n        });\n    }\n  }\n\n  back(): void {\n    this.shepherdTour.back();\n  }\n\n  cancel(): void {\n    this.shepherdTour.cancel();\n  }\n\n  next(): void {\n    this.shepherdTour.next();\n  }\n\n  finish(): void {\n    this.shepherdTour.complete();\n  }\n\n  addSteps(steps: ITourStep[]): void {\n    this.shepherdTour.addSteps(this._prepareTour(steps));\n  }\n\n  start(): void {\n    this.shepherdTour.start();\n  }\n\n  protected _prepareTour(\n    originalSteps: ITourStep[],\n    finishLabel = 'finish'\n  ): ITourStep[] {\n    // create Subjects for back and forward events\n    const backEvent$: Subject<void> = new Subject<void>();\n    const forwardEvent$: Subject<void> = new Subject<void>();\n    let _backFlow = false;\n    // create Subject for your end\n    const destroyedEvent$: Subject<void> = new Subject<void>();\n    /**\n     * This function adds the step progress in the footer of the shepherd tooltip\n     */\n    const appendProgressFunc = function (this: any): void {\n      // get all the footers that are available in the DOM\n      const footers: Element[] = Array.from<Element>(\n        document.querySelectorAll('.shepherd-footer')\n      );\n      // get the last footer since Shepherd always puts the active one at the end\n      const footer: Element = footers[footers.length - 1];\n      // generate steps html element\n      const progress: HTMLSpanElement = document.createElement('span');\n      progress.className = 'shepherd-progress';\n      progress.innerText = `${this.shepherdTour.currentStep.options.count}/${stepTotal}`;\n      // insert into the footer before the first button\n      footer.insertBefore(progress, footer.querySelector('.shepherd-button'));\n    };\n\n    let stepTotal = 0;\n    const steps: ITourStep[] = originalSteps.map((step: ITourStep) => {\n      let showProgress: () => void = () => {\n        //\n      };\n      if (step.attachToOptions?.skipFromStepCount === true) {\n        showProgress = function (): void {\n          return;\n        };\n      } else if (\n        step.attachToOptions?.skipFromStepCount === undefined ||\n        step.attachToOptions?.skipFromStepCount === false\n      ) {\n        step.count = ++stepTotal;\n        showProgress = appendProgressFunc.bind(this);\n      }\n      return Object.assign({}, step, {\n        when: {\n          show: showProgress,\n        },\n      });\n    });\n\n    const finishButton: TourStepButton = {\n      text: finishLabel,\n      action: this['finish'].bind(this),\n      classes: MAT_BUTTON,\n    };\n\n    const voidButton: TourStepButton = {\n      text: '',\n      action(): void {\n        return;\n      },\n      classes: MAT_BUTTON_INVISIBLE,\n    };\n\n    // listen to the destroyed event to clean up all the streams\n    this._destroyedEvent$.pipe(first()).subscribe(() => {\n      backEvent$.complete();\n      forwardEvent$.complete();\n      destroyedEvent$.next();\n      destroyedEvent$.complete();\n    });\n\n    const totalSteps: number = steps.length;\n    steps.forEach((step: ITourStep, index: number) => {\n      // create buttons specific for the step\n      // this is done to create more control on events\n      const nextButton: TourStepButton = {\n        text: 'chevron_right',\n        action: () => {\n          // intercept the next action and trigger event\n          forwardEvent$.next();\n          this.shepherdTour.next();\n        },\n        classes: MAT_ICON_BUTTON,\n      };\n      const backButton: TourStepButton = {\n        text: 'chevron_left',\n        action: () => {\n          // intercept the back action and trigger event\n          backEvent$.next();\n          _backFlow = true;\n          // check if 'goBackTo' is set to jump to a particular step, else just go back\n          if (step.attachToOptions && step.attachToOptions.goBackTo) {\n            this.shepherdTour.show(step.attachToOptions.goBackTo, false);\n          } else {\n            this.shepherdTour.back();\n          }\n        },\n        classes:\n          step.advanceOnOptions?.allowGoBack === false\n            ? MAT_BUTTON_INVISIBLE\n            : MAT_ICON_BUTTON,\n      };\n\n      // check if highlight was provided for the step, else fallback into shepherds usage\n      step.highlightClass =\n        step.attachToOptions && step.attachToOptions.highlight\n          ? 'shepherd-highlight'\n          : step.highlightClass;\n\n      // Adding buttons in the steps if no buttons are defined\n      if (!step.buttons || step.buttons.length === 0) {\n        if (index === 0) {\n          // first step\n          step.buttons = [nextButton];\n        } else if (index === totalSteps - 1) {\n          // last step\n          step.buttons = [backButton, finishButton];\n        } else {\n          step.buttons = [backButton, nextButton];\n        }\n      }\n\n      // checks \"advanceOn\" to override listeners\n      let advanceOn: ITourEventOn[] | ITourEventOn = step.advanceOn;\n      // remove the shepherd \"advanceOn\" infavor of ours if the event is part of our list\n      if (\n        (typeof advanceOn === 'object' &&\n          !Array.isArray(advanceOn) &&\n          advanceOn.event &&\n          overriddenEvents.indexOf(advanceOn.event.split('.')[0]) > -1) ||\n        advanceOn instanceof Array\n      ) {\n        step.advanceOn = undefined;\n        step.buttons =\n          step.advanceOnOptions && step.advanceOnOptions.allowGoBack\n            ? [backButton, voidButton]\n            : [voidButton];\n      }\n      // adds a default beforeShowPromise function\n      step.beforeShowPromise = () => {\n        return new Promise((resolve: (value?: any) => void) => {\n          const additionalCapabilitiesSetup: () => void = () => {\n            if (advanceOn && !step.advanceOn) {\n              if (!Array.isArray(advanceOn)) {\n                advanceOn = [advanceOn];\n              }\n\n              const advanceArr$: Subject<void>[] = [];\n              advanceOn.forEach((_: any) => {\n                const advanceEvent$: Subject<void> = new Subject<void>();\n                advanceArr$.push(advanceEvent$);\n\n                // we start a timer of attempts to find an element in the dom\n                this._bindEvent(\n                  _,\n                  step.advanceOnOptions,\n                  advanceEvent$,\n                  destroyedEvent$\n                );\n              });\n              const advanceSubs: Subscription = forkJoin(...advanceArr$)\n                .pipe(takeUntil(merge(destroyedEvent$, backEvent$)))\n                .subscribe(() => {\n                  // check if we need to advance to a specific step, else advance to next step\n                  if (step.advanceOnOptions && step.advanceOnOptions.jumpTo) {\n                    this.shepherdTour.show(step.advanceOnOptions.jumpTo);\n                  } else {\n                    this.shepherdTour.next();\n                  }\n                  forwardEvent$.next();\n                  advanceSubs.unsubscribe();\n                });\n            }\n\n            // if abortOn was passed on the step, we bind the event and execute complete\n            if (step.abortOn) {\n              const abortArr$: Subject<void>[] = [];\n              step.abortOn.forEach((abortOn: ITourEventOn) => {\n                const abortEvent$: Subject<void> = new Subject<void>();\n                abortArr$.push(abortEvent$);\n                this._bindEvent(\n                  abortOn,\n                  undefined,\n                  abortEvent$,\n                  destroyedEvent$\n                );\n              });\n\n              const abortSubs: Subscription = merge(...abortArr$)\n                .pipe(\n                  takeUntil(merge(destroyedEvent$, backEvent$, forwardEvent$))\n                )\n                .subscribe(() => {\n                  this.shepherdTour.complete();\n                  abortSubs.unsubscribe();\n                });\n            }\n          };\n\n          const _stopTimer$: Subject<void> = new Subject<void>();\n          const _retriesReached$: Subject<number> = new Subject<number>();\n          const _retryAttempts$: BehaviorSubject<number> =\n            new BehaviorSubject<number>(-1);\n\n          let id: string | undefined;\n          // checks if \"attachTo\" is a string or an object to get the id of an element\n          if (typeof step.attachTo === 'string') {\n            id = step.attachTo;\n          } else if (\n            typeof step.attachTo === 'object' &&\n            typeof step.attachTo.element === 'string'\n          ) {\n            id = step.attachTo.element;\n          }\n          // if we have an id as a string in either case, we use it (we ignore it if its HTMLElement)\n          if (id) {\n            // if current step is the first step of the tour, we set the buttons to be only \"next\"\n            // we had to use `any` since the tour doesnt expose the steps in any fashion nor a way to check if we have modified them at all\n            if (\n              this.shepherdTour.getCurrentStep() ===\n              (<any>this.shepherdTour).steps[0]\n            ) {\n              this.shepherdTour.getCurrentStep()?.updateStepOptions({\n                buttons: originalSteps[index].advanceOn\n                  ? [voidButton]\n                  : [nextButton],\n              });\n            }\n            // register to the attempts observable to notify deeveloper when number has been reached\n            _retryAttempts$\n              .pipe(\n                skip(1),\n                skipWhile((val: number) => {\n                  if (\n                    step.attachToOptions &&\n                    step.attachToOptions.retries !== undefined\n                  ) {\n                    return val < step.attachToOptions.retries;\n                  }\n                  return val < SHEPHERD_DEFAULT_FIND_ATTEMPTS;\n                }),\n                takeUntil(merge(_stopTimer$.asObservable(), destroyedEvent$))\n              )\n              .subscribe((attempts: number) => {\n                _retriesReached$.next(1);\n                _retriesReached$.complete();\n                // if attempts have been reached, we check \"skipIfNotFound\" to move on to the next step\n                if (\n                  step.attachToOptions &&\n                  step.attachToOptions.skipIfNotFound\n                ) {\n                  // if we get to this step coming back from a step and it wasnt found\n                  // then we either check if its the first step and try going forward\n                  // or we keep going back until we find a step that actually exists\n                  if (_backFlow) {\n                    if (\n                      (<any>this.shepherdTour).steps.indexOf(\n                        this.shepherdTour.getCurrentStep()\n                      ) === 0\n                    ) {\n                      this.shepherdTour.next();\n                    } else {\n                      this.shepherdTour.back();\n                    }\n                    _backFlow = false;\n                  } else {\n                    // destroys current step if we need to skip it to remove it from the tour\n                    const currentStep = this.shepherdTour.getCurrentStep();\n                    currentStep?.destroy();\n                    this.shepherdTour.next();\n                    this.shepherdTour.removeStep(currentStep?.id ?? '');\n                  }\n                } else if (step.attachToOptions && step.attachToOptions.else) {\n                  // if \"skipIfNotFound\" is not true, then we check if \"else\" has been set to jump to a specific step\n                  this.shepherdTour.show(step.attachToOptions.else);\n                } else {\n                  // tslint:disable-next-line:no-console\n                  console.warn(\n                    `Retries reached trying to find ${id}. Retried  ${attempts} times.`\n                  );\n                  // else we show the step regardless\n                  resolve();\n                }\n              });\n\n            // we start a timer of attempts to find an element in the dom\n            timer(\n              (step.attachToOptions && step.attachToOptions.timeBeforeShow) ||\n                SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW,\n              (step.attachToOptions && step.attachToOptions.interval) ||\n                SHEPHERD_DEFAULT_FIND_INTERVAL\n            )\n              .pipe(\n                // the timer will continue either until we find the element or the number of attempts has been reached\n                takeUntil(merge(_stopTimer$, _retriesReached$, destroyedEvent$))\n              )\n              .subscribe(() => {\n                const element = document.querySelector(id ?? '');\n                // if the element has been found, we stop the timer and resolve the promise\n                if (element) {\n                  _stopTimer$.next();\n                  _stopTimer$.complete();\n                  additionalCapabilitiesSetup();\n                  resolve();\n                } else {\n                  _retryAttempts$.next(_retryAttempts$.value + 1);\n                }\n              });\n\n            // stop find interval if user stops the tour\n            destroyedEvent$.subscribe(() => {\n              _stopTimer$.next();\n              _stopTimer$.complete();\n              _retriesReached$.next(1);\n              _retriesReached$.complete();\n            });\n          } else {\n            // resolve observable until the timeBeforeShow has passsed or use default\n            timer(\n              (step.attachToOptions && step.attachToOptions.timeBeforeShow) ||\n                SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW\n            )\n              .pipe(takeUntil(merge(destroyedEvent$)))\n              .subscribe(() => {\n                resolve();\n              });\n          }\n        });\n      };\n    });\n    return steps;\n  }\n\n  private _bindEvent(\n    eventOn: ITourEventOn,\n    eventOnOptions: ITourEventOnOptions | undefined,\n    event$: Subject<void>,\n    destroyedEvent$: Subject<void>\n  ): void {\n    const selector = eventOn.selector ?? '';\n    const event = eventOn.event;\n    // we start a timer of attempts to find an element in the dom\n    const timerSubs: Subscription = timer(\n      (eventOnOptions && eventOnOptions.timeBeforeShow) ||\n        SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW,\n      (eventOnOptions && eventOnOptions.interval) ||\n        SHEPHERD_DEFAULT_FIND_INTERVAL\n    )\n      .pipe(takeUntil(destroyedEvent$))\n      .subscribe(() => {\n        const element = document.querySelector(selector);\n        // if the element has been found, we stop the timer and resolve the promise\n        if (element) {\n          timerSubs.unsubscribe();\n\n          if (event === ITourEvent.added) {\n            // if event is \"Added\" trigger a soon as this is attached.\n            event$.next();\n            event$.complete();\n          } else if (\n            event === ITourEvent.click ||\n            event === ITourEvent.pointerover ||\n            (event && event.indexOf(ITourEvent.keyup) > -1)\n          ) {\n            // we use normal listeners for mouseevents\n            const mainEvent = event?.split('.')[0];\n            const subEvent = event?.split('.')[1];\n            fromEvent(element, mainEvent)\n              .pipe(\n                filter(($event: Event) => {\n                  // only trigger if the event is a keyboard event and part of out list\n                  if ($event instanceof KeyboardEvent) {\n                    if (keyEvents.get($event.keyCode) === subEvent) {\n                      return true;\n                    }\n                    return false;\n                  } else {\n                    return true;\n                  }\n                }),\n                takeUntil(merge(event$.asObservable(), destroyedEvent$))\n              )\n              .subscribe(() => {\n                event$.next();\n                event$.complete();\n              });\n          } else if (event === ITourEvent.removed) {\n            // and we will use MutationObserver for DOM events\n            const observer: MutationObserver = new MutationObserver(() => {\n              if (!document.body.contains(element)) {\n                event$.next();\n                event$.complete();\n                observer.disconnect();\n              }\n            });\n\n            // stop listenining if tour is closed\n            destroyedEvent$.subscribe(() => {\n              observer.disconnect();\n            });\n            // observe for any DOM interaction in the element\n            observer.observe(element, {\n              childList: true,\n              subtree: true,\n              attributes: true,\n            });\n          }\n        }\n      });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  Router,\n  ActivatedRoute,\n  ParamMap,\n  NavigationExtras,\n  NavigationStart,\n  Event as NavigationEvent,\n} from '@angular/router';\nimport Shepherd from 'shepherd.js';\nimport { tap, map, filter } from 'rxjs/operators';\nimport { Observable, fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport {\n  CovalentGuidedTour,\n  ITourStep,\n  ITourOptions,\n  TourStepButton,\n} from './guided.tour';\n\nexport interface IGuidedTour extends ITourOptions {\n  steps: IGuidedTourStep[];\n  finishButtonText?: string;\n}\n\nexport interface IGuidedTourStep extends ITourStep {\n  routing?: {\n    route: string;\n    extras?: NavigationExtras;\n  };\n}\n\n/**\n *  Router enabled Shepherd tour\n */\nexport enum TourEvents {\n  complete = 'complete',\n  cancel = 'cancel',\n  hide = 'hide',\n  show = 'show',\n  start = 'start',\n  active = 'active',\n  inactive = 'inactive',\n}\n\nexport interface IGuidedTourEvent {\n  step: any;\n  previous: any;\n  tour: any;\n}\n\n@Injectable()\nexport class CovalentGuidedTourService extends CovalentGuidedTour {\n  private _toursMap: Map<string, IGuidedTour> = new Map<string, IGuidedTour>();\n  private _tourStepURLs: Map<string, string> = new Map<string, string>();\n  constructor(\n    private _router: Router,\n    private _route: ActivatedRoute,\n    private _httpClient: HttpClient\n  ) {\n    super();\n    _router.events\n      .pipe(\n        filter(\n          (event: NavigationEvent) =>\n            event instanceof NavigationStart &&\n            event.navigationTrigger === 'popstate'\n        )\n      )\n      .subscribe(() => {\n        if (this.shepherdTour.isActive()) {\n          this.shepherdTour.cancel();\n        }\n      });\n  }\n\n  tourEvent$(str: TourEvents): Observable<IGuidedTourEvent> {\n    return fromEvent(this.shepherdTour, str);\n  }\n\n  async registerTour(\n    tourName: string,\n    tour: IGuidedTour | string\n  ): Promise<void> {\n    const guidedTour: IGuidedTour =\n      typeof tour === 'string' ? await this._loadTour(tour) : tour;\n    this._toursMap.set(tourName, guidedTour);\n  }\n\n  startTour(tourName: string): Shepherd.Tour | undefined {\n    const guidedTour = this._getTour(tourName);\n    this.finish();\n    if (guidedTour && guidedTour.steps && guidedTour.steps.length) {\n      // remove steps from tour since we need to preprocess them first\n      this.newTour(Object.assign({}, guidedTour, { steps: undefined }));\n      const tourInstance: Shepherd.Tour = this.shepherdTour.addSteps(\n        this._configureRoutesForSteps(\n          this._prepareTour(guidedTour.steps, guidedTour.finishButtonText)\n        )\n      );\n      // init route transition if step URL is different then the current location.\n      this.tourEvent$(TourEvents.show).subscribe(\n        (tourEvent: IGuidedTourEvent) => {\n          const currentURL: string = this._router.url.split(/[?#]/)[0];\n          const {\n            step: { id, options },\n          } = tourEvent;\n          if (this._tourStepURLs.has(id)) {\n            const stepRoute = this._tourStepURLs.get(id);\n            if (stepRoute !== currentURL) {\n              this._router.navigate([stepRoute]);\n            }\n          } else {\n            if (options && options.routing) {\n              this._tourStepURLs.set(id, options.routing.route);\n            } else {\n              this._tourStepURLs.set(id, currentURL);\n            }\n          }\n        }\n      );\n      this.start();\n      return tourInstance;\n    } else {\n      // tslint:disable-next-line:no-console\n      console.warn(`Tour ${tourName} does not exist. Please try another tour.`);\n      return undefined;\n    }\n  }\n\n  // Finds the right registered tour by using queryParams\n  // finishes any other tour and starts the new one.\n  initializeOnQueryParams(queryParam = 'tour'): Observable<ParamMap> {\n    return this._route.queryParamMap.pipe(\n      debounceTime(100),\n      tap((params: ParamMap) => {\n        const tourParam = params.get(queryParam);\n        if (tourParam) {\n          this.startTour(tourParam);\n          // get current search parameters\n          const searchParams: URLSearchParams = new URLSearchParams(\n            window.location.search\n          );\n          // delete tour queryParam\n          searchParams.delete(queryParam);\n          // build new URL string without it\n          let url: string =\n            window.location.protocol +\n            '//' +\n            window.location.host +\n            window.location.pathname;\n          if (searchParams.toString()) {\n            url += '?' + searchParams.toString();\n          }\n          // replace state in history without triggering a navigation\n          window.history.replaceState({ path: url }, '', url);\n        }\n      })\n    );\n  }\n\n  setNextBtnDisability(stepId: string, isDisabled: boolean): void {\n    if (this.shepherdTour.getById(stepId)) {\n      const stepOptions: ITourStep = (this.shepherdTour.getById(stepId) as any)\n        .options;\n      stepOptions.buttons?.forEach((button: TourStepButton) => {\n        if (button.text === 'chevron_right') {\n          button.disabled = isDisabled;\n        }\n      });\n      this.shepherdTour.getById(stepId)?.updateStepOptions(stepOptions);\n    }\n  }\n\n  private async _loadTour(tourUrl: string): Promise<any> {\n    const request: Observable<object> = this._httpClient.get(tourUrl);\n    try {\n      return await request\n        .pipe(\n          map((resultSet: any) => {\n            return JSON.parse(JSON.stringify(resultSet));\n          })\n        )\n        .toPromise();\n    } catch {\n      return undefined;\n    }\n  }\n\n  private _getTour(key: string): IGuidedTour | undefined {\n    return this._toursMap.get(key);\n  }\n\n  private _configureRoutesForSteps(\n    routedSteps: IGuidedTourStep[]\n  ): IGuidedTourStep[] {\n    routedSteps.forEach((step: IGuidedTourStep) => {\n      if (step.routing) {\n        const route: string = step.routing.route;\n        // if there is a beforeShowPromise, then we save it and call it after the navigation\n        if (step.beforeShowPromise) {\n          const beforeShowPromise: () => Promise<void> = step.beforeShowPromise;\n          step.beforeShowPromise = () => {\n            return this._router\n              .navigate([route], step.routing?.extras)\n              .then(() => {\n                return beforeShowPromise();\n              });\n          };\n        } else {\n          step.beforeShowPromise = () => this._router.navigate([route]);\n        }\n      }\n    });\n\n    return routedSteps;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CovalentGuidedTourService } from './guided-tour.service';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [CovalentGuidedTourService],\n  declarations: [],\n  exports: [],\n})\nexport class CovalentGuidedTourModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}