ngx-typed-writer
Version:
A Angular 2+ Typing Animation Library. Angular SSR Friendly
1 lines • 25.3 kB
Source Map (JSON)
{"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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"}