diff --git a/gallery/src/pages/components/ha-alert.ts b/gallery/src/pages/components/ha-alert.ts index c4f44e80a9..ced4c5a44b 100644 --- a/gallery/src/pages/components/ha-alert.ts +++ b/gallery/src/pages/components/ha-alert.ts @@ -159,13 +159,19 @@ export class DemoHaAlert extends LitElement { firstUpdated(changedProps) { super.firstUpdated(changedProps); - applyThemesOnElement(this.shadowRoot!.querySelector(".dark"), { - default_theme: "default", - default_dark_theme: "default", - themes: {}, - darkMode: true, - theme: "default", - }); + applyThemesOnElement( + this.shadowRoot!.querySelector(".dark"), + { + default_theme: "default", + default_dark_theme: "default", + themes: {}, + darkMode: true, + theme: "default", + }, + undefined, + undefined, + true + ); } static get styles() { diff --git a/gallery/src/pages/components/ha-tip.markdown b/gallery/src/pages/components/ha-tip.markdown new file mode 100644 index 0000000000..a3bc162733 --- /dev/null +++ b/gallery/src/pages/components/ha-tip.markdown @@ -0,0 +1,3 @@ +--- +title: Tips +--- diff --git a/gallery/src/pages/components/ha-tip.ts b/gallery/src/pages/components/ha-tip.ts new file mode 100644 index 0000000000..49fa1f2c71 --- /dev/null +++ b/gallery/src/pages/components/ha-tip.ts @@ -0,0 +1,73 @@ +import { html, css, LitElement, TemplateResult } from "lit"; +import { customElement } from "lit/decorators"; +import "../../../../src/components/ha-tip"; +import "../../../../src/components/ha-card"; +import { applyThemesOnElement } from "../../../../src/common/dom/apply_themes_on_element"; + +const tips: (string | TemplateResult)[] = [ + "Test tip", + "Bigger test tip, with some random text just to fill up as much space as possible without it looking like I'm really trying to to that", + html`Tip with HTML`, +]; + +@customElement("demo-components-ha-tip") +export class DemoHaTip extends LitElement { + protected render(): TemplateResult { + return html` ${["light", "dark"].map( + (mode) => html` +
+ +
+ ${tips.map((tip) => html`${tip}`)} +
+
+
+ ` + )}`; + } + + firstUpdated(changedProps) { + super.firstUpdated(changedProps); + applyThemesOnElement( + this.shadowRoot!.querySelector(".dark"), + { + default_theme: "default", + default_dark_theme: "default", + themes: {}, + darkMode: true, + theme: "default", + }, + undefined, + undefined, + true + ); + } + + static get styles() { + return css` + :host { + display: flex; + flex-direction: row; + justify-content: space-between; + } + .dark, + .light { + display: block; + background-color: var(--primary-background-color); + padding: 0 50px; + } + ha-tip { + margin-bottom: 14px; + } + ha-card { + margin: 24px auto; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "demo-components-ha-tip": DemoHaTip; + } +} diff --git a/src/components/ha-tip.ts b/src/components/ha-tip.ts new file mode 100644 index 0000000000..ef4e36fa05 --- /dev/null +++ b/src/components/ha-tip.ts @@ -0,0 +1,38 @@ +import { mdiLightbulbOutline } from "@mdi/js"; +import { css, html, LitElement } from "lit"; +import { customElement } from "lit/decorators"; + +import "./ha-svg-icon"; + +@customElement("ha-tip") +class HaTip extends LitElement { + public render() { + return html` + + Tip! + + `; + } + + static styles = css` + :host { + display: block; + text-align: center; + } + + .text { + margin-left: 2px; + color: var(--secondary-text-color); + } + + .prefix { + font-weight: 500; + } + `; +} + +declare global { + interface HTMLElementTagNameMap { + "ha-tip": HaTip; + } +} diff --git a/src/dialogs/quick-bar/ha-quick-bar.ts b/src/dialogs/quick-bar/ha-quick-bar.ts index 6135b6f4fd..0165a14aca 100644 --- a/src/dialogs/quick-bar/ha-quick-bar.ts +++ b/src/dialogs/quick-bar/ha-quick-bar.ts @@ -240,7 +240,7 @@ export class QuickBar extends LitElement { : ""} `} - ${this._hint ? html`
${this._hint}
` : ""} + ${this._hint ? html`${this._hint}` : ""} `; } @@ -782,10 +782,8 @@ export class QuickBar extends LitElement { text-transform: capitalize; } - .hint { + ha-tip { padding: 20px; - font-style: italic; - text-align: center; } .nothing-found { diff --git a/src/panels/config/dashboard/ha-config-dashboard.ts b/src/panels/config/dashboard/ha-config-dashboard.ts index e690e37b59..b56c5be7c4 100644 --- a/src/panels/config/dashboard/ha-config-dashboard.ts +++ b/src/panels/config/dashboard/ha-config-dashboard.ts @@ -1,12 +1,6 @@ import type { ActionDetail } from "@material/mwc-list"; import "@material/mwc-list/mwc-list-item"; -import { - mdiCloudLock, - mdiDotsVertical, - mdiLightbulbOutline, - mdiMagnify, - mdiNewBox, -} from "@mdi/js"; +import { mdiCloudLock, mdiDotsVertical, mdiMagnify, mdiNewBox } from "@mdi/js"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import type { HassEntities } from "home-assistant-js-websocket"; @@ -29,6 +23,7 @@ import "../../../components/ha-icon-button"; import "../../../components/ha-icon-next"; import "../../../components/ha-menu-button"; import "../../../components/ha-svg-icon"; +import "../../../components/ha-tip"; import { CloudStatus } from "../../../data/cloud"; import { updateCanInstall, UpdateEntity } from "../../../data/update"; import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; @@ -91,7 +86,7 @@ const randomTip = (hass: HomeAssistant) => { ), weight: 2, }, - { content: hass.localize("ui.dialogs.quick-bar.key_c_hint"), weight: 1 }, + { content: hass.localize("ui.tips.key_c_hint"), weight: 1 }, ]; tips.forEach((tip) => { @@ -202,11 +197,7 @@ class HaConfigDashboard extends LitElement { )} > -
- - Tip! - ${this._tip} -
+ ${this._tip} `; @@ -343,19 +334,10 @@ class HaConfigDashboard extends LitElement { margin-top: -42px; } - .tips { - text-align: center; + ha-tip { margin-bottom: max(env(safe-area-inset-bottom), 8px); } - .tips .text { - color: var(--secondary-text-color); - } - - .tip-word { - font-weight: 500; - } - .new { color: var(--primary-color); } diff --git a/src/panels/developer-tools/state/developer-tools-state.js b/src/panels/developer-tools/state/developer-tools-state.js index f4069c9824..a6f89dac31 100644 --- a/src/panels/developer-tools/state/developer-tools-state.js +++ b/src/panels/developer-tools/state/developer-tools-state.js @@ -18,6 +18,7 @@ import "../../../components/ha-code-editor"; import "../../../components/ha-icon-button"; import "../../../components/ha-svg-icon"; import "../../../components/ha-checkbox"; +import "../../../components/ha-tip"; import "../../../components/search-input"; import "../../../components/ha-expansion-panel"; import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; @@ -90,6 +91,10 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { display: block; --mdc-text-field-fill-color: transparent; } + ha-tip { + display: flex; + padding: 8px 0; + } th.attributes { position: relative; @@ -181,6 +186,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { on-change="entityIdChanged" allow-custom-entity > + [[localize('ui.tips.key_e_hint')]]