This commit is contained in:
2026-01-06 09:47:03 +00:00
parent 2dbc9e35c6
commit dcc3e18474
22 changed files with 993 additions and 18 deletions

View File

@@ -30,6 +30,11 @@ export class EcoApplauncherBatterymenu extends DeesElement {
:host {
display: block;
position: relative;
pointer-events: none;
}
:host([open]) {
pointer-events: auto;
}
.menu-container {
@@ -241,12 +246,18 @@ export class EcoApplauncherBatterymenu extends DeesElement {
accessor timeRemaining: string | null = null;
private boundHandleClickOutside = this.handleClickOutside.bind(this);
private inactivityTimeout: ReturnType<typeof setTimeout> | null = null;
private readonly INACTIVITY_TIMEOUT = 60000; // 1 minute
public render(): TemplateResult {
const fillClass = this.getFillClass();
return html`
<div class="menu-container">
<div class="menu-container"
@click=${(e: MouseEvent) => e.stopPropagation()}
@mousemove=${this.resetInactivityTimer}
@mousedown=${this.resetInactivityTimer}
>
<div class="battery-display">
<div class="battery-visual">
<div class="battery-icon">
@@ -324,11 +335,41 @@ export class EcoApplauncherBatterymenu extends DeesElement {
private handleClickOutside(e: MouseEvent): void {
if (this.open && !this.contains(e.target as Node)) {
this.open = false;
this.dispatchEvent(new CustomEvent('menu-close', {
bubbles: true,
composed: true,
}));
this.closeMenu();
}
}
private resetInactivityTimer(): void {
this.clearInactivityTimer();
if (this.open) {
this.inactivityTimeout = setTimeout(() => {
this.closeMenu();
}, this.INACTIVITY_TIMEOUT);
}
}
private clearInactivityTimer(): void {
if (this.inactivityTimeout) {
clearTimeout(this.inactivityTimeout);
this.inactivityTimeout = null;
}
}
private closeMenu(): void {
this.open = false;
this.dispatchEvent(new CustomEvent('menu-close', {
bubbles: true,
composed: true,
}));
}
protected updated(changedProperties: Map<string, unknown>): void {
if (changedProperties.has('open')) {
if (this.open) {
this.resetInactivityTimer();
} else {
this.clearInactivityTimer();
}
}
}
@@ -342,5 +383,6 @@ export class EcoApplauncherBatterymenu extends DeesElement {
async disconnectedCallback(): Promise<void> {
await super.disconnectedCallback();
document.removeEventListener('click', this.boundHandleClickOutside);
this.clearInactivityTimer();
}
}