import { LitElement, html, css } from "lit"; import { property, state } from "lit/decorators.js"; import { loadDeveloperToolsTemplate } from "../helpers"; loadDeveloperToolsTemplate(); class BrowserModSettingsCard extends LitElement { @property() hass; @state() _selectedTab = 0; firstUpdated() { window.browser_mod.addEventListener("browser-mod-config-update", () => this.requestUpdate() ); window.browser_mod.addEventListener("browser-mod-favicon-update", () => this.requestUpdate() ); } _handleSwitchTab(ev: CustomEvent) { this._selectedTab = parseInt(ev.detail.index, 10); } render() { const level = ["browser", "user", "global"][this._selectedTab]; return html`

Please note: The settings in this section severely change the way the Home Assistant frontend works and looks. It is very easy to forget that you made a setting here when you switch devices or user.

Do not report any issues to Home Assistant before clearing EVERY setting here and thouroghly clearing all your browser caches. Failure to do so means you risk wasting a lot of peoples time, and you will be severly and rightfully ridiculed.

Global settings are applied for all users and browsers.
User settings are applied to the current user and overrides any Global settings.
Browser settings are applied for the current browser and overrides any User or Global settings.

${this._render_settings(level)}
`; } _render_settings(level) { const global = window.browser_mod.global_settings; const user = window.browser_mod.user_settings; const browser = window.browser_mod.browser_settings; const current = { global, user, browser }[level]; const DESC_BOOLEAN = (val) => ({ true: "Enabled", false: "Disabled", undefined: "Unset" }[String(val)]); const DESC_SET_UNSET = (val) => (val === undefined ? "Unset" : "Set"); const OVERRIDDEN = (key) => { if (level !== "browser" && browser[key] !== undefined) return html`
Overridden by browser setting`; if (level === "global" && user[key] !== undefined) return html`
Overridden by user setting`; }; return html`
Favicon template ${OVERRIDDEN("faviconTemplate")} { const tpl = ev.detail.value || undefined; window.browser_mod.set_setting("faviconTemplate", tpl, level); }} > window.browser_mod.set_setting( "faviconTemplate", undefined, level )} > Clear
Title template ${OVERRIDDEN("titleTemplate")} { const tpl = ev.detail.value || undefined; window.browser_mod.set_setting("titleTemplate", tpl, level); }} > window.browser_mod.set_setting("titleTemplate", undefined, level)} > Clear
Hide Sidebar Hide the sidebar and hamburger menu Currently: ${DESC_BOOLEAN(current.hideSidebar)} ${OVERRIDDEN("hideSidebar")} window.browser_mod.set_setting("hideSidebar", true, level)} > Enable window.browser_mod.set_setting("hideSidebar", false, level)} > Disable window.browser_mod.set_setting("hideSidebar", undefined, level)} > Clear
Hide Header Hide the header on all pages Currently: ${DESC_BOOLEAN(current.hideHeader)} ${OVERRIDDEN("hideHeader")} window.browser_mod.set_setting("hideHeader", true, level)} > Enable window.browser_mod.set_setting("hideHeader", false, level)} > Disable window.browser_mod.set_setting("hideHeader", undefined, level)} > Clear
Sidebar order Order and visibility of sidebar buttons Currently: ${DESC_SET_UNSET(current.sidebarPanelOrder)} ${OVERRIDDEN("sidebarPanelOrder")} Clearing this does NOT restore the original button order. { window.browser_mod.set_setting( "sidebarPanelOrder", localStorage.getItem("sidebarPanelOrder"), level ); window.browser_mod.set_setting( "sidebarHiddenPanels", localStorage.getItem("sidebarHiddenPanels"), level ); }} > Set { window.browser_mod.set_setting( "sidebarPanelOrder", undefined, level ); window.browser_mod.set_setting( "sidebarHiddenPanels", undefined, level ); }} > Clear
`; } static get styles() { return css` .box { border: 1px solid var(--divider-color); padding: 8px; } .separator { border-bottom: 1px solid var(--divider-color); margin: 0 -8px; } img.favicon { width: 64px; height: 64px; margin-left: 16px; } mwc-tab-bar ha-icon { display: flex; align-items: center; } `; } } customElements.define("browser-mod-settings-card", BrowserModSettingsCard);