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'}
`;
};
}