+
Submenu
Settings
@@ -248,7 +250,7 @@ function App() {
Quality
-
+
{['auto', '1080p', '720p', '480p'].map((v) => (
{quality === v && }
@@ -273,7 +275,7 @@ function App() {
Speed
-
+
{[
{ value: '0.5', label: '0.5x' },
{ value: '0.75', label: '0.75x' },
diff --git a/packages/core/src/core/ui/menu/menu-core.ts b/packages/core/src/core/ui/menu/menu-core.ts
index 601cd8ef..ebc6e572 100644
--- a/packages/core/src/core/ui/menu/menu-core.ts
+++ b/packages/core/src/core/ui/menu/menu-core.ts
@@ -83,7 +83,7 @@ export class MenuCore {
getTriggerAttrs(state: MenuState, contentId?: string) {
return {
'aria-haspopup': 'menu' as const,
- 'aria-expanded': state.open ? 'true' : 'false',
+ 'aria-expanded': state.open && state.status !== 'ending' ? 'true' : 'false',
'aria-controls': contentId,
};
}
diff --git a/packages/core/src/core/ui/menu/tests/menu-core.test.ts b/packages/core/src/core/ui/menu/tests/menu-core.test.ts
index 6286b2bb..8075eb34 100644
--- a/packages/core/src/core/ui/menu/tests/menu-core.test.ts
+++ b/packages/core/src/core/ui/menu/tests/menu-core.test.ts
@@ -114,6 +114,16 @@ describe('MenuCore', () => {
expect(attrs['aria-expanded']).toBe('true');
});
+ it('returns aria-expanded false when closing', () => {
+ const core = new MenuCore();
+ core.setInput(createInput({ active: true, status: 'ending' }));
+ const state = core.getState();
+ const attrs = core.getTriggerAttrs(state);
+
+ expect(state.open).toBe(true);
+ expect(attrs['aria-expanded']).toBe('false');
+ });
+
it('sets aria-controls when contentId is provided', () => {
const core = new MenuCore();
core.setInput(createInput());
diff --git a/packages/core/src/core/ui/popover/popover-core.ts b/packages/core/src/core/ui/popover/popover-core.ts
index 0d711b6d..203de30f 100644
--- a/packages/core/src/core/ui/popover/popover-core.ts
+++ b/packages/core/src/core/ui/popover/popover-core.ts
@@ -94,7 +94,7 @@ export class PopoverCore {
getTriggerAttrs(state: PopoverState, popupId?: string) {
return {
- 'aria-expanded': state.open ? 'true' : 'false',
+ 'aria-expanded': state.open && state.status !== 'ending' ? 'true' : 'false',
'aria-haspopup': 'dialog',
'aria-controls': popupId,
};
diff --git a/packages/core/src/core/ui/popover/tests/popover-core.test.ts b/packages/core/src/core/ui/popover/tests/popover-core.test.ts
index 78e17aed..f7a02d86 100644
--- a/packages/core/src/core/ui/popover/tests/popover-core.test.ts
+++ b/packages/core/src/core/ui/popover/tests/popover-core.test.ts
@@ -69,6 +69,16 @@ describe('PopoverCore', () => {
expect(attrs['aria-expanded']).toBe('true');
});
+ it('returns aria-expanded false when closing', () => {
+ const core = new PopoverCore();
+ core.setInput({ active: true, status: 'ending' });
+ const state = core.getState();
+ const attrs = core.getTriggerAttrs(state);
+
+ expect(state.open).toBe(true);
+ expect(attrs['aria-expanded']).toBe('false');
+ });
+
it('includes aria-controls when popupId is provided', () => {
const core = new PopoverCore();
core.setInput(OPEN);