{"version":3,"file":"ngx-typed-writer.mjs","sources":["../../../../libs/ngx-typed-writer/src/lib/util/constant.ts","../../../../libs/ngx-typed-writer/src/lib/util/util.ts","../../../../libs/ngx-typed-writer/src/lib/ngx-typed-writer.component.ts","../../../../libs/ngx-typed-writer/src/lib/ngx-typed-writer.module.ts","../../../../libs/ngx-typed-writer/src/ngx-typed-writer.ts"],"sourcesContent":["/* name of class with animation fade out */\nexport const FADE_OUT_CLASS = 'typed-fade-out';\n","/**\n * The function `typeHtmlChars` is used to skip over HTML characters in a string if the `isHTML` flag\n * is set to true.\n * @param {boolean} isHTML - A boolean value indicating whether the current string contains HTML\n * characters.\n * @param {string} currentString - The current string that needs to be processed. It can contain HTML\n * characters that need to be skipped over.\n * @param {number} currentStringPosition - The current position in the string that is being processed.\n * @returns the updated value of `currentStringPosition`.\n */\nexport function typeHtmlChars(\n  isHTML: boolean,\n  currentString: string,\n  currentStringPosition: number\n): number {\n  if (!isHTML) return currentStringPosition;\n  const currentCharacter = currentString\n    .substring(currentStringPosition)\n    .charAt(0);\n  if (currentCharacter === '<' || currentCharacter === '&') {\n    let endTag = '';\n    if (currentCharacter === '<') {\n      endTag = '>';\n    } else {\n      endTag = ';';\n    }\n    while (\n      currentString.substring(currentStringPosition + 1).charAt(0) !== endTag\n    ) {\n      currentStringPosition++;\n      if (currentStringPosition + 1 > currentString.length) {\n        break;\n      }\n    }\n    currentStringPosition++;\n  }\n\n  return currentStringPosition;\n}\n\n/**\n * The function `backSpaceHtmlChars` is a function that takes in a boolean `isHTML`, a\n * string `currentString`, and a number `currentStringPosition`, and returns a new number representing\n * the updated `currentStringPosition` after removing HTML characters.\n * @param {boolean} isHTML - A boolean value indicating whether the current string contains HTML\n * characters or not.\n * @param {string} currentString - The `currentString` parameter is a string that represents the\n * current text or HTML content.\n * @param {number} currentStringPosition - The current position within the current string.\n * @returns the updated value of `currentStringPosition`.\n */\nexport function backSpaceHtmlChars(\n  isHTML: boolean,\n  currentString: string,\n  currentStringPosition: number\n): number {\n  if (!isHTML) return currentStringPosition;\n  const currentCharacter = currentString\n    .substring(currentStringPosition)\n    .charAt(0);\n  if (currentCharacter === '>' || currentCharacter === ';') {\n    let endTag = '';\n    if (currentCharacter === '>') {\n      endTag = '<';\n    } else {\n      endTag = '&';\n    }\n    while (\n      currentString.substring(currentStringPosition - 1).charAt(0) !== endTag\n    ) {\n      currentStringPosition--;\n      if (currentStringPosition < 0) {\n        break;\n      }\n    }\n    currentStringPosition--;\n  }\n  return currentStringPosition;\n}\n\n\n/**\n * The function `shuffleStringsIfNeeded` shuffles an array of strings if a boolean flag is set to true,\n * otherwise it returns the original array.\n * @param {boolean} shuffle - A boolean value indicating whether the strings should be shuffled or not.\n * @param {string[]} strings - An array of strings that need to be shuffled if the `shuffle` parameter\n * is set to `true`.\n * @returns an array of strings. If the `shuffle` parameter is `false`, it returns the original\n * `strings` array. If `shuffle` is `true`, it returns a shuffled version of the `strings` array.\n */\nexport function shuffleStringsIfNeeded(\n  shuffle: boolean,\n  strings: string[]\n): string[] {\n  if (!shuffle) return strings;\n  return strings.sort(() => Math.random() - 0.5);\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  OnInit,\n  output,\n  PLATFORM_ID,\n  Renderer2,\n  viewChild,\n} from '@angular/core';\n\nimport {\n  backSpaceHtmlChars,\n  FADE_OUT_CLASS,\n  shuffleStringsIfNeeded,\n  typeHtmlChars,\n} from './util';\n\n@Component({\n  selector: 'ngx-typed-writer',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <span #typedText> </span>\n    @if (showCursor()) {\n      <span #cursorRef class=\"typing-cursor\">{{ cursorChar() }} </span>\n    }\n  `,\n  styles: [\n    `\n      .typing-cursor {\n        -webkit-animation: blink 0.7s infinite;\n        display: inline-block;\n        opacity: 1;\n        animation: blink 0.7s infinite;\n      }\n\n      @keyframes blink {\n        0% {\n          opacity: 1;\n        }\n        50% {\n          opacity: 0;\n        }\n        100% {\n          opacity: 1;\n        }\n      }\n\n      .typed-fade-out {\n        opacity: 0;\n        transition: opacity 0.25s;\n      }\n    `,\n  ],\n})\nexport class NgxTypedWriterComponent implements OnInit, OnDestroy {\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly renderer2 = inject(Renderer2);\n\n  typedTextRef = viewChild<ElementRef>('typedText');\n\n  cursor = viewChild<ElementRef>('cursorRef');\n\n  strings = model<string[]>([]);\n\n  typeSpeed = input(40);\n\n  startDelay = input(0);\n\n  backSpeed = input(40);\n\n  smartBackspace = input(false, { transform: booleanAttribute });\n\n  shuffle = input(false, { transform: booleanAttribute });\n\n  backDelay = input(1000);\n\n  isHTML = input(false, { transform: booleanAttribute });\n\n  fadeOut = input(false, { transform: booleanAttribute });\n\n  loop = input(true, { transform: booleanAttribute });\n\n  showCursor = input(true, { transform: booleanAttribute });\n\n  cursorChar = input('|');\n\n  fadeOutDelay = input(500);\n\n  private currentStringIndex = 0;\n  private currentString = '';\n  private currentStringPosition = 0;\n  private isTypingPaused = false;\n  private timeout!: NodeJS.Timeout;\n  private stopNum = 0;\n\n  destroy = output<void>();\n\n  initTyped = output<void>();\n\n  completeLoop = output<void>();\n\n  ngOnInit(): void {\n    if (isPlatformBrowser(this.platformId)) {\n      this.init();\n    }\n  }\n\n  ngOnDestroy(): void {\n    clearTimeout(this.timeout);\n    this.destroy.emit();\n  }\n\n  private init(): void {\n    this.strings.set(shuffleStringsIfNeeded(this.shuffle(), this.strings()));\n    this.currentString = this.strings()[this.currentStringIndex];\n\n    this.timeout = setTimeout(() => {\n      this.typeString();\n      this.initTyped.emit();\n    }, this.startDelay());\n  }\n\n  private typeString(): void {\n    if (this.isTypingPaused) return;\n\n    if (this.fadeOut()) {\n      const typedElement = this.typedTextRef()\n        ?.nativeElement as HTMLSpanElement;\n      this.renderer2.removeClass(typedElement, FADE_OUT_CLASS);\n\n      if (this.showCursor()) {\n        const cursorElement = this.cursor()?.nativeElement as HTMLSpanElement;\n        this.renderer2.removeClass(cursorElement, FADE_OUT_CLASS);\n      }\n    }\n\n    if (this.currentStringPosition < this.currentString.length) {\n      this.typeCharacter();\n    } else {\n      this.isTypingPaused = true;\n      this.timeout = setTimeout(() => {\n        this.isTypingPaused = false;\n        this.timeout = setTimeout(() => {\n          this.backspaceString();\n        }, this.backDelay());\n      }, this.typeSpeed());\n    }\n  }\n\n  private typeCharacter(): void {\n    this.timeout = setTimeout(() => {\n      this.currentStringPosition = typeHtmlChars(\n        this.isHTML(),\n        this.currentString,\n        this.currentStringPosition,\n      );\n\n      const nextString = this.currentString.substring(\n        0,\n        this.currentStringPosition + 1,\n      );\n      const lastItem = this.strings().at(-1);\n\n      this.typedTextRef()!.nativeElement.innerHTML = nextString;\n\n      this.currentStringPosition++;\n\n      if (nextString === lastItem && !this.loop()) {\n        this.completeLoop.emit();\n        return;\n      }\n      this.typeString();\n    }, this.typeSpeed());\n  }\n\n  private backspaceString(): void {\n    if (this.isTypingPaused) return;\n    if (this.fadeOut()) {\n      this.initFadeOut();\n      return;\n    }\n\n    if (this.currentStringPosition > this.stopNum) {\n      this.backspaceCharacter();\n    } else {\n      this.isTypingPaused = true;\n      this.timeout = setTimeout(() => {\n        this.isTypingPaused = false;\n        this.currentStringIndex++;\n\n        if (this.currentStringIndex >= this.strings().length) {\n          if (this.loop()) {\n            this.currentStringIndex = 0;\n            // this.typeString();\n          } else {\n            return; // Finished typing all strings\n          }\n        }\n\n        this.currentString = this.strings()[this.currentStringIndex];\n        this.timeout = setTimeout(() => {\n          this.typeString();\n        }, this.typeSpeed());\n      }, this.typeSpeed());\n    }\n  }\n\n  private backspaceCharacter(): void {\n    const currentString = this.typedTextRef()?.nativeElement.innerHTML;\n    this.currentStringPosition = backSpaceHtmlChars(\n      this.isHTML(),\n      this.currentString,\n      this.currentStringPosition,\n    );\n\n    const curStringAtPosition = currentString.substring(\n      0,\n      this.currentStringPosition,\n    );\n\n    (this.typedTextRef()!.nativeElement as HTMLElement).innerHTML =\n      curStringAtPosition;\n\n    this.timeout = setTimeout(() => {\n      //  if smartBack is enabled\n      if (this.smartBackspace()) {\n        // the remaining part of the current string is equal of the same part of the new string\n        const nextStringPartial = this.strings()[this.currentStringIndex + 1];\n        const compare =\n          curStringAtPosition ===\n          nextStringPartial?.substring(0, this.currentStringPosition);\n\n        if (nextStringPartial && compare) {\n          this.stopNum = this.currentStringPosition - 1;\n        } else {\n          this.stopNum = 0;\n        }\n      }\n\n      if (this.currentStringPosition > this.stopNum) {\n        // subtract characters one by one\n        this.currentStringPosition--;\n        // loop the function\n        this.backspaceString();\n      } else if (this.currentStringPosition <= this.stopNum) {\n        // if the stop number has been reached, increase\n        // array position to next string\n        this.currentStringIndex++;\n        // When looping, begin at the beginning after backspace complete\n        if (this.currentStringIndex === this.strings.length) {\n          this.currentStringIndex = 0;\n        }\n        this.typeString();\n      }\n    }, this.backSpeed());\n  }\n\n  private initFadeOut() {\n    const typedElement = this.typedTextRef()?.nativeElement as HTMLSpanElement;\n    this.renderer2.addClass(typedElement, FADE_OUT_CLASS);\n\n    if (this.showCursor()) {\n      const cursorElement = this.cursor()?.nativeElement as HTMLSpanElement;\n      this.renderer2.addClass(cursorElement, FADE_OUT_CLASS);\n    }\n\n    this.timeout = setTimeout(() => {\n      this.currentStringIndex++;\n      typedElement.innerHTML = '';\n\n      // Resets current string if end of loop reached\n      if (this.strings().length > this.currentStringIndex) {\n        this.currentStringPosition = 0;\n        this.currentString = this.strings()[this.currentStringIndex];\n        this.typeString();\n      } else {\n        this.currentStringPosition = 0;\n        this.currentStringIndex = 0;\n        this.currentString = this.strings()[this.currentStringIndex];\n        this.typeString(); // this.currentStringIndex++;\n      }\n    }, this.fadeOutDelay());\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxTypedWriterComponent } from './ngx-typed-writer.component';\n\n@NgModule({\n    imports: [NgxTypedWriterComponent],\n    exports: [NgxTypedWriterComponent],\n})\nexport class NgxTypedWriterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}