{"version":3,"file":"ng-enjoyhint.mjs","sources":["../../src/lib/support/arrow.component.ts","../../src/lib/support/force-field.component.ts","../../src/lib/util/dom-helpers.ts","../../src/lib/support/direction.pipe.ts","../../src/lib/util/positions.ts","../../src/lib/support/text-or-template.component.ts","../../src/lib/support/EnjoyHintRef.ts","../../src/lib/component/enjoy-hint.component.ts","../../src/lib/component/enjoy-hint.component.html","../../src/lib/support/Tutorial.ts","../../src/lib/enjoyhint.service.ts","../../src/public-api.ts","../../src/ng-enjoyhint.ts"],"sourcesContent":["import {\n  Component,\n  ElementRef,\n  Input,\n  NgZone,\n  OnDestroy,\n  Signal,\n  computed,\n  signal,\n} from '@angular/core';\nimport { Direction } from './direction.pipe';\n\n@Component({\n  selector: 'lib-arrow',\n  standalone: true,\n  template: `\n    <svg [attr.viewBox]=\"viewBox()\">\n      <defs>\n        <marker\n          id=\"arrowMarker\"\n          viewBox=\"0 0 36 21\"\n          refX=\"21\"\n          refY=\"10\"\n          markerUnits=\"strokeWidth\"\n          orient=\"auto\"\n          markerWidth=\"16\"\n          markerHeight=\"12\"\n        >\n          <path id=\"polyline\" d=\"M0,0 c30,11 30,9 0,20\" />\n        </marker>\n      </defs>\n      <path [attr.d]=\"pathData()\" marker-end=\"url(#arrowMarker)\" />\n    </svg>\n  `,\n  styles: `\n    :host {\n      display: block;\n      width: 100%;\n      height: 100px;\n    }\n    path {\n      fill: none;\n      stroke: white;\n      stroke-width: 2;\n    }\n  `,\n})\nexport class ArrowComponent implements OnDestroy {\n  private readonly _direction = signal<Direction | undefined>(undefined);\n  @Input()\n  public get direction(): Direction | undefined {\n    return this._direction();\n  }\n  public set direction(value: Direction | undefined) {\n    this._direction.set(value);\n  }\n\n  private readonly _pointToElement = signal<HTMLElement | null>(null);\n  @Input()\n  public get pointToElement(): HTMLElement | null {\n    return this._pointToElement();\n  }\n  public set pointToElement(value: HTMLElement | null) {\n    this._pointToElement.set(value);\n  }\n\n  readonly viewBox = computed(() => {\n    const bounds = this.bounds();\n    if (!bounds) {\n      return `0 0 0 0`;\n    }\n    return `0 0 ${bounds.width} ${bounds.height}`;\n  });\n\n  readonly pathData: Signal<string> = computed(() => {\n    const bounds = this.bounds() ?? { x: 0, y: 0, width: 0, height: 0 };\n    const absCenterX = bounds.x + bounds.width / 2;\n    const absCenterY = bounds.y + bounds.height / 2;\n\n    const padding = 5;\n    const minX = padding;\n    const minY = padding;\n    const maxX = bounds.width - padding;\n    const maxY = bounds.height - padding;\n    const width = maxX - minX;\n    const height = maxY - minY;\n    const halfWidth = width / 2;\n    const halfHeight = height / 2;\n\n    const direction = this._direction();\n    const pointToElement = this._pointToElement();\n    const elementCenterPoint = pointToElement?.getBoundingClientRect() ?? {\n      x: 0,\n      y: 0,\n      width: 0,\n      height: 0,\n    };\n    const elementCenterX = elementCenterPoint.x + elementCenterPoint.width / 2;\n    const elementCenterY = elementCenterPoint.y + elementCenterPoint.height / 2;\n\n    const dx = elementCenterX - absCenterX;\n    const dy = elementCenterY - absCenterY;\n\n    let fromX = 0,\n      fromY = 0,\n      toX = 0,\n      toY = 0,\n      controlPointX = 0,\n      controlPointY = 0;\n\n    switch (direction) {\n      case 'top':\n        fromX = halfWidth;\n        fromY = minY;\n        toX = halfWidth + dx;\n        toY = maxY;\n        controlPointX = halfWidth;\n        controlPointY = halfHeight;\n        break;\n      case 'bottom':\n        fromX = halfWidth;\n        fromY = maxY;\n        toX = halfWidth + dx;\n        toY = minY;\n        controlPointX = halfWidth;\n        controlPointY = halfHeight;\n        break;\n      case 'left':\n        fromX = halfWidth;\n        fromY = minY;\n        toX = maxX;\n        toY = halfHeight + dy;\n        controlPointX = halfWidth;\n        controlPointY = halfHeight;\n        break;\n      case 'right':\n        fromX = halfWidth;\n        fromY = minY;\n        toX = minX;\n        toY = halfHeight + dy;\n        controlPointX = halfWidth;\n        controlPointY = halfHeight;\n        break;\n    }\n\n    toX = Math.max(minX, Math.min(maxX, toX));\n    toY = Math.max(minY, Math.min(maxY, toY));\n\n    return `M${fromX},${fromY} Q${controlPointX},${controlPointY} ${toX},${toY}`;\n  });\n\n  private readonly bounds = signal<DOMRect | undefined>(undefined);\n  private readonly resizeObserver: ResizeObserver;\n\n  constructor(private readonly host: ElementRef<SVGElement>, zone: NgZone) {\n    const observer = new ResizeObserver(() => {\n      zone.run(() => {\n        this.bounds.set(host.nativeElement.getBoundingClientRect());\n      });\n    });\n    observer.observe(host.nativeElement);\n    this.resizeObserver = observer;\n  }\n\n  ngOnDestroy() {\n    this.resizeObserver.unobserve(this.host.nativeElement);\n    this.resizeObserver.disconnect();\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'lib-force-field',\n  standalone: true,\n  template: ``,\n  host: {\n    '[style.width]': 'size.width + \"px\"',\n    '[style.height]': 'size.height + \"px\"',\n    '[style.minWidth]': 'size.width + \"px\"',\n    '[style.minHeight]': 'size.height + \"px\"',\n    '[style.maxWidth]': 'size.width + \"px\"',\n    '[style.maxHeight]': 'size.height + \"px\"',\n    '[style.top]': 'position.y + \"px\"',\n    '[style.left]': 'position.x + \"px\"',\n    '(click)': 'eventBlackHole($event)',\n    '(mousedown)': 'eventBlackHole($event)',\n    '(touchstart)': 'eventBlackHole($event)'\n  },\n  styles: [\n    `\n      :host {\n        display: block;\n        position: fixed;\n        transition: top 500ms ease-in-out, left 500ms ease-in-out;\n      }\n    `,\n  ],\n})\nexport class ForceFieldComponent {\n  @Input() size!: { width: number; height: number; };\n  @Input() position!: { x: number; y: number; };\n\n  eventBlackHole(event: Event) {\n    event.stopImmediatePropagation();\n    event.stopPropagation();\n    event.preventDefault();\n    return false;\n  }\n}\n","export class Elements {\n  get appRoot() {\n    return document.querySelector<HTMLElement>('[ng-version]');\n  }\n  get body() {\n    return document.body;\n  }\n}\n\nexport function provideWindow() {\n  return { provide: Window, useValue: window };\n}\n","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { Pipe } from '@angular/core';\n\nexport type Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function getDirection(\n  position?: ConnectionPositionPair\n): Direction | undefined {\n  if (!position) {\n    return undefined;\n  }\n\n  if (position.originX === 'start' && position.originY === 'center') {\n    return 'left';\n  }\n\n  if (position.originX === 'end' && position.originY === 'center') {\n    return 'right';\n  }\n\n  if (position.originX === 'center' && position.originY === 'top') {\n    return 'top';\n  }\n\n  if (position.originX === 'center' && position.originY === 'bottom') {\n    return 'bottom';\n  }\n\n  console.warn('Unknown position', position);\n  return undefined;\n}\n\n@Pipe({\n  name: 'direction',\n  standalone: true,\n  pure: true,\n})\nexport class DirectionPipe {\n  transform(position?: ConnectionPositionPair): Direction | undefined {\n    return getDirection(position);\n  }\n}\n","import { ConnectedPosition } from \"@angular/cdk/overlay\";\n\nexport const rightCenter: ConnectedPosition = {\n  // right center\n  originX: 'end',\n  overlayX: 'start',\n  originY: 'center',\n  overlayY: 'center',\n};\nexport const rightTop: ConnectedPosition = {\n  // right top\n  originX: 'end',\n  overlayX: 'start',\n  originY: 'top',\n  overlayY: 'bottom',\n};\nexport const rightBottom: ConnectedPosition = {\n  // right bottom\n  originX: 'end',\n  overlayX: 'start',\n  originY: 'bottom',\n  overlayY: 'top',\n};\nexport const leftCenter: ConnectedPosition = {\n  // left center\n  originX: 'start',\n  overlayX: 'end',\n  originY: 'center',\n  overlayY: 'center',\n};\nexport const leftTop: ConnectedPosition = {\n  // left top\n  originX: 'start',\n  overlayX: 'end',\n  originY: 'top',\n  overlayY: 'bottom',\n};\nexport const leftBottom: ConnectedPosition = {\n  // left bottom\n  originX: 'start',\n  overlayX: 'end',\n  originY: 'bottom',\n  overlayY: 'top',\n};\nexport const topCenter: ConnectedPosition = {\n  // top center\n  originX: 'center',\n  overlayX: 'center',\n  originY: 'top',\n  overlayY: 'bottom',\n};\nexport const bottomCenter: ConnectedPosition = {\n  // bottom center\n  originX: 'center',\n  overlayX: 'center',\n  originY: 'bottom',\n  overlayY: 'top',\n};\n\nexport const ALL_POSITIONS = [\n  rightCenter,\n  rightTop,\n  rightBottom,\n  leftCenter,\n  leftTop,\n  leftBottom,\n  topCenter,\n  bottomCenter,\n];\n\nexport const ALL_SIDES = [rightCenter, leftCenter, topCenter, bottomCenter];\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  Input,\n  Signal,\n  TemplateRef,\n  computed,\n  signal,\n} from '@angular/core';\n\ntype TemplateWithContext = { template: TemplateRef<unknown>; context: unknown };\ntype TextOrTemplateValue =\n  | string\n  | TemplateRef<unknown>\n  | TemplateWithContext\n  | undefined;\n\n@Component({\n  selector: 'lib-text-or-template',\n  standalone: true,\n  imports: [NgTemplateOutlet],\n  template: `\n    @if (templateValue(); as template) {\n    <ng-container\n      *ngTemplateOutlet=\"template.template; context: template.context\"\n    ></ng-container>\n    } @else if (stringValue() && defaultTextTemplate) {\n    <ng-container\n      *ngTemplateOutlet=\"\n        defaultTextTemplate;\n        context: { $implicit: stringValue() }\n      \"\n    ></ng-container>\n    } @else if (stringValue()) {\n    <span>{{ stringValue() }}</span>\n    }\n  `,\n  styles: ``,\n})\nexport class TextOrTemplateComponent {\n  private readonly _value = signal<TextOrTemplateValue>(undefined);\n  @Input()\n  public get value(): TextOrTemplateValue {\n    return this._value();\n  }\n  public set value(value: TextOrTemplateValue) {\n    this._value.set(value);\n  }\n\n  @ContentChild(TemplateRef)\n  defaultTextTemplate?: TemplateRef<{ $implicit: string | undefined }>;\n\n  readonly stringValue = computed<string | undefined>(() => {\n    const value = this._value();\n    return typeof value === 'string' ? value : undefined;\n  });\n  readonly templateValue: Signal<TemplateWithContext | undefined> = computed<TemplateWithContext | undefined>(() => {\n    const value = this._value();\n    if (value instanceof TemplateRef) {\n      return { template: value, context: { $implicit: undefined } };\n    }\n    if (value instanceof Object && value.template instanceof TemplateRef) {\n      return { template: value.template, context: value.context };\n    }\n    return undefined;\n  });\n}\n","import { EventEmitter } from '@angular/core';\nimport { Tutorial } from './Tutorial';\nimport { IEnjoyHintOptions } from '../lib.interfaces';\n\nexport class EnjoyHintRef {\n  constructor(public readonly tutorial: Tutorial, public readonly options: Partial<IEnjoyHintOptions> = {}) { }\n\n  readonly onClose = new EventEmitter<boolean>();\n\n  close(completed = false) {\n    this.onClose.emit(completed);\n  }\n}\n","import {\n  Component,\n  DestroyRef,\n  HostBinding,\n  NgZone,\n  Signal,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  WritableSignal,\n  computed,\n  effect,\n  signal,\n} from '@angular/core';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport { IEnjoyHintOptions, ITutorialStep } from '../lib.interfaces';\nimport { EnjoyHintRef } from '../support/EnjoyHintRef';\nimport {\n  Observable,\n  combineLatest,\n  filter,\n  from,\n  fromEvent,\n  map,\n  pairwise,\n  switchMap,\n  startWith,\n} from 'rxjs';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport {\n  ConnectionPositionPair,\n  FlexibleConnectedPositionStrategy,\n  Overlay,\n  OverlayPositionBuilder,\n  OverlayRef,\n  PositionStrategy,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NgClass } from '@angular/common';\nimport { debounceTime, first, takeUntil } from 'rxjs/operators';\nimport { ArrowComponent } from '../support/arrow.component';\nimport { ForceFieldComponent } from '../support/force-field.component';\nimport { provideWindow } from '../util/dom-helpers';\nimport { DirectionPipe } from '../support/direction.pipe';\nimport { ALL_SIDES } from '../util/positions';\nimport { TextOrTemplateComponent } from '../support/text-or-template.component';\n\n@Component({\n  selector: 'lib-enjoyhint',\n  standalone: true,\n  imports: [\n    ForceFieldComponent,\n    ArrowComponent,\n    NgClass,\n    DirectionPipe,\n    TextOrTemplateComponent,\n  ],\n  templateUrl: './enjoy-hint.component.html',\n  styleUrl: './enjoy-hint.component.scss',\n  animations: [\n    trigger('fadeIn', [\n      transition(':enter', [style({ opacity: 0 }), animate(500)]),\n    ]),\n  ],\n  providers: [provideWindow()],\n})\nexport class EnjoyHintComponent {\n  @ViewChild('instructions') instructions!: TemplateRef<any>;\n  @HostBinding('style.opacity') readonly opacity: string;\n\n  static readonly defaultOptions: IEnjoyHintOptions = {\n    padding: 5,\n    fontFamily: 'sans-serif',\n    backdropColor: 'black',\n    overlayZIndex: undefined,\n    backdropOpacity: 0.75,\n    foregroundColor: 'white',\n    nextButton: { text: 'Next' },\n    skipButton: { text: 'Skip' },\n    previousButton: { text: 'Previous' },\n  };\n  readonly viewSize: Signal<{ width: number; height: number }>;\n  readonly ffSize = computed(() => ({\n    width: this.viewSize().width + this.options.padding,\n    height: this.viewSize().height + this.options.padding,\n  }));\n  readonly instructionsWidth = computed(() => this.viewSize().width / 4);\n  readonly animating = signal(false);\n  readonly focusElement = computed(() => {\n    const step = this.step();\n    if (!step?.selector) {\n      return null;\n    }\n    return document.querySelector<HTMLElement>(step.selector);\n  });\n  readonly elementBounds = computed<DOMRect>(() => {\n    const element = this.focusElement();\n    if (!element) {\n      return {\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0,\n      } as DOMRect;\n    }\n    return element.getBoundingClientRect();\n  });\n  readonly ffPositions = computed(() => {\n    const bounds = this.elementBounds();\n    const size = this.viewSize();\n    return {\n      left: {\n        x: -1 * size.width + bounds.x - this.options.padding,\n        y: -1 * this.options.padding,\n      },\n      right: {\n        x: bounds.x + bounds.width,\n        y: -1 * this.options.padding,\n      },\n      top: {\n        x: -1 * this.options.padding,\n        y: -1 * size.height + bounds.y - this.options.padding,\n      },\n      bottom: {\n        x: -1 * this.options.padding,\n        y: bounds.y + bounds.height,\n      },\n    };\n  });\n  readonly step: Signal<ITutorialStep | undefined>;\n  readonly options: IEnjoyHintOptions;\n\n  private overlayRef: OverlayRef | null = null;\n  readonly positionStrategy: Signal<PositionStrategy> = computed(() => {\n    const element = this.focusElement();\n    if (!element) {\n      return this.overlayPositionBuilder\n        .global()\n        .centerHorizontally()\n        .centerVertically();\n    }\n    return this.overlayPositionBuilder\n      .flexibleConnectedTo(element)\n      .withFlexibleDimensions(false)\n      .withPositions(ALL_SIDES);\n  });\n  readonly position: WritableSignal<ConnectionPositionPair | undefined> =\n    signal(undefined);\n  thisIsDestroyed: Observable<void>;\n  /**\n   * instead of doing actual padding around the focus element (which would allow clicks)\n   * outside of the focus element), we'll add some glow around wht focus element but still\n   * on the force field\n   *\n   * white must be used as anything semi-transparent or transparent will not show up\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow#length\n   */\n  readonly focusElementHighlight = computed(() => {\n    const padding = this.options.padding;\n    const boxShadow = `0 0 ${padding / 2}px ${padding}px white`;\n    return boxShadow;\n  });\n\n  constructor(\n    public readonly ref: EnjoyHintRef,\n    window: Window,\n    private readonly overlayPositionBuilder: OverlayPositionBuilder,\n    private readonly overlay: Overlay,\n    private readonly viewContainerRef: ViewContainerRef,\n    private readonly destroyedRef: DestroyRef,\n    private readonly zone: NgZone\n  ) {\n    // Consider both the current and previous steps with transitioning state\n    // The new step is only effective once it is no longer transitioning\n    const transition$ = combineLatest([\n      toObservable(this.ref.tutorial.step).pipe(\n        startWith(undefined),\n        pairwise()\n      ),\n      toObservable(this.ref.tutorial.transitioning)\n    ]).pipe(\n      debounceTime(50), // since both start and end hooks set this, make sure it's done with all transitioning\n    );\n    const step$ = transition$.pipe(\n      map(([[prev, curr], transition]) => {\n        if (transition === 'start') {\n          return prev;\n        }\n        return curr;\n      })\n    );\n\n    transition$.subscribe(([[prev, curr], transition]) => {\n      if (!transition && !!prev && !curr) {\n        this.close();\n      }\n    })\n\n    // Convert back to a signal\n    this.step = toSignal(step$, { initialValue: undefined });\n\n    this.options = {\n      ...EnjoyHintComponent.defaultOptions,\n      ...ref.options,\n    };\n    this.opacity = this.options.backdropOpacity.toString();\n    const getSize = () => ({\n      width: window.innerWidth,\n      height: window.innerHeight,\n    });\n    this.viewSize = toSignal(fromEvent(window, 'resize').pipe(map(getSize)), {\n      initialValue: getSize(),\n    });\n\n    this.thisIsDestroyed = from(\n      new Promise<void>((resolve) =>\n        this.destroyedRef.onDestroy(() => resolve())\n      )\n    );\n\n    combineLatest([toObservable(this.focusElement), toObservable(this.step)])\n      .pipe(\n        takeUntil(this.thisIsDestroyed),\n        filter(([e, s]) => !!e && !!s),\n        switchMap(([element, step]) =>\n          fromEvent(element!, step!.event).pipe(\n            filter(() => !this.animating()),\n            first()\n          )\n        )\n      )\n      .subscribe(async () => {\n        await this.ref.tutorial.nextStep();\n        if (!this.step()) {\n          this.close(true);\n        }\n      });\n\n    effect(\n      () => {\n        const currentStep = this.step(); // even though we don't use it, this is how we make the effect dependent on the step\n        if (!currentStep) {\n          return;\n        }\n        console.log({ currentStep });\n        const overlayRef = this.overlayRef;\n        overlayRef?.detach();\n        overlayRef?.dispose();\n        this.animating.set(true);\n        setTimeout(() => this.createOverlay(), 750);\n      },\n      { allowSignalWrites: true }\n    );\n  }\n\n  createOverlay() {\n    const step = this.step();\n    const positionStrategy = this.positionStrategy();\n    this.focusElement();\n    if (!step || !positionStrategy) {\n      return;\n    }\n\n    if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n      positionStrategy.positionChanges\n        .pipe(takeUntil(this.thisIsDestroyed))\n        .subscribe((x) => {\n          this.zone.run(() => this.position.set(x.connectionPair));\n        });\n    }\n\n    this.overlayRef?.detach();\n    this.overlayRef?.dispose();\n    this.overlayRef = null;\n    \n    const overlayRef = this.overlay.create({\n      positionStrategy,\n      hasBackdrop: false,\n    });\n\n    const zIndex = this.options.overlayZIndex;\n    if (zIndex !== undefined) {\n      const globalOverlayWrapper = overlayRef.hostElement;\n      globalOverlayWrapper.style.setProperty('z-index', zIndex.toString());\n    }\n\n    const overlayComponent = new TemplatePortal(\n      this.instructions,\n      this.viewContainerRef\n    );\n    overlayRef.attach(overlayComponent);\n    this.overlayRef = overlayRef;\n    this.animating.set(false);\n  }\n\n  previous(event: Event) {\n    this.eventBlackHole(event);\n\n    this.ref.tutorial.previousStep();\n  }\n\n  async next(event: Event) {\n    this.eventBlackHole(event);\n\n    await this.ref.tutorial.nextStep();\n    if (!this.step()) {\n      this.close(true);\n    }\n  }\n  skip(event: Event) {\n    this.eventBlackHole(event);\n\n    this.close(false);\n  }\n  close(result = false) {\n    this.ref.close(result);\n  }\n\n  eventBlackHole(event: Event) {\n    event.stopImmediatePropagation();\n    event.stopPropagation();\n    event.preventDefault();\n  }\n}\n","@if (ffPositions(); as positions) {\n<lib-force-field\n  [size]=\"ffSize()\"\n  [position]=\"positions.top\"\n  [style.background-color]=\"options.backdropColor\"\n></lib-force-field>\n<lib-force-field\n  [size]=\"ffSize()\"\n  [position]=\"positions.left\"\n  [style.background-color]=\"options.backdropColor\"\n></lib-force-field>\n<lib-force-field\n  [size]=\"ffSize()\"\n  [position]=\"positions.right\"\n  [style.background-color]=\"options.backdropColor\"\n></lib-force-field>\n<lib-force-field\n  [size]=\"ffSize()\"\n  [position]=\"positions.bottom\"\n  [style.background-color]=\"options.backdropColor\"\n></lib-force-field>\n}\n<!-- If we just want them to click on the 'Next' button we want to disable events over the focused element -->\n<lib-force-field\n  [size]=\"elementBounds()\"\n  [position]=\"elementBounds()\"\n  [style.background-color]=\"'transparent'\"\n  [style.pointer-events]=\"step()?.event === 'next' ? 'auto' : 'none'\"\n  [style.box-shadow]=\"focusElementHighlight()\"\n>\n</lib-force-field>\n\n\n<ng-template #instructions>\n  <div\n    class=\"instructions\"\n    @fadeIn\n    [ngClass]=\"{\n    top: (position() | direction) === 'top',\n    left: (position() | direction) === 'left',\n    right: (position() | direction) === 'right',\n    bottom: (position() | direction) === 'bottom',\n  }\"\n  [style.maxWidth]=\"instructionsWidth()\"\n  >\n    <lib-text-or-template [value]=\"step()?.description\">\n      <ng-template let-description>\n        <label [style.fontFamily]=\"options.fontFamily\">\n          {{ description }}\n        </label>\n      </ng-template>\n    </lib-text-or-template>\n    @if (step()?.details) {\n    <lib-text-or-template [value]=\"step()?.details\">\n      <ng-template let-details>\n        <p [style.fontFamily]=\"options.fontFamily\">\n          {{ details }}\n        </p>\n      </ng-template>\n    </lib-text-or-template>\n    }\n    @if (focusElement(); as element) {\n      <lib-arrow [direction]=\"position() | direction\" [pointToElement]=\"focusElement()\"></lib-arrow>\n    }\n    <div class=\"buttons\">\n      @if (ref.tutorial.hasPrevious() && !step()?.hidePrevious) {\n      <button\n        class=\"previous\"\n        (click)=\"previous($event)\"\n        (mousedown)=\"eventBlackHole($event)\"\n        [style.fontFamily]=\"options.fontFamily\"\n        [ngClass]=\"step()?.previousButton?.className\"\n      >\n        {{ step()?.previousButton?.text ?? options.previousButton.text }}\n      </button>\n      } @if (step()?.event === 'next') {\n      <button\n        class=\"next\"\n        (click)=\"next($event)\"\n        (mousedown)=\"eventBlackHole($event)\"\n        [style.fontFamily]=\"options.fontFamily\"\n        [ngClass]=\"step()?.nextButton?.className\"\n      >\n        {{ step()?.nextButton?.text ?? options.nextButton.text }}\n      </button>\n      } @if (!step()?.hideSkip) {\n      <button\n        class=\"skip\"\n        (click)=\"skip($event)\"\n        (mousedown)=\"eventBlackHole($event)\"\n        [style.fontFamily]=\"options.fontFamily\"\n        [ngClass]=\"step()?.skipButton?.className\"\n      >\n        {{ step()?.skipButton?.text ?? options.skipButton.text }}\n      </button>\n      }\n    </div>\n  </div>\n</ng-template>\n","import { Signal, computed, signal } from '@angular/core';\nimport { ITutorialStep } from '../lib.interfaces';\n\nexport type Transition = 'start' | 'end' | null;\n\nexport class Tutorial {\n  private readonly _stepIndex = signal(0);\n  private readonly _transitioning = signal<Transition>(null);\n  readonly stepIndex: Signal<number> = this._stepIndex.asReadonly();\n  readonly transitioning: Signal<Transition> = this._transitioning.asReadonly();\n  readonly step: Signal<ITutorialStep | undefined> = computed(\n    () => this.steps[this.stepIndex()]\n  );\n  readonly hasPrevious = computed(() => this.stepIndex() > 0);\n  readonly steps: ITutorialStep[];\n\n  constructor(steps: ITutorialStep[]) {\n    const lastStep = steps[steps.length - 1];\n    if (lastStep) {\n      lastStep.nextButton = {\n        text: 'Finish',\n        ...(lastStep.nextButton ?? {}),\n      };\n      if (lastStep.event === 'next') {\n        lastStep.hideSkip = lastStep.hideSkip ?? true;\n      }\n    }\n    this.steps = steps;\n    this.startHook();\n  }\n\n  reset() {\n    this._stepIndex.set(0);\n  }\n\n  setStepIndex(index: number) {\n    const normalizedIndex = Math.max(0, Math.min(index, this.steps.length - 1));\n    this._stepIndex.set(normalizedIndex);\n  }\n\n  async nextStep() {\n    await this.endHook();\n    this._stepIndex.update((index) => index + 1);\n    while (this.step() && await this.shouldSkip()) {\n      this._stepIndex.update((index) => index + 1);\n    }\n    await this.startHook();\n  }\n\n  private async shouldSkip() {\n    // return false;\n    const currentStep = this.step();\n    if (!currentStep) {\n      return false;\n    }\n    const shouldSkipFn = currentStep.shouldSkip;\n    if (typeof shouldSkipFn !== 'function') {\n      return !!shouldSkipFn;\n    }\n    const result = await shouldSkipFn();\n    return !!result;\n  }\n\n  private async startHook() {\n    const currentStep = this.step();\n    if (typeof currentStep?.stepStart === 'function') {\n      try {\n        this._transitioning.set('start');\n        await currentStep.stepStart();\n      } catch (e) {\n        const currentStepIndex = this._stepIndex();\n        console.error(\n          `Error executing stepStart hook for step ${currentStepIndex}`,\n          e,\n          { currentStep }\n        );\n      } finally {\n        this._transitioning.set(null);\n      }\n    }\n  }\n\n  private async endHook() {\n    const newStep = this.step();\n    if (typeof newStep?.stepEnd === 'function') {\n      try {\n        this._transitioning.set('end');\n        await newStep.stepEnd();\n      } catch (e) {\n        const newStepIndex = this._stepIndex();\n        console.error(\n          `Error executing stepEnd hook for step ${newStepIndex}`,\n          e,\n          { newStep }\n        );\n      } finally {\n        this._transitioning.set(null);\n      }\n    }\n  }\n\n  previousStep() {\n    this._stepIndex.update((index) => index - 1);\n  }\n}\n","import { computed, Injectable, Injector, Signal, signal } from '@angular/core';\nimport { EnjoyHintComponent } from './component/enjoy-hint.component';\nimport { firstValueFrom, zip } from 'rxjs';\nimport { EnjoyHintRef } from './support/EnjoyHintRef';\nimport { Elements } from './util/dom-helpers';\nimport { IEnjoyHintOptions, ITutorialStep } from './lib.interfaces';\nimport { Tutorial } from './support/Tutorial';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\n@Injectable({\n  providedIn: 'root',\n  deps: [Overlay],\n  useFactory: (overlay: Overlay) =>\n    new EnjoyHintService(\n      overlay,\n      new Elements(),\n      getComputedStyle(document.body).overflow\n    ),\n})\nexport class EnjoyHintService {\n  /** @ignore */\n  constructor(\n    private readonly overlay: Overlay,\n    private readonly elements: Elements,\n    private readonly originalOverflow: string\n  ) {}\n\n  private static readonly inProgressTutorials = signal<symbol[]>([]);\n  /** Whether there is any active tutorial */\n  static readonly inProgress: Signal<boolean> = computed(\n    () => EnjoyHintService.inProgressTutorials().length > 0\n  );\n\n  /**\n   * Run an interactive tutorial\n   * @param steps the tutorial steps to run\n   * @param options optional object to override the default behavior\n   * @returns a promise resolving when the tutorial is closed; resolves to `true` if the tutorial was completed, `false` if it was skipped\n   */\n  async runTutorial(\n    steps: ITutorialStep[],\n    options?: Partial<IEnjoyHintOptions>\n  ): Promise<boolean> {\n    const ref = Symbol();\n    EnjoyHintService.inProgressTutorials.update((ids) => [...ids, ref]);\n    let overlayRef: OverlayRef | undefined = undefined;\n    try {\n      const tutorial = new Tutorial(steps);\n\n      const enjoyHintRef = new EnjoyHintRef(tutorial, options);\n      overlayRef = this.overlay.create({\n        hasBackdrop: false,\n        disposeOnNavigation: true,\n        positionStrategy: this.overlay.position().global(),\n        panelClass: 'ng-enjoyhint-overlay',\n      });\n      const zIndex = options?.overlayZIndex;\n      if (zIndex !== undefined) {\n        const globalOverlayWrapper = overlayRef.hostElement;\n        const cdkOverlayContainer = globalOverlayWrapper.parentElement;\n        [globalOverlayWrapper, cdkOverlayContainer].forEach((e) =>\n          e?.style.setProperty('z-index', zIndex.toString())\n        );\n      }\n      const portal = new ComponentPortal(\n        EnjoyHintComponent,\n        null,\n        Injector.create({\n          providers: [{ provide: EnjoyHintRef, useValue: enjoyHintRef }],\n        })\n      );\n\n      this.elements.body.style.overflow = 'hidden';\n      overlayRef.attach(portal);\n      return await firstValueFrom(enjoyHintRef.onClose);\n    } finally {\n      this.elements.body.style.overflow = this.originalOverflow;\n      overlayRef?.detach();\n      overlayRef?.dispose();\n      EnjoyHintService.inProgressTutorials.update((ids) =>\n        ids.filter((id) => id !== ref)\n      );\n    }\n  }\n}\n","/*\n * Public API Surface of ng-enjoyhint-lib\n */\n\nexport * from './lib/enjoyhint.service';\nexport * from './lib/lib.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.EnjoyHintRef"],"mappings":"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"}