import { LitElement, html, nothing } from "lit"; import { customElement, state } from "lit/decorators.js"; import { Platform } from "../Platform"; import { translateText } from "../Utils"; const DISMISSED_KEY = "ios_a2hs_banner_dismissed"; const LATER_KEY = "ios_a2hs_banner_later"; @customElement("ios-add-to-home-screen-banner") export class IOSAddToHomeScreenBanner extends LitElement { @state() private dismissed = false; @state() private later = false; @state() private showGuide = false; createRenderRoot() { return this; } connectedCallback() { super.connectedCallback(); try { this.dismissed = localStorage.getItem(DISMISSED_KEY) === "true"; } catch { this.dismissed = false; } try { this.later = sessionStorage.getItem(LATER_KEY) === "true"; } catch { this.later = false; } } private never() { try { localStorage.setItem(DISMISSED_KEY, "true"); } catch { // localStorage unavailable — dismiss for session only } this.dismissed = true; } private later_() { try { sessionStorage.setItem(LATER_KEY, "true"); } catch { // ignore — this.later still set in memory } this.later = true; } private openGuide() { this.showGuide = true; } private closeGuide() { this.showGuide = false; } private renderGuideModal() { if (!this.showGuide) return nothing; return html`
{ if (e.target === e.currentTarget) this.closeGuide(); }} >
`; } render() { if (!Platform.isIOS) return nothing; if (this.dismissed || this.later) return nothing; if ( (navigator as any).standalone === true || window.matchMedia("(display-mode: standalone)").matches ) { return nothing; } return html` ${this.renderGuideModal()}
${translateText("ios_banner.text")}
`; } }