/* * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./js/browser-player-editor.js": /*!*************************************!*\ !*** ./js/browser-player-editor.js ***! \*************************************/ /***/ (() => { eval("const bases = [\n customElements.whenDefined(\"home-assistant-main\"),\n customElements.whenDefined(\"hui-view\"),\n];\nPromise.race(bases).then(() => {\n const LitElement = customElements.get(\"home-assistant-main\")\n ? Object.getPrototypeOf(customElements.get(\"home-assistant-main\"))\n : Object.getPrototypeOf(customElements.get(\"hui-view\"));\n const html = LitElement.prototype.html;\n const css = LitElement.prototype.css;\n\n class BrowserPlayerEditor extends LitElement {\n setConfig(config) {}\n render() {\n return html`
Nothing to configure.
`;\n }\n }\n\n if (!customElements.get(\"browser-player-editor\")) {\n customElements.define(\"browser-player-editor\", BrowserPlayerEditor);\n window.customCards = window.customCards || [];\n window.customCards.push({\n type: \"browser-player\",\n name: \"Browser Player\",\n preview: true,\n });\n }\n});\n\n\n//# sourceURL=webpack://browser_mod/./js/browser-player-editor.js?"); /***/ }), /***/ "./js/browser-player.js": /*!******************************!*\ !*** ./js/browser-player.js ***! \******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! card-tools/src/deviceID */ \"./node_modules/card-tools/src/deviceID.js\");\n/* harmony import */ var card_tools_src_more_info__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! card-tools/src/more-info */ \"./node_modules/card-tools/src/more-info.js\");\n/* harmony import */ var _browser_player_editor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./browser-player-editor.js */ \"./js/browser-player-editor.js\");\n/* harmony import */ var _browser_player_editor_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_browser_player_editor_js__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\nconst bases = [\n customElements.whenDefined(\"home-assistant-main\"),\n customElements.whenDefined(\"hui-view\"),\n];\nPromise.race(bases).then(() => {\n const LitElement = customElements.get(\"home-assistant-main\")\n ? Object.getPrototypeOf(customElements.get(\"home-assistant-main\"))\n : Object.getPrototypeOf(customElements.get(\"hui-view\"));\n const html = LitElement.prototype.html;\n const css = LitElement.prototype.css;\n\n class BrowserPlayer extends LitElement {\n static get properties() {\n return {\n hass: {},\n };\n }\n\n static getConfigElement() {\n return document.createElement(\"browser-player-editor\");\n }\n static getStubConfig() {\n return {};\n }\n\n setConfig(config) {\n this._config = config;\n for (const event of [\n \"play\",\n \"pause\",\n \"ended\",\n \"volumechange\",\n \"canplay\",\n \"loadeddata\",\n ])\n window.browser_mod.player.addEventListener(event, () =>\n this.requestUpdate()\n );\n }\n handleMute(ev) {\n window.browser_mod.player_mute();\n }\n handleVolumeChange(ev) {\n const vol = parseFloat(ev.target.value);\n window.browser_mod.player_set_volume(vol);\n }\n handleMoreInfo(ev) {\n (0,card_tools_src_more_info__WEBPACK_IMPORTED_MODULE_1__.moreInfo)(\"media_player.\" + window.browser_mod.entity_id);\n }\n handlePlayPause(ev) {\n if (window.browser_mod.player.paused) window.browser_mod.player_play();\n else window.browser_mod.player_pause();\n }\n setDeviceID() {\n const newID = prompt(\"Set deviceID\", card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID);\n if (newID !== card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID) {\n (0,card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.setDeviceID)(newID);\n this.requestUpdate();\n }\n }\n\n render() {\n if (!window.browser_mod) {\n window.setTimeout(() => this.requestUpdate(), 100);\n return html``;\n }\n const player = window.browser_mod.player;\n return html`\n \n
\n \n \n\n ${window.browser_mod.player_state === \"stopped\"\n ? html`
`\n : html`\n \n `}\n \n
\n\n
${card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID}
\n
\n `;\n }\n\n static get styles() {\n return css`\n paper-icon-button[highlight] {\n color: var(--accent-color);\n }\n .card-content {\n display: flex;\n justify-content: center;\n }\n .placeholder {\n width: 24px;\n padding: 8px;\n }\n .device-id {\n opacity: 0.7;\n font-size: xx-small;\n margin-top: -10px;\n user-select: all;\n -webkit-user-select: all;\n -moz-user-select: all;\n -ms-user-select: all;\n }\n `;\n }\n }\n\n if (!customElements.get(\"browser-player\"))\n customElements.define(\"browser-player\", BrowserPlayer);\n});\n\n\n//# sourceURL=webpack://browser_mod/./js/browser-player.js?"); /***/ }), /***/ "./js/browser.js": /*!***********************!*\ !*** ./js/browser.js ***! \***********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BrowserModBrowserMixin\": () => (/* binding */ BrowserModBrowserMixin)\n/* harmony export */ });\n/* harmony import */ var card_tools_src_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! card-tools/src/event */ \"./node_modules/card-tools/src/event.js\");\n\n\nconst BrowserModBrowserMixin = (C) =>\n class extends C {\n constructor() {\n super();\n document.addEventListener(\"visibilitychange\", () => this.sensor_update());\n window.addEventListener(\"location-changed\", () => this.sensor_update());\n\n window.setInterval(() => this.sensor_update(), 10000);\n }\n\n sensor_update() {\n const update = async () => {\n const battery = navigator.getBattery\n ? await navigator.getBattery()\n : undefined;\n this.sendUpdate({\n browser: {\n path: window.location.pathname,\n visibility: document.visibilityState,\n userAgent: navigator.userAgent,\n currentUser: this._hass && this._hass.user && this._hass.user.name,\n fullyKiosk: this.isFully,\n width: window.innerWidth,\n height: window.innerHeight,\n battery_level: this.isFully\n ? window.fully.getBatteryLevel()\n : battery\n ? battery.level * 100\n : undefined,\n charging: this.isFully\n ? window.fully.isPlugged()\n : battery\n ? battery.charging\n : undefined,\n },\n });\n };\n update();\n }\n\n do_navigate(path) {\n if (!path) return;\n history.pushState(null, \"\", path);\n (0,card_tools_src_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\n \"location-changed\",\n {},\n document.querySelector(\"home-assistant\")\n );\n }\n };\n\n\n//# sourceURL=webpack://browser_mod/./js/browser.js?"); /***/ }), /***/ "./js/camera.js": /*!**********************!*\ !*** ./js/camera.js ***! \**********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BrowserModCameraMixin\": () => (/* binding */ BrowserModCameraMixin)\n/* harmony export */ });\nconst BrowserModCameraMixin = (C) =>\n class extends C {\n setup_camera() {\n console.log(\"Starting camera\");\n\n if (this._video) return;\n this._video = document.createElement(\"video\");\n this._video.autoplay = true;\n this._video.playsInline = true;\n this._video.style.display = \"none\";\n\n this._canvas = document.createElement(\"canvas\");\n this._canvas.style.display = \"none\";\n\n document.body.appendChild(this._video);\n document.body.appendChild(this._canvas);\n\n if (!navigator.mediaDevices) return;\n\n console.log(\"Starting devices\");\n navigator.mediaDevices\n .getUserMedia({ video: true, audio: false })\n .then((stream) => {\n this._video.srcObject = stream;\n this._video.play();\n this.update_camera();\n });\n\n this._camera_framerate = 2;\n\n window.addEventListener(\"click\", () => this._video.play(), {\n once: true,\n });\n }\n\n update_camera() {\n this._canvas.width = this._video.videoWidth;\n this._canvas.height = this._video.videoHeight;\n\n const context = this._canvas.getContext(\"2d\");\n context.drawImage(\n this._video,\n 0,\n 0,\n this._video.videoWidth,\n this._video.videoHeight\n );\n\n this.sendUpdate({\n camera: this._canvas.toDataURL(\"image/jpeg\"),\n });\n setTimeout(\n () => this.update_camera(),\n Math.round(1000 / this._camera_framerate)\n );\n }\n };\n\n\n//# sourceURL=webpack://browser_mod/./js/camera.js?"); /***/ }), /***/ "./js/connection.js": /*!**************************!*\ !*** ./js/connection.js ***! \**************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BrowserModConnection\": () => (/* binding */ BrowserModConnection)\n/* harmony export */ });\n/* harmony import */ var card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! card-tools/src/deviceID */ \"./node_modules/card-tools/src/deviceID.js\");\n/* harmony import */ var card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! card-tools/src/hass */ \"./node_modules/card-tools/src/hass.js\");\n\n\n\nclass BrowserModConnection {\n async connect() {\n const isCast = document.querySelector(\"hc-main\") !== null;\n if (!isCast) {\n if (!window.hassConnection) {\n window.setTimeout(() => this.connect(), 100);\n return;\n } else {\n this._connection = (await window.hassConnection).conn;\n }\n } else {\n this._connection = (0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.hass)().connection;\n }\n\n this._connection.subscribeMessage((msg) => this.msg_callback(msg), {\n type: \"browser_mod/connect\",\n deviceID: card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID,\n });\n\n this._hass_patched = false;\n (0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.provideHass)(this);\n }\n\n set hass(hass) {\n this._hass = hass;\n }\n\n get connected() {\n return this._connection !== undefined;\n }\n\n msg_callback(message) {\n console.log(message);\n }\n\n sendUpdate(data) {\n if (!this.connected) return;\n this._connection.sendMessage({\n type: \"browser_mod/update\",\n deviceID: card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID,\n data,\n });\n }\n}\n\n\n//# sourceURL=webpack://browser_mod/./js/connection.js?"); /***/ }), /***/ "./js/fullyKiosk.js": /*!**************************!*\ !*** ./js/fullyKiosk.js ***! \**************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FullyKioskMixin\": () => (/* binding */ FullyKioskMixin)\n/* harmony export */ });\nconst FullyKioskMixin = (C) =>\n class extends C {\n get isFully() {\n return window.fully !== undefined;\n }\n\n constructor() {\n super();\n\n if (!this.isFully) return;\n\n this._fullyMotion = false;\n this._motionTimeout = undefined;\n\n for (const ev of [\n \"screenOn\",\n \"screenOff\",\n \"pluggedAC\",\n \"pluggedUSB\",\n \"onBatteryLevelChanged\",\n \"unplugged\",\n \"networkReconnect\",\n \"onMotion\",\n ]) {\n window.fully.bind(ev, `window.browser_mod.fully_update(\"${ev}\");`);\n }\n\n this._keepingAlive = false;\n }\n\n fully_update(event) {\n if (!this.isFully) return;\n if (event === \"screenOn\") {\n window.clearTimeout(this._keepAliveTimer);\n if (!this._keepingAlive) this.screen_update();\n } else if (event === \"screenOff\") {\n this.screen_update();\n this._keepingAlive = false;\n if (this.config.force_stay_awake) {\n this._keepAliveTimer = window.setTimeout(() => {\n this._keepingAlive = true;\n window.fully.turnScreenOn();\n window.fully.turnScreenOff();\n }, 270000);\n }\n } else if (event === \"onMotion\") {\n this.fullyMotionTriggered();\n }\n\n this.sendUpdate({\n fully: {\n battery: window.fully.getBatteryLevel(),\n charging: window.fully.isPlugged(),\n motion: this._fullyMotion,\n ip: window.fully.getIp4Address(),\n },\n });\n }\n\n fullyMotionTriggered() {\n if (this._keepingAlive) return;\n this._fullyMotion = true;\n clearTimeout(this._motionTimeout);\n this._motionTimeout = setTimeout(() => {\n this._fullyMotion = false;\n this.fully_update();\n }, 5000);\n this.fully_update();\n }\n };\n\n\n//# sourceURL=webpack://browser_mod/./js/fullyKiosk.js?"); /***/ }), /***/ "./js/main.js": /*!********************!*\ !*** ./js/main.js ***! \********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! card-tools/src/deviceID */ \"./node_modules/card-tools/src/deviceID.js\");\n/* harmony import */ var card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! card-tools/src/hass */ \"./node_modules/card-tools/src/hass.js\");\n/* harmony import */ var card_tools_src_popup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! card-tools/src/popup */ \"./node_modules/card-tools/src/popup.js\");\n/* harmony import */ var card_tools_src_event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! card-tools/src/event */ \"./node_modules/card-tools/src/event.js\");\n/* harmony import */ var _browser_player__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./browser-player */ \"./js/browser-player.js\");\n/* harmony import */ var _connection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./connection */ \"./js/connection.js\");\n/* harmony import */ var _mediaPlayer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./mediaPlayer */ \"./js/mediaPlayer.js\");\n/* harmony import */ var _fullyKiosk__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fullyKiosk */ \"./js/fullyKiosk.js\");\n/* harmony import */ var _camera__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./camera */ \"./js/camera.js\");\n/* harmony import */ var _screensaver__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./screensaver */ \"./js/screensaver.js\");\n/* harmony import */ var _popups__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./popups */ \"./js/popups.js\");\n/* harmony import */ var _browser__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./browser */ \"./js/browser.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst ext = (baseClass, mixins) =>\n mixins.reduceRight((base, mixin) => mixin(base), baseClass);\n\nclass BrowserMod extends ext(_connection__WEBPACK_IMPORTED_MODULE_5__.BrowserModConnection, [\n _browser__WEBPACK_IMPORTED_MODULE_11__.BrowserModBrowserMixin,\n _popups__WEBPACK_IMPORTED_MODULE_10__.BrowserModPopupsMixin,\n _screensaver__WEBPACK_IMPORTED_MODULE_9__.BrowserModScreensaverMixin,\n _camera__WEBPACK_IMPORTED_MODULE_8__.BrowserModCameraMixin,\n _fullyKiosk__WEBPACK_IMPORTED_MODULE_7__.FullyKioskMixin,\n _mediaPlayer__WEBPACK_IMPORTED_MODULE_6__.BrowserModMediaPlayerMixin,\n]) {\n constructor() {\n super();\n this.entity_id = card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID.replace(\"-\", \"_\");\n this.cast = document.querySelector(\"hc-main\") !== null;\n this.connect();\n\n document.body.addEventListener(\"ll-custom\", (ev) => {\n if (ev.detail.browser_mod) {\n this.msg_callback(ev.detail.browser_mod);\n }\n });\n\n const pjson = __webpack_require__(/*! ../package.json */ \"./package.json\");\n console.info(\n `%cBROWSER_MOD ${pjson.version} IS INSTALLED\n %cDeviceID: ${card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID}`,\n \"color: green; font-weight: bold\",\n \"\"\n );\n }\n\n async msg_callback(msg) {\n const handlers = {\n update: (msg) => this.update(msg),\n debug: (msg) => this.debug(msg),\n\n play: (msg) => this.player_play(msg.media_content_id),\n pause: (msg) => this.player_pause(),\n stop: (msg) => this.player_stop(),\n \"set-volume\": (msg) => this.player_set_volume(msg.volume_level),\n mute: (msg) => this.player_mute(msg.mute),\n\n toast: (msg) => this.do_toast(msg.message, msg.duration),\n popup: (msg) => this.do_popup(msg),\n \"close-popup\": (msg) => this.do_close_popup(),\n \"more-info\": (msg) => this.do_more_info(msg.entity_id, msg.large),\n\n navigate: (msg) => this.do_navigate(msg.navigation_path),\n \"set-theme\": (msg) => this.set_theme(msg),\n \"lovelace-reload\": (msg) => this.lovelace_reload(msg),\n \"window-reload\": () => window.location.reload(),\n\n blackout: (msg) =>\n this.do_blackout(msg.time ? parseInt(msg.time) : undefined),\n \"no-blackout\": (msg) => {\n if (msg.brightness && this.isFully) {\n window.fully.setScreenBrightness(msg.brightness);\n }\n this.no_blackout();\n },\n\n \"call-service\": (msg) => this.call_service(msg),\n commands: async (msg) => {\n for (const m of msg.commands) {\n await this.msg_callback(m);\n }\n },\n delay: async (msg) =>\n await new Promise((resolve) => {\n window.setTimeout(resolve, msg.seconds * 1000);\n }),\n };\n\n await handlers[msg.command.replace(\"_\", \"-\")](msg);\n }\n\n debug(msg) {\n (0,card_tools_src_popup__WEBPACK_IMPORTED_MODULE_2__.popUp)(`deviceID`, { type: \"markdown\", content: `# ${card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID}` });\n alert(card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID);\n }\n\n set_theme(msg) {\n if (!msg.theme) msg.theme = \"default\";\n (0,card_tools_src_event__WEBPACK_IMPORTED_MODULE_3__.fireEvent)(\n \"settheme\",\n { theme: msg.theme },\n document.querySelector(\"home-assistant\")\n );\n }\n\n lovelace_reload(msg) {\n const ll = (0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.lovelace_view)();\n if (ll) (0,card_tools_src_event__WEBPACK_IMPORTED_MODULE_3__.fireEvent)(\"config-refresh\", {}, ll);\n }\n\n call_service(msg) {\n const _replaceThis = (data) => {\n if (typeof data === \"string\" && data === \"this\") return card_tools_src_deviceID__WEBPACK_IMPORTED_MODULE_0__.deviceID;\n if (Array.isArray(data)) return data.map(_replaceThis);\n if (data.constructor == Object) {\n for (const key in data) data[key] = _replaceThis(data[key]);\n }\n return data;\n };\n const [domain, service] = msg.service.split(\".\", 2);\n let service_data = _replaceThis(\n JSON.parse(JSON.stringify(msg.service_data))\n );\n this._hass.callService(domain, service, service_data);\n }\n\n update(msg = null) {\n if (msg) {\n if (msg.name) {\n this.entity_id = msg.name.toLowerCase();\n }\n if (msg.camera) {\n this.setup_camera();\n }\n this.config = { ...this.config, ...msg };\n }\n this.player_update();\n this.fully_update();\n this.screen_update();\n this.sensor_update();\n }\n}\n\nconst bases = [\n customElements.whenDefined(\"home-assistant\"),\n customElements.whenDefined(\"hc-main\"),\n];\nPromise.race(bases).then(() => {\n window.setTimeout(() => {\n window.browser_mod = window.browser_mod || new BrowserMod();\n }, 1000);\n});\n\n\n//# sourceURL=webpack://browser_mod/./js/main.js?"); /***/ }), /***/ "./js/mediaPlayer.js": /*!***************************!*\ !*** ./js/mediaPlayer.js ***! \***************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BrowserModMediaPlayerMixin\": () => (/* binding */ BrowserModMediaPlayerMixin)\n/* harmony export */ });\nconst BrowserModMediaPlayerMixin = (C) =>\n class extends C {\n constructor() {\n super();\n this.player = new Audio();\n\n for (const event of [\"play\", \"pause\", \"ended\", \"volumechange\"]) {\n this.player.addEventListener(event, () => this.player_update());\n }\n\n window.addEventListener(\"click\", () => this.player.play(), {\n once: true,\n });\n }\n\n player_update(ev) {\n this.sendUpdate({\n player: {\n volume: this.player.volume,\n muted: this.player.muted,\n src: this.player.src,\n state: this.player_state,\n },\n });\n }\n\n get player_state() {\n if (!this.player.src) return \"stopped\";\n if (this.player.ended) return \"stopped\";\n if (this.player.paused) return \"paused\";\n return \"playing\";\n }\n\n player_play(src) {\n if (src) this.player.src = src;\n this.player.play();\n }\n player_pause() {\n this.player.pause();\n }\n player_stop() {\n this.player.pause();\n this.player.src = null;\n }\n player_set_volume(level) {\n if (level === undefined) return;\n this.player.volume = level;\n }\n player_mute(mute) {\n if (mute === undefined) mute = !this.player.muted;\n this.player.muted = Boolean(mute);\n }\n };\n\n\n//# sourceURL=webpack://browser_mod/./js/mediaPlayer.js?"); /***/ }), /***/ "./js/popups.js": /*!**********************!*\ !*** ./js/popups.js ***! \**********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BrowserModPopupsMixin\": () => (/* binding */ BrowserModPopupsMixin)\n/* harmony export */ });\n/* harmony import */ var card_tools_src_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! card-tools/src/event */ \"./node_modules/card-tools/src/event.js\");\n/* harmony import */ var card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! card-tools/src/hass */ \"./node_modules/card-tools/src/hass.js\");\n/* harmony import */ var card_tools_src_more_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! card-tools/src/more-info */ \"./node_modules/card-tools/src/more-info.js\");\n/* harmony import */ var card_tools_src_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! card-tools/src/popup */ \"./node_modules/card-tools/src/popup.js\");\n\n\n\n\n\nconst BrowserModPopupsMixin = (C) =>\n class extends C {\n constructor() {\n super();\n if (document.querySelector(\"home-assistant\"))\n document\n .querySelector(\"home-assistant\")\n .addEventListener(\"hass-more-info\", (ev) => this._popup_card(ev));\n\n const isCast = document.querySelector(\"hc-main\") !== null;\n if (!isCast) (0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.load_lovelace)();\n }\n\n _popup_card(ev) {\n if (!(0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.lovelace)()) return;\n if (!ev.detail || !ev.detail.entityId) return;\n const data = {\n ...(0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.lovelace)().config.popup_cards,\n ...(0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.lovelace)().config.views[(0,card_tools_src_hass__WEBPACK_IMPORTED_MODULE_1__.lovelace)().current_view].popup_cards,\n };\n const d = data[ev.detail.entityId];\n if (!d) return;\n\n this.do_popup(d);\n window.setTimeout(() => {\n (0,card_tools_src_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\n \"hass-more-info\",\n { entityID: \".\" },\n document.querySelector(\"home-assistant\")\n );\n }, 50);\n }\n\n do_popup(cfg) {\n if (!(cfg.title || cfg.auto_close || cfg.hide_header)) {\n console.error(\n \"browser_mod: popup: Must specify title, auto_close or hide_header.\"\n );\n return;\n }\n if (!cfg.card) {\n console.error(\"browser_mod: popup: No card specified\");\n return;\n }\n\n const open = () => {\n (0,card_tools_src_popup__WEBPACK_IMPORTED_MODULE_3__.popUp)(\n cfg.title,\n cfg.card,\n cfg.large,\n cfg.style,\n cfg.auto_close || cfg.hide_header\n );\n };\n\n if (cfg.auto_close) {\n this.screensaver_set(open, card_tools_src_popup__WEBPACK_IMPORTED_MODULE_3__.closePopUp, cfg.time);\n } else {\n open();\n }\n }\n\n do_close_popup() {\n this.screensaver_stop();\n (0,card_tools_src_popup__WEBPACK_IMPORTED_MODULE_3__.closePopUp)();\n }\n\n do_more_info(entity_id, large) {\n if (!entity_id) return;\n (0,card_tools_src_more_info__WEBPACK_IMPORTED_MODULE_2__.moreInfo)(entity_id, large);\n }\n\n do_toast(message, duration) {\n if (!message) return;\n (0,card_tools_src_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\n \"hass-notification\",\n {\n message,\n duration: parseInt(duration),\n },\n document.querySelector(\"home-assistant\")\n );\n }\n };\n\n\n//# sourceURL=webpack://browser_mod/./js/popups.js?"); /***/ }), /***/ "./js/screensaver.js": /*!***************************!*\ !*** ./js/screensaver.js ***! \***************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BrowserModScreensaverMixin\": () => (/* binding */ BrowserModScreensaverMixin)\n/* harmony export */ });\nconst BrowserModScreensaverMixin = (C) =>\n class extends C {\n constructor() {\n super();\n this._blackout_panel = document.createElement(\"div\");\n\n this._screenSaver = undefined;\n this._screenSaverTimer = undefined;\n this._screenSaverTimeOut = 0;\n\n this._screenSaver = {\n fn: undefined,\n clearfn: undefined,\n timer: undefined,\n timeout: undefined,\n listeners: {},\n active: false,\n };\n\n this._blackout_panel.style.cssText = `\n position: fixed;\n left: 0;\n top: 0;\n padding: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n background: black;\n display: none;\n `;\n document.body.appendChild(this._blackout_panel);\n }\n\n screensaver_set(fn, clearfn, time) {\n this._ss_clear();\n this._screenSaver = {\n fn,\n clearfn,\n timer: undefined,\n timeout: time,\n listeners: {},\n active: false,\n };\n const l = () => this.screensaver_update();\n for (const event of [\"mousemove\", \"mousedown\", \"keydown\", \"touchstart\"]) {\n window.addEventListener(event, l);\n this._screenSaver.listeners[event] = l;\n }\n this._screenSaver.timer = window.setTimeout(\n () => this._ss_run(),\n time * 1000\n );\n }\n\n screensaver_update() {\n if (this._screenSaver.active) {\n this.screensaver_stop();\n } else {\n window.clearTimeout(this._screenSaver.timer);\n this._screenSaver.timer = window.setTimeout(\n () => this._ss_run(),\n this._screenSaver.timeout * 1000\n );\n }\n }\n\n screensaver_stop() {\n this._ss_clear();\n this._screenSaver.active = false;\n if (this._screenSaver.clearfn) this._screenSaver.clearfn();\n if (this._screenSaver.timeout) {\n this.screensaver_set(\n this._screenSaver.fn,\n this._screenSaver.clearfn,\n this._screenSaver.timeout\n );\n }\n }\n\n _ss_clear() {\n window.clearTimeout(this._screenSaverTimer);\n for (const [k, v] of Object.entries(this._screenSaver.listeners)) {\n window.removeEventListener(k, v);\n }\n }\n\n _ss_run() {\n this._screenSaver.active = true;\n this._screenSaver.fn();\n }\n\n do_blackout(timeout) {\n this.screensaver_set(\n () => {\n if (this.isFully) window.fully.turnScreenOff(true);\n else this._blackout_panel.style.display = \"block\";\n this.screen_update();\n },\n () => {\n if ((this._blackout_panel.style.display = \"block\"))\n this._blackout_panel.style.display = \"none\";\n if (this.isFully && !window.fully.getScreenOn())\n window.fully.turnScreenOn();\n this.screen_update();\n },\n timeout || 0\n );\n }\n\n no_blackout() {\n if (this.isFully) window.fully.turnScreenOn();\n this.screensaver_stop();\n }\n\n screen_update() {\n this.sendUpdate({\n screen: {\n blackout: this.isFully\n ? !window.fully.getScreenOn()\n : Boolean(this._blackout_panel.style.display === \"block\"),\n brightness: this.isFully\n ? window.fully.getScreenBrightness()\n : undefined,\n },\n });\n }\n };\n\n\n//# sourceURL=webpack://browser_mod/./js/screensaver.js?"); /***/ }), /***/ "./node_modules/card-tools/src/deviceID.js": /*!*************************************************!*\ !*** ./node_modules/card-tools/src/deviceID.js ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"deviceID\": () => (/* binding */ deviceID),\n/* harmony export */ \"setDeviceID\": () => (/* binding */ setDeviceID)\n/* harmony export */ });\nconst ID_STORAGE_KEY = 'lovelace-player-device-id';\nfunction _deviceID() {\n if(!localStorage[ID_STORAGE_KEY])\n {\n const s4 = () => {\n return Math.floor((1+Math.random())*100000).toString(16).substring(1);\n };\n if(window['fully'] && typeof fully.getDeviceId === \"function\")\n localStorage[ID_STORAGE_KEY] = fully.getDeviceId();\n else\n localStorage[ID_STORAGE_KEY] = `${s4()}${s4()}-${s4()}${s4()}`;\n }\n return localStorage[ID_STORAGE_KEY];\n};\n\nlet deviceID = _deviceID();\n\nconst setDeviceID = (id) => {\n if(id === null) return;\n if(id === \"clear\") {\n localStorage.removeItem(ID_STORAGE_KEY)\n } else {\n localStorage[ID_STORAGE_KEY] = id;\n }\n deviceID = _deviceID();\n}\n\nconst params = new URLSearchParams(window.location.search);\nif(params.get('deviceID')) {\n setDeviceID(params.get('deviceID'));\n}\n\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/deviceID.js?"); /***/ }), /***/ "./node_modules/card-tools/src/event.js": /*!**********************************************!*\ !*** ./node_modules/card-tools/src/event.js ***! \**********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"fireEvent\": () => (/* binding */ fireEvent)\n/* harmony export */ });\n/* harmony import */ var _hass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hass */ \"./node_modules/card-tools/src/hass.js\");\n\n\nfunction fireEvent(ev, detail, entity=null) {\n ev = new Event(ev, {\n bubbles: true,\n cancelable: false,\n composed: true,\n });\n ev.detail = detail || {};\n if(entity) {\n entity.dispatchEvent(ev);\n } else {\n var root = (0,_hass__WEBPACK_IMPORTED_MODULE_0__.lovelace_view)();\n if (root) root.dispatchEvent(ev);\n }\n}\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/event.js?"); /***/ }), /***/ "./node_modules/card-tools/src/hass.js": /*!*********************************************!*\ !*** ./node_modules/card-tools/src/hass.js ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hass\": () => (/* binding */ hass),\n/* harmony export */ \"provideHass\": () => (/* binding */ provideHass),\n/* harmony export */ \"lovelace\": () => (/* binding */ lovelace),\n/* harmony export */ \"async_lovelace_view\": () => (/* binding */ async_lovelace_view),\n/* harmony export */ \"lovelace_view\": () => (/* binding */ lovelace_view),\n/* harmony export */ \"load_lovelace\": () => (/* binding */ load_lovelace)\n/* harmony export */ });\nfunction hass() {\n if(document.querySelector('hc-main'))\n return document.querySelector('hc-main').hass;\n\n if(document.querySelector('home-assistant'))\n return document.querySelector('home-assistant').hass;\n\n return undefined;\n};\n\nfunction provideHass(element) {\n if(document.querySelector('hc-main'))\n return document.querySelector('hc-main').provideHass(element);\n\n if(document.querySelector('home-assistant'))\n return document.querySelector(\"home-assistant\").provideHass(element);\n\n return undefined;\n}\n\nfunction lovelace() {\n var root = document.querySelector(\"hc-main\");\n if(root) {\n var ll = root._lovelaceConfig;\n ll.current_view = root._lovelacePath;\n return ll;\n }\n\n root = document.querySelector(\"home-assistant\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"home-assistant-main\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"app-drawer-layout partial-panel-resolver\");\n root = root && root.shadowRoot || root;\n root = root && root.querySelector(\"ha-panel-lovelace\")\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hui-root\")\n if (root) {\n var ll = root.lovelace\n ll.current_view = root.___curView;\n return ll;\n }\n\n return null;\n}\n\nasync function await_el(el) {\n if(!el) return;\n await customElements.whenDefined(el.localName);\n if(el.updateComplete)\n await el.updateComplete;\n}\n\nasync function async_lovelace_view() {\n var root = document.querySelector(\"hc-main\");\n if(root) {\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hc-lovelace\");\n await_el(root);\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hui-view\") || root.querySelector(\"hui-panel-view\");\n await_el(root);\n return root;\n }\n\n root = document.querySelector(\"home-assistant\");\n await_el(root);\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"home-assistant-main\");\n await_el(root);\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"app-drawer-layout partial-panel-resolver\");\n await_el(root);\n root = root && root.shadowRoot || root;\n root = root && root.querySelector(\"ha-panel-lovelace\");\n await_el(root);\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hui-root\");\n await_el(root);\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"ha-app-layout\")\n await_el(root);\n root = root && root.querySelector(\"#view\");\n root = root && root.firstElementChild;\n await_el(root);\n return root;\n}\nfunction lovelace_view() {\n var root = document.querySelector(\"hc-main\");\n if(root) {\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hc-lovelace\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hui-view\") || root.querySelector(\"hui-panel-view\");\n return root;\n }\n\n root = document.querySelector(\"home-assistant\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"home-assistant-main\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"app-drawer-layout partial-panel-resolver\");\n root = root && root.shadowRoot || root;\n root = root && root.querySelector(\"ha-panel-lovelace\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"hui-root\");\n root = root && root.shadowRoot;\n root = root && root.querySelector(\"ha-app-layout\")\n root = root && root.querySelector(\"#view\");\n root = root && root.firstElementChild;\n return root;\n}\n\nasync function load_lovelace() {\n if(customElements.get(\"hui-view\")) return true;\n\n await customElements.whenDefined(\"partial-panel-resolver\");\n const ppr = document.createElement(\"partial-panel-resolver\");\n ppr.hass = {panels: [{\n url_path: \"tmp\",\n \"component_name\": \"lovelace\",\n }]};\n ppr._updateRoutes();\n await ppr.routerOptions.routes.tmp.load();\n if(!customElements.get(\"ha-panel-lovelace\")) return false;\n const p = document.createElement(\"ha-panel-lovelace\");\n p.hass = hass();\n if(p.hass === undefined) {\n await new Promise(resolve => {\n window.addEventListener('connection-status', (ev) => {\n console.log(ev);\n resolve();\n }, {once: true});\n });\n p.hass = hass();\n }\n p.panel = {config: {mode: null}};\n p._fetchConfig();\n return true;\n}\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/hass.js?"); /***/ }), /***/ "./node_modules/card-tools/src/helpers.js": /*!************************************************!*\ !*** ./node_modules/card-tools/src/helpers.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"selectTree\": () => (/* binding */ selectTree)\n/* harmony export */ });\nasync function _selectTree(root, path, all=false) {\n let el = root;\n if(typeof(path) === \"string\") {\n path = path.split(/(\\$| )/);\n }\n if(path[path.length-1] === \"\")\n path.pop();\n for(const [i, p] of path.entries()) {\n if(!p.trim().length) continue;\n if(!el) return null;\n if(el.localName && el.localName.includes(\"-\"))\n await customElements.whenDefined(el.localName);\n if(el.updateComplete)\n await el.updateComplete;\n if(p === \"$\")\n if(all && i == path.length-1)\n el = [el.shadowRoot];\n else\n el = el.shadowRoot;\n else\n if(all && i == path.length-1)\n el = el.querySelectorAll(p);\n else\n el = el.querySelector(p);\n }\n return el;\n}\n\nasync function selectTree(root, path, all=false, timeout=10000) {\n return Promise.race([\n _selectTree(root, path, all),\n new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))\n ]).catch((err) => {\n if(!err.message || err.message !== \"timeout\")\n throw(err);\n return null;\n });\n}\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/helpers.js?"); /***/ }), /***/ "./node_modules/card-tools/src/lovelace-element.js": /*!*********************************************************!*\ !*** ./node_modules/card-tools/src/lovelace-element.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CUSTOM_TYPE_PREFIX\": () => (/* binding */ CUSTOM_TYPE_PREFIX),\n/* harmony export */ \"DOMAINS_HIDE_MORE_INFO\": () => (/* binding */ DOMAINS_HIDE_MORE_INFO),\n/* harmony export */ \"createCard\": () => (/* binding */ createCard),\n/* harmony export */ \"createElement\": () => (/* binding */ createElement),\n/* harmony export */ \"createEntityRow\": () => (/* binding */ createEntityRow)\n/* harmony export */ });\n/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./event */ \"./node_modules/card-tools/src/event.js\");\n/* harmony import */ var _hass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hass */ \"./node_modules/card-tools/src/hass.js\");\n\n\n\nconst CUSTOM_TYPE_PREFIX = \"custom:\";\n\nconst DOMAINS_HIDE_MORE_INFO = [\n \"input_number\",\n \"input_select\",\n \"input_text\",\n \"scene\",\n \"weblink\",\n];\n\nlet helpers = window.cardHelpers;\nconst helperPromise = new Promise(async (resolve, reject) => {\n if(helpers) resolve();\n\n const updateHelpers = async () => {\n helpers = await window.loadCardHelpers();\n window.cardHelpers = helpers;\n resolve();\n }\n\n if(window.loadCardHelpers) {\n updateHelpers();\n } else {\n // If loadCardHelpers didn't exist, force load lovelace and try once more.\n window.addEventListener(\"load\", async () => {\n (0,_hass__WEBPACK_IMPORTED_MODULE_1__.load_lovelace)();\n if(window.loadCardHelpers) {\n updateHelpers();\n }\n });\n }\n});\n\nfunction errorElement(error, origConfig) {\n const cfg = {\n type: \"error\",\n error,\n origConfig,\n };\n const el = document.createElement(\"hui-error-card\");\n customElements.whenDefined(\"hui-error-card\").then(() => {\n const newel = document.createElement(\"hui-error-card\");\n newel.setConfig(cfg);\n if(el.parentElement)\n el.parentElement.replaceChild(newel, el);\n });\n helperPromise.then(() => {\n (0,_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\"ll-rebuild\", {}, el);\n });\n return el;\n}\n\nfunction _createElement(tag, config) {\n let el = document.createElement(tag);\n try {\n el.setConfig(JSON.parse(JSON.stringify(config)));\n } catch (err) {\n el = errorElement(err, config);\n }\n helperPromise.then(() => {\n (0,_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\"ll-rebuild\", {}, el);\n });\n return el;\n}\n\nfunction createLovelaceElement(thing, config) {\n if(!config || typeof config !== \"object\" || !config.type)\n return errorElement(`No ${thing} type configured`, config);\n\n let tag = config.type;\n if(tag.startsWith(CUSTOM_TYPE_PREFIX))\n tag = tag.substr(CUSTOM_TYPE_PREFIX.length);\n else\n tag = `hui-${tag}-${thing}`;\n\n if(customElements.get(tag))\n return _createElement(tag, config);\n\n const el = errorElement(`Custom element doesn't exist: ${tag}.`, config);\n el.style.display = \"None\";\n\n const timer = setTimeout(() => {\n el.style.display = \"\";\n }, 2000);\n\n customElements.whenDefined(tag).then(() => {\n clearTimeout(timer);\n (0,_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\"ll-rebuild\", {}, el);\n });\n\n return el;\n}\n\nfunction createCard(config) {\n if(helpers) return helpers.createCardElement(config);\n return createLovelaceElement('card', config);\n}\nfunction createElement(config) {\n if(helpers) return helpers.createHuiElement(config);\n return createLovelaceElement('element', config);\n}\nfunction createEntityRow(config) {\n if(helpers) return helpers.createRowElement(config);\n const SPECIAL_TYPES = new Set([\n \"call-service\",\n \"cast\",\n \"conditional\",\n \"divider\",\n \"section\",\n \"select\",\n \"weblink\",\n ]);\n const DEFAULT_ROWS = {\n alert: \"toggle\",\n automation: \"toggle\",\n climate: \"climate\",\n cover: \"cover\",\n fan: \"toggle\",\n group: \"group\",\n input_boolean: \"toggle\",\n input_number: \"input-number\",\n input_select: \"input-select\",\n input_text: \"input-text\",\n light: \"toggle\",\n lock: \"lock\",\n media_player: \"media-player\",\n remote: \"toggle\",\n scene: \"scene\",\n script: \"script\",\n sensor: \"sensor\",\n timer: \"timer\",\n switch: \"toggle\",\n vacuum: \"toggle\",\n water_heater: \"climate\",\n input_datetime: \"input-datetime\",\n none: undefined,\n };\n\n if(!config)\n return errorElement(\"Invalid configuration given.\", config);\n if(typeof config === \"string\")\n config = {entity: config};\n if(typeof config !== \"object\" || (!config.entity && !config.type))\n return errorElement(\"Invalid configuration given.\", config);\n\n const type = config.type || \"default\";\n if(SPECIAL_TYPES.has(type) || type.startsWith(CUSTOM_TYPE_PREFIX))\n return createLovelaceElement('row', config);\n\n const domain = config.entity ? config.entity.split(\".\", 1)[0]: \"none\";\n return createLovelaceElement('entity-row', {\n type: DEFAULT_ROWS[domain] || \"text\",\n ...config\n });\n}\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/lovelace-element.js?"); /***/ }), /***/ "./node_modules/card-tools/src/more-info.js": /*!**************************************************!*\ !*** ./node_modules/card-tools/src/more-info.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"moreInfo\": () => (/* binding */ moreInfo)\n/* harmony export */ });\n/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./event */ \"./node_modules/card-tools/src/event.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./node_modules/card-tools/src/helpers.js\");\n\n\n\nasync function moreInfo(entity, large=false) {\n const root = document.querySelector(\"hc-main\") || document.querySelector(\"home-assistant\");\n (0,_event__WEBPACK_IMPORTED_MODULE_0__.fireEvent)(\"hass-more-info\", {entityId: entity}, root);\n const el = await (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.selectTree)(root, \"$ ha-more-info-dialog\");\n if(el)\n el.large = large;\n return el;\n}\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/more-info.js?"); /***/ }), /***/ "./node_modules/card-tools/src/popup.js": /*!**********************************************!*\ !*** ./node_modules/card-tools/src/popup.js ***! \**********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"closePopUp\": () => (/* binding */ closePopUp),\n/* harmony export */ \"popUp\": () => (/* binding */ popUp)\n/* harmony export */ });\n/* harmony import */ var _hass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hass */ \"./node_modules/card-tools/src/hass.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./node_modules/card-tools/src/helpers.js\");\n/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event */ \"./node_modules/card-tools/src/event.js\");\n/* harmony import */ var _lovelace_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lovelace-element */ \"./node_modules/card-tools/src/lovelace-element.js\");\n\n\n\n\n\nasync function closePopUp() {\n const root = document.querySelector(\"home-assistant\") || document.querySelector(\"hc-root\");\n (0,_event__WEBPACK_IMPORTED_MODULE_2__.fireEvent)(\"hass-more-info\", {entityId: \".\"}, root);\n const el = await (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.selectTree)(root, \"$ card-tools-popup\");\n\n if(el)\n el.closeDialog();\n}\n\nasync function popUp(title, card, large=false, style={}, fullscreen=false) {\n if(!customElements.get(\"card-tools-popup\"))\n {\n const LitElement = customElements.get('home-assistant-main')\n ? Object.getPrototypeOf(customElements.get('home-assistant-main'))\n : Object.getPrototypeOf(customElements.get('hui-view'));\n const html = LitElement.prototype.html;\n const css = LitElement.prototype.css;\n\n class CardToolsPopup extends LitElement {\n\n static get properties() {\n return {\n open: {},\n large: {reflect: true, type: Boolean},\n hass: {},\n };\n }\n\n updated(changedProperties) {\n if(changedProperties.has(\"hass\")) {\n if(this.card)\n this.card.hass = this.hass;\n }\n }\n\n closeDialog() {\n this.open = false;\n }\n\n async _makeCard() {\n const helpers = await window.loadCardHelpers();\n this.card = await helpers.createCardElement(this._card);\n this.card.hass = this.hass;\n this.requestUpdate();\n }\n\n async _applyStyles() {\n let el = await (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.selectTree)(this, \"$ ha-dialog\");\n customElements.whenDefined(\"card-mod\").then(async () => {\n if(!el) return;\n const cm = customElements.get(\"card-mod\");\n cm.applyToElement(el, \"more-info\", this._style, {config: this._card}, [], false);\n });\n\n }\n\n async showDialog(title, card, large=false, style={}, fullscreen=false) {\n this.title = title;\n this._card = card;\n this.large = large;\n this._style = style;\n this.fullscreen = !!fullscreen;\n this._makeCard();\n await this.updateComplete;\n this.open = true;\n await this._applyStyles();\n }\n\n _enlarge() {\n this.large = !this.large;\n }\n\n render() {\n if(!this.open) {\n return html``;\n }\n\n return html`\n \n ${this.fullscreen\n ? html`
`\n : html`\n \n \n \n \n
\n ${this.title}\n
\n
\n `}\n
\n ${this.card}\n
\n \n `\n }\n\n static get styles() {\n return css`\n ha-dialog {\n --mdc-dialog-min-width: 400px;\n --mdc-dialog-max-width: 600px;\n --mdc-dialog-heading-ink-color: var(--primary-text-color);\n --mdc-dialog-content-ink-color: var(--primary-text-color);\n --justify-action-buttons: space-between;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-dialog {\n --mdc-dialog-min-width: 100vw;\n --mdc-dialog-max-width: 100vw;\n --mdc-dialog-min-height: 100%;\n --mdc-dialog-max-height: 100%;\n --mdc-shape-medium: 0px;\n --vertial-align-dialog: flex-end;\n }\n }\n\n app-toolbar {\n flex-shrink: 0;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n\n .main-title {\n margin-left: 16px;\n line-height: 1.3em;\n max-height: 2.6em;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n }\n .content {\n margin: -20px -24px;\n }\n\n @media all and (max-width: 450px), all and (max-height: 500px) {\n app-toolbar {\n background-color: var(--app-header-background-color);\n color: var(--app-header-text-color, white);\n }\n }\n\n @media all and (min-width: 451px) and (min-height: 501px) {\n ha-dialog {\n --mdc-dialog-max-width: 90vw;\n }\n\n .content {\n width: 400px;\n }\n :host([large]) .content {\n width: calc(90vw - 48px);\n }\n\n :host([large]) app-toolbar {\n max-width: calc(90vw - 32px);\n }\n }\n `;\n }\n\n }\n customElements.define(\"card-tools-popup\", CardToolsPopup);\n }\n\n const root = document.querySelector(\"home-assistant\") || document.querySelector(\"hc-root\");\n\n if(!root) return;\n let el = await (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.selectTree)(root, \"$ card-tools-popup\");\n if(!el) {\n el = document.createElement(\"card-tools-popup\");\n const mi = root.shadowRoot.querySelector(\"ha-more-info-dialog\");\n if(mi)\n root.shadowRoot.insertBefore(el,mi);\n else\n root.shadowRoot.appendChild(el);\n (0,_hass__WEBPACK_IMPORTED_MODULE_0__.provideHass)(el);\n }\n\n if(!window._moreInfoDialogListener) {\n const listener = async (ev) => {\n if(ev.state && \"cardToolsPopup\" in ev.state) {\n if(ev.state.cardToolsPopup) {\n const {title, card, large, style, fullscreen} = ev.state.params;\n popUp(title, card, large, style, fullscreen)\n } else {\n el.closeDialog();\n }\n }\n }\n\n window.addEventListener(\"popstate\", listener);\n window._moreInfoDialogListener = true;\n }\n\n history.replaceState( {\n cardToolsPopup: false,\n },\n \"\"\n );\n\n history.pushState( {\n cardToolsPopup: true,\n params: {title, card, large, style, fullscreen},\n },\n \"\"\n );\n\n el.showDialog(title, card, large, style, fullscreen);\n\n}\n\n\n//# sourceURL=webpack://browser_mod/./node_modules/card-tools/src/popup.js?"); /***/ }), /***/ "./package.json": /*!**********************!*\ !*** ./package.json ***! \**********************/ /***/ ((module) => { "use strict"; eval("module.exports = JSON.parse('{\"name\":\"browser_mod\",\"private\":true,\"version\":\"1.3.0\",\"description\":\"\",\"scripts\":{\"build\":\"webpack\",\"watch\":\"webpack --watch --mode=development\",\"update-card-tools\":\"npm uninstall card-tools && npm install thomasloven/lovelace-card-tools\"},\"keywords\":[],\"author\":\"Thomas Lovén\",\"license\":\"MIT\",\"devDependencies\":{\"webpack\":\"^5.36.2\",\"webpack-cli\":\"^4.7.0\"},\"dependencies\":{\"card-tools\":\"github:thomasloven/lovelace-card-tools\"}}');\n\n//# sourceURL=webpack://browser_mod/./package.json?"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./js/main.js"); /******/ /******/ })() ;