diff --git a/src/panels/iframe/ha-panel-iframe.js b/src/panels/iframe/ha-panel-iframe.js
deleted file mode 100644
index 8dcc0e4670..0000000000
--- a/src/panels/iframe/ha-panel-iframe.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import "@polymer/app-layout/app-toolbar/app-toolbar";
-import { html } from "@polymer/polymer/lib/utils/html-tag";
-/* eslint-plugin-disable lit */
-import { PolymerElement } from "@polymer/polymer/polymer-element";
-import "../../components/ha-menu-button";
-import "../../styles/polymer-ha-style";
-
-class HaPanelIframe extends PolymerElement {
- static get template() {
- return html`
-
-
-
- [[panel.title]]
-
-
-
- `;
- }
-
- static get properties() {
- return {
- hass: Object,
- narrow: Boolean,
- panel: Object,
- };
- }
-}
-
-customElements.define("ha-panel-iframe", HaPanelIframe);
diff --git a/src/panels/iframe/ha-panel-iframe.ts b/src/panels/iframe/ha-panel-iframe.ts
new file mode 100644
index 0000000000..14aec1fdcd
--- /dev/null
+++ b/src/panels/iframe/ha-panel-iframe.ts
@@ -0,0 +1,63 @@
+import { html, css, LitElement } from "lit";
+import { customElement, property } from "lit/decorators";
+import "../../layouts/hass-error-screen";
+import "../../layouts/hass-subpage";
+import { HomeAssistant, PanelInfo } from "../../types";
+
+@customElement("ha-panel-iframe")
+class HaPanelIframe extends LitElement {
+ @property() hass!: HomeAssistant;
+
+ @property({ type: Boolean }) narrow!: boolean;
+
+ @property() panel!: PanelInfo<{ url: string }>;
+
+ render() {
+ if (
+ location.protocol === "https:" &&
+ new URL(this.panel.config.url, location.toString()).protocol !== "https:"
+ ) {
+ return html`
+
+ `;
+ }
+
+ return html`
+
+
+
+ `;
+ }
+
+ static styles = css`
+ iframe {
+ border: 0;
+ width: 100%;
+ position: absolute;
+ height: 100%;
+ background-color: var(--primary-background-color);
+ }
+ `;
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "ha-panel-iframe": HaPanelIframe;
+ }
+}