{"version":3,"file":"shipbit-ngx-tour-guide.mjs","sources":["../../../projects/ngx-tour-guide/src/lib/ngx-tour-guide.service.ts","../../../projects/ngx-tour-guide/src/lib/action/action.component.ts","../../../projects/ngx-tour-guide/src/lib/action/action.component.html","../../../projects/ngx-tour-guide/src/lib/to-observable.pipe.ts","../../../projects/ngx-tour-guide/src/lib/ngx-tour-guide.component.ts","../../../projects/ngx-tour-guide/src/lib/ngx-tour-guide.component.html","../../../projects/ngx-tour-guide/src/lib/ngx-tour-guide.provider.ts","../../../projects/ngx-tour-guide/src/public-api.ts","../../../projects/ngx-tour-guide/src/shipbit-ngx-tour-guide.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\nimport {\r\n  BehaviorSubject,\r\n  Observable,\r\n  Subject,\r\n  firstValueFrom,\r\n  isObservable,\r\n} from 'rxjs';\r\n\r\nimport {\r\n  TourGuideActionEvent,\r\n  TourGuideActions,\r\n} from './models/tour-guide-actions.model';\r\nimport { EnterExit, TourGuideStop } from './models/tour-guide-stop.model';\r\nimport { TourGuide } from './models/tour-guide.model';\r\n\r\n/**\r\n * Interface to emit the internal state of the current stop\r\n */\r\ninterface TourProgress {\r\n  isFirst: boolean;\r\n\r\n  isLast: boolean;\r\n\r\n  index: number;\r\n\r\n  count: number;\r\n}\r\n\r\n/**\r\n * Service to start, stop and navigate tours\r\n */\r\n@Injectable()\r\nexport class NgxTourGuideService {\r\n  /**\r\n   * Emits the current tour stop\r\n   */\r\n  public currentStop$: Observable<TourGuideStop | undefined>;\r\n\r\n  /**\r\n   * Emits the current stop's metadata\r\n   */\r\n  public progress$: Observable<TourProgress | undefined>;\r\n\r\n  /**\r\n   * Subject to control emitting of the current stop\r\n   */\r\n  private currentStopSubject$ = new BehaviorSubject<TourGuideStop | undefined>(\r\n    undefined\r\n  );\r\n\r\n  /**\r\n   * The currently running tour\r\n   */\r\n  public tourGuide?: TourGuide;\r\n\r\n  /**\r\n   * Subject to control emitting of the current progress\r\n   */\r\n  private progressSubject$ = new BehaviorSubject<TourProgress | undefined>(\r\n    undefined\r\n  );\r\n\r\n  /**\r\n   * Store of executable tours\r\n   */\r\n  private registry: { [key: string]: TourGuide } = {};\r\n\r\n  constructor() {\r\n    this.currentStop$ = this.currentStopSubject$.asObservable();\r\n    this.progress$ = this.progressSubject$.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Registers a tour to enable calling it by name\r\n   * @param tourGuide tour configuration\r\n   * @param name name of the tour\r\n   */\r\n  public register(tourGuide: TourGuide, name: string) {\r\n    this.registry[name] = tourGuide;\r\n  }\r\n\r\n  /**\r\n   * Removes the handle of a tour and stops it if running\r\n   * @param name tour name\r\n   */\r\n  public unregister(name: string) {\r\n    const tourGuide = this.registry[name];\r\n\r\n    if (tourGuide === this.tourGuide) {\r\n      this.stop();\r\n    }\r\n    delete this.registry[name];\r\n  }\r\n\r\n  /**\r\n   * Checks whether a tour with given name is registered\r\n   * @param name tour name\r\n   */\r\n  public contains(name: string) {\r\n    return !!this.registry[name];\r\n  }\r\n\r\n  /**\r\n   * Start a tour.\r\n   * This will throw if another tour is currently running.\r\n   */\r\n  public start(tourGuide: TourGuide | string) {\r\n    if (this.tourGuide) {\r\n      throw new Error(\r\n        'Another TourGuide is already active - consider calling TourGuideService.stop.'\r\n      );\r\n    }\r\n\r\n    const tour =\r\n      typeof tourGuide === 'string' ? this.registry[tourGuide] : tourGuide;\r\n\r\n    this.tourGuide = tour;\r\n\r\n    this.goto(0);\r\n  }\r\n\r\n  /**\r\n   * Stops the current tour if one is running\r\n   */\r\n  public stop() {\r\n    this.tourGuide = undefined;\r\n\r\n    this.currentStopSubject$.next(undefined);\r\n  }\r\n\r\n  /**\r\n   * Go to the tour's next stop relative to the current.\r\n   * This method can circle to the first if current is last.\r\n   */\r\n  public next() {\r\n    if (!this.tourGuide) {\r\n      throw new Error(\r\n        'No active TourGuide. Use TourGuideService.start before navigating in a tour'\r\n      );\r\n    }\r\n\r\n    const currentIndex = this.getCurrentIndex();\r\n    const nextIndex = (currentIndex + 1) % this.tourGuide.stops.length;\r\n\r\n    this.goto(nextIndex);\r\n  }\r\n\r\n  /**\r\n   * Go to the tour's previous stop relative to the current.\r\n   * This method can circle to the last if current is first.\r\n   */\r\n  public previous() {\r\n    if (!this.tourGuide) {\r\n      throw new Error(\r\n        'No active TourGuide. Use TourGuideService.start before navigating in a tour'\r\n      );\r\n    }\r\n\r\n    const currentIndex = this.getCurrentIndex();\r\n    const previousIndex =\r\n      (this.tourGuide.stops.length + currentIndex - 1) %\r\n      this.tourGuide.stops.length;\r\n\r\n    this.goto(previousIndex);\r\n  }\r\n\r\n  /**\r\n   * Executes previous,next,stop in the context of a TourGuideAction\r\n   */\r\n  public executeAction(action?: keyof TourGuideActions) {\r\n    if (!this.tourGuide || !this.currentStopSubject$.value || !action) {\r\n      return;\r\n    }\r\n\r\n    if (this.tourGuide.actions) {\r\n      const tourAction = this.tourGuide.actions[action];\r\n\r\n      if (tourAction?.onExecute) {\r\n        const event: TourGuideActionEvent = {};\r\n\r\n        tourAction.onExecute(this.currentStopSubject$.value, event);\r\n\r\n        if (event.cancel) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    switch (action) {\r\n      case 'finishTour':\r\n      case 'skipTour':\r\n        this.stop();\r\n        break;\r\n      case 'nextStop':\r\n        this.next();\r\n        break;\r\n      case 'previousStop':\r\n        this.previous();\r\n        break;\r\n    }\r\n  }\r\n\r\n  public getCurrentProceedAction(): keyof TourGuideActions | undefined {\r\n    if (!this.tourGuide) {\r\n      return undefined;\r\n    }\r\n\r\n    const index = this.getCurrentIndex();\r\n\r\n    return index === this.tourGuide.stops.length - 1\r\n      ? 'finishTour'\r\n      : 'nextStop';\r\n  }\r\n\r\n  /**\r\n   * Change the current step and emit currentStop and progress\r\n   */\r\n  private async goto(index: number) {\r\n    if (!this.tourGuide) {\r\n      return;\r\n    }\r\n\r\n    const stops = this.tourGuide.stops;\r\n    const nextStop = stops[index];\r\n    const currentStop = this.currentStopSubject$.value;\r\n\r\n    await this.awaited(currentStop?.onLeave);\r\n    await this.awaited(nextStop.onEnter);\r\n\r\n    this.currentStopSubject$.next(nextStop);\r\n    this.progressSubject$.next({\r\n      isLast: index === stops.length - 1,\r\n      isFirst: index === 0,\r\n      index,\r\n      count: stops.length,\r\n    });\r\n  }\r\n\r\n  async awaited(action?: EnterExit) {\r\n    if (!action) return;\r\n    var result = action();\r\n    if (isObservable(result)) {\r\n      await firstValueFrom(result);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the current stop index of the tour.\r\n   * @returns -1 or index of current tour stop.\r\n   */\r\n  private getCurrentIndex() {\r\n    const currentStop = this.currentStopSubject$.value;\r\n    if (!currentStop || !this.tourGuide) {\r\n      return -1;\r\n    }\r\n\r\n    return Math.max(this.tourGuide.stops.indexOf(currentStop), 0);\r\n  }\r\n}\r\n","import { NgIf } from '@angular/common';\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n  TourGuideAction,\r\n  TourGuideActions,\r\n} from '../models/tour-guide-actions.model';\r\nimport { NgxTourGuideService } from '../ngx-tour-guide.service';\r\n\r\n@Component({\r\n  imports: [NgIf],\r\n  selector: 'shipbit-ngx-tour-guide-action',\r\n  templateUrl: 'action.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n})\r\nexport class ActionComponent implements OnChanges {\r\n  public action?: TourGuideAction;\r\n  @Input() public actionKey?: keyof TourGuideActions;\r\n\r\n  constructor(public tourGuideService: NgxTourGuideService) {}\r\n\r\n  public ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.actionKey) {\r\n      this.updateAction();\r\n    }\r\n  }\r\n\r\n  private updateAction() {\r\n    if (!this.actionKey || !this.tourGuideService.tourGuide?.actions) {\r\n      this.action = undefined;\r\n      return;\r\n    }\r\n\r\n    this.action = this.tourGuideService.tourGuide.actions[this.actionKey];\r\n  }\r\n}\r\n","<div [hidden]=\"action?.hidden\">\r\n  <div #customActionContent><ng-content></ng-content></div>\r\n\r\n  <button\r\n    *ngIf=\"!customActionContent.children.length && action?.label\"\r\n    [class]=\"action?.buttonClasses\"\r\n    (click)=\"tourGuideService.executeAction(actionKey)\"\r\n  >\r\n    <label>{{ action?.label }}</label>\r\n  </button>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { isObservable, of } from 'rxjs';\r\n\r\n@Pipe({\r\n  name: 'shipbitRx',\r\n  standalone: true,\r\n})\r\nexport class ToObservablePipe implements PipeTransform {\r\n  transform(value: any) {\r\n    return isObservable(value) ? value : of(value);\r\n  }\r\n}\r\n","import { animate, style, transition, trigger } from '@angular/animations';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  HostBinding,\r\n  OnDestroy,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\nimport { fromEvent, merge, NEVER, Observable, of, Subject } from 'rxjs';\r\nimport {\r\n  debounceTime,\r\n  delay,\r\n  map,\r\n  retryWhen,\r\n  scan,\r\n  shareReplay,\r\n  switchMap,\r\n  take,\r\n  takeUntil,\r\n  tap,\r\n} from 'rxjs/operators';\r\n\r\nimport { NgxTourGuideService } from './ngx-tour-guide.service';\r\n\r\nimport { AsyncPipe, NgIf } from '@angular/common';\r\nimport { ActionComponent } from './action/action.component';\r\nimport { NumericMargin, TourGuideStop } from './models/tour-guide-stop.model';\r\nimport { ToObservablePipe } from './to-observable.pipe';\r\n\r\ninterface ScanState {\r\n  errorCount: number;\r\n\r\n  error: any;\r\n}\r\n\r\n/**\r\n * Display component.\r\n * It is necessary that only one instance exists since the consumed service is a statefull singleton\r\n */\r\n@Component({\r\n  imports: [ToObservablePipe, AsyncPipe, NgIf, ActionComponent],\r\n  selector: 'shipbit-ngx-tour-guide',\r\n  templateUrl: 'ngx-tour-guide.component.html',\r\n  styleUrl: 'ngx-tour-guide.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  standalone: true,\r\n  animations: [\r\n    trigger('stopAnimation', [\r\n      transition(':enter', [\r\n        style({ opacity: 0 }),\r\n        animate('.5s ease-out', style({ opacity: 1 })),\r\n      ]),\r\n      transition('void => *', []),\r\n      transition('* => void', []),\r\n      transition('* <=> *', [\r\n        style({ transform: 'scale(0,0)', opacity: 0.4 }),\r\n        animate('.2s ease-out', style({ opacity: 1, transform: 'scale(1,1)' })),\r\n      ]),\r\n    ]),\r\n  ],\r\n})\r\nexport class NgxTourGuideComponent implements OnDestroy {\r\n  /**\r\n   * Emits a calculated style to clip the overlay around the stop's element.\r\n   * Emits on changes of currentStop and 'viewPort'.\r\n   */\r\n  public clipPath$: Observable<string | undefined>;\r\n\r\n  /**\r\n   * Template of a stop\r\n   */\r\n  @ViewChild('stopTemplate', { static: true })\r\n  public stopTemplate!: TemplateRef<any>;\r\n\r\n  /**\r\n   * Set host class\r\n   */\r\n  @HostBinding('class') hostClass = 'ngx-tour-guide';\r\n\r\n  /**\r\n   * The cdkOverlay reference used to position the stop template\r\n   */\r\n  private overlayRef = this.overlay.create({\r\n    hasBackdrop: false,\r\n    panelClass: 'ngx-tour-guide',\r\n  });\r\n\r\n  /**\r\n   * The cdkPortalRef used to update the context of the template\r\n   */\r\n  private portalRef!: TemplatePortal;\r\n\r\n  /**\r\n   * Cleanup trigger emits OnDestroy\r\n   */\r\n  private destroy$ = new Subject<void>();\r\n\r\n  /**\r\n   * Emits to stop awaiting a stop action\r\n   */\r\n  private cancelStopAction$ = new Subject<void>();\r\n\r\n  constructor(\r\n    public tourGuideService: NgxTourGuideService,\r\n    private overlay: Overlay,\r\n    private viewContainerRef: ViewContainerRef\r\n  ) {\r\n    // trigger on resize and scroll events of the window which\r\n    const reposition$ = merge(\r\n      fromEvent(window, 'scroll'),\r\n      fromEvent(window, 'resize'),\r\n      of(null)\r\n    ).pipe(\r\n      debounceTime(32),\r\n      switchMap(() => tourGuideService.currentStop$),\r\n      shareReplay({ refCount: true, bufferSize: 1 })\r\n    );\r\n\r\n    /**\r\n     * Emits a calculated style to clip the overlay around the stop's element.\r\n     * Emits on changes of currentStop and 'viewPort'.\r\n     */\r\n    this.clipPath$ = reposition$.pipe(\r\n      switchMap((stop) => {\r\n        return new Observable<TourGuideStop>((subscriber) => {\r\n          const element = this.getElement(stop);\r\n\r\n          if (!element) {\r\n            subscriber.next(stop);\r\n            subscriber.complete();\r\n\r\n            return;\r\n          }\r\n\r\n          element.scrollIntoView();\r\n\r\n          subscriber.next(stop);\r\n        });\r\n      }),\r\n      map((stop) => this.clipSpotlight(stop)),\r\n      // clipSpotlight throws if the element can not be selected, retry with delay\r\n      retryWhen((errors) =>\r\n        errors.pipe(\r\n          // count errors\r\n          scan<ScanState, any>(\r\n            (acc, error) => ({ errorCount: acc.errorCount + 1, error }),\r\n            {\r\n              errorCount: 0,\r\n              error: undefined,\r\n            }\r\n          ),\r\n          // throw after threshold\r\n          tap((scanState) => {\r\n            if (scanState.errorCount > 5) {\r\n              throw scanState.error;\r\n            }\r\n          }),\r\n          delay(200)\r\n        )\r\n      )\r\n    );\r\n\r\n    // Reposition the stop on resizes/ scrolls\r\n    reposition$\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(() => this.overlayRef.updatePosition());\r\n\r\n    // setTimeout to have the element resize before positioning\r\n    this.tourGuideService.currentStop$\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe((stop) => setTimeout(() => this.openStop(stop)));\r\n  }\r\n\r\n  /**\r\n   * Cleanup\r\n   */\r\n  public ngOnDestroy() {\r\n    this.destroy$.next();\r\n  }\r\n\r\n  /**\r\n   * Shows a specific stop in the overlay\r\n   */\r\n  private openStop(stop?: TourGuideStop) {\r\n    // clear the overlay if the tour has ended (stop === null)\r\n    if (!stop) {\r\n      this.overlayRef.detach();\r\n\r\n      return;\r\n    }\r\n\r\n    // attach the tmeplate if noty yet attached or update the template context\r\n    if (!this.overlayRef.hasAttached()) {\r\n      this.portalRef = new TemplatePortal(\r\n        this.stopTemplate,\r\n        this.viewContainerRef,\r\n        { $implicit: stop }\r\n      );\r\n\r\n      this.overlayRef.attach(this.portalRef);\r\n    } else {\r\n      this.portalRef.context.$implicit = stop;\r\n    }\r\n\r\n    // position the overlay\r\n    this.overlayRef.updatePositionStrategy(this.getPosition(stop));\r\n    this.overlayRef.updatePosition();\r\n\r\n    // handle stop actions as proceed triggers\r\n    this.setupStopAction(stop);\r\n  }\r\n\r\n  /**\r\n   * Get a target based positioning with a center fallback\r\n   */\r\n  private getPosition(stop: TourGuideStop) {\r\n    const element = this.getElement(stop);\r\n    const offset = this.getOffset(stop.margin);\r\n\r\n    if (element) {\r\n      const bbox = element.getBoundingClientRect();\r\n      const origin = {\r\n        x: bbox.x - offset.left,\r\n        y: bbox.y - offset.top,\r\n        width: bbox.width + offset.left + offset.right,\r\n        height: bbox.height + offset.top + offset.bottom,\r\n      };\r\n\r\n      return this.overlay\r\n        .position()\r\n        .flexibleConnectedTo(origin)\r\n        .withViewportMargin(16)\r\n        .withPositions([\r\n          // center on top of element\r\n          {\r\n            originX: 'center',\r\n            originY: 'top',\r\n            overlayX: 'center',\r\n            overlayY: 'bottom',\r\n            panelClass: 'tour-guide__direction--bottom',\r\n          },\r\n          // center on bottom of element\r\n          {\r\n            originX: 'center',\r\n            originY: 'bottom',\r\n            overlayX: 'center',\r\n            overlayY: 'top',\r\n            panelClass: 'tour-guide__direction--top',\r\n          },\r\n          // center left of element\r\n          {\r\n            originX: 'start',\r\n            originY: 'center',\r\n            overlayX: 'end',\r\n            overlayY: 'center',\r\n            panelClass: 'tour-guide__direction--right',\r\n          },\r\n          // center right of element\r\n          {\r\n            originX: 'end',\r\n            originY: 'center',\r\n            overlayX: 'start',\r\n            overlayY: 'center',\r\n            panelClass: 'tour-guide__direction--left',\r\n          },\r\n        ]);\r\n    }\r\n\r\n    // fallback to center\r\n    return this.overlay\r\n      .position()\r\n      .global()\r\n      .centerVertically()\r\n      .centerHorizontally();\r\n  }\r\n\r\n  /**\r\n   * Get the stops target element if defined, evaluates respective query string\r\n   */\r\n  private getElement(stop?: TourGuideStop): HTMLElement | undefined {\r\n    if (!stop?.element) {\r\n      return undefined;\r\n    }\r\n\r\n    return (\r\n      stop.element instanceof HTMLElement\r\n        ? stop.element\r\n        : document.querySelector(stop.element)\r\n    ) as HTMLElement;\r\n  }\r\n\r\n  /**\r\n   * The spotlight is double shadow so it has to be positioned relative to the target elements bounds\r\n   */\r\n  private clipSpotlight(stop: TourGuideStop, padding = 5) {\r\n    if (!stop?.element) {\r\n      return undefined;\r\n    }\r\n\r\n    const element = this.getElement(stop);\r\n    const offset = this.getOffset(stop.margin);\r\n\r\n    if (!element) {\r\n      throw new Error('Invalid query selector: not found');\r\n    }\r\n\r\n    const bbox = element.getBoundingClientRect();\r\n    const top = `${bbox.top - offset.top - padding}px`;\r\n    const left = `${bbox.left - offset.left - padding}px`;\r\n    const right = `${bbox.right + offset.right + padding}px`;\r\n    const bottom = `${bbox.bottom + offset.bottom + padding}px`;\r\n\r\n    const outerRect = '0 0, 100% 0, 100% 100%, 0 100%, 0 0';\r\n    const innerRect = `${left} ${top}, ${right} ${top}, ${right} ${bottom}, ${left} ${bottom}, ${left} ${top}`;\r\n\r\n    return `\r\n            --clip-box: polygon(evenodd, ${outerRect},${innerRect});\r\n        `;\r\n  }\r\n\r\n  /**\r\n   * Get the defined margin values for each direction\r\n   */\r\n  private getOffset(margin?: NumericMargin): {\r\n    top: number;\r\n    right: number;\r\n    bottom: number;\r\n    left: number;\r\n  } {\r\n    const result = {\r\n      top: 0,\r\n      right: 0,\r\n      bottom: 0,\r\n      left: 0,\r\n    };\r\n\r\n    if (!margin) {\r\n      return result;\r\n    }\r\n\r\n    if (Array.isArray(margin)) {\r\n      result.top = margin[0];\r\n      result.right = margin[1];\r\n      result.bottom = margin.length > 2 ? (margin[2] as number) : margin[0];\r\n      result.left = margin.length > 3 ? (margin[3] as number) : margin[1];\r\n    } else {\r\n      result.top = margin;\r\n      result.right = margin;\r\n      result.bottom = margin;\r\n      result.left = margin;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Setup the proceed action defined in the stop\r\n   */\r\n  private setupStopAction(stop: TourGuideStop) {\r\n    if (!stop.action?.event) {\r\n      return;\r\n    }\r\n\r\n    const progress = this.tourGuideService.getCurrentProceedAction();\r\n    if (!progress) {\r\n      return;\r\n    }\r\n\r\n    const observable = this.getStopAction(stop);\r\n    observable\r\n      .pipe(\r\n        take(1),\r\n        delay(stop.action.delay || 0),\r\n        takeUntil(this.cancelStopAction$),\r\n        takeUntil(this.destroy$)\r\n      )\r\n      .subscribe(() => this.tourGuideService.executeAction(progress));\r\n  }\r\n\r\n  private getStopAction(stop: TourGuideStop) {\r\n    if (!stop.action?.event) {\r\n      return NEVER;\r\n    }\r\n\r\n    if (typeof stop.action.event === 'string') {\r\n      const stopElement = this.getElement(stop);\r\n      if (!stopElement) {\r\n        throw new Error(\r\n          'Stop action is defined but stop does not provide an element'\r\n        );\r\n      }\r\n\r\n      return fromEvent(stopElement, stop.action.event);\r\n    } else {\r\n      return stop.action.event;\r\n    }\r\n  }\r\n}\r\n","<div\r\n  class=\"tour-guide--overlay\"\r\n  [class.tour-active]=\"tourGuideService.currentStop$ | async\"\r\n  [style]=\"clipPath$ | async\"\r\n  (click)=\"$event.stopPropagation()\"\r\n>\r\n  <div\r\n    *ngIf=\"!tourGuideService.tourGuide?.actions?.skipTour?.hidden\"\r\n    class=\"tour-guide--skip tour-guide--container\"\r\n    [style.top]=\"tourGuideService.tourGuide?.placements?.leaveTour?.top\"\r\n    [style.right]=\"tourGuideService.tourGuide?.placements?.leaveTour?.right\"\r\n    [style.bottom]=\"tourGuideService.tourGuide?.placements?.leaveTour?.bottom\"\r\n    [style.left]=\"tourGuideService.tourGuide?.placements?.leaveTour?.left\"\r\n  >\r\n    <shipbit-ngx-tour-guide-action actionKey=\"skipTour\">\r\n      <ng-content select=\"[ngxTourGuideSkipContent]\"></ng-content>\r\n    </shipbit-ngx-tour-guide-action>\r\n  </div>\r\n</div>\r\n\r\n<ng-template #stopTemplate let-stop>\r\n  <div\r\n    ngxTourGuideContainer\r\n    ngxTourGuideStop\r\n    class=\"tour-guide--stop tour-guide--container\"\r\n    [style.max-width]=\"stop.maxWidth\"\r\n    [@stopAnimation]=\"stop\"\r\n  >\r\n    <label class=\"stop-title\" *ngIf=\"stop.title\">\r\n      {{ stop.title | shipbitRx | async }}</label\r\n    >\r\n\r\n    <div class=\"stop-content\">\r\n      <ng-container *ngIf=\"stop.contentTemplate; else textContent\">\r\n        <ng-container\r\n          *ngTemplateOutlet=\"\r\n            stop.contentTemplate;\r\n            context: { $implicit: stop.content }\r\n          \"\r\n        >\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #textContent>\r\n        <span\r\n          class=\"\"\r\n          inner-text\r\n          *ngIf=\"stop.useHtml\"\r\n          [innerHTML]=\"stop.content | shipbitRx | async\"\r\n        ></span>\r\n        <span *ngIf=\"!stop.useHtml\">{{\r\n          stop.content | shipbitRx | async\r\n        }}</span>\r\n      </ng-template>\r\n    </div>\r\n\r\n    <ng-container *ngIf=\"tourGuideService.progress$ | async as progress\">\r\n      <shipbit-ngx-tour-guide-action\r\n        *ngIf=\"!progress.isFirst\"\r\n        actionKey=\"previousStop\"\r\n      >\r\n        <ng-content select=\"[ngxTourGuidePreviousContent]\"></ng-content>\r\n      </shipbit-ngx-tour-guide-action>\r\n\r\n      <label class=\"stop-counter\">\r\n        <span index>{{ progress.index + 1 }}</span>\r\n        <span divider>/</span>\r\n        <span count>{{ progress.count }}</span>\r\n      </label>\r\n\r\n      <shipbit-ngx-tour-guide-action\r\n        *ngIf=\"!progress.isLast && !stop?.action?.replacesNextOrFinish\"\r\n        actionKey=\"nextStop\"\r\n      >\r\n        <ng-content select=\"[ngxTourGuideNextContent]\"></ng-content>\r\n      </shipbit-ngx-tour-guide-action>\r\n\r\n      <shipbit-ngx-tour-guide-action\r\n        *ngIf=\"progress.isLast && !stop?.action?.replacesNextOrFinish\"\r\n        actionKey=\"finishTour\"\r\n      >\r\n        <ng-content select=\"[ngxTourGuideFinishContent]\"></ng-content>\r\n      </shipbit-ngx-tour-guide-action>\r\n    </ng-container>\r\n  </div>\r\n</ng-template>\r\n","import { makeEnvironmentProviders } from '@angular/core';\r\nimport { NgxTourGuideService } from './ngx-tour-guide.service';\r\n\r\nexport const provideTourGuide = () =>\r\n  makeEnvironmentProviders([NgxTourGuideService]);\r\n","/*\r\n * Public API Surface of ngx-tour-guide\r\n */\r\n\r\nexport * from './lib/models/tour-guide-actions.model';\r\nexport * from './lib/models/tour-guide-placements.model';\r\nexport * from './lib/models/tour-guide-stop.model';\r\nexport * from './lib/models/tour-guide.model';\r\nexport * from './lib/ngx-tour-guide.component';\r\nexport * from './lib/ngx-tour-guide.provider';\r\nexport * from './lib/ngx-tour-guide.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxTourGuideService"],"mappings":"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"}