blob: 70f7c9a1cdde2c13f907446e31d84a5e62e5f83b [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import './icons.html.js';
import {CrLitElement, type PropertyValues} from '//resources/lit/v3_0/lit.rollup.js';
import {MenuSourceType} from '//resources/mojo/ui/base/mojom/menu_source_type.mojom-webui.js';
import {getCss} from './extension_element.css.js';
import {getHtml} from './extension_element.html.js';
import type {ExtensionsBar} from './extensions_bar.js';
export class ExtensionElement extends CrLitElement {
static get is() {
return 'webui-browser-extension-element';
}
static override get properties() {
return {
iconUrl: {type: String},
visible: {type: Boolean, reflect: true},
};
}
accessor iconUrl: string = '';
accessor visible: boolean = false;
private bar: ExtensionsBar;
private extensionId: string;
static override get styles() {
return getCss();
}
override render() {
return getHtml.bind(this)();
}
constructor(extensionId: string, bar: ExtensionsBar) {
super();
this.extensionId = extensionId;
this.bar = bar;
}
override update(changedProperties: PropertyValues) {
this.style.setProperty('--extension-icon-url', `url(${this.iconUrl})`);
super.update(changedProperties);
}
protected onClick() {
this.bar.onClick(this.extensionId);
}
protected onContextMenu(event: PointerEvent) {
event.preventDefault();
let sourceType: MenuSourceType = MenuSourceType.kNone;
switch (event.pointerType) {
case 'mouse':
sourceType = MenuSourceType.kMouse;
break;
case 'pen':
sourceType = MenuSourceType.kStylus;
break;
case 'touch':
sourceType = MenuSourceType.kTouch;
}
this.bar.onContextMenu(sourceType, this.extensionId);
}
}
declare global {
interface HTMLElementTagNameMap {
'webui-browser-extension-element': ExtensionElement;
}
}
customElements.define(ExtensionElement.is, ExtensionElement);