diff --git a/src/components/ha-file-upload.ts b/src/components/ha-file-upload.ts index 7b588d09b0..06937d5c82 100644 --- a/src/components/ha-file-upload.ts +++ b/src/components/ha-file-upload.ts @@ -1,7 +1,7 @@ import "@material/mwc-linear-progress/mwc-linear-progress"; import { mdiDelete, mdiFileUpload } from "@mdi/js"; import type { PropertyValues, TemplateResult } from "lit"; -import { LitElement, css, html } from "lit"; +import { LitElement, css, html, nothing } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; import { fireEvent } from "../common/dom/fire_event"; @@ -76,7 +76,7 @@ export class HaFileUpload extends LitElement { return html` ${this.uploading ? html`
-
+
${this.value ? this.hass?.localize( @@ -88,12 +88,10 @@ export class HaFileUpload extends LitElement { )} ${this.progress - ? html`${this.progress}${blankBeforePercent( - this.hass!.locale - )}%` - : ""} + ? html`
+ ${this.progress}${blankBeforePercent(this.hass!.locale)}% +
` + : nothing}
+ ${this.yamlBackground + ? html` + + ${this.hass.localize( + `ui.components.selectors.background.yaml_info` + )} + + ${this.hass.localize( + `ui.components.picture-upload.clear_picture` + )} + + + ` + : html` + + `} +
+ `; + } + + private _pictureChanged(ev) { + const value = (ev.target as HaPictureUpload).value; + + fireEvent(this, "value-changed", { value: value ?? undefined }); + } + + private _clearValue() { + fireEvent(this, "value-changed", { value: undefined }); + } + + static get styles(): CSSResultGroup { + return css` + :host { + display: block; + position: relative; + } + div { + display: flex; + flex-direction: column; + } + ha-button { + white-space: nowrap; + --mdc-theme-primary: var(--primary-color); + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-selector-background": HaBackgroundSelector; + } +} diff --git a/src/components/ha-selector/ha-selector.ts b/src/components/ha-selector/ha-selector.ts index 6b50b9329f..dd45f13d8d 100644 --- a/src/components/ha-selector/ha-selector.ts +++ b/src/components/ha-selector/ha-selector.ts @@ -34,6 +34,7 @@ const LOAD_ELEMENTS = { floor: () => import("./ha-selector-floor"), label: () => import("./ha-selector-label"), image: () => import("./ha-selector-image"), + background: () => import("./ha-selector-background"), language: () => import("./ha-selector-language"), navigation: () => import("./ha-selector-navigation"), number: () => import("./ha-selector-number"), diff --git a/src/data/selector.ts b/src/data/selector.ts index 40fb7e36ce..2514e176f7 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -46,6 +46,7 @@ export type Selector = | IconSelector | LabelSelector | ImageSelector + | BackgroundSelector | LanguageSelector | LocationSelector | MediaSelector @@ -275,6 +276,10 @@ export interface ImageSelector { image: { original?: boolean; crop?: CropOptions } | null; } +export interface BackgroundSelector { + background: { original?: boolean; crop?: CropOptions } | null; +} + export interface LabelSelector { label: { multiple?: boolean; diff --git a/src/panels/lovelace/editor/view-editor/hui-view-background-editor.ts b/src/panels/lovelace/editor/view-editor/hui-view-background-editor.ts index 41d2a5084f..d4ff9efe91 100644 --- a/src/panels/lovelace/editor/view-editor/hui-view-background-editor.ts +++ b/src/panels/lovelace/editor/view-editor/hui-view-background-editor.ts @@ -6,7 +6,7 @@ import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-form/ha-form"; import type { SchemaUnion } from "../../../../components/ha-form/types"; -import "../../../../components/ha-selector/ha-selector-image"; +import "../../../../components/ha-selector/ha-selector-background"; import type { LovelaceViewConfig } from "../../../../data/lovelace/config/view"; import type { HomeAssistant } from "../../../../types"; @@ -26,7 +26,7 @@ export class HuiViewBackgroundEditor extends LitElement { private _schema = memoizeOne((showSettings: boolean) => [ { name: "image", - selector: { image: { original: true } }, + selector: { background: { original: true } }, }, ...(showSettings ? ([ diff --git a/src/translations/en.json b/src/translations/en.json index a902e580cc..488f6dd463 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -392,6 +392,9 @@ "upload": "Upload picture", "url": "Local path or web URL" }, + "background": { + "yaml_info": "Background image is set via yaml editor." + }, "location": { "latitude": "[%key:ui::panel::config::zone::detail::latitude%]", "longitude": "[%key:ui::panel::config::zone::detail::longitude%]",