diff --git a/src/components/ha-cover-tilt-controls.js b/src/components/ha-cover-tilt-controls.js
deleted file mode 100644
index 08f992380a..0000000000
--- a/src/components/ha-cover-tilt-controls.js
+++ /dev/null
@@ -1,106 +0,0 @@
-import "@polymer/iron-flex-layout/iron-flex-layout-classes";
-import "./ha-icon-button";
-import { html } from "@polymer/polymer/lib/utils/html-tag";
-/* eslint-plugin-disable lit */
-import { PolymerElement } from "@polymer/polymer/polymer-element";
-import { UNAVAILABLE } from "../data/entity";
-import CoverEntity from "../util/cover-model";
-
-class HaCoverTiltControls extends PolymerElement {
- static get template() {
- return html`
-
-
-
-
-
- `;
- }
-
- static get properties() {
- return {
- hass: {
- type: Object,
- },
- stateObj: {
- type: Object,
- },
- entityObj: {
- type: Object,
- computed: "computeEntityObj(hass, stateObj)",
- },
- };
- }
-
- computeEntityObj(hass, stateObj) {
- return new CoverEntity(hass, stateObj);
- }
-
- computeStopDisabled(stateObj) {
- if (stateObj.state === UNAVAILABLE) {
- return true;
- }
- return false;
- }
-
- computeOpenDisabled(stateObj, entityObj) {
- if (stateObj.state === UNAVAILABLE) {
- return true;
- }
- const assumedState = stateObj.attributes.assumed_state === true;
- return entityObj.isFullyOpenTilt && !assumedState;
- }
-
- computeClosedDisabled(stateObj, entityObj) {
- if (stateObj.state === UNAVAILABLE) {
- return true;
- }
- const assumedState = stateObj.attributes.assumed_state === true;
- return entityObj.isFullyClosedTilt && !assumedState;
- }
-
- onOpenTiltTap(ev) {
- ev.stopPropagation();
- this.entityObj.openCoverTilt();
- }
-
- onCloseTiltTap(ev) {
- ev.stopPropagation();
- this.entityObj.closeCoverTilt();
- }
-
- onStopTiltTap(ev) {
- ev.stopPropagation();
- this.entityObj.stopCoverTilt();
- }
-}
-
-customElements.define("ha-cover-tilt-controls", HaCoverTiltControls);
diff --git a/src/components/ha-cover-tilt-controls.ts b/src/components/ha-cover-tilt-controls.ts
new file mode 100644
index 0000000000..843eaa6598
--- /dev/null
+++ b/src/components/ha-cover-tilt-controls.ts
@@ -0,0 +1,122 @@
+import { HassEntity } from "home-assistant-js-websocket";
+import {
+ LitElement,
+ property,
+ internalProperty,
+ CSSResult,
+ css,
+ customElement,
+ TemplateResult,
+ html,
+ PropertyValues,
+} from "lit-element";
+import { classMap } from "lit-html/directives/class-map";
+
+import { UNAVAILABLE } from "../data/entity";
+import { HomeAssistant } from "../types";
+import CoverEntity from "../util/cover-model";
+
+import "./ha-icon-button";
+
+@customElement("ha-cover-tilt-controls")
+class HaCoverTiltControls extends LitElement {
+ @property({ attribute: false }) public hass!: HomeAssistant;
+
+ @property({ attribute: false }) stateObj!: HassEntity;
+
+ @internalProperty() private _entityObj?: CoverEntity;
+
+ protected updated(changedProperties: PropertyValues): void {
+ super.updated(changedProperties);
+
+ if (changedProperties.has("stateObj")) {
+ this._entityObj = new CoverEntity(this.hass, this.stateObj);
+ }
+ }
+
+ protected render(): TemplateResult {
+ if (!this._entityObj) {
+ return html``;
+ }
+
+ return html`
+
+ `;
+ }
+
+ private _computeOpenDisabled(): boolean {
+ if (this.stateObj.state === UNAVAILABLE) {
+ return true;
+ }
+ const assumedState = this.stateObj.attributes.assumed_state === true;
+ return this._entityObj.isFullyOpenTilt && !assumedState;
+ }
+
+ private _computeClosedDisabled(): boolean {
+ if (this.stateObj.state === UNAVAILABLE) {
+ return true;
+ }
+ const assumedState = this.stateObj.attributes.assumed_state === true;
+ return this._entityObj.isFullyClosedTilt && !assumedState;
+ }
+
+ private _onOpenTiltTap(ev): void {
+ ev.stopPropagation();
+ this._entityObj.openCoverTilt();
+ }
+
+ private _onCloseTiltTap(ev): void {
+ ev.stopPropagation();
+ this._entityObj.closeCoverTilt();
+ }
+
+ private _onStopTiltTap(ev): void {
+ ev.stopPropagation();
+ this._entityObj.stopCoverTilt();
+ }
+
+ static get styles(): CSSResult {
+ return css`
+ :host {
+ white-space: nowrap;
+ }
+ .invisible {
+ visibility: hidden !important;
+ }
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "ha-cover-tilt-controls": HaCoverTiltControls;
+ }
+}
diff --git a/src/translations/en.json b/src/translations/en.json
index 30c4e91891..98e7eabaa0 100755
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -554,6 +554,11 @@
},
"person": {
"create_zone": "Create zone from current location"
+ },
+ "cover": {
+ "open_tilt_cover": "Open cover tilt",
+ "close_tile_cover": "Close cover tilt",
+ "stop_cover": "Stop cover from moving"
}
},
"entity_registry": {