blob: 5ad2dbc2e6c5ab4c6be7efe0e1964b1edf612f86 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'chrome://resources/cr_elements/icons.html.js';
import 'chrome://resources/cr_elements/cr_icon/cr_icon.js';
import {DragWrapper} from 'chrome://resources/js/drag_wrapper.js';
import {CrLitElement} from 'chrome://resources/lit/v3_0/lit.rollup.js';
import type {PropertyValues} from 'chrome://resources/lit/v3_0/lit.rollup.js';
import {DragAndDropHandler} from './drag_and_drop_handler.js';
import {getCss} from './drop_overlay.css.js';
import {getHtml} from './drop_overlay.html.js';
export class ExtensionsDropOverlayElement extends CrLitElement {
static get is() {
return 'extensions-drop-overlay';
}
static override get styles() {
return getCss();
}
override render() {
return getHtml.bind(this)();
}
static override get properties() {
return {
dragEnabled: {type: Boolean},
};
}
accessor dragEnabled: boolean = false;
private dragWrapperHandler_: DragAndDropHandler;
constructor() {
super();
this.hidden = true;
const dragTarget = document.documentElement;
this.dragWrapperHandler_ = new DragAndDropHandler(true, dragTarget);
// TODO(devlin): All these dragTarget listeners leak (they aren't removed
// when the element is). This only matters in tests at the moment, but would
// be good to fix.
dragTarget.addEventListener('extension-drag-started', () => {
this.hidden = false;
});
dragTarget.addEventListener('extension-drag-ended', () => {
this.hidden = true;
});
dragTarget.addEventListener('drag-and-drop-load-error', (e) => {
this.dispatchEvent(new CustomEvent(
'load-error', {bubbles: true, composed: true, detail: e.detail}));
});
new DragWrapper(dragTarget, this.dragWrapperHandler_);
}
override willUpdate(changedProperties: PropertyValues<this>) {
super.willUpdate(changedProperties);
if (changedProperties.has('dragEnabled')) {
this.dragWrapperHandler_.dragEnabled = this.dragEnabled;
}
}
}
customElements.define(
ExtensionsDropOverlayElement.is, ExtensionsDropOverlayElement);