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')]]