{"version":3,"file":"ngx-typed-writer.mjs","sources":["../tmp-esm2022/lib/util/constant.js","../tmp-esm2022/lib/util/util.js","../tmp-esm2022/lib/ngx-typed-writer.component.js","../tmp-esm2022/lib/ngx-typed-writer.module.js","../tmp-esm2022/ngx-typed-writer.js"],"sourcesContent":["/* name of class with animation fade out */\nexport const FADE_OUT_CLASS = 'typed-fade-out';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC10eXBlZC13cml0ZXIvc3JjL2xpYi91dGlsL2NvbnN0YW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBuYW1lIG9mIGNsYXNzIHdpdGggYW5pbWF0aW9uIGZhZGUgb3V0ICovXG5leHBvcnQgY29uc3QgRkFERV9PVVRfQ0xBU1MgPSAndHlwZWQtZmFkZS1vdXQnO1xuIl19","/**\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(isHTML, currentString, currentStringPosition) {\n    if (!isHTML)\n        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        }\n        else {\n            endTag = ';';\n        }\n        while (currentString.substring(currentStringPosition + 1).charAt(0) !== endTag) {\n            currentStringPosition++;\n            if (currentStringPosition + 1 > currentString.length) {\n                break;\n            }\n        }\n        currentStringPosition++;\n    }\n    return currentStringPosition;\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(isHTML, currentString, currentStringPosition) {\n    if (!isHTML)\n        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        }\n        else {\n            endTag = '&';\n        }\n        while (currentString.substring(currentStringPosition - 1).charAt(0) !== endTag) {\n            currentStringPosition--;\n            if (currentStringPosition < 0) {\n                break;\n            }\n        }\n        currentStringPosition--;\n    }\n    return currentStringPosition;\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(shuffle, strings) {\n    if (!shuffle)\n        return strings;\n    return strings.sort(() => Math.random() - 0.5);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXR5cGVkLXdyaXRlci9zcmMvbGliL3V0aWwvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFlLEVBQ2YsYUFBcUIsRUFDckIscUJBQTZCO0lBRTdCLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxxQkFBcUIsQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixHQUFHLGFBQWE7U0FDbkMsU0FBUyxDQUFDLHFCQUFxQixDQUFDO1NBQ2hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLElBQUksZ0JBQWdCLEtBQUssR0FBRyxJQUFJLGdCQUFnQixLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLGdCQUFnQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDZixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FDRSxhQUFhLENBQUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQ3ZFLENBQUM7WUFDRCxxQkFBcUIsRUFBRSxDQUFDO1lBQ3hCLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckQsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQ0QscUJBQXFCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxxQkFBcUIsQ0FBQztBQUMvQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsTUFBZSxFQUNmLGFBQXFCLEVBQ3JCLHFCQUE2QjtJQUU3QixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8scUJBQXFCLENBQUM7SUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhO1NBQ25DLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztTQUNoQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLGdCQUFnQixLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN6RCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxnQkFBZ0IsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM3QixNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2YsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQ0UsYUFBYSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUN2RSxDQUFDO1lBQ0QscUJBQXFCLEVBQUUsQ0FBQztZQUN4QixJQUFJLHFCQUFxQixHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFDRCxxQkFBcUIsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUM7QUFHRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsT0FBZ0IsRUFDaEIsT0FBaUI7SUFFakIsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUM3QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBmdW5jdGlvbiBgdHlwZUh0bWxDaGFyc2AgaXMgdXNlZCB0byBza2lwIG92ZXIgSFRNTCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGlmIHRoZSBgaXNIVE1MYCBmbGFnXG4gKiBpcyBzZXQgdG8gdHJ1ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIVE1MIC0gQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgY3VycmVudCBzdHJpbmcgY29udGFpbnMgSFRNTFxuICogY2hhcmFjdGVycy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50U3RyaW5nIC0gVGhlIGN1cnJlbnQgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkLiBJdCBjYW4gY29udGFpbiBIVE1MXG4gKiBjaGFyYWN0ZXJzIHRoYXQgbmVlZCB0byBiZSBza2lwcGVkIG92ZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFN0cmluZ1Bvc2l0aW9uIC0gVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZyB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHZhbHVlIG9mIGBjdXJyZW50U3RyaW5nUG9zaXRpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUh0bWxDaGFycyhcbiAgaXNIVE1MOiBib29sZWFuLFxuICBjdXJyZW50U3RyaW5nOiBzdHJpbmcsXG4gIGN1cnJlbnRTdHJpbmdQb3NpdGlvbjogbnVtYmVyXG4pOiBudW1iZXIge1xuICBpZiAoIWlzSFRNTCkgcmV0dXJuIGN1cnJlbnRTdHJpbmdQb3NpdGlvbjtcbiAgY29uc3QgY3VycmVudENoYXJhY3RlciA9IGN1cnJlbnRTdHJpbmdcbiAgICAuc3Vic3RyaW5nKGN1cnJlbnRTdHJpbmdQb3NpdGlvbilcbiAgICAuY2hhckF0KDApO1xuICBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gJzwnIHx8IGN1cnJlbnRDaGFyYWN0ZXIgPT09ICcmJykge1xuICAgIGxldCBlbmRUYWcgPSAnJztcbiAgICBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gJzwnKSB7XG4gICAgICBlbmRUYWcgPSAnPic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZFRhZyA9ICc7JztcbiAgICB9XG4gICAgd2hpbGUgKFxuICAgICAgY3VycmVudFN0cmluZy5zdWJzdHJpbmcoY3VycmVudFN0cmluZ1Bvc2l0aW9uICsgMSkuY2hhckF0KDApICE9PSBlbmRUYWdcbiAgICApIHtcbiAgICAgIGN1cnJlbnRTdHJpbmdQb3NpdGlvbisrO1xuICAgICAgaWYgKGN1cnJlbnRTdHJpbmdQb3NpdGlvbiArIDEgPiBjdXJyZW50U3RyaW5nLmxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudFN0cmluZ1Bvc2l0aW9uKys7XG4gIH1cblxuICByZXR1cm4gY3VycmVudFN0cmluZ1Bvc2l0aW9uO1xufVxuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBgYmFja1NwYWNlSHRtbENoYXJzYCBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaW4gYSBib29sZWFuIGBpc0hUTUxgLCBhXG4gKiBzdHJpbmcgYGN1cnJlbnRTdHJpbmdgLCBhbmQgYSBudW1iZXIgYGN1cnJlbnRTdHJpbmdQb3NpdGlvbmAsIGFuZCByZXR1cm5zIGEgbmV3IG51bWJlciByZXByZXNlbnRpbmdcbiAqIHRoZSB1cGRhdGVkIGBjdXJyZW50U3RyaW5nUG9zaXRpb25gIGFmdGVyIHJlbW92aW5nIEhUTUwgY2hhcmFjdGVycy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIVE1MIC0gQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgY3VycmVudCBzdHJpbmcgY29udGFpbnMgSFRNTFxuICogY2hhcmFjdGVycyBvciBub3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFN0cmluZyAtIFRoZSBgY3VycmVudFN0cmluZ2AgcGFyYW1ldGVyIGlzIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAqIGN1cnJlbnQgdGV4dCBvciBIVE1MIGNvbnRlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFN0cmluZ1Bvc2l0aW9uIC0gVGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIHRoZSBjdXJyZW50IHN0cmluZy5cbiAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHZhbHVlIG9mIGBjdXJyZW50U3RyaW5nUG9zaXRpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFja1NwYWNlSHRtbENoYXJzKFxuICBpc0hUTUw6IGJvb2xlYW4sXG4gIGN1cnJlbnRTdHJpbmc6IHN0cmluZyxcbiAgY3VycmVudFN0cmluZ1Bvc2l0aW9uOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGlmICghaXNIVE1MKSByZXR1cm4gY3VycmVudFN0cmluZ1Bvc2l0aW9uO1xuICBjb25zdCBjdXJyZW50Q2hhcmFjdGVyID0gY3VycmVudFN0cmluZ1xuICAgIC5zdWJzdHJpbmcoY3VycmVudFN0cmluZ1Bvc2l0aW9uKVxuICAgIC5jaGFyQXQoMCk7XG4gIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSAnPicgfHwgY3VycmVudENoYXJhY3RlciA9PT0gJzsnKSB7XG4gICAgbGV0IGVuZFRhZyA9ICcnO1xuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSAnPicpIHtcbiAgICAgIGVuZFRhZyA9ICc8JztcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kVGFnID0gJyYnO1xuICAgIH1cbiAgICB3aGlsZSAoXG4gICAgICBjdXJyZW50U3RyaW5nLnN1YnN0cmluZyhjdXJyZW50U3RyaW5nUG9zaXRpb24gLSAxKS5jaGFyQXQoMCkgIT09IGVuZFRhZ1xuICAgICkge1xuICAgICAgY3VycmVudFN0cmluZ1Bvc2l0aW9uLS07XG4gICAgICBpZiAoY3VycmVudFN0cmluZ1Bvc2l0aW9uIDwgMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudFN0cmluZ1Bvc2l0aW9uLS07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnRTdHJpbmdQb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBgc2h1ZmZsZVN0cmluZ3NJZk5lZWRlZGAgc2h1ZmZsZXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGJvb2xlYW4gZmxhZyBpcyBzZXQgdG8gdHJ1ZSxcbiAqIG90aGVyd2lzZSBpdCByZXR1cm5zIHRoZSBvcmlnaW5hbCBhcnJheS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2h1ZmZsZSAtIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0cmluZ3Mgc2hvdWxkIGJlIHNodWZmbGVkIG9yIG5vdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHN0cmluZ3MgLSBBbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbmVlZCB0byBiZSBzaHVmZmxlZCBpZiB0aGUgYHNodWZmbGVgIHBhcmFtZXRlclxuICogaXMgc2V0IHRvIGB0cnVlYC5cbiAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MuIElmIHRoZSBgc2h1ZmZsZWAgcGFyYW1ldGVyIGlzIGBmYWxzZWAsIGl0IHJldHVybnMgdGhlIG9yaWdpbmFsXG4gKiBgc3RyaW5nc2AgYXJyYXkuIElmIGBzaHVmZmxlYCBpcyBgdHJ1ZWAsIGl0IHJldHVybnMgYSBzaHVmZmxlZCB2ZXJzaW9uIG9mIHRoZSBgc3RyaW5nc2AgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlU3RyaW5nc0lmTmVlZGVkKFxuICBzaHVmZmxlOiBib29sZWFuLFxuICBzdHJpbmdzOiBzdHJpbmdbXVxuKTogc3RyaW5nW10ge1xuICBpZiAoIXNodWZmbGUpIHJldHVybiBzdHJpbmdzO1xuICByZXR1cm4gc3RyaW5ncy5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xufVxuIl19","import { isPlatformBrowser } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, inject, input, model, output, PLATFORM_ID, Renderer2, viewChild, } from '@angular/core';\nimport { backSpaceHtmlChars, FADE_OUT_CLASS, shuffleStringsIfNeeded, typeHtmlChars, } from './util';\nimport * as i0 from \"@angular/core\";\nexport class NgxTypedWriterComponent {\n    constructor() {\n        this.platformId = inject(PLATFORM_ID);\n        this.renderer2 = inject(Renderer2);\n        this.typedTextRef = viewChild('typedText');\n        this.cursor = viewChild('cursorRef');\n        this.strings = model([]);\n        this.typeSpeed = input(40);\n        this.startDelay = input(0);\n        this.backSpeed = input(40);\n        this.smartBackspace = input(false, { transform: booleanAttribute });\n        this.shuffle = input(false, { transform: booleanAttribute });\n        this.backDelay = input(1000);\n        this.isHTML = input(false, { transform: booleanAttribute });\n        this.fadeOut = input(false, { transform: booleanAttribute });\n        this.loop = input(true, { transform: booleanAttribute });\n        this.showCursor = input(true, { transform: booleanAttribute });\n        this.cursorChar = input('|');\n        this.fadeOutDelay = input(500);\n        this.currentStringIndex = 0;\n        this.currentString = '';\n        this.currentStringPosition = 0;\n        this.isTypingPaused = false;\n        this.stopNum = 0;\n        this.destroy = output();\n        this.initTyped = output();\n        this.completeLoop = output();\n    }\n    ngOnInit() {\n        if (isPlatformBrowser(this.platformId)) {\n            this.init();\n        }\n    }\n    ngOnDestroy() {\n        clearTimeout(this.timeout);\n        this.destroy.emit();\n    }\n    init() {\n        this.strings.set(shuffleStringsIfNeeded(this.shuffle(), this.strings()));\n        this.currentString = this.strings()[this.currentStringIndex];\n        this.timeout = setTimeout(() => {\n            this.typeString();\n            this.initTyped.emit();\n        }, this.startDelay());\n    }\n    typeString() {\n        if (this.isTypingPaused)\n            return;\n        if (this.fadeOut()) {\n            const typedElement = this.typedTextRef()\n                ?.nativeElement;\n            this.renderer2.removeClass(typedElement, FADE_OUT_CLASS);\n            if (this.showCursor()) {\n                const cursorElement = this.cursor()?.nativeElement;\n                this.renderer2.removeClass(cursorElement, FADE_OUT_CLASS);\n            }\n        }\n        if (this.currentStringPosition < this.currentString.length) {\n            this.typeCharacter();\n        }\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    typeCharacter() {\n        this.timeout = setTimeout(() => {\n            this.currentStringPosition = typeHtmlChars(this.isHTML(), this.currentString, this.currentStringPosition);\n            const nextString = this.currentString.substring(0, this.currentStringPosition + 1);\n            const lastItem = this.strings().at(-1);\n            this.typedTextRef().nativeElement.innerHTML = nextString;\n            this.currentStringPosition++;\n            if (nextString === lastItem && !this.loop()) {\n                this.completeLoop.emit();\n                return;\n            }\n            this.typeString();\n        }, this.typeSpeed());\n    }\n    backspaceString() {\n        if (this.isTypingPaused)\n            return;\n        if (this.fadeOut()) {\n            this.initFadeOut();\n            return;\n        }\n        if (this.currentStringPosition > this.stopNum) {\n            this.backspaceCharacter();\n        }\n        else {\n            this.isTypingPaused = true;\n            this.timeout = setTimeout(() => {\n                this.isTypingPaused = false;\n                this.currentStringIndex++;\n                if (this.currentStringIndex >= this.strings().length) {\n                    if (this.loop()) {\n                        this.currentStringIndex = 0;\n                        // this.typeString();\n                    }\n                    else {\n                        return; // Finished typing all strings\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    backspaceCharacter() {\n        const currentString = this.typedTextRef()?.nativeElement.innerHTML;\n        this.currentStringPosition = backSpaceHtmlChars(this.isHTML(), this.currentString, this.currentStringPosition);\n        const curStringAtPosition = currentString.substring(0, this.currentStringPosition);\n        this.typedTextRef().nativeElement.innerHTML =\n            curStringAtPosition;\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 = curStringAtPosition ===\n                    nextStringPartial?.substring(0, this.currentStringPosition);\n                if (nextStringPartial && compare) {\n                    this.stopNum = this.currentStringPosition - 1;\n                }\n                else {\n                    this.stopNum = 0;\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            }\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    initFadeOut() {\n        const typedElement = this.typedTextRef()?.nativeElement;\n        this.renderer2.addClass(typedElement, FADE_OUT_CLASS);\n        if (this.showCursor()) {\n            const cursorElement = this.cursor()?.nativeElement;\n            this.renderer2.addClass(cursorElement, FADE_OUT_CLASS);\n        }\n        this.timeout = setTimeout(() => {\n            this.currentStringIndex++;\n            typedElement.innerHTML = '';\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            }\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    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgxTypedWriterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.3\", type: NgxTypedWriterComponent, isStandalone: true, selector: \"ngx-typed-writer\", inputs: { strings: { classPropertyName: \"strings\", publicName: \"strings\", isSignal: true, isRequired: false, transformFunction: null }, typeSpeed: { classPropertyName: \"typeSpeed\", publicName: \"typeSpeed\", isSignal: true, isRequired: false, transformFunction: null }, startDelay: { classPropertyName: \"startDelay\", publicName: \"startDelay\", isSignal: true, isRequired: false, transformFunction: null }, backSpeed: { classPropertyName: \"backSpeed\", publicName: \"backSpeed\", isSignal: true, isRequired: false, transformFunction: null }, smartBackspace: { classPropertyName: \"smartBackspace\", publicName: \"smartBackspace\", isSignal: true, isRequired: false, transformFunction: null }, shuffle: { classPropertyName: \"shuffle\", publicName: \"shuffle\", isSignal: true, isRequired: false, transformFunction: null }, backDelay: { classPropertyName: \"backDelay\", publicName: \"backDelay\", isSignal: true, isRequired: false, transformFunction: null }, isHTML: { classPropertyName: \"isHTML\", publicName: \"isHTML\", isSignal: true, isRequired: false, transformFunction: null }, fadeOut: { classPropertyName: \"fadeOut\", publicName: \"fadeOut\", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: \"loop\", publicName: \"loop\", isSignal: true, isRequired: false, transformFunction: null }, showCursor: { classPropertyName: \"showCursor\", publicName: \"showCursor\", isSignal: true, isRequired: false, transformFunction: null }, cursorChar: { classPropertyName: \"cursorChar\", publicName: \"cursorChar\", isSignal: true, isRequired: false, transformFunction: null }, fadeOutDelay: { classPropertyName: \"fadeOutDelay\", publicName: \"fadeOutDelay\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { strings: \"stringsChange\", destroy: \"destroy\", initTyped: \"initTyped\", completeLoop: \"completeLoop\" }, viewQueries: [{ propertyName: \"typedTextRef\", first: true, predicate: [\"typedText\"], descendants: true, isSignal: true }, { propertyName: \"cursor\", first: true, predicate: [\"cursorRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n    <span #typedText> </span>\n    @if (showCursor()) {\n      <span #cursorRef class=\"typing-cursor\">{{ cursorChar() }} </span>\n    }\n  `, isInline: true, styles: [\".typing-cursor{-webkit-animation:blink .7s infinite;display:inline-block;opacity:1;animation:blink .7s infinite}@keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.typed-fade-out{opacity:0;transition:opacity .25s}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgxTypedWriterComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ngx-typed-writer', changeDetection: ChangeDetectionStrategy.OnPush, template: `\n    <span #typedText> </span>\n    @if (showCursor()) {\n      <span #cursorRef class=\"typing-cursor\">{{ cursorChar() }} </span>\n    }\n  `, styles: [\".typing-cursor{-webkit-animation:blink .7s infinite;display:inline-block;opacity:1;animation:blink .7s infinite}@keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.typed-fade-out{opacity:0;transition:opacity .25s}\\n\"] }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXR5cGVkLXdyaXRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC10eXBlZC13cml0ZXIvc3JjL2xpYi9uZ3gtdHlwZWQtd3JpdGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixhQUFhLEdBQ2QsTUFBTSxRQUFRLENBQUM7O0FBdUNoQixNQUFNLE9BQU8sdUJBQXVCO0lBckNwQztRQXNDbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLGlCQUFZLEdBQUcsU0FBUyxDQUFhLFdBQVcsQ0FBQyxDQUFDO1FBRWxELFdBQU0sR0FBRyxTQUFTLENBQWEsV0FBVyxDQUFDLENBQUM7UUFFNUMsWUFBTyxHQUFHLEtBQUssQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUU5QixjQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLGVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsY0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QixtQkFBYyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELFlBQU8sR0FBRyxLQUFLLENBQUMs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QUcsRUFBRSxDQUFDO1lBRTVCLCtDQUErQztZQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7WUFDbEQsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDOzhHQXBPVSx1QkFBdUI7a0dBQXZCLHVCQUF1QixxbEVBbEN4Qjs7Ozs7R0FLVDs7MkZBNkJVLHVCQUF1QjtrQkFyQ25DLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUNYLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7O0dBS1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgYmFja1NwYWNlSHRtbENoYXJzLFxuICBGQURFX09VVF9DTEFTUyxcbiAgc2h1ZmZsZVN0cmluZ3NJZk5lZWRlZCxcbiAgdHlwZUh0bWxDaGFycyxcbn0gZnJvbSAnLi91dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXR5cGVkLXdyaXRlcicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzcGFuICN0eXBlZFRleHQ+IDwvc3Bhbj5cbiAgICBAaWYgKHNob3dDdXJzb3IoKSkge1xuICAgICAgPHNwYW4gI2N1cnNvclJlZiBjbGFzcz1cInR5cGluZy1jdXJzb3JcIj57eyBjdXJzb3JDaGFyKCkgfX0gPC9zcGFuPlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnR5cGluZy1jdXJzb3Ige1xuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogYmxpbmsgMC43cyBpbmZpbml0ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBhbmltYXRpb246IGJsaW5rIDAuN3MgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgYmxpbmsge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAudHlwZWQtZmFkZS1vdXQge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5neFR5cGVkV3JpdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHR5cGVkVGV4dFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndHlwZWRUZXh0Jyk7XG5cbiAgY3Vyc29yID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdjdXJzb3JSZWYnKTtcblxuICBzdHJpbmdzID0gbW9kZWw8c3RyaW5nW10+KFtdKTtcblxuICB0eXBlU3BlZWQgPSBpbnB1dCg0MCk7XG5cbiAgc3RhcnREZWxheSA9IGlucHV0KDApO1xuXG4gIGJhY2tTcGVlZCA9IGlucHV0KDQwKTtcblxuICBzbWFydEJhY2tzcGFjZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBzaHVmZmxlID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gIGJhY2tEZWxheSA9IGlucHV0KDEwMDApO1xuXG4gIGlzSFRNTCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBmYWRlT3V0ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gIGxvb3AgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBzaG93Q3Vyc29yID0gaW5wdXQodHJ1ZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgY3Vyc29yQ2hhciA9IGlucHV0KCd8Jyk7XG5cbiAgZmFkZU91dERlbGF5ID0gaW5wdXQoNTAwKTtcblxuICBwcml2YXRlIGN1cnJlbnRTdHJpbmdJbmRleCA9IDA7XG4gIHByaXZhdGUgY3VycmVudFN0cmluZyA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRTdHJpbmdQb3NpdGlvbiA9IDA7XG4gIHByaXZhdGUgaXNUeXBpbmdQYXVzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0aW1lb3V0ITogTm9kZUpTLlRpbWVvdXQ7XG4gIHByaXZhdGUgc3RvcE51bSA9IDA7XG5cbiAgZGVzdHJveSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIGluaXRUeXBlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIGNvbXBsZXRlTG9vcCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB0aGlzLmRlc3Ryb3kuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RyaW5ncy5zZXQoc2h1ZmZsZVN0cmluZ3NJZk5lZWRlZCh0aGlzLnNodWZmbGUoKSwgdGhpcy5zdHJpbmdzKCkpKTtcbiAgICB0aGlzLmN1cnJlbnRTdHJpbmcgPSB0aGlzLnN0cmluZ3MoKVt0aGlzLmN1cnJlbnRTdHJpbmdJbmRleF07XG5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHlwZVN0cmluZygpO1xuICAgICAgdGhpcy5pbml0VHlwZWQuZW1pdCgpO1xuICAgIH0sIHRoaXMuc3RhcnREZWxheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdHlwZVN0cmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1R5cGluZ1BhdXNlZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZmFkZU91dCgpKSB7XG4gICAgICBjb25zdCB0eXBlZEVsZW1lbnQgPSB0aGlzLnR5cGVkVGV4dFJlZigpXG4gICAgICAgID8ubmF0aXZlRWxlbWVudCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0eXBlZEVsZW1lbnQsIEZBREVfT1VUX0NMQVNTKTtcblxuICAgICAgaWYgKHRoaXMuc2hvd0N1cnNvcigpKSB7XG4gICAgICAgIGNvbnN0IGN1cnNvckVsZW1lbnQgPSB0aGlzLmN1cnNvcigpPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2xhc3MoY3Vyc29yRWxlbWVudCwgRkFERV9PVVRfQ0xBU1MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnRTdHJpbmdQb3NpdGlvbiA8IHRoaXMuY3VycmVudFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudHlwZUNoYXJhY3RlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVHlwaW5nUGF1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzVHlwaW5nUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYmFja3NwYWNlU3RyaW5nKCk7XG4gICAgICAgIH0sIHRoaXMuYmFja0RlbGF5KCkpO1xuICAgICAgfSwgdGhpcy50eXBlU3BlZWQoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0eXBlQ2hhcmFjdGVyKCk6IHZvaWQge1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50U3RyaW5nUG9zaXRpb24gPSB0eXBlSHRtbENoYXJzKFxuICAgICAgICB0aGlzLmlzSFRNTCgpLFxuICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmcsXG4gICAgICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbmV4dFN0cmluZyA9IHRoaXMuY3VycmVudFN0cmluZy5zdWJzdHJpbmcoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uICsgMSxcbiAgICAgICk7XG4gICAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuc3RyaW5ncygpLmF0KC0xKTtcblxuICAgICAgdGhpcy50eXBlZFRleHRSZWYoKSEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBuZXh0U3RyaW5nO1xuXG4gICAgICB0aGlzLmN1cnJlbnRTdHJpbmdQb3NpdGlvbisrO1xuXG4gICAgICBpZiAobmV4dFN0cmluZyA9PT0gbGFzdEl0ZW0gJiYgIXRoaXMubG9vcCgpKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGVMb29wLmVtaXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy50eXBlU3RyaW5nKCk7XG4gICAgfSwgdGhpcy50eXBlU3BlZWQoKSk7XG4gIH1cblxuICBwcml2YXRlIGJhY2tzcGFjZVN0cmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1R5cGluZ1BhdXNlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZhZGVPdXQoKSkge1xuICAgICAgdGhpcy5pbml0RmFkZU91dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnRTdHJpbmdQb3NpdGlvbiA+IHRoaXMuc3RvcE51bSkge1xuICAgICAgdGhpcy5iYWNrc3BhY2VDaGFyYWN0ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1R5cGluZ1BhdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1R5cGluZ1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdJbmRleCsrO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdHJpbmdJbmRleCA+PSB0aGlzLnN0cmluZ3MoKS5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAodGhpcy5sb29wKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0cmluZ0luZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIHRoaXMudHlwZVN0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIEZpbmlzaGVkIHR5cGluZyBhbGwgc3RyaW5nc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudFN0cmluZyA9IHRoaXMuc3RyaW5ncygpW3RoaXMuY3VycmVudFN0cmluZ0luZGV4XTtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50eXBlU3RyaW5nKCk7XG4gICAgICAgIH0sIHRoaXMudHlwZVNwZWVkKCkpO1xuICAgICAgfSwgdGhpcy50eXBlU3BlZWQoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBiYWNrc3BhY2VDaGFyYWN0ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFN0cmluZyA9IHRoaXMudHlwZWRUZXh0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uID0gYmFja1NwYWNlSHRtbENoYXJzKFxuICAgICAgdGhpcy5pc0hUTUwoKSxcbiAgICAgIHRoaXMuY3VycmVudFN0cmluZyxcbiAgICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uLFxuICAgICk7XG5cbiAgICBjb25zdCBjdXJTdHJpbmdBdFBvc2l0aW9uID0gY3VycmVudFN0cmluZy5zdWJzdHJpbmcoXG4gICAgICAwLFxuICAgICAgdGhpcy5jdXJyZW50U3RyaW5nUG9zaXRpb24sXG4gICAgKTtcblxuICAgICh0aGlzLnR5cGVkVGV4dFJlZigpIS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPVxuICAgICAgY3VyU3RyaW5nQXRQb3NpdGlvbjtcblxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gIGlmIHNtYXJ0QmFjayBpcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5zbWFydEJhY2tzcGFjZSgpKSB7XG4gICAgICAgIC8vIHRoZSByZW1haW5pbmcgcGFydCBvZiB0aGUgY3VycmVudCBzdHJpbmcgaXMgZXF1YWwgb2YgdGhlIHNhbWUgcGFydCBvZiB0aGUgbmV3IHN0cmluZ1xuICAgICAgICBjb25zdCBuZXh0U3RyaW5nUGFydGlhbCA9IHRoaXMuc3RyaW5ncygpW3RoaXMuY3VycmVudFN0cmluZ0luZGV4ICsgMV07XG4gICAgICAgIGNvbnN0IGNvbXBhcmUgPVxuICAgICAgICAgIGN1clN0cmluZ0F0UG9zaXRpb24gPT09XG4gICAgICAgICAgbmV4dFN0cmluZ1BhcnRpYWw/LnN1YnN0cmluZygwLCB0aGlzLmN1cnJlbnRTdHJpbmdQb3NpdGlvbik7XG5cbiAgICAgICAgaWYgKG5leHRTdHJpbmdQYXJ0aWFsICYmIGNvbXBhcmUpIHtcbiAgICAgICAgICB0aGlzLnN0b3BOdW0gPSB0aGlzLmN1cnJlbnRTdHJpbmdQb3NpdGlvbiAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdG9wTnVtID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jdXJyZW50U3RyaW5nUG9zaXRpb24gPiB0aGlzLnN0b3BOdW0pIHtcbiAgICAgICAgLy8gc3VidHJhY3QgY2hhcmFjdGVycyBvbmUgYnkgb25lXG4gICAgICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uLS07XG4gICAgICAgIC8vIGxvb3AgdGhlIGZ1bmN0aW9uXG4gICAgICAgIHRoaXMuYmFja3NwYWNlU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uIDw9IHRoaXMuc3RvcE51bSkge1xuICAgICAgICAvLyBpZiB0aGUgc3RvcCBudW1iZXIgaGFzIGJlZW4gcmVhY2hlZCwgaW5jcmVhc2VcbiAgICAgICAgLy8gYXJyYXkgcG9zaXRpb24gdG8gbmV4dCBzdHJpbmdcbiAgICAgICAgdGhpcy5jdXJyZW50U3RyaW5nSW5kZXgrKztcbiAgICAgICAgLy8gV2hlbiBsb29waW5nLCBiZWdpbiBhdCB0aGUgYmVnaW5uaW5nIGFmdGVyIGJhY2tzcGFjZSBjb21wbGV0ZVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RyaW5nSW5kZXggPT09IHRoaXMuc3RyaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50eXBlU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5iYWNrU3BlZWQoKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGYWRlT3V0KCkge1xuICAgIGNvbnN0IHR5cGVkRWxlbWVudCA9IHRoaXMudHlwZWRUZXh0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFNwYW5FbGVtZW50O1xuICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHR5cGVkRWxlbWVudCwgRkFERV9PVVRfQ0xBU1MpO1xuXG4gICAgaWYgKHRoaXMuc2hvd0N1cnNvcigpKSB7XG4gICAgICBjb25zdCBjdXJzb3JFbGVtZW50ID0gdGhpcy5jdXJzb3IoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyhjdXJzb3JFbGVtZW50LCBGQURFX09VVF9DTEFTUyk7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRTdHJpbmdJbmRleCsrO1xuICAgICAgdHlwZWRFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAvLyBSZXNldHMgY3VycmVudCBzdHJpbmcgaWYgZW5kIG9mIGxvb3AgcmVhY2hlZFxuICAgICAgaWYgKHRoaXMuc3RyaW5ncygpLmxlbmd0aCA+IHRoaXMuY3VycmVudFN0cmluZ0luZGV4KSB7XG4gICAgICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RyaW5nID0gdGhpcy5zdHJpbmdzKClbdGhpcy5jdXJyZW50U3RyaW5nSW5kZXhdO1xuICAgICAgICB0aGlzLnR5cGVTdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFN0cmluZ1Bvc2l0aW9uID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RyaW5nSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmcgPSB0aGlzLnN0cmluZ3MoKVt0aGlzLmN1cnJlbnRTdHJpbmdJbmRleF07XG4gICAgICAgIHRoaXMudHlwZVN0cmluZygpOyAvLyB0aGlzLmN1cnJlbnRTdHJpbmdJbmRleCsrO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZmFkZU91dERlbGF5KCkpO1xuICB9XG59XG4iXX0=","import { NgModule } from '@angular/core';\nimport { NgxTypedWriterComponent } from './ngx-typed-writer.component';\nimport * as i0 from \"@angular/core\";\nexport class NgxTypedWriterModule {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgxTypedWriterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.3\", ngImport: i0, type: NgxTypedWriterModule, imports: [NgxTypedWriterComponent], exports: [NgxTypedWriterComponent] }); }\n    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgxTypedWriterModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgxTypedWriterModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    imports: [NgxTypedWriterComponent],\n                    exports: [NgxTypedWriterComponent],\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXR5cGVkLXdyaXRlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC10eXBlZC13cml0ZXIvc3JjL2xpYi9uZ3gtdHlwZWQtd3JpdGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQU12RSxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQixZQUhuQix1QkFBdUIsYUFDdkIsdUJBQXVCOytHQUV4QixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBSmhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hUeXBlZFdyaXRlckNvbXBvbmVudCB9IGZyb20gJy4vbmd4LXR5cGVkLXdyaXRlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtOZ3hUeXBlZFdyaXRlckNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW05neFR5cGVkV3JpdGVyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4VHlwZWRXcml0ZXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXR5cGVkLXdyaXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LXR5cGVkLXdyaXRlci9zcmMvbmd4LXR5cGVkLXdyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}