+ );
+};
+
+describe('Table with Combobox Integration Test - Issue #35520', () => {
+ /**
+ * This test verifies that the issue described in #35520 is fixed.
+ * The core issue was that when a combobox is open in a table,
+ * down arrow would move focus to next table cell instead of navigating options.
+ * The tabster fix ensures combobox gets priority when open.
+ */
+ it('should focus first combobox option on down arrow instead of next table cell', () => {
+ mount();
+
+ // Step 1: Focus on the combobox input without clicking
+ cy.get('input[role="combobox"]').first().focus();
+
+ // Step 2: Type a letter that does not exist in one of the options
+ cy.get('input[role="combobox"]').first().type('a');
+
+ // Step 3: Verify that the combobox input is still focused but the popover is opened
+ cy.get('input[role="combobox"]').first().should('be.focused');
+ cy.get('input[role="combobox"]').first().should('have.attr', 'aria-expanded', 'true');
+ cy.get('[role="listbox"]').should('be.visible');
+
+ // Step 4: Press arrow down and verify that focus goes to one of the options
+ cy.get('input[role="combobox"]').first().realPress('ArrowDown');
+
+ // Verify focus remains on the combobox input
+ cy.get('input[role="combobox"]').first().should('be.focused');
+
+ // Verify aria-activedescendant points to an option
+ cy.get('input[role="combobox"]').first().should('have.attr', 'aria-activedescendant').and('not.be.empty');
+ });
+
+ it('should allow navigation between table cells when combobox is closed', () => {
+ mount();
+
+ // Focus on the first table cell (file name)
+ cy.contains('Meeting notes').click();
+
+ // Press right arrow to move to the combobox cell
+ cy.focused().realPress('ArrowRight');
+ cy.get('input[role="combobox"]').first().should('be.focused');
+
+ // Make sure combobox is closed by pressing Escape
+ cy.get('input[role="combobox"]').first().realPress('Escape');
+ cy.get('input[role="combobox"]').first().should('have.attr', 'aria-expanded', 'false');
+
+ // Press left arrow to go back to the file name cell
+ cy.get('input[role="combobox"]').first().realPress('ArrowLeft');
+
+ // Should focus the file name cell again
+ cy.focused().should('contain.text', 'Meeting notes');
+ });
+
+ it('should maintain combobox functionality within table grid navigation', () => {
+ mount();
+
+ // Focus on combobox and interact with it
+ cy.get('input[role="combobox"]').first().realClick();
+ cy.get('input[role="combobox"]').first().type('Cat');
+
+ // Verify combobox opened
+ cy.get('input[role="combobox"]').first().should('have.attr', 'aria-expanded', 'true');
+
+ // Clear and try a different approach - just verify basic interaction works
+ cy.get('input[role="combobox"]').first().clear();
+ cy.get('input[role="combobox"]').first().type('Dog');
+
+ // Verify we can type and the combobox responds
+ cy.get('input[role="combobox"]').first().should('have.value', 'Dog');
+
+ // Press Escape to close
+ cy.get('input[role="combobox"]').first().realPress('Escape');
+
+ // Verify it closes
+ cy.get('input[role="combobox"]').first().should('have.attr', 'aria-expanded', 'false');
+ });
+});
diff --git a/packages/react-components/react-tabster/package.json b/packages/react-components/react-tabster/package.json
index 88d9be64b2469d..1d42a71dd3b450 100644
--- a/packages/react-components/react-tabster/package.json
+++ b/packages/react-components/react-tabster/package.json
@@ -23,7 +23,7 @@
"@griffel/react": "^1.5.32",
"@swc/helpers": "^0.5.1",
"keyborg": "^2.6.0",
- "tabster": "^8.5.5"
+ "tabster": "^8.6.2"
},
"peerDependencies": {
"@types/react": ">=16.14.0 <20.0.0",
diff --git a/yarn.lock b/yarn.lock
index 241daacaa118ba..ff9c6f23e3518a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3521,16 +3521,16 @@
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz#e9f09b802f1291839247399028beaef9ce034c81"
integrity sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==
-"@rollup/rollup-linux-x64-gnu@4.40.0":
- version "4.40.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz#68b045a720bd9b4d905f462b997590c2190a6de0"
- integrity sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==
-
"@rollup/rollup-linux-x64-gnu@4.40.1":
version "4.40.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz#0413169dc00470667dea8575c1129d4e7a73eb29"
integrity sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==
+"@rollup/rollup-linux-x64-gnu@4.53.3":
+ version "4.53.3"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa"
+ integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==
+
"@rollup/rollup-linux-x64-musl@4.40.1":
version "4.40.1"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz#c76fd593323c60ea219439a00da6c6d33ffd0ea6"
@@ -19465,15 +19465,15 @@ table@^6.0.7:
string-width "^4.2.3"
strip-ansi "^6.0.1"
-tabster@^8.5.5:
- version "8.5.5"
- resolved "https://registry.yarnpkg.com/tabster/-/tabster-8.5.5.tgz#fcd90edd8c5cd0bd42cd09a025b31afe6946fa15"
- integrity sha512-fqoBWIZRPJ2LuAqQWbGGE1KkKz6sX+6ROOeHlXIyRM7qD7XZK0gWc50mJbI8G48wuy8201/kvGkYq3p+QmSTAg==
+tabster@^8.6.2:
+ version "8.6.2"
+ resolved "https://registry.yarnpkg.com/tabster/-/tabster-8.6.2.tgz#573005911d602090d60eb6ff8515fe7aabeefcde"
+ integrity sha512-SRt/mFhfunYDWUZcebnKGbWfhN36FSoX7eiGJ7kVfpI9N90WlqOZzoUaDWx+IQA1M/uHujqRqnBGYk6hFtEXhw==
dependencies:
keyborg "2.6.0"
tslib "^2.8.1"
optionalDependencies:
- "@rollup/rollup-linux-x64-gnu" "4.40.0"
+ "@rollup/rollup-linux-x64-gnu" "4.53.3"
tachometer@0.7.1:
version "0.7.1"