From 8a6befc18c238fae336ac77fbbd54e998ef2402e Mon Sep 17 00:00:00 2001 From: Ferit Date: Sun, 18 Oct 2026 00:24:21 +0300 Subject: [PATCH 1/2] Preserve explicitly configured zero typing delays --- src/index.ts | 8 ++++++-- test/test.js | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 36a2089..cba5d83 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') || 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') || 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..07fa3ff 100644 --- a/test/test.js +++ b/test/test.js @@ -91,6 +91,26 @@ 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) + + element.setAttribute('data-character-delay', '') + element.setAttribute('data-line-delay', '') + 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 From 5b76ba6878868721e98465063bde28ed49875590 Mon Sep 17 00:00:00 2001 From: Ferit Date: Tue, 20 Oct 2026 10:03:56 +0300 Subject: [PATCH 2/2] fix: preserve whitespace delay defaults --- src/index.ts | 4 ++-- test/test.js | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/index.ts b/src/index.ts index cba5d83..375a564 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,7 +47,7 @@ class TypingEffectElement extends HTMLElement { if (this.prefersReducedMotion) { return 0 } - const delay = Number(this.getAttribute('data-character-delay') || 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 } @@ -63,7 +63,7 @@ class TypingEffectElement extends HTMLElement { if (this.prefersReducedMotion) { return 0 } - const delay = Number(this.getAttribute('data-line-delay') || 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 } diff --git a/test/test.js b/test/test.js index 07fa3ff..d052600 100644 --- a/test/test.js +++ b/test/test.js @@ -105,10 +105,12 @@ describe('typing-effect', function () { assert.strictEqual(element.characterDelay, 0) assert.strictEqual(element.lineDelay, 0) - element.setAttribute('data-character-delay', '') - element.setAttribute('data-line-delay', '') - assert.strictEqual(element.characterDelay, 40) - assert.strictEqual(element.lineDelay, 40) + 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 () {