diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts
index 32cc353d7d..c443764501 100644
--- a/src/panels/lovelace/cards/hui-entities-card.ts
+++ b/src/panels/lovelace/cards/hui-entities-card.ts
@@ -69,11 +69,6 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement)
!entity.action_name)
) {
throw new Error("Missing required property when type is call-service");
- } else if (
- entity.type === "weblink" &&
- (!entity.name || !entity.icon || !entity.url)
- ) {
- throw new Error("Missing required property when type is weblink");
}
}
diff --git a/src/panels/lovelace/common/create-row-element.js b/src/panels/lovelace/common/create-row-element.js
index af3d91269f..28931e06de 100644
--- a/src/panels/lovelace/common/create-row-element.js
+++ b/src/panels/lovelace/common/create-row-element.js
@@ -17,7 +17,7 @@ import "../entity-rows/hui-toggle-entity-row.js";
import "../special-rows/hui-call-service-row.js";
import "../special-rows/hui-divider-row";
import "../special-rows/hui-section-row.js";
-import "../special-rows/hui-weblink-row.js";
+import "../special-rows/hui-weblink-row";
import createErrorCardConfig from "./create-error-card-config.js";
diff --git a/src/panels/lovelace/entity-rows/types.ts b/src/panels/lovelace/entity-rows/types.ts
index f343d9c4e5..c4fcb7dc20 100644
--- a/src/panels/lovelace/entity-rows/types.ts
+++ b/src/panels/lovelace/entity-rows/types.ts
@@ -12,8 +12,8 @@ export interface SectionConfig {
label: string;
}
export interface WeblinkConfig {
- name: string;
- icon: string;
+ name?: string;
+ icon?: string;
url: string;
}
export type EntityRowConfig =
diff --git a/src/panels/lovelace/special-rows/hui-weblink-row.js b/src/panels/lovelace/special-rows/hui-weblink-row.js
deleted file mode 100644
index 91a6106df3..0000000000
--- a/src/panels/lovelace/special-rows/hui-weblink-row.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import { html } from "@polymer/polymer/lib/utils/html-tag.js";
-import { PolymerElement } from "@polymer/polymer/polymer-element.js";
-
-import "../../../components/ha-icon.js";
-
-class HuiWeblinkRow extends PolymerElement {
- static get template() {
- return html`
- ${this.styleTemplate}
-
-
-
- [[_config.name]]
-
-
- `;
- }
-
- static get styleTemplate() {
- return html`
-
- `;
- }
-
- static get properties() {
- return {
- _config: Object,
- };
- }
-
- setConfig(config) {
- if (!config || !config.icon || !config.name || !config.url) {
- throw new Error("Error in card configuration.");
- }
- this._config = config;
- }
-}
-customElements.define("hui-weblink-row", HuiWeblinkRow);
diff --git a/src/panels/lovelace/special-rows/hui-weblink-row.ts b/src/panels/lovelace/special-rows/hui-weblink-row.ts
new file mode 100644
index 0000000000..e49690ece5
--- /dev/null
+++ b/src/panels/lovelace/special-rows/hui-weblink-row.ts
@@ -0,0 +1,75 @@
+import { html, LitElement } from "@polymer/lit-element";
+import { EntityRow, WeblinkConfig } from "../entity-rows/types";
+import { HomeAssistant } from "../../../types";
+
+import "../../../components/ha-icon.js";
+
+import { TemplateResult } from "lit-html";
+
+class HuiWeblinkRow extends LitElement implements EntityRow {
+ public hass?: HomeAssistant;
+ private _config?: WeblinkConfig;
+
+ static get properties() {
+ return {
+ _config: {},
+ };
+ }
+
+ public setConfig(config: WeblinkConfig): void {
+ if (!config || !config.url) {
+ throw new Error("Invalid Configuration: 'url' required");
+ }
+
+ this._config = {
+ icon: "hass:link",
+ name: config.url,
+ ...config,
+ };
+ }
+
+ protected render(): TemplateResult {
+ if (!this._config) {
+ return html``;
+ }
+
+ return html`
+ ${this.renderStyle()}
+
+
+ ${this._config.name}
+
+ `;
+ }
+
+ private renderStyle(): TemplateResult {
+ return html`
+
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "hui-weblink-row": HuiWeblinkRow;
+ }
+}
+
+customElements.define("hui-weblink-row", HuiWeblinkRow);