diff --git a/src/index.ts b/src/index.ts index 36a2089..375a564 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,7 +47,9 @@ class TypingEffectElement extends HTMLElement { if (this.prefersReducedMotion) { return 0 } - return Math.max(0, Math.min(Math.floor(Number(this.getAttribute('data-character-delay'))), 2_147_483_647)) || 40 + const delay = Number(this.getAttribute('data-character-delay')?.trim() || 40) + if (delay === 0) return 0 + return Math.max(0, Math.min(Math.floor(delay), 2_147_483_647)) || 40 } set characterDelay(value: number) { @@ -61,7 +63,9 @@ class TypingEffectElement extends HTMLElement { if (this.prefersReducedMotion) { return 0 } - return Math.max(0, Math.min(Math.floor(Number(this.getAttribute('data-line-delay'))), 2_147_483_647)) || 40 + const delay = Number(this.getAttribute('data-line-delay')?.trim() || 40) + if (delay === 0) return 0 + return Math.max(0, Math.min(Math.floor(delay), 2_147_483_647)) || 40 } set lineDelay(value: number) { diff --git a/test/test.js b/test/test.js index 33a283c..d052600 100644 --- a/test/test.js +++ b/test/test.js @@ -91,6 +91,28 @@ describe('typing-effect', function () { assert.equal(typingEffectElement.lineDelay, 40) }) + it('preserves zero delay attributes and property values', function () { + const element = document.createElement('typing-effect') + element.setAttribute('data-character-delay', '0') + element.setAttribute('data-line-delay', '0') + assert.strictEqual(element.characterDelay, 0) + assert.strictEqual(element.lineDelay, 0) + + element.characterDelay = 20 + element.lineDelay = 20 + element.characterDelay = 0 + element.lineDelay = 0 + assert.strictEqual(element.characterDelay, 0) + assert.strictEqual(element.lineDelay, 0) + + for (const value of ['', ' ', '\n', '0.5']) { + element.setAttribute('data-character-delay', value) + element.setAttribute('data-line-delay', value) + assert.strictEqual(element.characterDelay, 40) + assert.strictEqual(element.lineDelay, 40) + } + }) + it('uses specified delay attributes instead of using defaults', function () { const characterDelay = 20 const lineDelay = 20