import { html, GemElement, customElement, connectStore } from '@mantou/gem'; import { Window } from '../lib/layout'; import { closePanel, closeWindow, store } from '../lib/store'; import { MenuItem, openContextMenu } from './menu'; @customElement('gem-panel-title') @connectStore(store) export class GemPanelTitleElement extends GemElement { window: Window; panelName: string; #defaultMenus: MenuItem[] = [ { text: 'close panel', handle: () => closePanel(this.window, this.panelName), }, { text: 'close panel group', handle: () => closeWindow(this.window), }, ]; // https://bugs.chromium.org/p/chromium/issues/detail?id=1206640 #pointerDownHandle = (evt: MouseEvent) => { evt.stopPropagation(); const panel = store.panels[this.panelName]; if (!panel) return; setTimeout(async () => { const activeElement = (this.getRootNode() as ShadowRoot)?.activeElement; const menus = (await panel.getMenu?.(this.window, panel, this.#defaultMenus)) || this.#defaultMenus; openContextMenu(activeElement as HTMLElement, evt.x, evt.y, menus); }); }; render = () => { return html` ${store.panels[this.panelName]?.title || 'No title'} `; }; }