diff --git a/tests/slider-pagination.test.ts b/tests/slider-pagination.test.ts
index e0e592b..5e2c354 100644
--- a/tests/slider-pagination.test.ts
+++ b/tests/slider-pagination.test.ts
@@ -72,6 +72,24 @@ describe('BqSlider', () => {
expect(input?.getAttribute('aria-valuetext')).toBe('Value: 50');
});
+ it('should update live value and ARIA state during input without re-rendering', () => {
+ const el = doc.createElement('bq-slider');
+ el.setAttribute('show-value', '');
+ el.setAttribute('value', '40');
+ doc.body.appendChild(el);
+
+ const input = el.shadowRoot?.querySelector('input') as HTMLInputElement;
+ const valueEl = el.shadowRoot?.querySelector('.value');
+
+ input.value = '65';
+ input.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
+
+ expect(el.getAttribute('value')).toBe('40');
+ expect(valueEl?.textContent).toBe('65');
+ expect(input.getAttribute('aria-valuenow')).toBe('65');
+ expect(input.getAttribute('aria-valuetext')).toBe('Value: 65');
+ });
+
it('should create form proxy hidden input', () => {
const el = doc.createElement('bq-slider');
el.setAttribute('name', 'volume');
diff --git a/tests/tabs-tooltip.test.ts b/tests/tabs-tooltip.test.ts
index 2654da0..01b0842 100644
--- a/tests/tabs-tooltip.test.ts
+++ b/tests/tabs-tooltip.test.ts
@@ -118,6 +118,44 @@ describe('BqTabs', () => {
expect(panelTwo?.getAttribute('tabindex')).toBe('0');
expect(panelTwo?.getAttribute('aria-hidden')).toBe('false');
});
+
+ it('should avoid invalid generated aria ids when a tab item has no id', async () => {
+ const el = doc.createElement('bq-tabs');
+ el.innerHTML = `
+
+
Panel one
+ `;
+ doc.body.appendChild(el);
+
+ await waitForFrame();
+
+ const tab = el.shadowRoot?.querySelector('[role="tab"]');
+ const panel = el.querySelector('[data-tab="one"]');
+
+ expect(tab?.getAttribute('id')).toBeNull();
+ expect(tab?.getAttribute('aria-controls')).toBeNull();
+ expect(panel?.getAttribute('aria-labelledby')).toBeNull();
+ });
+
+ it('should generate encoded aria ids for tab values that include spaces', async () => {
+ const el = doc.createElement('bq-tabs');
+ el.setAttribute('active-tab', 'needs space');
+ el.innerHTML = `
+
+
Panel
+ `;
+ doc.body.appendChild(el);
+
+ await waitForFrame();
+
+ const tab = el.shadowRoot?.querySelector('[role="tab"]');
+ const panel = el.querySelector('[data-tab="needs space"]');
+
+ expect(tab?.getAttribute('id')).toBe('tab-needs%20space');
+ expect(tab?.getAttribute('aria-controls')).toBe('panel-needs%20space');
+ expect(panel?.id).toBe('panel-needs%20space');
+ expect(panel?.getAttribute('aria-labelledby')).toBe('tab-needs%20space');
+ });
});
describe('BqTooltip', () => {
From df04bdb21abf1cbf24c42b402a1d8bbf9edeccff Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 24 Mar 2026 21:33:00 +0000
Subject: [PATCH 3/3] refine review follow-up helpers
Co-authored-by: JosunLP <20913954+JosunLP@users.noreply.github.com>
Agent-Logs-Url: https://github.com/bQuery/ui/sessions/e4630707-5db7-4123-9766-51140bcfcaad
---
src/components/slider/BqSlider.ts | 9 +++++----
src/components/tabs/BqTabs.ts | 3 +--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/components/slider/BqSlider.ts b/src/components/slider/BqSlider.ts
index 09d5769..6f6d72c 100644
--- a/src/components/slider/BqSlider.ts
+++ b/src/components/slider/BqSlider.ts
@@ -28,6 +28,11 @@ type BqSliderProps = {
'show-value': boolean;
};
+function syncInputAccessibility(input: HTMLInputElement, value: number): void {
+ input.setAttribute('aria-valuenow', String(value));
+ input.setAttribute('aria-valuetext', t('slider.valueText', { value }));
+}
+
const definition: ComponentDefinition
= {
props: {
value: { type: Number, default: 50 },
@@ -55,10 +60,6 @@ const definition: ComponentDefinition = {
`,
connected() {
const self = this;
- const syncInputAccessibility = (input: HTMLInputElement, value: number) => {
- input.setAttribute('aria-valuenow', String(value));
- input.setAttribute('aria-valuetext', t('slider.valueText', { value }));
- };
// Form proxy for native