|
3 | 3 | * Copyright (c) 2019 - 2025 Vaadin Ltd.
|
4 | 4 | * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
5 | 5 | */
|
6 |
| -import { DisabledMixin } from '@vaadin/a11y-base/src/disabled-mixin.js'; |
7 |
| -import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js'; |
8 |
| -import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; |
9 |
| -import { type MenuBarItem, MenuBarMixin } from './vaadin-menu-bar-mixin.js'; |
| 6 | +import type { DisabledMixinClass } from '@vaadin/a11y-base/src/disabled-mixin.js'; |
| 7 | +import type { ElementMixinClass } from '@vaadin/component-base/src/element-mixin.js'; |
| 8 | +import type { ThemableMixinClass } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; |
| 9 | +import type { MenuBarItem, MenuBarMixinClass } from './vaadin-menu-bar-mixin.js'; |
10 | 10 |
|
11 | 11 | export { MenuBarItem, MenuBarI18n, SubMenuItem } from './vaadin-menu-bar-mixin.js';
|
12 | 12 |
|
13 | 13 | /**
|
14 | 14 | * Fired when a submenu item or menu bar button without children is clicked.
|
15 | 15 | */
|
16 |
| -export type MenuBarItemSelectedEvent = CustomEvent<{ value: MenuBarItem }>; |
| 16 | +export type MenuBarItemSelectedEvent<TItem extends MenuBarItem = MenuBarItem> = CustomEvent<{ value: TItem }>; |
17 | 17 |
|
18 |
| -export interface MenuBarCustomEventMap { |
19 |
| - 'item-selected': MenuBarItemSelectedEvent; |
| 18 | +export interface MenuBarCustomEventMap<TItem extends MenuBarItem = MenuBarItem> { |
| 19 | + 'item-selected': MenuBarItemSelectedEvent<TItem>; |
20 | 20 | }
|
21 | 21 |
|
22 |
| -export interface MenuBarEventMap extends HTMLElementEventMap, MenuBarCustomEventMap {} |
| 22 | +export interface MenuBarEventMap<TItem extends MenuBarItem = MenuBarItem> |
| 23 | + extends HTMLElementEventMap, |
| 24 | + MenuBarCustomEventMap<TItem> {} |
23 | 25 |
|
24 | 26 | /**
|
25 | 27 | * `<vaadin-menu-bar>` is a Web Component providing a set of horizontally stacked buttons offering
|
@@ -77,20 +79,26 @@ export interface MenuBarEventMap extends HTMLElementEventMap, MenuBarCustomEvent
|
77 | 79 | *
|
78 | 80 | * @fires {CustomEvent} item-selected - Fired when a submenu item or menu bar button without children is clicked.
|
79 | 81 | */
|
80 |
| -declare class MenuBar extends MenuBarMixin(DisabledMixin(ElementMixin(ThemableMixin(HTMLElement)))) { |
81 |
| - addEventListener<K extends keyof MenuBarEventMap>( |
| 82 | +declare class MenuBar<TItem extends MenuBarItem = MenuBarItem> extends HTMLElement { |
| 83 | + addEventListener<K extends keyof MenuBarEventMap<TItem>>( |
82 | 84 | type: K,
|
83 |
| - listener: (this: MenuBar, ev: MenuBarEventMap[K]) => void, |
| 85 | + listener: (this: MenuBar<TItem>, ev: MenuBarEventMap<TItem>[K]) => void, |
84 | 86 | options?: AddEventListenerOptions | boolean,
|
85 | 87 | ): void;
|
86 | 88 |
|
87 |
| - removeEventListener<K extends keyof MenuBarEventMap>( |
| 89 | + removeEventListener<K extends keyof MenuBarEventMap<TItem>>( |
88 | 90 | type: K,
|
89 |
| - listener: (this: MenuBar, ev: MenuBarEventMap[K]) => void, |
| 91 | + listener: (this: MenuBar<TItem>, ev: MenuBarEventMap<TItem>[K]) => void, |
90 | 92 | options?: EventListenerOptions | boolean,
|
91 | 93 | ): void;
|
92 | 94 | }
|
93 | 95 |
|
| 96 | +interface MenuBar<TItem extends MenuBarItem = MenuBarItem> |
| 97 | + extends MenuBarMixinClass<TItem>, |
| 98 | + DisabledMixinClass, |
| 99 | + ElementMixinClass, |
| 100 | + ThemableMixinClass {} |
| 101 | + |
94 | 102 | declare global {
|
95 | 103 | interface HTMLElementTagNameMap {
|
96 | 104 | 'vaadin-menu-bar': MenuBar;
|
|
0 commit comments