feat(core): menu core layer and DOM keyboard navigation (#1503)

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Sam Potts
2026-05-06 18:15:49 +10:00
committed by GitHub
co-authored by Claude Sonnet 4.6
parent 0cfd3bb395
commit e3c1b28032
66 changed files with 6379 additions and 56 deletions
+26
View File
@@ -4,6 +4,17 @@ import { AlertDialogTitleElement } from '../../ui/alert-dialog/alert-dialog-titl
import { ControlsElement } from '../../ui/controls/controls-element';
import { ControlsGroupElement } from '../../ui/controls/controls-group-element';
import { ErrorDialogElement } from '../../ui/error-dialog/error-dialog-element';
import { MenuBackElement } from '../../ui/menu/menu-back-element';
import { MenuCheckboxItemElement } from '../../ui/menu/menu-checkbox-item-element';
import { MenuElement } from '../../ui/menu/menu-element';
import { MenuGroupElement } from '../../ui/menu/menu-group-element';
import { MenuItemElement } from '../../ui/menu/menu-item-element';
import { MenuItemIndicatorElement } from '../../ui/menu/menu-item-indicator-element';
import { MenuLabelElement } from '../../ui/menu/menu-label-element';
import { MenuRadioGroupElement } from '../../ui/menu/menu-radio-group-element';
import { MenuRadioItemElement } from '../../ui/menu/menu-radio-item-element';
import { MenuSeparatorElement } from '../../ui/menu/menu-separator-element';
import { MenuViewElement } from '../../ui/menu/menu-view-element';
import { SeekIndicatorElement } from '../../ui/seek-indicator/seek-indicator-element';
import { SeekIndicatorValueElement } from '../../ui/seek-indicator/seek-indicator-value-element';
import { SliderBufferElement } from '../../ui/slider/slider-buffer-element';
@@ -29,6 +40,21 @@ import { safeDefine } from '../safe-define';
// ── Define functions ────────────────────────────────────────────────────
export function defineMenu(): void {
// Root first — part elements consume its context.
safeDefine(MenuElement);
safeDefine(MenuBackElement);
safeDefine(MenuItemElement);
safeDefine(MenuLabelElement);
safeDefine(MenuSeparatorElement);
safeDefine(MenuGroupElement);
safeDefine(MenuRadioGroupElement);
safeDefine(MenuRadioItemElement);
safeDefine(MenuCheckboxItemElement);
safeDefine(MenuItemIndicatorElement);
safeDefine(MenuViewElement);
}
export function defineControls(): void {
safeDefine(ControlsElement);
safeDefine(ControlsGroupElement);
+30
View File
@@ -0,0 +1,30 @@
import { MenuBackElement } from '../../ui/menu/menu-back-element';
import { MenuCheckboxItemElement } from '../../ui/menu/menu-checkbox-item-element';
import { MenuElement } from '../../ui/menu/menu-element';
import { MenuGroupElement } from '../../ui/menu/menu-group-element';
import { MenuItemElement } from '../../ui/menu/menu-item-element';
import { MenuItemIndicatorElement } from '../../ui/menu/menu-item-indicator-element';
import { MenuLabelElement } from '../../ui/menu/menu-label-element';
import { MenuRadioGroupElement } from '../../ui/menu/menu-radio-group-element';
import { MenuRadioItemElement } from '../../ui/menu/menu-radio-item-element';
import { MenuSeparatorElement } from '../../ui/menu/menu-separator-element';
import { MenuViewElement } from '../../ui/menu/menu-view-element';
import { defineMenu } from './compounds';
defineMenu();
declare global {
interface HTMLElementTagNameMap {
[MenuElement.tagName]: MenuElement;
[MenuBackElement.tagName]: MenuBackElement;
[MenuItemElement.tagName]: MenuItemElement;
[MenuLabelElement.tagName]: MenuLabelElement;
[MenuSeparatorElement.tagName]: MenuSeparatorElement;
[MenuGroupElement.tagName]: MenuGroupElement;
[MenuRadioGroupElement.tagName]: MenuRadioGroupElement;
[MenuRadioItemElement.tagName]: MenuRadioItemElement;
[MenuCheckboxItemElement.tagName]: MenuCheckboxItemElement;
[MenuItemIndicatorElement.tagName]: MenuItemIndicatorElement;
[MenuViewElement.tagName]: MenuViewElement;
}
}