From 69e16e901994842a441de8c0544c6ca06d66e07c Mon Sep 17 00:00:00 2001 From: Liubomyr Vyhovskyi Date: Mon, 15 Jun 2026 17:18:57 +0300 Subject: [PATCH 1/2] fix: #19212 --- packages/primeng/src/tabs/tab.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/primeng/src/tabs/tab.ts b/packages/primeng/src/tabs/tab.ts index 6cff7b93135..62fc177c132 100644 --- a/packages/primeng/src/tabs/tab.ts +++ b/packages/primeng/src/tabs/tab.ts @@ -97,39 +97,44 @@ export class Tab extends BaseComponent { switch (event.code) { case 'ArrowRight': this.onArrowRightKey(event); + event.stopPropagation(); break; case 'ArrowLeft': this.onArrowLeftKey(event); + event.stopPropagation(); break; case 'Home': this.onHomeKey(event); + event.stopPropagation(); break; case 'End': this.onEndKey(event); + event.stopPropagation(); break; case 'PageDown': this.onPageDownKey(event); + event.stopPropagation(); break; case 'PageUp': this.onPageUpKey(event); + event.stopPropagation(); break; case 'Enter': case 'NumpadEnter': case 'Space': this.onEnterKey(event); + event.stopPropagation(); break; default: break; } - - event.stopPropagation(); } onAfterViewInit(): void { From 30c46ec803a6172867de07f1448375b81c123655 Mon Sep 17 00:00:00 2001 From: Liubomyr Vyhovskyi Date: Mon, 15 Jun 2026 17:23:20 +0300 Subject: [PATCH 2/2] test: add coverage for #19212 keydown propagation --- packages/primeng/src/tabs/tabs.spec.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/primeng/src/tabs/tabs.spec.ts b/packages/primeng/src/tabs/tabs.spec.ts index e13b65f1669..02f2d6cfc03 100644 --- a/packages/primeng/src/tabs/tabs.spec.ts +++ b/packages/primeng/src/tabs/tabs.spec.ts @@ -500,6 +500,28 @@ describe('Tabs', () => { expect(component.value).toBe(2); }); + it('should stop propagation for handled keys', () => { + const rightArrowEvent = new KeyboardEvent('keydown', { code: 'ArrowRight' }); + spyOn(rightArrowEvent, 'stopPropagation'); + + tabs[0].nativeElement.dispatchEvent(rightArrowEvent); + fixture.detectChanges(); + + expect(rightArrowEvent.stopPropagation).toHaveBeenCalled(); + }); + + it('should not stop propagation for unhandled keys like Escape', () => { + const escapeEvent = new KeyboardEvent('keydown', { code: 'Escape' }); + spyOn(escapeEvent, 'stopPropagation'); + spyOn(escapeEvent, 'preventDefault'); + + tabs[0].nativeElement.dispatchEvent(escapeEvent); + fixture.detectChanges(); + + expect(escapeEvent.stopPropagation).not.toHaveBeenCalled(); + expect(escapeEvent.preventDefault).not.toHaveBeenCalled(); + }); + it('should skip disabled tabs in navigation', async () => { component.tab3Disabled = true; fixture.changeDetectorRef.markForCheck();