diff --git a/src/common/util/compute_rtl.ts b/src/common/util/compute_rtl.ts index d73bf8f859..7e71b1b15b 100644 --- a/src/common/util/compute_rtl.ts +++ b/src/common/util/compute_rtl.ts @@ -1,3 +1,4 @@ +import { LitElement } from "lit"; import { HomeAssistant } from "../../types"; export function computeRTL(hass: HomeAssistant) { @@ -15,3 +16,21 @@ export function computeRTLDirection(hass: HomeAssistant) { export function emitRTLDirection(rtl: boolean) { return rtl ? "rtl" : "ltr"; } + +export function computeDirectionStyles(isRTL: boolean, element: LitElement) { + const direction: string = emitRTLDirection(isRTL); + setDirectionStyles(direction, element); +} + +export function setDirectionStyles(direction: string, element: LitElement) { + element.style.direction = direction; + element.style.setProperty("--direction", direction); + element.style.setProperty( + "--float-start", + direction === "ltr" ? "left" : "right" + ); + element.style.setProperty( + "--float-end", + direction === "ltr" ? "right" : "left" + ); +} diff --git a/src/components/ha-selector/ha-selector-text.ts b/src/components/ha-selector/ha-selector-text.ts index b91e0edc33..7af6c36d27 100644 --- a/src/components/ha-selector/ha-selector-text.ts +++ b/src/components/ha-selector/ha-selector-text.ts @@ -103,6 +103,9 @@ export class HaTextSelector extends LitElement { --mdc-icon-button-size: 24px; --mdc-icon-size: 20px; color: var(--secondary-text-color); + inset-inline-start: initial; + inset-inline-end: 16px; + direction: var(--direction); } `; } diff --git a/src/components/ha-textfield.ts b/src/components/ha-textfield.ts index 1f8da98dde..0e0f3bd804 100644 --- a/src/components/ha-textfield.ts +++ b/src/components/ha-textfield.ts @@ -100,6 +100,7 @@ export class HaTextField extends TextFieldBase { inset-inline-end: initial !important; transform-origin: var(--float-start); direction: var(--direction); + transform-origin: var(--float-start); } .mdc-text-field--with-leading-icon.mdc-text-field--filled diff --git a/src/mixins/lit-localize-lite-mixin.ts b/src/mixins/lit-localize-lite-mixin.ts index 864bcd43e7..d95e29d0f6 100644 --- a/src/mixins/lit-localize-lite-mixin.ts +++ b/src/mixins/lit-localize-lite-mixin.ts @@ -3,6 +3,8 @@ import { property } from "lit/decorators"; import { computeLocalize, LocalizeFunc } from "../common/translations/localize"; import { Constructor, Resources } from "../types"; import { getLocalLanguage, getTranslation } from "../util/common-translation"; +import { translationMetadata } from "../resources/translations-metadata"; +import { computeDirectionStyles } from "../common/util/compute_rtl"; const empty = () => ""; @@ -25,6 +27,14 @@ export const litLocalizeLiteMixin = >( this._initializeLocalizeLite(); } + protected firstUpdated(changedProps: PropertyValues) { + super.firstUpdated(changedProps); + computeDirectionStyles( + translationMetadata.translations[this.language!].isRTL, + this + ); + } + protected updated(changedProperties: PropertyValues) { super.updated(changedProperties); if (changedProperties.get("translationFragment")) { diff --git a/src/state/translations-mixin.ts b/src/state/translations-mixin.ts index f399e06695..b84e711548 100644 --- a/src/state/translations-mixin.ts +++ b/src/state/translations-mixin.ts @@ -1,6 +1,9 @@ import { atLeastVersion } from "../common/config/version"; import { computeLocalize, LocalizeFunc } from "../common/translations/localize"; -import { computeRTLDirection } from "../common/util/compute_rtl"; +import { + computeRTLDirection, + setDirectionStyles, +} from "../common/util/compute_rtl"; import { debounce } from "../common/util/debounce"; import { getHassTranslations, @@ -188,17 +191,8 @@ export default >(superClass: T) => private _applyDirection(hass: HomeAssistant) { const direction = computeRTLDirection(hass); - this.style.direction = direction; document.dir = direction; - this.style.setProperty("--direction", direction); - this.style.setProperty( - "--float-start", - direction === "ltr" ? "left" : "right" - ); - this.style.setProperty( - "--float-end", - direction === "ltr" ? "right" : "left" - ); + setDirectionStyles(direction, this); } /**