+ ? html`
`
: null}
@@ -51,6 +57,10 @@ export class HaChip extends LitElement {
--mdc-icon-size: 20px;
color: var(--ha-chip-icon-color, var(--ha-chip-text-color));
}
+ .mdc-chip
+ .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden).no-text {
+ margin-right: -4px;
+ }
`;
}
}
diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts
index b1a1e7d5c7..2e9cca12a4 100644
--- a/src/panels/lovelace/cards/hui-entities-card.ts
+++ b/src/panels/lovelace/cards/hui-entities-card.ts
@@ -134,7 +134,10 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
}
if (this._config.header) {
- this._headerElement = createHeaderFooterElement(this._config.header);
+ this._headerElement = createHeaderFooterElement(
+ this._config.header
+ ) as LovelaceHeaderFooter;
+ this._headerElement.type = "header";
if (this._hass) {
this._headerElement.hass = this._hass;
}
@@ -143,7 +146,10 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
}
if (this._config.footer) {
- this._footerElement = createHeaderFooterElement(this._config.footer);
+ this._footerElement = createHeaderFooterElement(
+ this._config.footer
+ ) as LovelaceHeaderFooter;
+ this._footerElement.type = "footer";
if (this._hass) {
this._footerElement.hass = this._hass;
}
diff --git a/src/panels/lovelace/components/hui-buttons-base.ts b/src/panels/lovelace/components/hui-buttons-base.ts
index ac59da37f6..7c5a0c60d4 100644
--- a/src/panels/lovelace/components/hui-buttons-base.ts
+++ b/src/panels/lovelace/components/hui-buttons-base.ts
@@ -9,6 +9,8 @@ import { computeTooltip } from "../common/compute-tooltip";
import { actionHandler } from "../common/directives/action-handler-directive";
import { handleAction } from "../common/handle-action";
import { hasAction } from "../common/has-action";
+import "../../../components/ha-chip";
+import { haStyleScrollbar } from "../../../resources/styles";
@customElement("hui-buttons-base")
export class HuiButtonsBase extends LitElement {
@@ -18,40 +20,46 @@ export class HuiButtonsBase extends LitElement {
protected render(): TemplateResult {
return html`
- ${(this.configEntities || []).map((entityConf) => {
- const stateObj = this.hass.states[entityConf.entity];
+
`;
}
@@ -61,20 +69,36 @@ export class HuiButtonsBase extends LitElement {
}
static get styles(): CSSResultGroup {
- return css`
- :host {
- display: flex;
- justify-content: space-evenly;
- flex-wrap: wrap;
- padding: 0 8px;
- }
- div {
- cursor: pointer;
- align-items: center;
- display: inline-flex;
- outline: none;
- }
- `;
+ return [
+ haStyleScrollbar,
+ css`
+ .ha-scrollbar {
+ padding: 8px;
+ padding-top: var(--padding-top, 8px);
+ padding-bottom: var(--padding-bottom, 8px);
+ width: 100%;
+ overflow-x: auto;
+ overflow-y: hidden;
+ white-space: nowrap;
+ box-sizing: border-box;
+ display: flex;
+ flex-wrap: wrap;
+ }
+ state-badge {
+ line-height: inherit;
+ text-align: start;
+ color: var(--secondary-text-color);
+ }
+ ha-chip {
+ padding: 4px;
+ }
+ @media all and (max-width: 450px), all and (max-height: 500px) {
+ .ha-scrollbar {
+ flex-wrap: nowrap;
+ }
+ }
+ `,
+ ];
}
}
diff --git a/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts b/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts
index 01bf77ca05..2a8816347f 100644
--- a/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts
+++ b/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts
@@ -1,4 +1,5 @@
-import { html, LitElement, TemplateResult } from "lit";
+import { css, html, LitElement, TemplateResult } from "lit";
+import { classMap } from "lit/directives/class-map";
import { customElement, property, state } from "lit/decorators";
import { computeDomain } from "../../../common/entity/compute_domain";
import { HomeAssistant } from "../../../types";
@@ -19,6 +20,8 @@ export class HuiButtonsHeaderFooter
@property({ attribute: false }) public hass?: HomeAssistant;
+ @property() public type!: "header" | "footer";
+
@state() private _configEntities?: EntityConfig[];
public getCardSize(): number {
@@ -47,12 +50,43 @@ export class HuiButtonsHeaderFooter
protected render(): TemplateResult | void {
return html`
+ ${this.type === "footer"
+ ? html``
+ : ""}
+ ${this.type === "header"
+ ? html``
+ : ""}
`;
}
+
+ static styles = css`
+ .divider {
+ height: 0;
+ margin: 16px 0;
+ list-style-type: none;
+ border: none;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+ border-bottom-color: var(--divider-color);
+ }
+ .divider.header {
+ margin-top: 0;
+ }
+ hui-buttons-base.footer {
+ --padding-bottom: 16px;
+ }
+ hui-buttons-base.header {
+ --padding-top: 16px;
+ }
+ `;
}
declare global {
diff --git a/src/panels/lovelace/header-footer/hui-graph-header-footer.ts b/src/panels/lovelace/header-footer/hui-graph-header-footer.ts
index ec03889ba4..e3aa2ced83 100644
--- a/src/panels/lovelace/header-footer/hui-graph-header-footer.ts
+++ b/src/panels/lovelace/header-footer/hui-graph-header-footer.ts
@@ -60,6 +60,8 @@ export class HuiGraphHeaderFooter
@property({ attribute: false }) public hass?: HomeAssistant;
+ @property() public type!: "header" | "footer";
+
@property() protected _config?: GraphHeaderFooterConfig;
@state() private _coordinates?: number[][];
diff --git a/src/panels/lovelace/header-footer/hui-picture-header-footer.ts b/src/panels/lovelace/header-footer/hui-picture-header-footer.ts
index 22e5d904f8..200744f85c 100644
--- a/src/panels/lovelace/header-footer/hui-picture-header-footer.ts
+++ b/src/panels/lovelace/header-footer/hui-picture-header-footer.ts
@@ -34,6 +34,8 @@ export class HuiPictureHeaderFooter
@property({ attribute: false }) public hass?: HomeAssistant;
+ @property() public type!: "header" | "footer";
+
@property() protected _config?: PictureHeaderFooterConfig;
public getCardSize(): number {
diff --git a/src/panels/lovelace/types.ts b/src/panels/lovelace/types.ts
index 070c5ef761..b2db755a67 100644
--- a/src/panels/lovelace/types.ts
+++ b/src/panels/lovelace/types.ts
@@ -68,6 +68,7 @@ export interface LovelaceRowConstructor extends Constructor
{
export interface LovelaceHeaderFooter extends HTMLElement {
hass?: HomeAssistant;
+ type: "header" | "footer";
getCardSize(): number | Promise;
setConfig(config: LovelaceHeaderFooterConfig): void;
}