From b202a36feb9d44a49b4189864d1dc3d0f787fe79 Mon Sep 17 00:00:00 2001 From: Simon Lamon <32477463+silamon@users.noreply.github.com> Date: Sun, 31 Mar 2024 12:28:28 +0200 Subject: [PATCH] Clean menu implementation (#20294) * Clean menu * Clean up imports * Fix imports --- src/components/ha-menu-item.ts | 37 +++++++++++++++++ src/components/ha-menu.ts | 22 ++++++++++ src/layouts/hass-tabs-subpage-data-table.ts | 45 +++++++-------------- 3 files changed, 74 insertions(+), 30 deletions(-) create mode 100644 src/components/ha-menu-item.ts create mode 100644 src/components/ha-menu.ts diff --git a/src/components/ha-menu-item.ts b/src/components/ha-menu-item.ts new file mode 100644 index 0000000000..e96e867f6f --- /dev/null +++ b/src/components/ha-menu-item.ts @@ -0,0 +1,37 @@ +import { customElement } from "lit/decorators"; +import "element-internals-polyfill"; +import { CSSResult, css } from "lit"; +import { MdMenuItem } from "@material/web/menu/menu-item"; + +@customElement("ha-menu-item") +export class HaMenuItem extends MdMenuItem { + static override styles: CSSResult[] = [ + ...MdMenuItem.styles, + css` + :host { + --ha-icon-display: block; + --md-sys-color-primary: var(--primary-text-color); + --md-sys-color-on-primary: var(--primary-text-color); + --md-sys-color-secondary: var(--secondary-text-color); + --md-sys-color-surface: var(--card-background-color); + --md-sys-color-on-surface: var(--primary-text-color); + --md-sys-color-on-surface-variant: var(--secondary-text-color); + --md-sys-color-secondary-container: rgba( + var(--rgb-primary-color), + 0.15 + ); + --md-sys-color-on-secondary-container: var(--text-primary-color); + --mdc-icon-size: 16px; + + --md-sys-color-on-primary-container: var(--primary-text-color); + --md-sys-color-on-secondary-container: var(--primary-text-color); + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + "ha-menu-item": HaMenuItem; + } +} diff --git a/src/components/ha-menu.ts b/src/components/ha-menu.ts new file mode 100644 index 0000000000..d1a4146984 --- /dev/null +++ b/src/components/ha-menu.ts @@ -0,0 +1,22 @@ +import { customElement } from "lit/decorators"; +import "element-internals-polyfill"; +import { CSSResult, css } from "lit"; +import { MdMenu } from "@material/web/menu/menu"; + +@customElement("ha-menu") +export class HaMenu extends MdMenu { + static override styles: CSSResult[] = [ + ...MdMenu.styles, + css` + :host { + --md-sys-color-surface-container: var(--card-background-color); + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + "ha-menu": HaMenu; + } +} diff --git a/src/layouts/hass-tabs-subpage-data-table.ts b/src/layouts/hass-tabs-subpage-data-table.ts index d7d87de93a..b58d073165 100644 --- a/src/layouts/hass-tabs-subpage-data-table.ts +++ b/src/layouts/hass-tabs-subpage-data-table.ts @@ -1,9 +1,6 @@ import { ResizeController } from "@lit-labs/observers/resize-controller"; import "@lrnwebcomponents/simple-tooltip/simple-tooltip"; import "@material/mwc-button/mwc-button"; -import "@material/web/menu/menu"; -import type { MdMenu } from "@material/web/menu/menu"; -import "@material/web/menu/menu-item"; import { mdiArrowDown, mdiArrowUp, @@ -36,9 +33,12 @@ import type { } from "../components/data-table/ha-data-table"; import "../components/ha-dialog"; import "../components/search-input-outlined"; +import "../components/ha-menu"; +import "../components/ha-menu-item"; import type { HomeAssistant, Route } from "../types"; import "./hass-tabs-subpage"; import type { PageNavigation } from "./hass-tabs-subpage"; +import type { HaMenu } from "../components/ha-menu"; declare global { // for fire event @@ -177,9 +177,9 @@ export class HaTabsSubpageDataTable extends LitElement { @query("ha-data-table", true) private _dataTable!: HaDataTable; - @query("#group-by-menu") private _groupByMenu!: MdMenu; + @query("#group-by-menu") private _groupByMenu!: HaMenu; - @query("#sort-by-menu") private _sortByMenu!: MdMenu; + @query("#sort-by-menu") private _sortByMenu!: HaMenu; private _showPaneController = new ResizeController(this, { callback: (entries) => entries[0]?.contentRect.width > 750, @@ -425,37 +425,37 @@ export class HaTabsSubpageDataTable extends LitElement { `}