diff --git a/apps/www/src/content/docs/components/command/index.mdx b/apps/www/src/content/docs/components/command/index.mdx
index cc99370b7..dbc3728dc 100644
--- a/apps/www/src/content/docs/components/command/index.mdx
+++ b/apps/www/src/content/docs/components/command/index.mdx
@@ -177,5 +177,5 @@ Every rendered part carries a stable `data-slot` attribute for [styling and test
- Follows the [WAI-ARIA Combobox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/).
- Input uses `role="combobox"`, list uses `role="listbox"`, items use `role="option"`.
- Keyboard: `ArrowDown` / `ArrowUp` move the highlight, `Enter` activates the highlighted item, `Escape` closes the dialog.
-- Disabled items expose `aria-disabled="true"` and are skipped in keyboard navigation.
+- Disabled items expose `aria-disabled="true"`. The arrow keys still highlight them, and `Enter` does not activate them.
- When used inside `Command.Dialog`, focus is trapped in the dialog and returned to the trigger on close.
diff --git a/apps/www/src/content/docs/dataview/index.mdx b/apps/www/src/content/docs/dataview/index.mdx
index fbd8d0e25..c41e811ac 100644
--- a/apps/www/src/content/docs/dataview/index.mdx
+++ b/apps/www/src/content/docs/dataview/index.mdx
@@ -263,6 +263,7 @@ Every rendered part carries a stable `data-slot` attribute for [styling and test
| `data-view-filters` | Filter chip row |
| `data-view-add-filter` | Default add-filter trigger |
| `data-view-add-filter-item` | An entry in the add-filter menu |
+| `data-view-filter-summary-status` | Visually hidden live region that announces the footer text |
| `data-view-filter-summary` | "Items hidden by filters" footer |
| `data-view-filter-summary-text` | Count + label group |
| `data-view-filter-summary-count` | Hidden-row count |
@@ -297,6 +298,9 @@ Every rendered part carries a stable `data-slot` attribute for [styling and test
cells stay associated with their row, and key presses bubbling up from
interactive children (buttons, links in cells) are ignored so they don't also
trigger row activation.
+- The "hidden by filters" footer of List and Timeline has a visually hidden
+ `role="status"` region. It announces the footer text, for example "3 items
+ hidden by filters", once the search and filters stop changing for 500ms.
- Renderer-specific semantics are documented on the
[List](/docs/dataview/list#accessibility) and
[Timeline](/docs/dataview/timeline#accessibility) pages.
diff --git a/packages/raystack/components/command/__tests__/command.test.tsx b/packages/raystack/components/command/__tests__/command.test.tsx
index 8075d7c0e..5c53793f3 100644
--- a/packages/raystack/components/command/__tests__/command.test.tsx
+++ b/packages/raystack/components/command/__tests__/command.test.tsx
@@ -284,6 +284,31 @@ describe('Command', () => {
const option = screen.getByText('Calendar').closest('[role="option"]');
expect(option).toHaveAttribute('aria-disabled', 'true');
});
+
+ it('reaches disabled items with the arrow keys but does not activate them', async () => {
+ const user = userEvent.setup();
+ const handleClick = vi.fn();
+ render(
+
+
+
+ Calendar
+
+ Billing
+
+
+
+ );
+
+ await user.click(screen.getByRole('combobox'));
+ await user.keyboard('{ArrowDown}');
+ expect(screen.getByRole('option', { name: 'Billing' })).toHaveAttribute(
+ 'data-highlighted'
+ );
+
+ await user.keyboard('{Enter}');
+ expect(handleClick).not.toHaveBeenCalled();
+ });
});
describe('CommandDialog', () => {
diff --git a/packages/raystack/components/command/command-item.tsx b/packages/raystack/components/command/command-item.tsx
index 3990d8edb..e6123b473 100644
--- a/packages/raystack/components/command/command-item.tsx
+++ b/packages/raystack/components/command/command-item.tsx
@@ -20,7 +20,6 @@ export const CommandItem = ({
value: providedValue,
leadingIcon,
trailingIcon,
- disabled,
...props
}: CommandItemProps) => {
const value =
@@ -41,8 +40,13 @@ export const CommandItem = ({
if (!isMatched) return null;
}
- const content = (
- <>
+ return (
+
{leadingIcon && (
{leadingIcon}
@@ -59,35 +63,6 @@ export const CommandItem = ({
{trailingIcon}
)}
- >
- );
-
- /**
- * TODO: Fix this when Base UI fixes this issue
- * This is a workaround to prevent item focus when the disabled prop is true.
- */
- if (disabled) {
- return (
-