From ef4eb68c56207312e47747f024605b9b10a3c788 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 10 Dec 2025 21:56:09 +0000
Subject: [PATCH 01/12] Initial plan
From bf5ba8990fc072150e79da892a676a7c86eccdc4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 10 Dec 2025 22:04:00 +0000
Subject: [PATCH 02/12] Fix race condition in atomic-tab-manager by adding
nullish coalescing for expression property
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../atomic-tab-manager.spec.ts | 20 +++++++++++++++++++
.../atomic-tab-manager/atomic-tab-manager.ts | 2 +-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index a562331ab40..6f60327ab34 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -172,4 +172,24 @@ describe('atomic-tab-manager', () => {
});
});
});
+
+ describe('when tab expression property is undefined (race condition)', () => {
+ it('should use empty string as fallback for undefined expression', async () => {
+ await renderTabManager({
+ slottedContent: html`
+
+ `,
+ });
+
+ // Verify buildTab was called with empty string for expression
+ const buildTabCalls = vi.mocked(buildTab).mock.calls;
+ expect(buildTabCalls.length).toBeGreaterThan(0);
+ buildTabCalls.forEach((call) => {
+ // The expression should be a string (either empty or defined)
+ expect(typeof call[1]?.options?.expression).toBe('string');
+ // Should not be undefined
+ expect(call[1]?.options?.expression).not.toBeUndefined();
+ });
+ });
+ });
});
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
index 2face696b92..0b5f52e9b66 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
@@ -93,7 +93,7 @@ export class AtomicTabManager
}
const tabController = buildTab(this.bindings.engine, {
options: {
- expression: tabElement.expression,
+ expression: tabElement.expression ?? '',
id: tabElement.name,
clearFiltersOnTabChange: this.clearFiltersOnTabChange,
},
From 919e3808f6a9a3ff080007b8135a91396a36e05f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 10 Dec 2025 22:19:00 +0000
Subject: [PATCH 03/12] Refactor test: remove describe wrapper, inline
comments, and force undefined expression to simulate race condition
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../atomic-tab-manager.spec.ts | 52 +++++++++++++------
1 file changed, 37 insertions(+), 15 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index 6f60327ab34..d82a8f86f41 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -173,23 +173,45 @@ describe('atomic-tab-manager', () => {
});
});
- describe('when tab expression property is undefined (race condition)', () => {
- it('should use empty string as fallback for undefined expression', async () => {
- await renderTabManager({
- slottedContent: html`
+ it('should use empty string as fallback for undefined expression when tab expression property is undefined (race condition)', async () => {
+ const fakeTabManager = buildFakeTabManager({
+ activeTab: 'all',
+ });
+
+ mockConsole();
+
+ vi.mocked(buildTabManager).mockReturnValue(fakeTabManager);
+
+ vi.mocked(buildTab).mockImplementation((_engine, options) => {
+ return {
+ state: {
+ isActive: options?.options?.id === fakeTabManager.state.activeTab,
+ },
+ select: vi.fn(),
+ subscribe: vi.fn(),
+ } as never;
+ });
+
+ const {element} = await renderInAtomicSearchInterface({
+ template: html`
+
- `,
- });
+
+ `,
+ selector: 'atomic-tab-manager',
+ });
- // Verify buildTab was called with empty string for expression
- const buildTabCalls = vi.mocked(buildTab).mock.calls;
- expect(buildTabCalls.length).toBeGreaterThan(0);
- buildTabCalls.forEach((call) => {
- // The expression should be a string (either empty or defined)
- expect(typeof call[1]?.options?.expression).toBe('string');
- // Should not be undefined
- expect(call[1]?.options?.expression).not.toBeUndefined();
- });
+ const tabElement = element.querySelector('atomic-tab')!;
+ Object.defineProperty(tabElement, 'expression', {
+ get: () => undefined,
+ configurable: true,
});
+
+ element.initialize();
+
+ const buildTabCalls = vi.mocked(buildTab).mock.calls;
+ const lastCall = buildTabCalls[buildTabCalls.length - 1];
+ expect(lastCall[1]?.options?.expression).toBe('');
+ expect(lastCall[1]?.options?.expression).not.toBeUndefined();
});
});
From 403187f9eef7b303809314f2733eb4f0137cc4e8 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 11 Dec 2025 14:23:33 +0000
Subject: [PATCH 04/12] Fix test: clear mock calls before re-initializing to
properly test race condition fix
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../search/atomic-tab-manager/atomic-tab-manager.spec.ts | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index d82a8f86f41..511fb19f084 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -207,11 +207,13 @@ describe('atomic-tab-manager', () => {
configurable: true,
});
+ vi.mocked(buildTab).mockClear();
+
element.initialize();
const buildTabCalls = vi.mocked(buildTab).mock.calls;
- const lastCall = buildTabCalls[buildTabCalls.length - 1];
- expect(lastCall[1]?.options?.expression).toBe('');
- expect(lastCall[1]?.options?.expression).not.toBeUndefined();
+ expect(buildTabCalls).toHaveLength(1);
+ expect(buildTabCalls[0][1]?.options?.expression).toBe('');
+ expect(buildTabCalls[0][1]?.options?.expression).not.toBeUndefined();
});
});
From 9543735e48506ab0d6dddbe2a255dc729a7a5124 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 11 Dec 2025 16:30:09 +0000
Subject: [PATCH 05/12] Fix test: override expression property before
initialization and capture value in mock
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../atomic-tab-manager.spec.ts | 38 ++++++++++---------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index 511fb19f084..99891afa57b 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -175,14 +175,17 @@ describe('atomic-tab-manager', () => {
it('should use empty string as fallback for undefined expression when tab expression property is undefined (race condition)', async () => {
const fakeTabManager = buildFakeTabManager({
- activeTab: 'all',
+ activeTab: 'test',
});
mockConsole();
vi.mocked(buildTabManager).mockReturnValue(fakeTabManager);
+ let expressionValue: string | undefined;
+
vi.mocked(buildTab).mockImplementation((_engine, options) => {
+ expressionValue = options?.options?.expression;
return {
state: {
isActive: options?.options?.id === fakeTabManager.state.activeTab,
@@ -192,28 +195,27 @@ describe('atomic-tab-manager', () => {
} as never;
});
- const {element} = await renderInAtomicSearchInterface({
+ await renderInAtomicSearchInterface({
template: html`
`,
selector: 'atomic-tab-manager',
- });
-
- const tabElement = element.querySelector('atomic-tab')!;
- Object.defineProperty(tabElement, 'expression', {
- get: () => undefined,
- configurable: true,
- });
-
- vi.mocked(buildTab).mockClear();
-
- element.initialize();
-
- const buildTabCalls = vi.mocked(buildTab).mock.calls;
- expect(buildTabCalls).toHaveLength(1);
- expect(buildTabCalls[0][1]?.options?.expression).toBe('');
- expect(buildTabCalls[0][1]?.options?.expression).not.toBeUndefined();
+ bindings: (bindings) => {
+ const manager = document.querySelector('atomic-tab-manager');
+ const tabElement = manager?.querySelector('atomic-tab');
+ if (tabElement) {
+ Object.defineProperty(tabElement, 'expression', {
+ get: () => undefined,
+ configurable: true,
+ });
+ }
+ return bindings;
+ },
+ });
+
+ expect(expressionValue).toBe('');
+ expect(expressionValue).not.toBeUndefined();
});
});
From 8d311f35e8d571e1ddc733e9682063f9247e9c6f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 11 Dec 2025 19:30:15 +0000
Subject: [PATCH 06/12] Fix test: manually control fixture and setBindings to
override property at correct time
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../atomic-tab-manager.spec.ts | 37 +++++++++++--------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index 99891afa57b..6c4a43b5f15 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -1,8 +1,13 @@
import {buildTab, buildTabManager, type TabManagerState} from '@coveo/headless';
import {html} from 'lit';
import {describe, expect, it, vi} from 'vitest';
-import {renderInAtomicSearchInterface} from '@/vitest-utils/testing-helpers/fixtures/atomic/search/atomic-search-interface-fixture';
+import {
+ defaultBindings,
+ type FixtureAtomicSearchInterface,
+ renderInAtomicSearchInterface,
+} from '@/vitest-utils/testing-helpers/fixtures/atomic/search/atomic-search-interface-fixture';
import {buildFakeTabManager} from '@/vitest-utils/testing-helpers/fixtures/headless/search/tab-manager-controller';
+import {fixture} from '@/vitest-utils/testing-helpers/testing-utils/fixture';
import type {AtomicTabManager} from './atomic-tab-manager';
import './atomic-tab-manager';
import {mockConsole} from '@/vitest-utils/testing-helpers/testing-utils/mock-console';
@@ -195,26 +200,26 @@ describe('atomic-tab-manager', () => {
} as never;
});
- await renderInAtomicSearchInterface({
- template: html`
+ const atomicInterface = await fixture(
+ html`
- `,
- selector: 'atomic-tab-manager',
- bindings: (bindings) => {
- const manager = document.querySelector('atomic-tab-manager');
- const tabElement = manager?.querySelector('atomic-tab');
- if (tabElement) {
- Object.defineProperty(tabElement, 'expression', {
- get: () => undefined,
- configurable: true,
- });
- }
- return bindings;
- },
+ `
+ );
+
+ const manager = atomicInterface.querySelector('atomic-tab-manager')!;
+ const tabElement = manager.querySelector('atomic-tab')!;
+
+ Object.defineProperty(tabElement, 'expression', {
+ get: () => undefined,
+ configurable: true,
});
+ atomicInterface.setBindings(defaultBindings);
+ await atomicInterface.updateComplete;
+ await manager.updateComplete;
+
expect(expressionValue).toBe('');
expect(expressionValue).not.toBeUndefined();
});
From 885dd6735df4002d41d8833590db8dc043173259 Mon Sep 17 00:00:00 2001
From: fbeaudoincoveo
Date: Mon, 15 Dec 2025 11:45:47 -0500
Subject: [PATCH 07/12] Fix failing test
---
.../search/atomic-tab-manager/atomic-tab-manager.spec.ts | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index 6c4a43b5f15..3e0c4742864 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -7,9 +7,9 @@ import {
renderInAtomicSearchInterface,
} from '@/vitest-utils/testing-helpers/fixtures/atomic/search/atomic-search-interface-fixture';
import {buildFakeTabManager} from '@/vitest-utils/testing-helpers/fixtures/headless/search/tab-manager-controller';
-import {fixture} from '@/vitest-utils/testing-helpers/testing-utils/fixture';
import type {AtomicTabManager} from './atomic-tab-manager';
import './atomic-tab-manager';
+import {fixture} from '@/vitest-utils/testing-helpers/fixture';
import {mockConsole} from '@/vitest-utils/testing-helpers/testing-utils/mock-console';
vi.mock('@coveo/headless', {spy: true});
@@ -183,8 +183,6 @@ describe('atomic-tab-manager', () => {
activeTab: 'test',
});
- mockConsole();
-
vi.mocked(buildTabManager).mockReturnValue(fakeTabManager);
let expressionValue: string | undefined;
@@ -211,6 +209,11 @@ describe('atomic-tab-manager', () => {
const manager = atomicInterface.querySelector('atomic-tab-manager')!;
const tabElement = manager.querySelector('atomic-tab')!;
+ await tabElement.updateComplete;
+
+ tabElement.name = tabElement.getAttribute('name')!;
+ tabElement.label = tabElement.getAttribute('label')!;
+
Object.defineProperty(tabElement, 'expression', {
get: () => undefined,
configurable: true,
From 70c2e98334bbdd81cc682d382e558ea894028033 Mon Sep 17 00:00:00 2001
From: fbeaudoincoveo
Date: Tue, 16 Dec 2025 15:18:44 -0500
Subject: [PATCH 08/12] Use ChildrenUpdateCompleteMixin instead of falling back
undefined atomic-tab expression to ''
---
.../atomic-tab-manager.spec.ts | 56 +------------------
.../atomic-tab-manager/atomic-tab-manager.ts | 5 +-
2 files changed, 4 insertions(+), 57 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
index 3e0c4742864..a562331ab40 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.spec.ts
@@ -1,15 +1,10 @@
import {buildTab, buildTabManager, type TabManagerState} from '@coveo/headless';
import {html} from 'lit';
import {describe, expect, it, vi} from 'vitest';
-import {
- defaultBindings,
- type FixtureAtomicSearchInterface,
- renderInAtomicSearchInterface,
-} from '@/vitest-utils/testing-helpers/fixtures/atomic/search/atomic-search-interface-fixture';
+import {renderInAtomicSearchInterface} from '@/vitest-utils/testing-helpers/fixtures/atomic/search/atomic-search-interface-fixture';
import {buildFakeTabManager} from '@/vitest-utils/testing-helpers/fixtures/headless/search/tab-manager-controller';
import type {AtomicTabManager} from './atomic-tab-manager';
import './atomic-tab-manager';
-import {fixture} from '@/vitest-utils/testing-helpers/fixture';
import {mockConsole} from '@/vitest-utils/testing-helpers/testing-utils/mock-console';
vi.mock('@coveo/headless', {spy: true});
@@ -177,53 +172,4 @@ describe('atomic-tab-manager', () => {
});
});
});
-
- it('should use empty string as fallback for undefined expression when tab expression property is undefined (race condition)', async () => {
- const fakeTabManager = buildFakeTabManager({
- activeTab: 'test',
- });
-
- vi.mocked(buildTabManager).mockReturnValue(fakeTabManager);
-
- let expressionValue: string | undefined;
-
- vi.mocked(buildTab).mockImplementation((_engine, options) => {
- expressionValue = options?.options?.expression;
- return {
- state: {
- isActive: options?.options?.id === fakeTabManager.state.activeTab,
- },
- select: vi.fn(),
- subscribe: vi.fn(),
- } as never;
- });
-
- const atomicInterface = await fixture(
- html`
-
-
-
- `
- );
-
- const manager = atomicInterface.querySelector('atomic-tab-manager')!;
- const tabElement = manager.querySelector('atomic-tab')!;
-
- await tabElement.updateComplete;
-
- tabElement.name = tabElement.getAttribute('name')!;
- tabElement.label = tabElement.getAttribute('label')!;
-
- Object.defineProperty(tabElement, 'expression', {
- get: () => undefined,
- configurable: true,
- });
-
- atomicInterface.setBindings(defaultBindings);
- await atomicInterface.updateComplete;
- await manager.updateComplete;
-
- expect(expressionValue).toBe('');
- expect(expressionValue).not.toBeUndefined();
- });
});
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
index 0f0850170da..13b96557f27 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
@@ -17,6 +17,7 @@ import type {InitializableComponent} from '@/src/decorators/types';
import {withTailwindStyles} from '@/src/decorators/with-tailwind-styles';
import styles from './atomic-tab-manager.tw.css';
import '@/src/components/common/atomic-tab-bar/atomic-tab-bar';
+import {ChildrenUpdateCompleteMixin} from '@/src/mixins/children-update-complete-mixin';
interface TabInfo {
label: string;
@@ -47,7 +48,7 @@ interface TabInfo {
@bindings()
@withTailwindStyles
export class AtomicTabManager
- extends LitElement
+ extends ChildrenUpdateCompleteMixin(LitElement)
implements InitializableComponent
{
static styles: CSSResultGroup = styles;
@@ -94,7 +95,7 @@ export class AtomicTabManager
}
const tabController = buildTab(this.bindings.engine, {
options: {
- expression: tabElement.expression ?? '',
+ expression: tabElement.expression,
id: tabElement.name,
clearFiltersOnTabChange: this.clearFiltersOnTabChange,
},
From 14bdee13e5975e674770dcef1c8b8461f29aaed1 Mon Sep 17 00:00:00 2001
From: fbeaudoincoveo
Date: Wed, 17 Dec 2025 13:05:31 -0500
Subject: [PATCH 09/12] Better fix
---
.../search/atomic-tab-manager/atomic-tab-manager.ts | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
index 13b96557f27..a1e3ab225fb 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
@@ -17,7 +17,6 @@ import type {InitializableComponent} from '@/src/decorators/types';
import {withTailwindStyles} from '@/src/decorators/with-tailwind-styles';
import styles from './atomic-tab-manager.tw.css';
import '@/src/components/common/atomic-tab-bar/atomic-tab-bar';
-import {ChildrenUpdateCompleteMixin} from '@/src/mixins/children-update-complete-mixin';
interface TabInfo {
label: string;
@@ -48,7 +47,7 @@ interface TabInfo {
@bindings()
@withTailwindStyles
export class AtomicTabManager
- extends ChildrenUpdateCompleteMixin(LitElement)
+ extends LitElement
implements InitializableComponent
{
static styles: CSSResultGroup = styles;
@@ -95,7 +94,7 @@ export class AtomicTabManager
}
const tabController = buildTab(this.bindings.engine, {
options: {
- expression: tabElement.expression,
+ expression: tabElement.getAttribute('expression') ?? '',
id: tabElement.name,
clearFiltersOnTabChange: this.clearFiltersOnTabChange,
},
From e01197c9da39dd9e23b077daacbe605ea3d5468f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 17 Dec 2025 21:14:06 +0000
Subject: [PATCH 10/12] Use getAttribute for name and label, store all
attributes in variables
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../atomic-tab-manager/atomic-tab-manager.ts | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
index a1e3ab225fb..9f669e25b03 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
@@ -86,7 +86,11 @@ export class AtomicTabManager
}
tabElements.forEach((tabElement) => {
- if (!tabElement.name) {
+ const name = tabElement.getAttribute('name') || '';
+ const expression = tabElement.getAttribute('expression') ?? '';
+ const label = tabElement.getAttribute('label') || '';
+
+ if (!name) {
this.error = new Error(
'The "name" attribute must be defined on all "atomic-tab" children.'
);
@@ -94,15 +98,15 @@ export class AtomicTabManager
}
const tabController = buildTab(this.bindings.engine, {
options: {
- expression: tabElement.getAttribute('expression') ?? '',
- id: tabElement.name,
+ expression,
+ id: name,
clearFiltersOnTabChange: this.clearFiltersOnTabChange,
},
});
this.tabs.push({
- label: tabElement.label,
- name: tabElement.name,
+ label,
+ name,
tabController,
});
});
From aa64d2fe4c36bbe6f0d324a4a7d89a15f4d550d0 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 17 Dec 2025 21:33:40 +0000
Subject: [PATCH 11/12] Remove unnecessary fallback operators for required name
and label attributes
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../search/atomic-tab-manager/atomic-tab-manager.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
index 9f669e25b03..70320048839 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
@@ -86,9 +86,9 @@ export class AtomicTabManager
}
tabElements.forEach((tabElement) => {
- const name = tabElement.getAttribute('name') || '';
+ const name = tabElement.getAttribute('name');
const expression = tabElement.getAttribute('expression') ?? '';
- const label = tabElement.getAttribute('label') || '';
+ const label = tabElement.getAttribute('label');
if (!name) {
this.error = new Error(
From 8d0330cdd1e0de188ee2952be1be9de04f3360b9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 19 Dec 2025 14:13:40 +0000
Subject: [PATCH 12/12] Add fallback operators for name and label to fix
TypeScript compilation
Co-authored-by: fbeaudoincoveo <23503066+fbeaudoincoveo@users.noreply.github.com>
---
.../search/atomic-tab-manager/atomic-tab-manager.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
index 003b05c5444..259048b001b 100644
--- a/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
+++ b/packages/atomic/src/components/search/atomic-tab-manager/atomic-tab-manager.ts
@@ -87,9 +87,9 @@ export class AtomicTabManager
}
tabElements.forEach((tabElement) => {
- const name = tabElement.getAttribute('name');
+ const name = tabElement.getAttribute('name') || '';
const expression = tabElement.getAttribute('expression') ?? '';
- const label = tabElement.getAttribute('label');
+ const label = tabElement.getAttribute('label') || '';
if (!name) {
this.error = new Error(