From ff8fb3fd36b0eeda9d2d861c83d4db51f60650a0 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Thu, 12 Mar 2026 11:04:59 +1100 Subject: [PATCH] fix(core): skip delay when switching between grouped tooltips (#903) Co-authored-by: Claude Opus 4.6 --- .../src/core/ui/tooltip/tests/tooltip-group-core.test.ts | 8 ++++---- packages/core/src/core/ui/tooltip/tooltip-group-core.ts | 2 +- packages/html/src/ui/tooltip/tooltip-group-element.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/src/core/ui/tooltip/tests/tooltip-group-core.test.ts b/packages/core/src/core/ui/tooltip/tests/tooltip-group-core.test.ts index d6284022..604d6a61 100644 --- a/packages/core/src/core/ui/tooltip/tests/tooltip-group-core.test.ts +++ b/packages/core/src/core/ui/tooltip/tests/tooltip-group-core.test.ts @@ -58,7 +58,7 @@ describe('TooltipGroupCore', () => { expect(group.shouldSkipDelay()).toBe(false); }); - it('clears skip-delay when a new tooltip opens', () => { + it('should skip delay when another tooltip is already open', () => { const group = new TooltipGroupCore({ timeout: 400 }); group.notifyOpen(); @@ -66,15 +66,15 @@ describe('TooltipGroupCore', () => { // A new tooltip opens before timeout expires group.notifyOpen(); - expect(group.shouldSkipDelay()).toBe(false); + expect(group.shouldSkipDelay()).toBe(true); }); - it('should not skip delay when a tooltip is currently open', () => { + it('should skip delay when a tooltip is currently open', () => { const group = new TooltipGroupCore(); group.notifyOpen(); - expect(group.shouldSkipDelay()).toBe(false); + expect(group.shouldSkipDelay()).toBe(true); }); it('respects updated timeout via setProps', () => { diff --git a/packages/core/src/core/ui/tooltip/tooltip-group-core.ts b/packages/core/src/core/ui/tooltip/tooltip-group-core.ts index 89cccb6f..3eaf0d64 100644 --- a/packages/core/src/core/ui/tooltip/tooltip-group-core.ts +++ b/packages/core/src/core/ui/tooltip/tooltip-group-core.ts @@ -38,7 +38,7 @@ export class TooltipGroupCore { } shouldSkipDelay(): boolean { - if (this.#isOpen) return false; + if (this.#isOpen) return true; return Date.now() - this.#lastCloseTime < this.#props.timeout; } diff --git a/packages/html/src/ui/tooltip/tooltip-group-element.ts b/packages/html/src/ui/tooltip/tooltip-group-element.ts index 7ebcf042..5ade528d 100644 --- a/packages/html/src/ui/tooltip/tooltip-group-element.ts +++ b/packages/html/src/ui/tooltip/tooltip-group-element.ts @@ -19,7 +19,7 @@ export class TooltipGroupElement extends MediaElement { timeout = TooltipGroupCore.defaultProps.timeout; readonly #core = new TooltipGroupCore(); - readonly #provider = new ContextProvider(this, { context: tooltipGroupContext }); + readonly #provider = new ContextProvider(this, { context: tooltipGroupContext, initialValue: this.#core }); protected override update(_changed: PropertyValues): void { super.update(_changed);